LCOV - code coverage report
Current view: top level - gcc/c-family - c-type-mismatch.h Coverage Total Hit
Test: gcc.info Lines: 100.0 % 7 7
Test Date: 2026-02-28 14:20:25 Functions: - 0 0
Legend: Lines:     hit not hit

            Line data    Source code
       1              : /* Declarations relating to classes for reporting type mismatches.
       2              :    Copyright (C) 2014-2026 Free Software Foundation, Inc.
       3              : 
       4              : This file is part of GCC.
       5              : 
       6              : GCC is free software; you can redistribute it and/or modify it under
       7              : the terms of the GNU General Public License as published by the Free
       8              : Software Foundation; either version 3, or (at your option) any later
       9              : version.
      10              : 
      11              : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
      12              : WARRANTY; without even the implied warranty of MERCHANTABILITY or
      13              : FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
      14              : for more details.
      15              : 
      16              : You should have received a copy of the GNU General Public License
      17              : along with GCC; see the file COPYING3.  If not see
      18              : <http://www.gnu.org/licenses/>.  */
      19              : 
      20              : #ifndef GCC_C_TYPE_MISMATCH_H
      21              : #define GCC_C_TYPE_MISMATCH_H
      22              : 
      23              : #include "gcc-rich-location.h"
      24              : 
      25              : /* Concrete subclass of libcpp's range_label for use in
      26              :    diagnostics involving mismatched types.
      27              : 
      28              :    Each frontend that uses this should supply its own implementation.
      29              : 
      30              :    Generate a label describing LABELLED_TYPE.  The frontend may use
      31              :    OTHER_TYPE where appropriate for highlighting the differences between
      32              :    the two types (analogous to C++'s use of %H and %I with
      33              :    template types).
      34              : 
      35              :    Either or both of LABELLED_TYPE and OTHER_TYPE may be NULL_TREE.
      36              :    If LABELLED_TYPE is NULL_TREE, then there is no label.
      37              : 
      38              :    For example, this rich_location could use two instances of
      39              :    range_label_for_type_mismatch:
      40              : 
      41              :       printf ("arg0: %i  arg1: %s arg2: %i",
      42              :                                ^~
      43              :                                |
      44              :                                const char *
      45              :               100, 101, 102);
      46              :                    ~~~
      47              :                    |
      48              :                    int
      49              : 
      50              :    (a) the label for "%s" with LABELLED_TYPE for "const char*" and
      51              :    (b) the label for "101" with LABELLED TYPE for "int"
      52              :    where each one uses the other's type as OTHER_TYPE.  */
      53              : 
      54         4734 : class range_label_for_type_mismatch : public range_label
      55              : {
      56              :  public:
      57         5821 :   range_label_for_type_mismatch (tree labelled_type, tree other_type)
      58         5821 :   : m_labelled_type (labelled_type), m_other_type (other_type)
      59              :   {
      60              :   }
      61              : 
      62              :   label_text get_text (unsigned range_idx) const override;
      63              : 
      64              :  protected:
      65              :   tree m_labelled_type;
      66              :   tree m_other_type;
      67              : };
      68              : 
      69              : /* Subclass of range_label for labelling the type of EXPR when reporting
      70              :    a type mismatch between EXPR and OTHER_EXPR.
      71              :    Either or both of EXPR and OTHER_EXPR could be NULL.  */
      72              : 
      73          563 : class maybe_range_label_for_tree_type_mismatch : public range_label
      74              : {
      75              :  public:
      76         1077 :   maybe_range_label_for_tree_type_mismatch (tree expr, tree other_expr)
      77         1077 :   : m_expr (expr), m_other_expr (other_expr)
      78              :   {
      79              :   }
      80              : 
      81              :   label_text get_text (unsigned range_idx) const final override;
      82              : 
      83              :  private:
      84              :   tree m_expr;
      85              :   tree m_other_expr;
      86              : };
      87              : 
      88              : class op_location_t;
      89              : 
      90              : /* A subclass of rich_location for showing problems with binary operations.
      91              : 
      92              :    If enough location information is available, the ctor will make a
      93              :    3-location rich_location of the form:
      94              : 
      95              :      arg_0 op arg_1
      96              :      ~~~~~ ^~ ~~~~~
      97              :        |        |
      98              :        |        arg1 type
      99              :        arg0 type
     100              : 
     101              :    labelling the types of the arguments if SHOW_TYPES is true,
     102              :    and using highlight_colors::lhs and highlight_colors::rhs for the ranges.
     103              : 
     104              :    Otherwise, it will fall back to a 1-location rich_location using the
     105              :    compound location within LOC:
     106              : 
     107              :      arg_0 op arg_1
     108              :      ~~~~~~^~~~~~~~
     109              : 
     110              :    for which we can't label the types.  */
     111              : 
     112         1051 : class binary_op_rich_location : public gcc_rich_location
     113              : {
     114              :  public:
     115              :   binary_op_rich_location (const op_location_t &loc,
     116              :                            tree arg0, tree arg1,
     117              :                            bool show_types);
     118              : 
     119              :  private:
     120              :   static bool use_operator_loc_p (const op_location_t &loc,
     121              :                                   tree arg0, tree arg1);
     122              : 
     123              :   maybe_range_label_for_tree_type_mismatch m_label_for_arg0;
     124              :   maybe_range_label_for_tree_type_mismatch m_label_for_arg1;
     125              : };
     126              : 
     127              : #endif /* GCC_C_TYPE_MISMATCH_H */
        

Generated by: LCOV version 2.4-beta

LCOV profile is generated on x86_64 machine using following configure options: configure --disable-bootstrap --enable-coverage=opt --enable-languages=c,c++,fortran,go,jit,lto,rust,m2 --enable-host-shared. GCC test suite is run with the built compiler.