LCOV - code coverage report
Current view: top level - gcc/c-family - c-common.h (source / functions) Coverage Total Hit
Test: gcc.info Lines: 88.6 % 35 31
Test Date: 2024-04-20 14:03:02 Functions: 75.0 % 8 6
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: - 0 0

             Branch data     Line data    Source code
       1                 :             : /* Definitions for c-common.cc.
       2                 :             :    Copyright (C) 1987-2024 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_COMMON_H
      21                 :             : #define GCC_C_COMMON_H
      22                 :             : 
      23                 :             : #include "splay-tree.h"
      24                 :             : #include "cpplib.h"
      25                 :             : #include "alias.h"
      26                 :             : #include "tree.h"
      27                 :             : #include "fold-const.h"
      28                 :             : #include "wide-int-bitmask.h"
      29                 :             : 
      30                 :             : /* In order for the format checking to accept the C frontend
      31                 :             :    diagnostic framework extensions, you must include this file before
      32                 :             :    diagnostic-core.h, not after.  The C front end formats are a subset of those
      33                 :             :    for C++, so they are the appropriate set to use in common code;
      34                 :             :    cp-tree.h overrides this for C++.  */
      35                 :             : #if defined(GCC_DIAGNOSTIC_CORE_H)
      36                 :             : #error \
      37                 :             : In order for the format checking to accept the C front end diagnostic \
      38                 :             : framework extensions, you must include this file before diagnostic-core.h \
      39                 :             : never after.
      40                 :             : #endif
      41                 :             : #ifndef GCC_DIAG_STYLE
      42                 :             : #define GCC_DIAG_STYLE __gcc_cdiag__
      43                 :             : #endif
      44                 :             : #include "diagnostic-core.h"
      45                 :             : 
      46                 :             : /* Usage of TREE_LANG_FLAG_?:
      47                 :             :    0: IDENTIFIER_MARKED (used by search routines).
      48                 :             :       C_MAYBE_CONST_EXPR_INT_OPERANDS (in C_MAYBE_CONST_EXPR, for C)
      49                 :             :    1: C_DECLARED_LABEL_FLAG (in LABEL_DECL)
      50                 :             :       STATEMENT_LIST_STMT_EXPR (in STATEMENT_LIST)
      51                 :             :       C_MAYBE_CONST_EXPR_NON_CONST (in C_MAYBE_CONST_EXPR, for C)
      52                 :             :    2: unused
      53                 :             :    3: STATEMENT_LIST_HAS_LABEL (in STATEMENT_LIST)
      54                 :             :    4: unused
      55                 :             : */
      56                 :             : 
      57                 :             : /* Reserved identifiers.  This is the union of all the keywords for C,
      58                 :             :    C++, and Objective-C.  All the type modifiers have to be in one
      59                 :             :    block at the beginning, because they are used as mask bits.  There
      60                 :             :    are 28 type modifiers; if we add many more we will have to redesign
      61                 :             :    the mask mechanism.  */
      62                 :             : 
      63                 :             : enum rid
      64                 :             : {
      65                 :             :   /* Modifiers: */
      66                 :             :   /* C, in empirical order of frequency.  */
      67                 :             :   RID_STATIC = 0,
      68                 :             :   RID_UNSIGNED, RID_LONG,    RID_CONST, RID_EXTERN,
      69                 :             :   RID_REGISTER, RID_TYPEDEF, RID_SHORT, RID_INLINE,
      70                 :             :   RID_VOLATILE, RID_SIGNED,  RID_AUTO,  RID_RESTRICT,
      71                 :             :   RID_NORETURN, RID_ATOMIC,
      72                 :             : 
      73                 :             :   /* C extensions */
      74                 :             :   RID_COMPLEX, RID_THREAD, RID_SAT,
      75                 :             : 
      76                 :             :   /* C++ */
      77                 :             :   RID_FRIEND, RID_VIRTUAL, RID_EXPLICIT, RID_EXPORT, RID_MUTABLE,
      78                 :             : 
      79                 :             :   /* ObjC ("PQ" reserved words - they do not appear after a '@' and
      80                 :             :      are keywords only in specific contexts)  */
      81                 :             :   RID_IN, RID_OUT, RID_INOUT, RID_BYCOPY, RID_BYREF, RID_ONEWAY,
      82                 :             : 
      83                 :             :   /* ObjC ("PATTR" reserved words - they do not appear after a '@' 
      84                 :             :      and are keywords only as property attributes)  */
      85                 :             :   RID_GETTER, RID_SETTER,
      86                 :             :   RID_READONLY, RID_READWRITE,
      87                 :             :   RID_ASSIGN, RID_RETAIN, RID_COPY,
      88                 :             :   RID_PROPATOMIC, RID_NONATOMIC,
      89                 :             : 
      90                 :             :   /* ObjC nullability support keywords that also can appear in the
      91                 :             :      property attribute context.  These values should remain contiguous
      92                 :             :      with the other property attributes.  */
      93                 :             :   RID_NULL_UNSPECIFIED, RID_NULLABLE, RID_NONNULL, RID_NULL_RESETTABLE,
      94                 :             : 
      95                 :             :   /* C (reserved and imaginary types not implemented, so any use is a
      96                 :             :      syntax error) */
      97                 :             :   RID_IMAGINARY,
      98                 :             : 
      99                 :             :   /* C */
     100                 :             :   RID_INT,     RID_CHAR,   RID_FLOAT,    RID_DOUBLE, RID_VOID,
     101                 :             :   RID_ENUM,    RID_STRUCT, RID_UNION,    RID_IF,     RID_ELSE,
     102                 :             :   RID_WHILE,   RID_DO,     RID_FOR,      RID_SWITCH, RID_CASE,
     103                 :             :   RID_DEFAULT, RID_BREAK,  RID_CONTINUE, RID_RETURN, RID_GOTO,
     104                 :             :   RID_SIZEOF,  RID_BITINT,
     105                 :             : 
     106                 :             :   /* C extensions */
     107                 :             :   RID_ASM,       RID_TYPEOF,   RID_TYPEOF_UNQUAL, RID_ALIGNOF,  RID_ATTRIBUTE,
     108                 :             :   RID_VA_ARG,
     109                 :             :   RID_EXTENSION, RID_IMAGPART, RID_REALPART, RID_LABEL,    RID_CHOOSE_EXPR,
     110                 :             :   RID_TYPES_COMPATIBLE_P,      RID_BUILTIN_COMPLEX,        RID_BUILTIN_SHUFFLE,
     111                 :             :   RID_BUILTIN_SHUFFLEVECTOR,   RID_BUILTIN_CONVERTVECTOR,  RID_BUILTIN_TGMATH,
     112                 :             :   RID_BUILTIN_HAS_ATTRIBUTE,   RID_BUILTIN_ASSOC_BARRIER,  RID_BUILTIN_STDC,
     113                 :             :   RID_DFLOAT32, RID_DFLOAT64, RID_DFLOAT128,
     114                 :             : 
     115                 :             :   /* TS 18661-3 keywords, in the same sequence as the TI_* values.  */
     116                 :             :   RID_FLOAT16,
     117                 :             :   RID_FLOATN_NX_FIRST = RID_FLOAT16,
     118                 :             :   RID_FLOAT32,
     119                 :             :   RID_FLOAT64,
     120                 :             :   RID_FLOAT128,
     121                 :             :   RID_FLOAT32X,
     122                 :             :   RID_FLOAT64X,
     123                 :             :   RID_FLOAT128X,
     124                 :             : #define CASE_RID_FLOATN_NX                                              \
     125                 :             :   case RID_FLOAT16: case RID_FLOAT32: case RID_FLOAT64: case RID_FLOAT128: \
     126                 :             :   case RID_FLOAT32X: case RID_FLOAT64X: case RID_FLOAT128X
     127                 :             : 
     128                 :             :   RID_FRACT, RID_ACCUM, RID_AUTO_TYPE, RID_BUILTIN_CALL_WITH_STATIC_CHAIN,
     129                 :             : 
     130                 :             :   /* "__GIMPLE", for the GIMPLE-parsing extension to the C frontend. */
     131                 :             :   RID_GIMPLE,
     132                 :             : 
     133                 :             :   /* "__PHI", for parsing PHI function in GIMPLE FE.  */
     134                 :             :   RID_PHI,
     135                 :             : 
     136                 :             :   /* "__RTL", for the RTL-parsing extension to the C frontend.  */
     137                 :             :   RID_RTL,
     138                 :             : 
     139                 :             :   /* C11 */
     140                 :             :   RID_ALIGNAS, RID_GENERIC,
     141                 :             : 
     142                 :             :   /* This means to warn that this is a C++ keyword, and then treat it
     143                 :             :      as a normal identifier.  */
     144                 :             :   RID_CXX_COMPAT_WARN,
     145                 :             : 
     146                 :             :   /* GNU transactional memory extension */
     147                 :             :   RID_TRANSACTION_ATOMIC, RID_TRANSACTION_RELAXED, RID_TRANSACTION_CANCEL,
     148                 :             : 
     149                 :             :   /* Too many ways of getting the name of a function as a string */
     150                 :             :   RID_FUNCTION_NAME, RID_PRETTY_FUNCTION_NAME, RID_C99_FUNCTION_NAME,
     151                 :             : 
     152                 :             :   /* C++ (some of these are keywords in Objective-C as well, but only
     153                 :             :      if they appear after a '@') */
     154                 :             :   RID_BOOL,     RID_WCHAR,    RID_CLASS,
     155                 :             :   RID_PUBLIC,   RID_PRIVATE,  RID_PROTECTED,
     156                 :             :   RID_TEMPLATE, RID_NULL,     RID_CATCH,
     157                 :             :   RID_DELETE,   RID_FALSE,    RID_NAMESPACE,
     158                 :             :   RID_NEW,      RID_OFFSETOF, RID_OPERATOR,
     159                 :             :   RID_THIS,     RID_THROW,    RID_TRUE,
     160                 :             :   RID_TRY,      RID_TYPENAME, RID_TYPEID,
     161                 :             :   RID_USING,    RID_CHAR16,   RID_CHAR32,
     162                 :             : 
     163                 :             :   /* casts */
     164                 :             :   RID_CONSTCAST, RID_DYNCAST, RID_REINTCAST, RID_STATCAST,
     165                 :             : 
     166                 :             :   /* C++ extensions */
     167                 :             :   RID_ADDRESSOF,
     168                 :             :   RID_BUILTIN_LAUNDER,
     169                 :             :   RID_BUILTIN_BIT_CAST,
     170                 :             : 
     171                 :             :   /* C++11 */
     172                 :             :   RID_CONSTEXPR, RID_DECLTYPE, RID_NOEXCEPT, RID_NULLPTR, RID_STATIC_ASSERT,
     173                 :             : 
     174                 :             :   /* C++20 */
     175                 :             :   RID_CONSTINIT, RID_CONSTEVAL,
     176                 :             : 
     177                 :             :   /* char8_t */
     178                 :             :   RID_CHAR8,
     179                 :             : 
     180                 :             :   /* C++ concepts */
     181                 :             :   RID_CONCEPT, RID_REQUIRES,
     182                 :             : 
     183                 :             :   /* C++ modules.  */
     184                 :             :   RID__MODULE, RID__IMPORT, RID__EXPORT, /* Internal tokens.  */
     185                 :             : 
     186                 :             :   /* C++ coroutines */
     187                 :             :   RID_CO_AWAIT, RID_CO_YIELD, RID_CO_RETURN,
     188                 :             : 
     189                 :             :   /* C++ transactional memory.  */
     190                 :             :   RID_ATOMIC_NOEXCEPT, RID_ATOMIC_CANCEL, RID_SYNCHRONIZED,
     191                 :             : 
     192                 :             :   /* Objective-C ("AT" reserved words - they are only keywords when
     193                 :             :      they follow '@')  */
     194                 :             :   RID_AT_ENCODE,   RID_AT_END,
     195                 :             :   RID_AT_CLASS,    RID_AT_ALIAS,     RID_AT_DEFS,
     196                 :             :   RID_AT_PRIVATE,  RID_AT_PROTECTED, RID_AT_PUBLIC,  RID_AT_PACKAGE,
     197                 :             :   RID_AT_PROTOCOL, RID_AT_SELECTOR,
     198                 :             :   RID_AT_THROW,    RID_AT_TRY,       RID_AT_CATCH,
     199                 :             :   RID_AT_FINALLY,  RID_AT_SYNCHRONIZED, 
     200                 :             :   RID_AT_OPTIONAL, RID_AT_REQUIRED, RID_AT_PROPERTY,
     201                 :             :   RID_AT_SYNTHESIZE, RID_AT_DYNAMIC,
     202                 :             :   RID_AT_INTERFACE,
     203                 :             :   RID_AT_IMPLEMENTATION,
     204                 :             : 
     205                 :             :   /* OpenMP */
     206                 :             :   RID_OMP_ALL_MEMORY,
     207                 :             : 
     208                 :             :   /* Named address support, mapping the keyword to a particular named address
     209                 :             :      number.  Named address space 0 is reserved for the generic address.  If
     210                 :             :      there are more than 254 named addresses, the addr_space_t type will need
     211                 :             :      to be grown from an unsigned char to unsigned short.  */
     212                 :             :   RID_ADDR_SPACE_0,             /* generic address */
     213                 :             :   RID_ADDR_SPACE_1,
     214                 :             :   RID_ADDR_SPACE_2,
     215                 :             :   RID_ADDR_SPACE_3,
     216                 :             :   RID_ADDR_SPACE_4,
     217                 :             :   RID_ADDR_SPACE_5,
     218                 :             :   RID_ADDR_SPACE_6,
     219                 :             :   RID_ADDR_SPACE_7,
     220                 :             :   RID_ADDR_SPACE_8,
     221                 :             :   RID_ADDR_SPACE_9,
     222                 :             :   RID_ADDR_SPACE_10,
     223                 :             :   RID_ADDR_SPACE_11,
     224                 :             :   RID_ADDR_SPACE_12,
     225                 :             :   RID_ADDR_SPACE_13,
     226                 :             :   RID_ADDR_SPACE_14,
     227                 :             :   RID_ADDR_SPACE_15,
     228                 :             : 
     229                 :             :   RID_FIRST_ADDR_SPACE = RID_ADDR_SPACE_0,
     230                 :             :   RID_LAST_ADDR_SPACE = RID_ADDR_SPACE_15,
     231                 :             : 
     232                 :             :   /* __intN keywords.  The _N_M here doesn't correspond to the intN
     233                 :             :      in the keyword; use the bitsize in int_n_t_data_t[M] for that.
     234                 :             :      For example, if int_n_t_data_t[0].bitsize is 13, then RID_INT_N_0
     235                 :             :      is for __int13.  */
     236                 :             : 
     237                 :             :   /* Note that the range to use is RID_FIRST_INT_N through
     238                 :             :      RID_FIRST_INT_N + NUM_INT_N_ENTS - 1 and c-parser.cc has a list of
     239                 :             :      all RID_INT_N_* in a case statement.  */
     240                 :             : 
     241                 :             :   RID_INT_N_0,
     242                 :             :   RID_INT_N_1,
     243                 :             :   RID_INT_N_2,
     244                 :             :   RID_INT_N_3,
     245                 :             : 
     246                 :             :   RID_FIRST_INT_N = RID_INT_N_0,
     247                 :             :   RID_LAST_INT_N = RID_INT_N_3,
     248                 :             : 
     249                 :             :   RID_MAX,
     250                 :             : 
     251                 :             :   RID_FIRST_MODIFIER = RID_STATIC,
     252                 :             :   RID_LAST_MODIFIER = RID_ONEWAY,
     253                 :             : 
     254                 :             :   RID_FIRST_CXX11 = RID_CONSTEXPR,
     255                 :             :   RID_LAST_CXX11 = RID_STATIC_ASSERT,
     256                 :             :   RID_FIRST_CXX20 = RID_CONSTINIT,
     257                 :             :   RID_LAST_CXX20 = RID_CO_RETURN,
     258                 :             :   RID_FIRST_AT = RID_AT_ENCODE,
     259                 :             :   RID_LAST_AT = RID_AT_IMPLEMENTATION,
     260                 :             :   RID_FIRST_PQ = RID_IN,
     261                 :             :   RID_LAST_PQ = RID_ONEWAY,
     262                 :             :   RID_FIRST_PATTR = RID_GETTER,
     263                 :             :   RID_LAST_PATTR = RID_NULL_RESETTABLE
     264                 :             : };
     265                 :             : 
     266                 :             : #define OBJC_IS_AT_KEYWORD(rid) \
     267                 :             :   ((unsigned int) (rid) >= (unsigned int) RID_FIRST_AT && \
     268                 :             :    (unsigned int) (rid) <= (unsigned int) RID_LAST_AT)
     269                 :             : 
     270                 :             : #define OBJC_IS_PQ_KEYWORD(rid) \
     271                 :             :   ((unsigned int) (rid) >= (unsigned int) RID_FIRST_PQ && \
     272                 :             :    (unsigned int) (rid) <= (unsigned int) RID_LAST_PQ)
     273                 :             : 
     274                 :             : /* Keywords permitted in an @property attribute context.  */
     275                 :             : #define OBJC_IS_PATTR_KEYWORD(rid) \
     276                 :             :   ((((unsigned int) (rid) >= (unsigned int) RID_FIRST_PATTR && \
     277                 :             :      (unsigned int) (rid) <= (unsigned int) RID_LAST_PATTR)) \
     278                 :             :    || rid == RID_CLASS)
     279                 :             : 
     280                 :             : /* OBJC_IS_CXX_KEYWORD recognizes the 'CXX_OBJC' keywords (such as
     281                 :             :    'class') which are shared in a subtle way between Objective-C and
     282                 :             :    C++.  When the lexer is lexing in Objective-C/Objective-C++, if it
     283                 :             :    finds '@' followed by one of these identifiers (eg, '@class'), it
     284                 :             :    recognizes the whole as an Objective-C keyword.  If the identifier
     285                 :             :    is found elsewhere, it follows the rules of the C/C++ language.
     286                 :             :  */
     287                 :             : #define OBJC_IS_CXX_KEYWORD(rid) \
     288                 :             :   (rid == RID_CLASS || rid == RID_SYNCHRONIZED                  \
     289                 :             :    || rid == RID_PUBLIC || rid == RID_PROTECTED || rid == RID_PRIVATE   \
     290                 :             :    || rid == RID_TRY || rid == RID_THROW || rid == RID_CATCH)
     291                 :             : 
     292                 :             : /* The elements of `ridpointers' are identifier nodes for the reserved
     293                 :             :    type names and storage classes.  It is indexed by a RID_... value.  */
     294                 :             : extern GTY ((length ("(int) RID_MAX"))) tree *ridpointers;
     295                 :             : 
     296                 :             : /* Standard named or nameless data types of the C compiler.  */
     297                 :             : 
     298                 :             : enum c_tree_index
     299                 :             : {
     300                 :             :     CTI_CHAR8_TYPE,
     301                 :             :     CTI_CHAR16_TYPE,
     302                 :             :     CTI_CHAR32_TYPE,
     303                 :             :     CTI_WCHAR_TYPE,
     304                 :             :     CTI_UNDERLYING_WCHAR_TYPE,
     305                 :             :     CTI_WINT_TYPE,
     306                 :             :     CTI_SIGNED_SIZE_TYPE, /* For format checking only.  */
     307                 :             :     CTI_UNSIGNED_PTRDIFF_TYPE, /* For format checking only.  */
     308                 :             :     CTI_INTMAX_TYPE,
     309                 :             :     CTI_UINTMAX_TYPE,
     310                 :             :     CTI_WIDEST_INT_LIT_TYPE,
     311                 :             :     CTI_WIDEST_UINT_LIT_TYPE,
     312                 :             : 
     313                 :             :     /* Types for <stdint.h>, that may not be defined on all
     314                 :             :        targets.  */
     315                 :             :     CTI_SIG_ATOMIC_TYPE,
     316                 :             :     CTI_INT8_TYPE,
     317                 :             :     CTI_INT16_TYPE,
     318                 :             :     CTI_INT32_TYPE,
     319                 :             :     CTI_INT64_TYPE,
     320                 :             :     CTI_UINT8_TYPE,
     321                 :             :     CTI_UINT16_TYPE,
     322                 :             :     CTI_UINT32_TYPE,
     323                 :             :     CTI_UINT64_TYPE,
     324                 :             :     CTI_INT_LEAST8_TYPE,
     325                 :             :     CTI_INT_LEAST16_TYPE,
     326                 :             :     CTI_INT_LEAST32_TYPE,
     327                 :             :     CTI_INT_LEAST64_TYPE,
     328                 :             :     CTI_UINT_LEAST8_TYPE,
     329                 :             :     CTI_UINT_LEAST16_TYPE,
     330                 :             :     CTI_UINT_LEAST32_TYPE,
     331                 :             :     CTI_UINT_LEAST64_TYPE,
     332                 :             :     CTI_INT_FAST8_TYPE,
     333                 :             :     CTI_INT_FAST16_TYPE,
     334                 :             :     CTI_INT_FAST32_TYPE,
     335                 :             :     CTI_INT_FAST64_TYPE,
     336                 :             :     CTI_UINT_FAST8_TYPE,
     337                 :             :     CTI_UINT_FAST16_TYPE,
     338                 :             :     CTI_UINT_FAST32_TYPE,
     339                 :             :     CTI_UINT_FAST64_TYPE,
     340                 :             :     CTI_INTPTR_TYPE,
     341                 :             :     CTI_UINTPTR_TYPE,
     342                 :             : 
     343                 :             :     CTI_CHAR_ARRAY_TYPE,
     344                 :             :     CTI_CHAR8_ARRAY_TYPE,
     345                 :             :     CTI_CHAR16_ARRAY_TYPE,
     346                 :             :     CTI_CHAR32_ARRAY_TYPE,
     347                 :             :     CTI_WCHAR_ARRAY_TYPE,
     348                 :             :     CTI_STRING_TYPE,
     349                 :             :     CTI_CONST_STRING_TYPE,
     350                 :             : 
     351                 :             :     /* Type for boolean expressions (bool in C++, int in C).  */
     352                 :             :     CTI_TRUTHVALUE_TYPE,
     353                 :             :     CTI_TRUTHVALUE_TRUE,
     354                 :             :     CTI_TRUTHVALUE_FALSE,
     355                 :             : 
     356                 :             :     CTI_DEFAULT_FUNCTION_TYPE,
     357                 :             : 
     358                 :             :     CTI_NULL,
     359                 :             :     CTI_NULLPTR,
     360                 :             :     CTI_NULLPTR_TYPE,
     361                 :             : 
     362                 :             :     /* These are not types, but we have to look them up all the time.  */
     363                 :             :     CTI_FUNCTION_NAME_DECL,
     364                 :             :     CTI_PRETTY_FUNCTION_NAME_DECL,
     365                 :             :     CTI_C99_FUNCTION_NAME_DECL,
     366                 :             : 
     367                 :             :     CTI_MODULE_HWM,
     368                 :             :     /* Below here entities change during compilation.  */
     369                 :             : 
     370                 :             :     CTI_SAVED_FUNCTION_NAME_DECLS,
     371                 :             : 
     372                 :             :     CTI_MAX
     373                 :             : };
     374                 :             : 
     375                 :             : #define C_CPP_HASHNODE(id) \
     376                 :             :   (&(((struct c_common_identifier *) (id))->node))
     377                 :             : #define C_RID_CODE(id) \
     378                 :             :   ((enum rid) (((struct c_common_identifier *) (id))->node.rid_code))
     379                 :             : #define C_SET_RID_CODE(id, code) \
     380                 :             :   (((struct c_common_identifier *) (id))->node.rid_code = (unsigned char) code)
     381                 :             : 
     382                 :             : /* Identifier part common to the C front ends.  Inherits from
     383                 :             :    tree_identifier, despite appearances.  */
     384                 :             : struct GTY(()) c_common_identifier {
     385                 :             :   struct tree_common common;
     386                 :             :   struct cpp_hashnode node;
     387                 :             : };
     388                 :             : 
     389                 :             : /* An entry in the reserved keyword table.  */
     390                 :             : 
     391                 :             : struct c_common_resword
     392                 :             : {
     393                 :             :   const char *const word;
     394                 :             :   ENUM_BITFIELD(rid) const rid : 16;
     395                 :             :   const unsigned int disable   : 32;
     396                 :             : };
     397                 :             : 
     398                 :             : /* Mode used to build pointers (VOIDmode means ptr_mode).  */
     399                 :             : 
     400                 :             : extern machine_mode c_default_pointer_mode;
     401                 :             : 
     402                 :             : /* Extra cpp_ttype values for C++.  */
     403                 :             : 
     404                 :             : /* A token type for template-ids.  If a template-id is processed while
     405                 :             :    parsing tentatively, it is replaced with a CPP_TEMPLATE_ID token;
     406                 :             :    the value of the CPP_TEMPLATE_ID is whatever was returned by
     407                 :             :    cp_parser_template_id.  */
     408                 :             : #define CPP_TEMPLATE_ID ((enum cpp_ttype) (CPP_KEYWORD + 1))
     409                 :             : 
     410                 :             : /* A token type for nested-name-specifiers.  If a
     411                 :             :    nested-name-specifier is processed while parsing tentatively, it is
     412                 :             :    replaced with a CPP_NESTED_NAME_SPECIFIER token; the value of the
     413                 :             :    CPP_NESTED_NAME_SPECIFIER is whatever was returned by
     414                 :             :    cp_parser_nested_name_specifier_opt.  */
     415                 :             : #define CPP_NESTED_NAME_SPECIFIER ((enum cpp_ttype) (CPP_TEMPLATE_ID + 1))
     416                 :             : 
     417                 :             : /* A token type for pre-parsed C++0x decltype.  */
     418                 :             : #define CPP_DECLTYPE ((enum cpp_ttype) (CPP_NESTED_NAME_SPECIFIER + 1))
     419                 :             : 
     420                 :             : /* A token type for pre-parsed primary-expression (lambda- or statement-).  */
     421                 :             : #define CPP_PREPARSED_EXPR ((enum cpp_ttype) (CPP_DECLTYPE + 1))
     422                 :             : 
     423                 :             : /* The number of token types, including C++-specific ones.  */
     424                 :             : #define N_CP_TTYPES ((int) (CPP_PREPARSED_EXPR + 1))
     425                 :             : 
     426                 :             : /* Disable mask.  Keywords are disabled if (reswords[i].disable &
     427                 :             :    mask) is _true_.  Thus for keywords which are present in all
     428                 :             :    languages the disable field is zero.  */
     429                 :             : 
     430                 :             : #define D_CONLY         0x0001  /* C only (not in C++).  */
     431                 :             : #define D_CXXONLY       0x0002  /* C++ only (not in C).  */
     432                 :             : #define D_C99           0x0004  /* In C, C99 only.  */
     433                 :             : #define D_C23           0x0008  /* In C, C23 only.  */
     434                 :             : #define D_CXX11         0x0010  /* In C++, C++11 only.  */
     435                 :             : #define D_EXT           0x0020  /* GCC extension.  */
     436                 :             : #define D_EXT89         0x0040  /* GCC extension incorporated in C99.  */
     437                 :             : #define D_EXT11         0x0080  /* GCC extension incorporated in C23.  */
     438                 :             : #define D_ASM           0x0100  /* Disabled by -fno-asm.  */
     439                 :             : #define D_OBJC          0x0200  /* In Objective C and neither C nor C++.  */
     440                 :             : #define D_CXX_OBJC      0x0400  /* In Objective C, and C++, but not C.  */
     441                 :             : #define D_CXXWARN       0x0800  /* In C warn with -Wcxx-compat.  */
     442                 :             : #define D_CXX_CONCEPTS  0x1000  /* In C++, only with concepts.  */
     443                 :             : #define D_TRANSMEM      0x2000  /* C++ transactional memory TS.  */
     444                 :             : #define D_CXX_CHAR8_T   0x4000  /* In C++, only with -fchar8_t.  */
     445                 :             : #define D_CXX20         0x8000  /* In C++, C++20 only.  */
     446                 :             : #define D_CXX_COROUTINES 0x10000  /* In C++, only with coroutines.  */
     447                 :             : #define D_CXX_MODULES   0x20000  /* In C++, only with modules.  */
     448                 :             : 
     449                 :             : #define D_CXX_CONCEPTS_FLAGS D_CXXONLY | D_CXX_CONCEPTS
     450                 :             : #define D_CXX_CHAR8_T_FLAGS D_CXXONLY | D_CXX_CHAR8_T
     451                 :             : #define D_CXX_MODULES_FLAGS (D_CXXONLY | D_CXX_MODULES)
     452                 :             : #define D_CXX_COROUTINES_FLAGS (D_CXXONLY | D_CXX_COROUTINES)
     453                 :             : 
     454                 :             : /* The reserved keyword table.  */
     455                 :             : extern const struct c_common_resword c_common_reswords[];
     456                 :             : 
     457                 :             : /* The number of items in the reserved keyword table.  */
     458                 :             : extern const unsigned int num_c_common_reswords;
     459                 :             : 
     460                 :             : #define char8_type_node                 c_global_trees[CTI_CHAR8_TYPE]
     461                 :             : #define char16_type_node                c_global_trees[CTI_CHAR16_TYPE]
     462                 :             : #define char32_type_node                c_global_trees[CTI_CHAR32_TYPE]
     463                 :             : #define wchar_type_node                 c_global_trees[CTI_WCHAR_TYPE]
     464                 :             : #define underlying_wchar_type_node      c_global_trees[CTI_UNDERLYING_WCHAR_TYPE]
     465                 :             : #define wint_type_node                  c_global_trees[CTI_WINT_TYPE]
     466                 :             : #define signed_size_type_node           c_global_trees[CTI_SIGNED_SIZE_TYPE]
     467                 :             : #define unsigned_ptrdiff_type_node      c_global_trees[CTI_UNSIGNED_PTRDIFF_TYPE]
     468                 :             : #define intmax_type_node                c_global_trees[CTI_INTMAX_TYPE]
     469                 :             : #define uintmax_type_node               c_global_trees[CTI_UINTMAX_TYPE]
     470                 :             : #define widest_integer_literal_type_node c_global_trees[CTI_WIDEST_INT_LIT_TYPE]
     471                 :             : #define widest_unsigned_literal_type_node c_global_trees[CTI_WIDEST_UINT_LIT_TYPE]
     472                 :             : 
     473                 :             : #define sig_atomic_type_node            c_global_trees[CTI_SIG_ATOMIC_TYPE]
     474                 :             : #define int8_type_node                  c_global_trees[CTI_INT8_TYPE]
     475                 :             : #define int16_type_node                 c_global_trees[CTI_INT16_TYPE]
     476                 :             : #define int32_type_node                 c_global_trees[CTI_INT32_TYPE]
     477                 :             : #define int64_type_node                 c_global_trees[CTI_INT64_TYPE]
     478                 :             : #define uint8_type_node                 c_global_trees[CTI_UINT8_TYPE]
     479                 :             : #define c_uint16_type_node              c_global_trees[CTI_UINT16_TYPE]
     480                 :             : #define c_uint32_type_node              c_global_trees[CTI_UINT32_TYPE]
     481                 :             : #define c_uint64_type_node              c_global_trees[CTI_UINT64_TYPE]
     482                 :             : #define int_least8_type_node            c_global_trees[CTI_INT_LEAST8_TYPE]
     483                 :             : #define int_least16_type_node           c_global_trees[CTI_INT_LEAST16_TYPE]
     484                 :             : #define int_least32_type_node           c_global_trees[CTI_INT_LEAST32_TYPE]
     485                 :             : #define int_least64_type_node           c_global_trees[CTI_INT_LEAST64_TYPE]
     486                 :             : #define uint_least8_type_node           c_global_trees[CTI_UINT_LEAST8_TYPE]
     487                 :             : #define uint_least16_type_node          c_global_trees[CTI_UINT_LEAST16_TYPE]
     488                 :             : #define uint_least32_type_node          c_global_trees[CTI_UINT_LEAST32_TYPE]
     489                 :             : #define uint_least64_type_node          c_global_trees[CTI_UINT_LEAST64_TYPE]
     490                 :             : #define int_fast8_type_node             c_global_trees[CTI_INT_FAST8_TYPE]
     491                 :             : #define int_fast16_type_node            c_global_trees[CTI_INT_FAST16_TYPE]
     492                 :             : #define int_fast32_type_node            c_global_trees[CTI_INT_FAST32_TYPE]
     493                 :             : #define int_fast64_type_node            c_global_trees[CTI_INT_FAST64_TYPE]
     494                 :             : #define uint_fast8_type_node            c_global_trees[CTI_UINT_FAST8_TYPE]
     495                 :             : #define uint_fast16_type_node           c_global_trees[CTI_UINT_FAST16_TYPE]
     496                 :             : #define uint_fast32_type_node           c_global_trees[CTI_UINT_FAST32_TYPE]
     497                 :             : #define uint_fast64_type_node           c_global_trees[CTI_UINT_FAST64_TYPE]
     498                 :             : #define intptr_type_node                c_global_trees[CTI_INTPTR_TYPE]
     499                 :             : #define uintptr_type_node               c_global_trees[CTI_UINTPTR_TYPE]
     500                 :             : 
     501                 :             : #define truthvalue_type_node            c_global_trees[CTI_TRUTHVALUE_TYPE]
     502                 :             : #define truthvalue_true_node            c_global_trees[CTI_TRUTHVALUE_TRUE]
     503                 :             : #define truthvalue_false_node           c_global_trees[CTI_TRUTHVALUE_FALSE]
     504                 :             : 
     505                 :             : #define char_array_type_node            c_global_trees[CTI_CHAR_ARRAY_TYPE]
     506                 :             : #define char8_array_type_node           c_global_trees[CTI_CHAR8_ARRAY_TYPE]
     507                 :             : #define char16_array_type_node          c_global_trees[CTI_CHAR16_ARRAY_TYPE]
     508                 :             : #define char32_array_type_node          c_global_trees[CTI_CHAR32_ARRAY_TYPE]
     509                 :             : #define wchar_array_type_node           c_global_trees[CTI_WCHAR_ARRAY_TYPE]
     510                 :             : #define string_type_node                c_global_trees[CTI_STRING_TYPE]
     511                 :             : #define const_string_type_node          c_global_trees[CTI_CONST_STRING_TYPE]
     512                 :             : 
     513                 :             : #define default_function_type           c_global_trees[CTI_DEFAULT_FUNCTION_TYPE]
     514                 :             : 
     515                 :             : #define function_name_decl_node         c_global_trees[CTI_FUNCTION_NAME_DECL]
     516                 :             : #define pretty_function_name_decl_node  c_global_trees[CTI_PRETTY_FUNCTION_NAME_DECL]
     517                 :             : #define c99_function_name_decl_node             c_global_trees[CTI_C99_FUNCTION_NAME_DECL]
     518                 :             : #define saved_function_name_decls       c_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS]
     519                 :             : 
     520                 :             : /* The node for C++ `__null'.  */
     521                 :             : #define null_node                       c_global_trees[CTI_NULL]
     522                 :             : /* The nodes for `nullptr'.  */
     523                 :             : #define nullptr_node                    c_global_trees[CTI_NULLPTR]
     524                 :             : #define nullptr_type_node               c_global_trees[CTI_NULLPTR_TYPE]
     525                 :             : 
     526                 :             : extern GTY(()) tree c_global_trees[CTI_MAX];
     527                 :             : 
     528                 :             : /* Mark which labels are explicitly declared.
     529                 :             :    These may be shadowed, and may be referenced from nested functions.  */
     530                 :             : #define C_DECLARED_LABEL_FLAG(label) TREE_LANG_FLAG_1 (label)
     531                 :             : 
     532                 :             : enum c_language_kind
     533                 :             : {
     534                 :             :   clk_c         = 0,            /* C90, C94, C99, C11 or C23 */
     535                 :             :   clk_objc      = 1,            /* clk_c with ObjC features.  */
     536                 :             :   clk_cxx       = 2,            /* ANSI/ISO C++ */
     537                 :             :   clk_objcxx    = 3             /* clk_cxx with ObjC features.  */
     538                 :             : };
     539                 :             : 
     540                 :             : /* To test for a specific language use c_language, defined by each
     541                 :             :    front end.  For "ObjC features" or "not C++" use the macros.  */
     542                 :             : extern c_language_kind c_language;
     543                 :             : 
     544                 :             : #define c_dialect_cxx()         ((c_language & clk_cxx) != 0)
     545                 :             : #define c_dialect_objc()        ((c_language & clk_objc) != 0)
     546                 :             : 
     547                 :             : /* The various name of operator that appears in error messages. */
     548                 :             : enum ref_operator {
     549                 :             :   /* NULL */
     550                 :             :   RO_NULL,
     551                 :             :   /* array indexing */
     552                 :             :   RO_ARRAY_INDEXING,
     553                 :             :   /* unary * */
     554                 :             :   RO_UNARY_STAR,
     555                 :             :   /* -> */
     556                 :             :   RO_ARROW,
     557                 :             :   /* implicit conversion */
     558                 :             :   RO_IMPLICIT_CONVERSION,
     559                 :             :   /* ->* */
     560                 :             :   RO_ARROW_STAR
     561                 :             : };
     562                 :             : 
     563                 :             : /* Information about a statement tree.  */
     564                 :             : 
     565                 :             : struct GTY(()) stmt_tree_s {
     566                 :             :   /* A stack of statement lists being collected.  */
     567                 :             :   vec<tree, va_gc> *x_cur_stmt_list;
     568                 :             : 
     569                 :             :   /* In C++, Nonzero if we should treat statements as full
     570                 :             :      expressions.  In particular, this variable is non-zero if at the
     571                 :             :      end of a statement we should destroy any temporaries created
     572                 :             :      during that statement.  Similarly, if, at the end of a block, we
     573                 :             :      should destroy any local variables in this block.  Normally, this
     574                 :             :      variable is nonzero, since those are the normal semantics of
     575                 :             :      C++.
     576                 :             : 
     577                 :             :      This flag has no effect in C.  */
     578                 :             :   int stmts_are_full_exprs_p;
     579                 :             : };
     580                 :             : 
     581                 :             : typedef struct stmt_tree_s *stmt_tree;
     582                 :             : 
     583                 :             : /* Global state pertinent to the current function.  Some C dialects
     584                 :             :    extend this structure with additional fields.  */
     585                 :             : 
     586                 :             : struct GTY(()) c_language_function {
     587                 :             :   /* While we are parsing the function, this contains information
     588                 :             :      about the statement-tree that we are building.  */
     589                 :             :   struct stmt_tree_s x_stmt_tree;
     590                 :             : 
     591                 :             :   /* Vector of locally defined typedefs, for
     592                 :             :      -Wunused-local-typedefs.  */
     593                 :             :   vec<tree, va_gc> *local_typedefs;
     594                 :             : };
     595                 :             : 
     596                 :             : #define stmt_list_stack (current_stmt_tree ()->x_cur_stmt_list)
     597                 :             : 
     598                 :             : /* When building a statement-tree, this is the current statement list
     599                 :             :    being collected.  */
     600                 :             : #define cur_stmt_list   (stmt_list_stack->last ())
     601                 :             : 
     602                 :             : #define building_stmt_list_p() (stmt_list_stack && !stmt_list_stack->is_empty())
     603                 :             : 
     604                 :             : /* Language-specific hooks.  */
     605                 :             : 
     606                 :             : /* If non-NULL, this function is called after a precompile header file
     607                 :             :    is loaded.  */
     608                 :             : extern void (*lang_post_pch_load) (void);
     609                 :             : 
     610                 :             : extern void push_file_scope (void);
     611                 :             : extern void pop_file_scope (void);
     612                 :             : extern stmt_tree current_stmt_tree (void);
     613                 :             : extern tree push_stmt_list (void);
     614                 :             : extern tree pop_stmt_list (tree);
     615                 :             : extern tree add_stmt (tree);
     616                 :             : extern void push_cleanup (tree, tree, bool);
     617                 :             : 
     618                 :             : extern tree build_modify_expr (location_t, tree, tree, enum tree_code,
     619                 :             :                                location_t, tree, tree);
     620                 :             : extern tree build_indirect_ref (location_t, tree, ref_operator);
     621                 :             : 
     622                 :             : extern bool has_c_linkage (const_tree decl);
     623                 :             : extern bool c_decl_implicit (const_tree);
     624                 :             : 
     625                 :             : /* Switches common to the C front ends.  */
     626                 :             : 
     627                 :             : /* Nonzero means don't output line number information.  */
     628                 :             : 
     629                 :             : extern char flag_no_line_commands;
     630                 :             : 
     631                 :             : /* Nonzero causes -E output not to be done, but directives such as
     632                 :             :    #define that have side effects are still obeyed.  */
     633                 :             : 
     634                 :             : extern char flag_no_output;
     635                 :             : 
     636                 :             : /* Nonzero means dump macros in some fashion; contains the 'D', 'M',
     637                 :             :    'N' or 'U' of the command line switch.  */
     638                 :             : 
     639                 :             : extern char flag_dump_macros;
     640                 :             : 
     641                 :             : /* Nonzero means pass #include lines through to the output.  */
     642                 :             : 
     643                 :             : extern char flag_dump_includes;
     644                 :             : 
     645                 :             : /* Nonzero means process PCH files while preprocessing.  */
     646                 :             : 
     647                 :             : extern bool flag_pch_preprocess;
     648                 :             : 
     649                 :             : /* The file name to which we should write a precompiled header, or
     650                 :             :    NULL if no header will be written in this compile.  */
     651                 :             : 
     652                 :             : extern const char *pch_file;
     653                 :             : 
     654                 :             : /* Nonzero if an ISO standard was selected.  It rejects macros in the
     655                 :             :    user's namespace.  */
     656                 :             : 
     657                 :             : extern int flag_iso;
     658                 :             : 
     659                 :             : /* C/ObjC language option variables.  */
     660                 :             : 
     661                 :             : 
     662                 :             : /* Nonzero means allow type mismatches in conditional expressions;
     663                 :             :    just make their values `void'.  */
     664                 :             : 
     665                 :             : extern int flag_cond_mismatch;
     666                 :             : 
     667                 :             : /* Nonzero means enable C89 Amendment 1 features.  */
     668                 :             : 
     669                 :             : extern int flag_isoc94;
     670                 :             : 
     671                 :             : /* Nonzero means use the ISO C99 (or later) dialect of C.  */
     672                 :             : 
     673                 :             : extern int flag_isoc99;
     674                 :             : 
     675                 :             : /* Nonzero means use the ISO C11 (or later) dialect of C.  */
     676                 :             : 
     677                 :             : extern int flag_isoc11;
     678                 :             : 
     679                 :             : /* Nonzero means use the ISO C23 dialect of C.  */
     680                 :             : 
     681                 :             : extern int flag_isoc23;
     682                 :             : 
     683                 :             : /* Nonzero means that we have builtin functions, and main is an int.  */
     684                 :             : 
     685                 :             : extern int flag_hosted;
     686                 :             : 
     687                 :             : /* ObjC language option variables.  */
     688                 :             : 
     689                 :             : 
     690                 :             : /* Tells the compiler that this is a special run.  Do not perform any
     691                 :             :    compiling, instead we are to test some platform dependent features
     692                 :             :    and output a C header file with appropriate definitions.  */
     693                 :             : 
     694                 :             : extern int print_struct_values;
     695                 :             : 
     696                 :             : /* Tells the compiler what is the constant string class for ObjC.  */
     697                 :             : 
     698                 :             : extern const char *constant_string_class_name;
     699                 :             : 
     700                 :             : 
     701                 :             : /* C++ language option variables.  */
     702                 :             : 
     703                 :             : /* The reference version of the ABI for -Wabi.  */
     704                 :             : 
     705                 :             : extern int warn_abi_version;
     706                 :             : 
     707                 :             : /* Return TRUE if one of {flag_abi_version,flag_abi_compat_version} is
     708                 :             :    less than N and the other is at least N.  */
     709                 :             : #define abi_compat_version_crosses(N)           \
     710                 :             :   (abi_version_at_least(N)                      \
     711                 :             :    != (flag_abi_compat_version == 0             \
     712                 :             :        || flag_abi_compat_version >= (N)))
     713                 :             : 
     714                 :             : /* Return TRUE if one of {flag_abi_version,warn_abi_version} is
     715                 :             :    less than N and the other is at least N, for use by -Wabi.  */
     716                 :             : #define abi_version_crosses(N)                  \
     717                 :             :   (abi_version_at_least(N)                      \
     718                 :             :    != (warn_abi_version == 0                    \
     719                 :             :        || warn_abi_version >= (N)))
     720                 :             : 
     721                 :             : /* The supported C++ dialects.  */
     722                 :             : 
     723                 :             : enum cxx_dialect {
     724                 :             :   cxx_unset,
     725                 :             :   /* C++98 with TC1  */
     726                 :             :   cxx98,
     727                 :             :   cxx03 = cxx98,
     728                 :             :   /* C++11  */
     729                 :             :   cxx0x,
     730                 :             :   cxx11 = cxx0x,
     731                 :             :   /* C++14 */
     732                 :             :   cxx14,
     733                 :             :   /* C++17 */
     734                 :             :   cxx17,
     735                 :             :   /* C++20 */
     736                 :             :   cxx20,
     737                 :             :   /* C++23 */
     738                 :             :   cxx23,
     739                 :             :   /* C++26 */
     740                 :             :   cxx26
     741                 :             : };
     742                 :             : 
     743                 :             : /* The C++ dialect being used. C++98 is the default.  */
     744                 :             : extern enum cxx_dialect cxx_dialect;
     745                 :             : 
     746                 :             : /* Maximum template instantiation depth.  This limit is rather
     747                 :             :    arbitrary, but it exists to limit the time it takes to notice
     748                 :             :    excessively recursive template instantiations.  */
     749                 :             : 
     750                 :             : extern int max_tinst_depth;
     751                 :             : 
     752                 :             : /* Nonzero means that we should not issue warnings about problems that
     753                 :             :    occur when the code is executed, because the code being processed
     754                 :             :    is not expected to be executed.  This is set during parsing.  This
     755                 :             :    is used for cases like sizeof() and "0 ? a : b".  This is a count,
     756                 :             :    not a bool, because unexecuted expressions can nest.  */
     757                 :             : 
     758                 :             : extern int c_inhibit_evaluation_warnings;
     759                 :             : 
     760                 :             : /* Depending on which phase of processing we are in, we may need
     761                 :             :    to prefer input_location to libcpp's locations.  (Specifically,
     762                 :             :    after the C++ lexer is done lexing tokens, but prior to calling
     763                 :             :    cpp_finish (), we need to do so.  */
     764                 :             : 
     765                 :             : extern bool override_libcpp_locations;
     766                 :             : 
     767                 :             : /* C types are partitioned into three subsets: object, function, and
     768                 :             :    incomplete types.  */
     769                 :             : #define C_TYPE_OBJECT_P(type) \
     770                 :             :   (TREE_CODE (type) != FUNCTION_TYPE && TYPE_SIZE (type))
     771                 :             : 
     772                 :             : #define C_TYPE_INCOMPLETE_P(type) \
     773                 :             :   (TREE_CODE (type) != FUNCTION_TYPE && TYPE_SIZE (type) == 0)
     774                 :             : 
     775                 :             : #define C_TYPE_FUNCTION_P(type) \
     776                 :             :   (TREE_CODE (type) == FUNCTION_TYPE)
     777                 :             : 
     778                 :             : /* For convenience we define a single macro to identify the class of
     779                 :             :    object or incomplete types.  */
     780                 :             : #define C_TYPE_OBJECT_OR_INCOMPLETE_P(type) \
     781                 :             :   (!C_TYPE_FUNCTION_P (type))
     782                 :             : 
     783                 :             : /* Return true if TYPE is a vector type that should be subject to the GNU
     784                 :             :    vector extensions (as opposed to a vector type that is used only for
     785                 :             :    the purposes of defining target-specific built-in functions).  */
     786                 :             : 
     787                 :             : inline bool
     788                 :   532684065 : gnu_vector_type_p (const_tree type)
     789                 :             : {
     790                 :   532684065 :   return VECTOR_TYPE_P (type) && !TYPE_INDIVISIBLE_P (type);
     791                 :             : }
     792                 :             : 
     793                 :             : struct visibility_flags
     794                 :             : {
     795                 :             :   unsigned inpragma : 1;        /* True when in #pragma GCC visibility.  */
     796                 :             :   unsigned inlines_hidden : 1;  /* True when -finlineshidden in effect.  */
     797                 :             : };
     798                 :             : 
     799                 :             : /* These enumerators are possible types of unsafe conversions.  */
     800                 :             : enum conversion_safety {
     801                 :             :   /* The conversion is safe.  */
     802                 :             :   SAFE_CONVERSION = 0,
     803                 :             :   /* Another type of conversion with problems.  */
     804                 :             :   UNSAFE_OTHER,
     805                 :             :   /* Conversion between signed and unsigned integers.  */
     806                 :             :   UNSAFE_SIGN,
     807                 :             :   /* Conversions that reduce the precision of reals including conversions
     808                 :             :      from reals to integers.  */
     809                 :             :   UNSAFE_REAL,
     810                 :             :   /* Conversions from complex to reals or integers, that discard imaginary
     811                 :             :      component.  */
     812                 :             :   UNSAFE_IMAGINARY
     813                 :             : };
     814                 :             : 
     815                 :             : /* Global visibility options.  */
     816                 :             : extern struct visibility_flags visibility_options;
     817                 :             : 
     818                 :             : /* Attribute table common to the C front ends.  */
     819                 :             : extern const struct scoped_attribute_specs c_common_gnu_attribute_table;
     820                 :             : extern const struct scoped_attribute_specs c_common_format_attribute_table;
     821                 :             : 
     822                 :             : /* Pointer to function to lazily generate the VAR_DECL for __FUNCTION__ etc.
     823                 :             :    ID is the identifier to use, NAME is the string.
     824                 :             :    TYPE_DEP indicates whether it depends on type of the function or not
     825                 :             :    (i.e. __PRETTY_FUNCTION__).  */
     826                 :             : 
     827                 :             : extern tree (*make_fname_decl) (location_t, tree, int);
     828                 :             : 
     829                 :             : /* In c-decl.cc and cp/tree.cc.  FIXME.  */
     830                 :             : extern void c_register_addr_space (const char *str, addr_space_t as);
     831                 :             : 
     832                 :             : /* In c-common.cc.  */
     833                 :             : extern bool in_late_binary_op;
     834                 :             : extern const char *c_addr_space_name (addr_space_t as);
     835                 :             : extern tree identifier_global_value (tree);
     836                 :             : extern tree identifier_global_tag (tree);
     837                 :             : extern bool names_builtin_p (const char *);
     838                 :             : extern tree c_linkage_bindings (tree);
     839                 :             : extern void record_builtin_type (enum rid, const char *, tree);
     840                 :             : extern void start_fname_decls (void);
     841                 :             : extern void finish_fname_decls (void);
     842                 :             : extern const char *fname_as_string (int);
     843                 :             : extern tree fname_decl (location_t, unsigned, tree);
     844                 :             : 
     845                 :             : extern int check_user_alignment (const_tree, bool, bool);
     846                 :             : extern bool check_function_arguments (location_t loc, const_tree, const_tree,
     847                 :             :                                       int, tree *, vec<location_t> *);
     848                 :             : extern void check_function_arguments_recurse (void (*)
     849                 :             :                                               (void *, tree,
     850                 :             :                                                unsigned HOST_WIDE_INT),
     851                 :             :                                               void *, tree,
     852                 :             :                                               unsigned HOST_WIDE_INT,
     853                 :             :                                               opt_code);
     854                 :             : extern bool check_builtin_function_arguments (location_t, vec<location_t>,
     855                 :             :                                               tree, tree, int, tree *);
     856                 :             : extern void check_function_format (const_tree, tree, int, tree *,
     857                 :             :                                    vec<location_t> *);
     858                 :             : extern bool attribute_fallthrough_p (tree);
     859                 :             : extern tree handle_format_attribute (tree *, tree, tree, int, bool *);
     860                 :             : extern tree handle_format_arg_attribute (tree *, tree, tree, int, bool *);
     861                 :             : extern bool c_common_handle_option (size_t, const char *, HOST_WIDE_INT, int,
     862                 :             :                                     location_t,
     863                 :             :                                     const struct cl_option_handlers *);
     864                 :             : extern bool default_handle_c_option (size_t, const char *, int);
     865                 :             : extern tree c_common_type_for_mode (machine_mode, int);
     866                 :             : extern tree c_common_type_for_size (unsigned int, int);
     867                 :             : extern tree c_common_fixed_point_type_for_size (unsigned int, unsigned int,
     868                 :             :                                                 int, int);
     869                 :             : extern tree c_common_unsigned_type (tree);
     870                 :             : extern tree c_common_signed_type (tree);
     871                 :             : extern tree c_common_signed_or_unsigned_type (int, tree);
     872                 :             : extern void c_common_init_ts (void);
     873                 :             : extern tree c_build_bitfield_integer_type (unsigned HOST_WIDE_INT, int);
     874                 :             : extern enum conversion_safety unsafe_conversion_p (tree, tree, tree, bool);
     875                 :             : extern bool decl_with_nonnull_addr_p (const_tree);
     876                 :             : extern tree c_fully_fold (tree, bool, bool *, bool = false);
     877                 :             : extern tree c_wrap_maybe_const (tree, bool);
     878                 :             : extern tree c_common_truthvalue_conversion (location_t, tree);
     879                 :             : extern void c_apply_type_quals_to_decl (int, tree);
     880                 :             : extern tree c_sizeof_or_alignof_type (location_t, tree, bool, bool, int);
     881                 :             : extern tree c_alignof_expr (location_t, tree);
     882                 :             : /* Print an error message for invalid operands to arith operation CODE.
     883                 :             :    NOP_EXPR is used as a special case (see truthvalue_conversion).  */
     884                 :             : extern void binary_op_error (rich_location *, enum tree_code, tree, tree);
     885                 :             : extern tree fix_string_type (tree);
     886                 :             : extern tree convert_and_check (location_t, tree, tree, bool = false);
     887                 :             : extern bool c_determine_visibility (tree);
     888                 :             : extern bool vector_types_compatible_elements_p (tree, tree);
     889                 :             : extern void mark_valid_location_for_stdc_pragma (bool);
     890                 :             : extern bool valid_location_for_stdc_pragma_p (void);
     891                 :             : extern void set_float_const_decimal64 (void);
     892                 :             : extern void clear_float_const_decimal64 (void);
     893                 :             : extern bool float_const_decimal64_p (void);
     894                 :             : 
     895                 :             : extern bool keyword_begins_type_specifier (enum rid);
     896                 :             : extern bool keyword_is_storage_class_specifier (enum rid);
     897                 :             : extern bool keyword_is_type_qualifier (enum rid);
     898                 :             : extern bool keyword_is_decl_specifier (enum rid);
     899                 :             : extern unsigned max_align_t_align (void);
     900                 :             : extern bool cxx_fundamental_alignment_p (unsigned);
     901                 :             : extern bool pointer_to_zero_sized_aggr_p (tree);
     902                 :             : extern bool bool_promoted_to_int_p (tree);
     903                 :             : extern tree fold_for_warn (tree);
     904                 :             : extern tree c_common_get_narrower (tree, int *);
     905                 :             : extern bool get_attribute_operand (tree, unsigned HOST_WIDE_INT *);
     906                 :             : extern void c_common_finalize_early_debug (void);
     907                 :             : extern unsigned int c_strict_flex_array_level_of (tree);
     908                 :             : extern bool c_option_is_from_cpp_diagnostics (int);
     909                 :             : extern tree c_hardbool_type_attr_1 (tree, tree *, tree *);
     910                 :             : 
     911                 :             : /* Used by convert_and_check; in front ends.  */
     912                 :             : extern tree convert_init (tree, tree);
     913                 :             : 
     914                 :             : #define c_sizeof(LOC, T)  c_sizeof_or_alignof_type (LOC, T, true, false, 1)
     915                 :             : #define c_alignof(LOC, T) c_sizeof_or_alignof_type (LOC, T, false, false, 1)
     916                 :             : 
     917                 :             : /* Subroutine of build_binary_op, used for certain operations.  */
     918                 :             : extern tree shorten_binary_op (tree result_type, tree op0, tree op1, bool bitwise);
     919                 :             : 
     920                 :             : /* Return true if division or modulo op0 / op1 or op0 % op1 may be shortened.
     921                 :             :    We can shorten only if we can guarantee that op0 is not signed integral
     922                 :             :    minimum or op1 is not -1, because e.g. (long long) INT_MIN / -1 is
     923                 :             :    well defined INT_MAX + 1LL if long long is wider than int, but INT_MIN / -1
     924                 :             :    is UB.  */
     925                 :             : inline bool
     926                 :     4827818 : may_shorten_divmod (tree op0, tree op1)
     927                 :             : {
     928                 :     4827818 :   tree type0 = TREE_TYPE (op0);
     929                 :     4827818 :   if (TYPE_UNSIGNED (type0))
     930                 :             :     return true;
     931                 :             :   /* A cast from narrower unsigned won't be signed integral minimum,
     932                 :             :      but cast from same or wider precision unsigned could be.  */
     933                 :     2608214 :   if (TREE_CODE (op0) == NOP_EXPR
     934                 :     1032923 :       && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (op0, 0)))
     935                 :     1032918 :       && TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0)))
     936                 :     2611436 :       && (TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op0, 0)))
     937                 :        3222 :           < TYPE_PRECISION (type0)))
     938                 :             :     return true;
     939                 :     2605600 :   if (TREE_CODE (op1) == INTEGER_CST && !integer_all_onesp (op1))
     940                 :             :     return true;
     941                 :             :   return false;
     942                 :             : }
     943                 :             : 
     944                 :             : /* Subroutine of build_binary_op, used for comparison operations.
     945                 :             :    See if the operands have both been converted from subword integer types
     946                 :             :    and, if so, perhaps change them both back to their original type.  */
     947                 :             : extern tree shorten_compare (location_t, tree *, tree *, tree *,
     948                 :             :                              enum tree_code *);
     949                 :             : 
     950                 :             : extern tree pointer_int_sum (location_t, enum tree_code, tree, tree,
     951                 :             :                              bool = true);
     952                 :             : 
     953                 :             : /* Add qualifiers to a type, in the fashion for C.  */
     954                 :             : extern tree c_build_qualified_type (tree, int, tree = NULL_TREE, size_t = 0);
     955                 :             : 
     956                 :             : /* Build tree nodes and builtin functions common to both C and C++ language
     957                 :             :    frontends.  */
     958                 :             : extern void c_common_nodes_and_builtins (void);
     959                 :             : 
     960                 :             : extern void disable_builtin_function (const char *);
     961                 :             : 
     962                 :             : extern void set_compound_literal_name (tree decl);
     963                 :             : 
     964                 :             : extern tree build_va_arg (location_t, tree, tree);
     965                 :             : 
     966                 :             : extern const unsigned int c_family_lang_mask;
     967                 :             : extern unsigned int c_common_option_lang_mask (void);
     968                 :             : extern void c_common_diagnostics_set_defaults (diagnostic_context *);
     969                 :             : extern bool c_common_complain_wrong_lang_p (const struct cl_option *);
     970                 :             : extern void c_common_init_options_struct (struct gcc_options *);
     971                 :             : extern void c_common_init_options (unsigned int, struct cl_decoded_option *);
     972                 :             : extern bool c_common_post_options (const char **);
     973                 :             : extern bool c_common_init (void);
     974                 :             : extern void c_common_finish (void);
     975                 :             : extern void c_common_parse_file (void);
     976                 :             : extern alias_set_type c_common_get_alias_set (tree);
     977                 :             : extern void c_register_builtin_type (tree, const char*);
     978                 :             : extern bool c_promoting_integer_type_p (const_tree);
     979                 :             : extern bool self_promoting_args_p (const_tree);
     980                 :             : extern tree strip_pointer_operator (tree);
     981                 :             : extern tree strip_pointer_or_array_types (tree);
     982                 :             : extern HOST_WIDE_INT c_common_to_target_charset (HOST_WIDE_INT);
     983                 :             : 
     984                 :             : /* This is the basic parsing function.  */
     985                 :             : extern void c_parse_file (void);
     986                 :             : 
     987                 :             : extern void c_parse_final_cleanups (void);
     988                 :             : 
     989                 :             : /* This initializes for preprocess-only mode.  */
     990                 :             : extern void c_init_preprocess (void);
     991                 :             : 
     992                 :             : /* These macros provide convenient access to the various _STMT nodes.  */
     993                 :             : 
     994                 :             : /* Nonzero if a given STATEMENT_LIST represents the outermost binding
     995                 :             :    if a statement expression.  */
     996                 :             : #define STATEMENT_LIST_STMT_EXPR(NODE) \
     997                 :             :   TREE_LANG_FLAG_1 (STATEMENT_LIST_CHECK (NODE))
     998                 :             : 
     999                 :             : /* Nonzero if a label has been added to the statement list.  */
    1000                 :             : #define STATEMENT_LIST_HAS_LABEL(NODE) \
    1001                 :             :   TREE_LANG_FLAG_3 (STATEMENT_LIST_CHECK (NODE))
    1002                 :             : 
    1003                 :             : /* C_MAYBE_CONST_EXPR accessors.  */
    1004                 :             : #define C_MAYBE_CONST_EXPR_PRE(NODE)                    \
    1005                 :             :   TREE_OPERAND (C_MAYBE_CONST_EXPR_CHECK (NODE), 0)
    1006                 :             : #define C_MAYBE_CONST_EXPR_EXPR(NODE)                   \
    1007                 :             :   TREE_OPERAND (C_MAYBE_CONST_EXPR_CHECK (NODE), 1)
    1008                 :             : #define C_MAYBE_CONST_EXPR_INT_OPERANDS(NODE)           \
    1009                 :             :   TREE_LANG_FLAG_0 (C_MAYBE_CONST_EXPR_CHECK (NODE))
    1010                 :             : #define C_MAYBE_CONST_EXPR_NON_CONST(NODE)              \
    1011                 :             :   TREE_LANG_FLAG_1 (C_MAYBE_CONST_EXPR_CHECK (NODE))
    1012                 :             : #define EXPR_INT_CONST_OPERANDS(EXPR)                   \
    1013                 :             :   (INTEGRAL_TYPE_P (TREE_TYPE (EXPR))                   \
    1014                 :             :    && (TREE_CODE (EXPR) == INTEGER_CST                  \
    1015                 :             :        || (TREE_CODE (EXPR) == C_MAYBE_CONST_EXPR       \
    1016                 :             :            && C_MAYBE_CONST_EXPR_INT_OPERANDS (EXPR))))
    1017                 :             : 
    1018                 :             : /* In a FIELD_DECL, nonzero if the decl was originally a bitfield.  */
    1019                 :             : #define DECL_C_BIT_FIELD(NODE) \
    1020                 :             :   (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) == 1)
    1021                 :             : #define SET_DECL_C_BIT_FIELD(NODE) \
    1022                 :             :   (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) = 1)
    1023                 :             : #define CLEAR_DECL_C_BIT_FIELD(NODE) \
    1024                 :             :   (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) = 0)
    1025                 :             : 
    1026                 :             : /* True if the decl was an unnamed bitfield.  */
    1027                 :             : #define DECL_UNNAMED_BIT_FIELD(NODE) \
    1028                 :             :   (DECL_C_BIT_FIELD (NODE) && !DECL_NAME (NODE))
    1029                 :             : 
    1030                 :             : /* True iff TYPE is cv decltype(nullptr).  */
    1031                 :             : #define NULLPTR_TYPE_P(TYPE) (TREE_CODE (TYPE) == NULLPTR_TYPE)
    1032                 :             : 
    1033                 :             : /* Returns the underlying type of the given enumeration type. The
    1034                 :             :    underlying type is determined in different ways, depending on the
    1035                 :             :    properties of the enum:
    1036                 :             : 
    1037                 :             :      - In C++0x or C23, the underlying type can be explicitly specified, e.g.,
    1038                 :             : 
    1039                 :             :          enum E1 : char { ... } // underlying type is char
    1040                 :             : 
    1041                 :             :      - In a C++0x scoped enumeration, the underlying type is int
    1042                 :             :        unless otherwises specified:
    1043                 :             : 
    1044                 :             :          enum class E2 { ... } // underlying type is int
    1045                 :             : 
    1046                 :             :      - Otherwise, the underlying type is determined based on the
    1047                 :             :        values of the enumerators. In this case, the
    1048                 :             :        ENUM_UNDERLYING_TYPE will not be set until after the definition
    1049                 :             :        of the enumeration is completed by finish_enum.  */
    1050                 :             : #define ENUM_UNDERLYING_TYPE(TYPE) \
    1051                 :             :   TREE_TYPE (ENUMERAL_TYPE_CHECK (TYPE))
    1052                 :             : 
    1053                 :             : /* Determines whether an ENUMERAL_TYPE has an explicit
    1054                 :             :    underlying type.  */
    1055                 :             : #define ENUM_FIXED_UNDERLYING_TYPE_P(NODE) (TYPE_LANG_FLAG_5 (NODE))
    1056                 :             : 
    1057                 :             : extern tree do_case (location_t, tree, tree, tree);
    1058                 :             : extern tree build_stmt (location_t, enum tree_code, ...);
    1059                 :             : extern tree build_real_imag_expr (location_t, enum tree_code, tree);
    1060                 :             : 
    1061                 :             : /* These functions must be defined by each front-end which implements
    1062                 :             :    a variant of the C language.  They are used in c-common.cc.  */
    1063                 :             : 
    1064                 :             : extern tree build_unary_op (location_t, enum tree_code, tree, bool);
    1065                 :             : extern tree build_binary_op (location_t, enum tree_code, tree, tree, bool);
    1066                 :             : extern tree perform_integral_promotions (tree);
    1067                 :             : 
    1068                 :             : /* These functions must be defined by each front-end which implements
    1069                 :             :    a variant of the C language.  They are used by port files.  */
    1070                 :             : 
    1071                 :             : extern tree default_conversion (tree);
    1072                 :             : 
    1073                 :             : /* Given two integer or real types, return the type for their sum.
    1074                 :             :    Given two compatible ANSI C types, returns the merged type.  */
    1075                 :             : 
    1076                 :             : extern tree common_type (tree, tree);
    1077                 :             : 
    1078                 :             : extern tree decl_constant_value (tree);
    1079                 :             : 
    1080                 :             : /* Handle increment and decrement of boolean types.  */
    1081                 :             : extern tree boolean_increment (enum tree_code, tree);
    1082                 :             : 
    1083                 :             : extern int case_compare (splay_tree_key, splay_tree_key);
    1084                 :             : 
    1085                 :             : extern tree c_add_case_label (location_t, splay_tree, tree, tree, tree,
    1086                 :             :                               tree = NULL_TREE);
    1087                 :             : extern bool c_switch_covers_all_cases_p (splay_tree, tree);
    1088                 :             : extern bool c_block_may_fallthru (const_tree);
    1089                 :             : 
    1090                 :             : extern tree build_function_call (location_t, tree, tree);
    1091                 :             : 
    1092                 :             : extern tree build_function_call_vec (location_t, vec<location_t>, tree,
    1093                 :             :                                      vec<tree, va_gc> *, vec<tree, va_gc> *,
    1094                 :             :                                      tree = NULL_TREE);
    1095                 :             : 
    1096                 :             : extern tree resolve_overloaded_builtin (location_t, tree, vec<tree, va_gc> *);
    1097                 :             : 
    1098                 :             : extern tree finish_label_address_expr (tree, location_t);
    1099                 :             : 
    1100                 :             : /* Same function prototype, but the C and C++ front ends have
    1101                 :             :    different implementations.  Used in c-common.cc.  */
    1102                 :             : extern tree lookup_label (tree);
    1103                 :             : extern tree lookup_name (tree);
    1104                 :             : extern bool lvalue_p (const_tree);
    1105                 :             : extern int maybe_adjust_arg_pos_for_attribute (const_tree);
    1106                 :             : extern bool instantiation_dependent_expression_p (tree);
    1107                 :             : 
    1108                 :             : extern bool vector_targets_convertible_p (const_tree t1, const_tree t2);
    1109                 :             : extern bool vector_types_convertible_p (const_tree t1, const_tree t2, bool emit_lax_note);
    1110                 :             : extern tree c_build_vec_perm_expr (location_t, tree, tree, tree, bool = true);
    1111                 :             : extern tree c_build_shufflevector (location_t, tree, tree,
    1112                 :             :                                    const vec<tree> &, bool = true);
    1113                 :             : extern tree c_build_vec_convert (location_t, tree, location_t, tree, bool = true);
    1114                 :             : 
    1115                 :             : extern void init_c_lex (void);
    1116                 :             : 
    1117                 :             : extern void c_cpp_builtins (cpp_reader *);
    1118                 :             : extern void c_cpp_builtins_optimize_pragma (cpp_reader *, tree, tree);
    1119                 :             : extern bool c_cpp_diagnostic (cpp_reader *, enum cpp_diagnostic_level,
    1120                 :             :                               enum cpp_warning_reason, rich_location *,
    1121                 :             :                               const char *, va_list *)
    1122                 :             :      ATTRIBUTE_GCC_DIAG(5,0);
    1123                 :             : extern int c_common_has_attribute (cpp_reader *, bool);
    1124                 :             : extern int c_common_has_builtin (cpp_reader *);
    1125                 :             : extern int c_common_has_feature (cpp_reader *, bool);
    1126                 :             : 
    1127                 :             : /* Implemented by each front end in *-lang.cc.  */
    1128                 :             : extern void c_family_register_lang_features ();
    1129                 :             : 
    1130                 :             : /* Implemented in c-family/c-common.cc.  */
    1131                 :             : extern void c_common_register_feature (const char *, bool);
    1132                 :             : extern bool has_feature_p (const char *, bool);
    1133                 :             : 
    1134                 :             : extern bool parse_optimize_options (tree, bool);
    1135                 :             : 
    1136                 :             : /* Positive if an implicit `extern "C"' scope has just been entered;
    1137                 :             :    negative if such a scope has just been exited.  */
    1138                 :             : extern GTY(()) int pending_lang_change;
    1139                 :             : 
    1140                 :             : /* Information recorded about each file examined during compilation.  */
    1141                 :             : 
    1142                 :             : struct c_fileinfo
    1143                 :             : {
    1144                 :             :   int time;     /* Time spent in the file.  */
    1145                 :             : 
    1146                 :             :   /* Flags used only by C++.
    1147                 :             :      INTERFACE_ONLY nonzero means that we are in an "interface" section
    1148                 :             :      of the compiler.  INTERFACE_UNKNOWN nonzero means we cannot trust
    1149                 :             :      the value of INTERFACE_ONLY.  If INTERFACE_UNKNOWN is zero and
    1150                 :             :      INTERFACE_ONLY is zero, it means that we are responsible for
    1151                 :             :      exporting definitions that others might need.  */
    1152                 :             :   short interface_only;
    1153                 :             :   short interface_unknown;
    1154                 :             : };
    1155                 :             : 
    1156                 :             : struct c_fileinfo *get_fileinfo (const char *);
    1157                 :             : extern void dump_time_statistics (void);
    1158                 :             : 
    1159                 :             : extern bool c_dump_tree (void *, tree);
    1160                 :             : 
    1161                 :             : extern void verify_sequence_points (tree);
    1162                 :             : 
    1163                 :             : extern tree fold_offsetof (tree, tree = size_type_node,
    1164                 :             :                            tree_code ctx = ERROR_MARK);
    1165                 :             : 
    1166                 :             : extern int complete_array_type (tree *, tree, bool);
    1167                 :             : extern void complete_flexible_array_elts (tree);
    1168                 :             : 
    1169                 :             : extern tree builtin_type_for_size (int, bool);
    1170                 :             : 
    1171                 :             : extern void c_common_mark_addressable_vec (tree);
    1172                 :             : 
    1173                 :             : extern void set_underlying_type (tree);
    1174                 :             : extern bool user_facing_original_type_p (const_tree);
    1175                 :             : extern void record_types_used_by_current_var_decl (tree);
    1176                 :             : extern vec<tree, va_gc> *make_tree_vector (void);
    1177                 :             : extern void release_tree_vector (vec<tree, va_gc> *);
    1178                 :             : extern vec<tree, va_gc> *make_tree_vector_single (tree);
    1179                 :             : extern vec<tree, va_gc> *make_tree_vector_from_list (tree);
    1180                 :             : extern vec<tree, va_gc> *make_tree_vector_from_ctor (tree);
    1181                 :             : extern vec<tree, va_gc> *make_tree_vector_copy (const vec<tree, va_gc> *);
    1182                 :             : 
    1183                 :             : /* Used for communication between c_common_type_for_mode and
    1184                 :             :    c_register_builtin_type.  */
    1185                 :             : extern GTY(()) tree registered_builtin_types;
    1186                 :             : 
    1187                 :             : /* Read SOURCE_DATE_EPOCH from environment to have a deterministic
    1188                 :             :    timestamp to replace embedded current dates to get reproducible
    1189                 :             :    results.  Returns -1 if SOURCE_DATE_EPOCH is not defined.  */
    1190                 :             : extern time_t cb_get_source_date_epoch (cpp_reader *pfile);
    1191                 :             : 
    1192                 :             : /* The value (as a unix timestamp) corresponds to date
    1193                 :             :    "Dec 31 9999 23:59:59 UTC", which is the latest date that __DATE__ and
    1194                 :             :    __TIME__ can store.  */
    1195                 :             : #define MAX_SOURCE_DATE_EPOCH HOST_WIDE_INT_C (253402300799)
    1196                 :             : 
    1197                 :             : /* Callback for libcpp for offering spelling suggestions for misspelled
    1198                 :             :    directives.  */
    1199                 :             : extern const char *cb_get_suggestion (cpp_reader *, const char *,
    1200                 :             :                                       const char *const *);
    1201                 :             : 
    1202                 :             : extern GTY(()) string_concat_db *g_string_concat_db;
    1203                 :             : 
    1204                 :             : class substring_loc;
    1205                 :             : extern const char *c_get_substring_location (const substring_loc &substr_loc,
    1206                 :             :                                              location_t *out_loc);
    1207                 :             : 
    1208                 :             : /* In c-gimplify.cc.  */
    1209                 :             : typedef struct bc_state
    1210                 :             : {
    1211                 :             :   tree bc_label[2];
    1212                 :             : } bc_state_t;
    1213                 :             : extern void save_bc_state (bc_state_t *);
    1214                 :             : extern void restore_bc_state (bc_state_t *);
    1215                 :             : extern tree c_genericize_control_stmt (tree *, int *, void *,
    1216                 :             :                                        walk_tree_fn, walk_tree_lh);
    1217                 :             : extern void c_genericize (tree);
    1218                 :             : extern int c_gimplify_expr (tree *, gimple_seq *, gimple_seq *);
    1219                 :             : extern tree c_build_bind_expr (location_t, tree, tree);
    1220                 :             : 
    1221                 :             : /* In c-lex.cc.  */
    1222                 :             : extern enum cpp_ttype
    1223                 :             : conflict_marker_get_final_tok_kind (enum cpp_ttype tok1_kind);
    1224                 :             : 
    1225                 :             : /* In c-pch.cc  */
    1226                 :             : extern void pch_init (void);
    1227                 :             : extern void pch_cpp_save_state (void);
    1228                 :             : extern int c_common_valid_pch (cpp_reader *pfile, const char *name, int fd);
    1229                 :             : extern void c_common_read_pch (cpp_reader *pfile, const char *name, int fd,
    1230                 :             :                                const char *orig);
    1231                 :             : extern void c_common_write_pch (void);
    1232                 :             : extern void c_common_no_more_pch (void);
    1233                 :             : extern void c_common_pch_pragma (cpp_reader *pfile, const char *);
    1234                 :             : 
    1235                 :             : /* In *-checksum.c */
    1236                 :             : extern const unsigned char executable_checksum[16];
    1237                 :             : 
    1238                 :             : /* In c-cppbuiltin.cc  */
    1239                 :             : extern void builtin_define_std (const char *macro);
    1240                 :             : extern void builtin_define_with_value (const char *, const char *, int);
    1241                 :             : extern void builtin_define_with_int_value (const char *, HOST_WIDE_INT);
    1242                 :             : extern void builtin_define_type_sizeof (const char *, tree);
    1243                 :             : extern void c_stddef_cpp_builtins (void);
    1244                 :             : extern void fe_file_change (const line_map_ordinary *);
    1245                 :             : extern void c_parse_error (const char *, enum cpp_ttype, tree, unsigned char,
    1246                 :             :                            rich_location *richloc);
    1247                 :             : 
    1248                 :             : /* In c-ppoutput.cc  */
    1249                 :             : extern void init_pp_output (FILE *);
    1250                 :             : extern void preprocess_file (cpp_reader *);
    1251                 :             : extern void pp_file_change (const line_map_ordinary *);
    1252                 :             : extern void pp_dir_change (cpp_reader *, const char *);
    1253                 :             : extern bool check_missing_format_attribute (tree, tree);
    1254                 :             : extern void c_pp_stream_token (cpp_reader *, const cpp_token *, location_t loc);
    1255                 :             : 
    1256                 :             : /* In c-omp.cc  */
    1257                 :             : typedef wide_int_bitmask omp_clause_mask;
    1258                 :             : 
    1259                 :             : #define OMP_CLAUSE_MASK_1 omp_clause_mask (1)
    1260                 :             : 
    1261                 :             : enum c_omp_clause_split
    1262                 :             : {
    1263                 :             :   C_OMP_CLAUSE_SPLIT_TARGET = 0,
    1264                 :             :   C_OMP_CLAUSE_SPLIT_TEAMS,
    1265                 :             :   C_OMP_CLAUSE_SPLIT_DISTRIBUTE,
    1266                 :             :   C_OMP_CLAUSE_SPLIT_PARALLEL,
    1267                 :             :   C_OMP_CLAUSE_SPLIT_FOR,
    1268                 :             :   C_OMP_CLAUSE_SPLIT_SIMD,
    1269                 :             :   C_OMP_CLAUSE_SPLIT_COUNT,
    1270                 :             :   C_OMP_CLAUSE_SPLIT_SECTIONS = C_OMP_CLAUSE_SPLIT_FOR,
    1271                 :             :   C_OMP_CLAUSE_SPLIT_TASKLOOP = C_OMP_CLAUSE_SPLIT_FOR,
    1272                 :             :   C_OMP_CLAUSE_SPLIT_LOOP = C_OMP_CLAUSE_SPLIT_FOR,
    1273                 :             :   C_OMP_CLAUSE_SPLIT_MASKED = C_OMP_CLAUSE_SPLIT_DISTRIBUTE
    1274                 :             : };
    1275                 :             : 
    1276                 :             : enum c_omp_region_type
    1277                 :             : {
    1278                 :             :   C_ORT_OMP                     = 1 << 0,
    1279                 :             :   C_ORT_ACC                     = 1 << 1,
    1280                 :             :   C_ORT_DECLARE_SIMD            = 1 << 2,
    1281                 :             :   C_ORT_TARGET                  = 1 << 3,
    1282                 :             :   C_ORT_EXIT_DATA               = 1 << 4,
    1283                 :             :   C_ORT_OMP_DECLARE_SIMD        = C_ORT_OMP | C_ORT_DECLARE_SIMD,
    1284                 :             :   C_ORT_OMP_TARGET              = C_ORT_OMP | C_ORT_TARGET,
    1285                 :             :   C_ORT_OMP_EXIT_DATA           = C_ORT_OMP | C_ORT_EXIT_DATA,
    1286                 :             :   C_ORT_ACC_TARGET              = C_ORT_ACC | C_ORT_TARGET
    1287                 :             : };
    1288                 :             : 
    1289                 :             : extern tree c_finish_omp_master (location_t, tree);
    1290                 :             : extern tree c_finish_omp_masked (location_t, tree, tree);
    1291                 :             : extern tree c_finish_omp_taskgroup (location_t, tree, tree);
    1292                 :             : extern tree c_finish_omp_critical (location_t, tree, tree, tree);
    1293                 :             : extern tree c_finish_omp_ordered (location_t, tree, tree);
    1294                 :             : extern void c_finish_omp_barrier (location_t);
    1295                 :             : extern tree c_finish_omp_atomic (location_t, enum tree_code, enum tree_code,
    1296                 :             :                                  tree, tree, tree, tree, tree, tree, bool,
    1297                 :             :                                  enum omp_memory_order, bool, bool = false);
    1298                 :             : extern bool c_omp_depend_t_p (tree);
    1299                 :             : extern void c_finish_omp_depobj (location_t, tree, enum omp_clause_depend_kind,
    1300                 :             :                                  tree);
    1301                 :             : extern void c_finish_omp_flush (location_t, int);
    1302                 :             : extern void c_finish_omp_taskwait (location_t);
    1303                 :             : extern void c_finish_omp_taskyield (location_t);
    1304                 :             : extern tree c_finish_omp_for (location_t, enum tree_code, tree, tree, tree,
    1305                 :             :                               tree, tree, tree, tree, bool);
    1306                 :             : extern bool c_omp_check_loop_iv (tree, tree, walk_tree_lh);
    1307                 :             : extern bool c_omp_check_loop_iv_exprs (location_t, enum tree_code, tree, int,
    1308                 :             :                                        tree, tree, tree, walk_tree_lh);
    1309                 :             : extern bool c_omp_check_loop_binding_exprs (tree, vec<tree> *);
    1310                 :             : extern tree c_finish_oacc_wait (location_t, tree, tree);
    1311                 :             : extern tree c_oacc_split_loop_clauses (tree, tree *, bool);
    1312                 :             : extern void c_omp_split_clauses (location_t, enum tree_code, omp_clause_mask,
    1313                 :             :                                  tree, tree *);
    1314                 :             : extern tree c_omp_declare_simd_clauses_to_numbers (tree, tree);
    1315                 :             : extern void c_omp_declare_simd_clauses_to_decls (tree, tree);
    1316                 :             : extern bool c_omp_predefined_variable (tree);
    1317                 :             : extern enum omp_clause_default_kind c_omp_predetermined_sharing (tree);
    1318                 :             : extern enum omp_clause_defaultmap_kind c_omp_predetermined_mapping (tree);
    1319                 :             : extern tree c_omp_check_context_selector (location_t, tree);
    1320                 :             : extern void c_omp_mark_declare_variant (location_t, tree, tree);
    1321                 :             : extern void c_omp_adjust_map_clauses (tree, bool);
    1322                 :             : 
    1323                 :             : namespace omp_addr_tokenizer { struct omp_addr_token; }
    1324                 :             : typedef omp_addr_tokenizer::omp_addr_token omp_addr_token;
    1325                 :             : 
    1326                 :             : class c_omp_address_inspector
    1327                 :             : {
    1328                 :             :   location_t loc;
    1329                 :             :   tree root_term;
    1330                 :             :   bool indirections;
    1331                 :             :   int map_supported;
    1332                 :             : 
    1333                 :             : protected:
    1334                 :             :   tree orig;
    1335                 :             : 
    1336                 :             : public:
    1337                 :       46844 :   c_omp_address_inspector (location_t loc, tree t)
    1338                 :       46844 :     : loc (loc), root_term (NULL_TREE), indirections (false),
    1339                 :       46844 :       map_supported (-1), orig (t)
    1340                 :             :     {
    1341                 :             :     }
    1342                 :             : 
    1343                 :       35364 :   ~c_omp_address_inspector ()
    1344                 :             :     {
    1345                 :       11480 :     }
    1346                 :             : 
    1347                 :       45766 :   virtual bool processing_template_decl_p ()
    1348                 :             :     {
    1349                 :       45766 :       return false;
    1350                 :             :     }
    1351                 :             : 
    1352                 :           0 :   virtual void emit_unmappable_type_notes (tree)
    1353                 :             :     {
    1354                 :           0 :     }
    1355                 :             : 
    1356                 :           0 :   virtual tree convert_from_reference (tree)
    1357                 :             :     {
    1358                 :           0 :       gcc_unreachable ();
    1359                 :             :     }
    1360                 :             : 
    1361                 :          19 :   virtual tree build_array_ref (location_t loc, tree arr, tree idx)
    1362                 :             :     {
    1363                 :          19 :       tree eltype = TREE_TYPE (TREE_TYPE (arr));
    1364                 :          19 :       return build4_loc (loc, ARRAY_REF, eltype, arr, idx, NULL_TREE,
    1365                 :          19 :                          NULL_TREE);
    1366                 :             :     }
    1367                 :             : 
    1368                 :             :   virtual bool check_clause (tree);
    1369                 :             :   tree get_root_term (bool);
    1370                 :             : 
    1371                 :             :   tree unconverted_ref_origin ();
    1372                 :             :   bool component_access_p ();
    1373                 :             : 
    1374                 :             :   bool map_supported_p ();
    1375                 :             : 
    1376                 :             :   tree get_origin (tree);
    1377                 :             :   tree maybe_unconvert_ref (tree);
    1378                 :             : 
    1379                 :             :   bool maybe_zero_length_array_section (tree);
    1380                 :             : 
    1381                 :             :   tree expand_array_base (tree, vec<omp_addr_token *> &, tree, unsigned *,
    1382                 :             :                           c_omp_region_type);
    1383                 :             :   tree expand_component_selector (tree, vec<omp_addr_token *> &, tree,
    1384                 :             :                                   unsigned *, c_omp_region_type);
    1385                 :             :   tree expand_map_clause (tree, tree, vec<omp_addr_token *> &,
    1386                 :             :                           c_omp_region_type);
    1387                 :             : };
    1388                 :             : 
    1389                 :             : enum c_omp_directive_kind {
    1390                 :             :   C_OMP_DIR_STANDALONE,
    1391                 :             :   C_OMP_DIR_CONSTRUCT,
    1392                 :             :   C_OMP_DIR_DECLARATIVE,
    1393                 :             :   C_OMP_DIR_UTILITY,
    1394                 :             :   C_OMP_DIR_INFORMATIONAL
    1395                 :             : };
    1396                 :             : 
    1397                 :             : struct c_omp_directive {
    1398                 :             :   const char *first, *second, *third;
    1399                 :             :   unsigned int id;
    1400                 :             :   enum c_omp_directive_kind kind;
    1401                 :             :   bool simd;
    1402                 :             : };
    1403                 :             : 
    1404                 :             : extern const struct c_omp_directive c_omp_directives[];
    1405                 :             : extern const struct c_omp_directive *c_omp_categorize_directive (const char *,
    1406                 :             :                                                                  const char *,
    1407                 :             :                                                                  const char *);
    1408                 :             : 
    1409                 :             : /* Return next tree in the chain for chain_next walking of tree nodes.  */
    1410                 :             : inline tree
    1411                 : 70270875354 : c_tree_chain_next (tree t)
    1412                 :             : {
    1413                 :             :   /* TREE_CHAIN of a type is TYPE_STUB_DECL, which is different
    1414                 :             :      kind of object, never a long chain of nodes.  Prefer
    1415                 :             :      TYPE_NEXT_VARIANT for types.  */
    1416                 : 70270875354 :   if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPE_COMMON))
    1417                 :  8437026620 :     return TYPE_NEXT_VARIANT (t);
    1418                 :             :   /* Otherwise, if there is TREE_CHAIN, return it.  */
    1419                 : 61833848734 :   if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_COMMON))
    1420                 : 38973748954 :     return TREE_CHAIN (t);
    1421                 :             :   return NULL;
    1422                 :             : }
    1423                 :             : 
    1424                 :             : /* Return the hardbool attribute associated with TYPE, if there is one, provided
    1425                 :             :    that TYPE looks like an enumeral type that might have been set up by
    1426                 :             :    handle_hardbool_attribute.  Return NULL otherwise.
    1427                 :             : 
    1428                 :             :    If FALSE_VALUE or TRUE_VALUE are non-NULL and TYPE is a hardened boolean
    1429                 :             :    type, store the corresponding representation values.  */
    1430                 :             : static inline tree
    1431                 :   474580220 : c_hardbool_type_attr (tree type,
    1432                 :             :                       tree *false_value = NULL, tree *true_value = NULL)
    1433                 :             : {
    1434                 :   474580220 :   if (TREE_CODE (type) != ENUMERAL_TYPE
    1435                 :   474580220 :       || TYPE_LANG_SPECIFIC (type))
    1436                 :             :     return NULL_TREE;
    1437                 :             : 
    1438                 :       34442 :   return c_hardbool_type_attr_1 (type, false_value, true_value);
    1439                 :             : }
    1440                 :             : 
    1441                 :             : /* Mask used by tm_stmt_attr.  */
    1442                 :             : #define TM_STMT_ATTR_OUTER      2
    1443                 :             : #define TM_STMT_ATTR_ATOMIC     4
    1444                 :             : #define TM_STMT_ATTR_RELAXED    8
    1445                 :             : 
    1446                 :             : /* Mask used by tm_attr_to_mask and tm_mask_to_attr.  Note that these
    1447                 :             :    are ordered specifically such that more restrictive attributes are
    1448                 :             :    at lower bit positions.  This fact is known by the C++ tm attribute
    1449                 :             :    inheritance code such that least bit extraction (mask & -mask) results
    1450                 :             :    in the most restrictive attribute.  */
    1451                 :             : #define TM_ATTR_SAFE                    1
    1452                 :             : #define TM_ATTR_CALLABLE                2
    1453                 :             : #define TM_ATTR_PURE                    4
    1454                 :             : #define TM_ATTR_IRREVOCABLE             8
    1455                 :             : #define TM_ATTR_MAY_CANCEL_OUTER        16
    1456                 :             : 
    1457                 :             : /* A suffix-identifier value doublet that represents user-defined literals
    1458                 :             :    for C++-0x.  */
    1459                 :             : enum overflow_type {
    1460                 :             :   OT_UNDERFLOW = -1,
    1461                 :             :   OT_NONE,
    1462                 :             :   OT_OVERFLOW
    1463                 :             : };
    1464                 :             : 
    1465                 :             : struct GTY(()) tree_userdef_literal {
    1466                 :             :   struct tree_base base;
    1467                 :             :   tree suffix_id;
    1468                 :             :   tree value;
    1469                 :             :   tree num_string;
    1470                 :             :   enum overflow_type overflow;
    1471                 :             : };
    1472                 :             : 
    1473                 :             : #define USERDEF_LITERAL_SUFFIX_ID(NODE) \
    1474                 :             :   (((struct tree_userdef_literal *)USERDEF_LITERAL_CHECK (NODE))->suffix_id)
    1475                 :             : 
    1476                 :             : #define USERDEF_LITERAL_VALUE(NODE) \
    1477                 :             :   (((struct tree_userdef_literal *)USERDEF_LITERAL_CHECK (NODE))->value)
    1478                 :             : 
    1479                 :             : #define USERDEF_LITERAL_OVERFLOW(NODE) \
    1480                 :             :   (((struct tree_userdef_literal *)USERDEF_LITERAL_CHECK (NODE))->overflow)
    1481                 :             : 
    1482                 :             : #define USERDEF_LITERAL_NUM_STRING(NODE) \
    1483                 :             :   (((struct tree_userdef_literal *)USERDEF_LITERAL_CHECK (NODE))->num_string)
    1484                 :             : 
    1485                 :             : #define USERDEF_LITERAL_TYPE(NODE) \
    1486                 :             :   (TREE_TYPE (USERDEF_LITERAL_VALUE (NODE)))
    1487                 :             : 
    1488                 :             : extern tree build_userdef_literal (tree suffix_id, tree value,
    1489                 :             :                                    enum overflow_type overflow,
    1490                 :             :                                    tree num_string);
    1491                 :             : 
    1492                 :             : 
    1493                 :             : /* WHILE_STMT accessors. These give access to the condition of the
    1494                 :             :    while statement and the body of the while statement, respectively.  */
    1495                 :             : #define WHILE_COND(NODE)        TREE_OPERAND (WHILE_STMT_CHECK (NODE), 0)
    1496                 :             : #define WHILE_BODY(NODE)        TREE_OPERAND (WHILE_STMT_CHECK (NODE), 1)
    1497                 :             : 
    1498                 :             : /* DO_STMT accessors. These give access to the condition of the do
    1499                 :             :    statement and the body of the do statement, respectively.  */
    1500                 :             : #define DO_COND(NODE)           TREE_OPERAND (DO_STMT_CHECK (NODE), 0)
    1501                 :             : #define DO_BODY(NODE)           TREE_OPERAND (DO_STMT_CHECK (NODE), 1)
    1502                 :             : 
    1503                 :             : /* FOR_STMT accessors. These give access to the init statement,
    1504                 :             :    condition, update expression, and body of the for statement,
    1505                 :             :    respectively.  */
    1506                 :             : #define FOR_INIT_STMT(NODE)     TREE_OPERAND (FOR_STMT_CHECK (NODE), 0)
    1507                 :             : #define FOR_COND(NODE)          TREE_OPERAND (FOR_STMT_CHECK (NODE), 1)
    1508                 :             : #define FOR_EXPR(NODE)          TREE_OPERAND (FOR_STMT_CHECK (NODE), 2)
    1509                 :             : #define FOR_BODY(NODE)          TREE_OPERAND (FOR_STMT_CHECK (NODE), 3)
    1510                 :             : #define FOR_SCOPE(NODE)         TREE_OPERAND (FOR_STMT_CHECK (NODE), 4)
    1511                 :             : 
    1512                 :             : #define SWITCH_STMT_COND(NODE)  TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 0)
    1513                 :             : #define SWITCH_STMT_BODY(NODE)  TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 1)
    1514                 :             : #define SWITCH_STMT_TYPE(NODE)  TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 2)
    1515                 :             : #define SWITCH_STMT_SCOPE(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 3)
    1516                 :             : /* True if there are case labels for all possible values of switch cond, either
    1517                 :             :    because there is a default: case label or because the case label ranges cover
    1518                 :             :    all values.  */
    1519                 :             : #define SWITCH_STMT_ALL_CASES_P(NODE) \
    1520                 :             :   TREE_LANG_FLAG_0 (SWITCH_STMT_CHECK (NODE))
    1521                 :             : /* True if the body of a switch stmt contains no BREAK_STMTs.  */
    1522                 :             : #define SWITCH_STMT_NO_BREAK_P(NODE) \
    1523                 :             :   TREE_LANG_FLAG_2 (SWITCH_STMT_CHECK (NODE))
    1524                 :             : 
    1525                 :             : 
    1526                 :             : /* Nonzero if NODE is the target for genericization of 'break' stmts.  */
    1527                 :             : #define LABEL_DECL_BREAK(NODE) \
    1528                 :             :   DECL_LANG_FLAG_0 (LABEL_DECL_CHECK (NODE))
    1529                 :             : 
    1530                 :             : /* Nonzero if NODE is the target for genericization of 'continue' stmts.  */
    1531                 :             : #define LABEL_DECL_CONTINUE(NODE) \
    1532                 :             :   DECL_LANG_FLAG_1 (LABEL_DECL_CHECK (NODE))
    1533                 :             : 
    1534                 :             : extern bool convert_vector_to_array_for_subscript (location_t, tree *, tree);
    1535                 :             : 
    1536                 :             : /* Possibe cases of scalar_to_vector conversion.  */
    1537                 :             : enum stv_conv {
    1538                 :             :   stv_error,        /* Error occurred.  */
    1539                 :             :   stv_nothing,      /* Nothing happened.  */
    1540                 :             :   stv_firstarg,     /* First argument must be expanded.  */
    1541                 :             :   stv_secondarg     /* Second argument must be expanded.  */
    1542                 :             : };
    1543                 :             : 
    1544                 :             : extern enum stv_conv scalar_to_vector (location_t loc, enum tree_code code,
    1545                 :             :                                        tree op0, tree op1, bool);
    1546                 :             : 
    1547                 :             : extern tree find_inv_trees (tree *, int *, void *);
    1548                 :             : extern tree replace_inv_trees (tree *, int *, void *);
    1549                 :             : 
    1550                 :             : extern bool reject_gcc_builtin (const_tree, location_t = UNKNOWN_LOCATION);
    1551                 :             : extern bool valid_array_size_p (location_t, const_tree, tree, bool = true);
    1552                 :             : extern void invalid_array_size_error (location_t, cst_size_error,
    1553                 :             :                                       const_tree, const_tree);
    1554                 :             : 
    1555                 :             : /* In c-warn.cc.  */
    1556                 :             : extern void constant_expression_warning (tree);
    1557                 :             : extern void constant_expression_error (tree);
    1558                 :             : extern void overflow_warning (location_t, tree, tree = NULL_TREE);
    1559                 :             : extern void warn_logical_operator (location_t, enum tree_code, tree,
    1560                 :             :                                    enum tree_code, tree, enum tree_code, tree);
    1561                 :             : extern void warn_tautological_cmp (const op_location_t &, enum tree_code,
    1562                 :             :                                    tree, tree);
    1563                 :             : extern void warn_logical_not_parentheses (location_t, enum tree_code, tree,
    1564                 :             :                                           tree);
    1565                 :             : extern bool warn_if_unused_value (const_tree, location_t, bool = false);
    1566                 :             : extern bool strict_aliasing_warning (location_t, tree, tree);
    1567                 :             : extern void sizeof_pointer_memaccess_warning (location_t *, tree,
    1568                 :             :                                               vec<tree, va_gc> *, tree *,
    1569                 :             :                                               bool (*) (tree, tree));
    1570                 :             : extern void check_main_parameter_types (tree decl);
    1571                 :             : extern void warnings_for_convert_and_check (location_t, tree, tree, tree);
    1572                 :             : extern void c_do_switch_warnings (splay_tree, location_t, tree, tree, bool);
    1573                 :             : extern void warn_for_omitted_condop (location_t, tree);
    1574                 :             : extern bool warn_for_restrict (unsigned, tree *, unsigned);
    1575                 :             : extern void warn_for_address_of_packed_member (tree, tree);
    1576                 :             : extern void warn_parm_array_mismatch (location_t, tree, tree);
    1577                 :             : extern void maybe_warn_sizeof_array_div (location_t, tree, tree, tree, tree);
    1578                 :             : extern void do_warn_array_compare (location_t, tree_code, tree, tree);
    1579                 :             : 
    1580                 :             : /* Places where an lvalue, or modifiable lvalue, may be required.
    1581                 :             :    Used to select diagnostic messages in lvalue_error and
    1582                 :             :    readonly_error.  */
    1583                 :             : enum lvalue_use {
    1584                 :             :   lv_assign,
    1585                 :             :   lv_increment,
    1586                 :             :   lv_decrement,
    1587                 :             :   lv_addressof,
    1588                 :             :   lv_asm
    1589                 :             : };
    1590                 :             : 
    1591                 :             : extern void lvalue_error (location_t, enum lvalue_use);
    1592                 :             : extern void invalid_indirection_error (location_t, tree, ref_operator);
    1593                 :             : extern void readonly_error (location_t, tree, enum lvalue_use);
    1594                 :             : extern void warn_array_subscript_with_type_char (location_t, tree);
    1595                 :             : extern void warn_about_parentheses (location_t,
    1596                 :             :                                     enum tree_code,
    1597                 :             :                                     enum tree_code, tree,
    1598                 :             :                                     enum tree_code, tree);
    1599                 :             : extern void warn_for_unused_label (tree label);
    1600                 :             : extern void warn_for_div_by_zero (location_t, tree divisor);
    1601                 :             : extern void warn_for_memset (location_t, tree, tree, int);
    1602                 :             : extern void warn_for_calloc (location_t *, tree, vec<tree, va_gc> *,
    1603                 :             :                              tree *, tree);
    1604                 :             : extern void warn_for_alloc_size (location_t, tree, tree, tree);
    1605                 :             : extern void warn_for_sign_compare (location_t,
    1606                 :             :                                    tree orig_op0, tree orig_op1,
    1607                 :             :                                    tree op0, tree op1,
    1608                 :             :                                    tree result_type,
    1609                 :             :                                    enum tree_code resultcode);
    1610                 :             : extern void do_warn_double_promotion (tree, tree, tree, const char *,
    1611                 :             :                                       location_t);
    1612                 :             : extern void do_warn_unused_parameter (tree);
    1613                 :             : extern void record_locally_defined_typedef (tree);
    1614                 :             : extern void maybe_record_typedef_use (tree);
    1615                 :             : extern void maybe_warn_unused_local_typedefs (void);
    1616                 :             : extern void maybe_warn_bool_compare (location_t, enum tree_code, tree, tree);
    1617                 :             : extern bool maybe_warn_shift_overflow (location_t, tree, tree);
    1618                 :             : extern void warn_duplicated_cond_add_or_warn (location_t, tree, vec<tree> **);
    1619                 :             : extern bool diagnose_mismatched_attributes (tree, tree);
    1620                 :             : extern tree do_warn_duplicated_branches_r (tree *, int *, void *);
    1621                 :             : extern void warn_for_multistatement_macros (location_t, location_t,
    1622                 :             :                                             location_t, enum rid);
    1623                 :             : 
    1624                 :             : extern void check_for_xor_used_as_pow (location_t lhs_loc, tree lhs_val,
    1625                 :             :                                        location_t operator_loc,
    1626                 :             :                                        location_t rhs_loc, tree rhs_val);
    1627                 :             : 
    1628                 :             : /* In c-attribs.cc.  */
    1629                 :             : extern bool attribute_takes_identifier_p (const_tree);
    1630                 :             : extern tree handle_deprecated_attribute (tree *, tree, tree, int, bool *);
    1631                 :             : extern tree handle_unused_attribute (tree *, tree, tree, int, bool *);
    1632                 :             : extern tree handle_fallthrough_attribute (tree *, tree, tree, int, bool *);
    1633                 :             : extern int parse_tm_stmt_attr (tree, int);
    1634                 :             : extern int tm_attr_to_mask (tree);
    1635                 :             : extern tree tm_mask_to_attr (int);
    1636                 :             : extern tree find_tm_attribute (tree);
    1637                 :             : extern const struct attribute_spec::exclusions attr_cold_hot_exclusions[];
    1638                 :             : extern const struct attribute_spec::exclusions attr_noreturn_exclusions[];
    1639                 :             : extern tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
    1640                 :             : extern bool has_attribute (location_t, tree, tree, tree (*)(tree));
    1641                 :             : extern tree build_attr_access_from_parms (tree, bool);
    1642                 :             : 
    1643                 :             : /* In c-format.cc.  */
    1644                 :             : extern bool valid_format_string_type_p (tree);
    1645                 :             : 
    1646                 :             : /* A bitmap of flags to positional_argument.  */
    1647                 :             : enum posargflags {
    1648                 :             :   /* Consider positional attribute argument value zero valid.  */
    1649                 :             :   POSARG_ZERO = 1,
    1650                 :             :   /* Consider positional attribute argument value valid if it refers
    1651                 :             :      to the ellipsis (i.e., beyond the last typed argument).  */
    1652                 :             :   POSARG_ELLIPSIS = 2
    1653                 :             : };
    1654                 :             : 
    1655                 :             : extern tree positional_argument (const_tree, const_tree, tree &, tree_code,
    1656                 :             :                                  int = 0, int = posargflags ());
    1657                 :             : 
    1658                 :             : extern enum flt_eval_method
    1659                 :             : excess_precision_mode_join (enum flt_eval_method, enum flt_eval_method);
    1660                 :             : 
    1661                 :             : extern int c_flt_eval_method (bool ts18661_p);
    1662                 :             : extern void add_no_sanitize_value (tree node, unsigned int flags);
    1663                 :             : 
    1664                 :             : extern void maybe_add_include_fixit (rich_location *, const char *, bool);
    1665                 :             : extern void maybe_suggest_missing_token_insertion (rich_location *richloc,
    1666                 :             :                                                    enum cpp_ttype token_type,
    1667                 :             :                                                    location_t prev_token_loc);
    1668                 :             : extern tree braced_lists_to_strings (tree, tree);
    1669                 :             : 
    1670                 :             : #if CHECKING_P
    1671                 :             : namespace selftest {
    1672                 :             :   /* Declarations for specific families of tests within c-family,
    1673                 :             :      by source file, in alphabetical order.  */
    1674                 :             :   extern void c_diagnostic_cc_tests (void);
    1675                 :             :   extern void c_format_cc_tests (void);
    1676                 :             :   extern void c_indentation_cc_tests (void);
    1677                 :             :   extern void c_opt_problem_cc_tests (void);
    1678                 :             :   extern void c_pretty_print_cc_tests (void);
    1679                 :             :   extern void c_spellcheck_cc_tests (void);
    1680                 :             : 
    1681                 :             :   /* The entrypoint for running all of the above tests.  */
    1682                 :             :   extern void c_family_tests (void);
    1683                 :             : } // namespace selftest
    1684                 :             : #endif /* #if CHECKING_P */
    1685                 :             : 
    1686                 :             : #endif /* ! GCC_C_COMMON_H */
        

Generated by: LCOV version 2.1-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.