c-tree.h revision 1.7
1247738Sbapt/* Definitions for C parsing and type checking. 2247738Sbapt Copyright (C) 1987-2017 Free Software Foundation, Inc. 3247738Sbapt 4247738SbaptThis file is part of GCC. 5247738Sbapt 6247738SbaptGCC is free software; you can redistribute it and/or modify it under 7247738Sbaptthe terms of the GNU General Public License as published by the Free 8247738SbaptSoftware Foundation; either version 3, or (at your option) any later 9247738Sbaptversion. 10247738Sbapt 11247738SbaptGCC is distributed in the hope that it will be useful, but WITHOUT ANY 12247738SbaptWARRANTY; without even the implied warranty of MERCHANTABILITY or 13247738SbaptFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14247738Sbaptfor more details. 15247738Sbapt 16247738SbaptYou should have received a copy of the GNU General Public License 17247738Sbaptalong with GCC; see the file COPYING3. If not see 18247738Sbapt<http://www.gnu.org/licenses/>. */ 19247738Sbapt 20247738Sbapt#ifndef GCC_C_TREE_H 21247738Sbapt#define GCC_C_TREE_H 22247738Sbapt 23247738Sbapt#include "c-family/c-common.h" 24247738Sbapt#include "diagnostic.h" 25247738Sbapt 26247738Sbapt/* struct lang_identifier is private to c-decl.c, but langhooks.c needs to 27247738Sbapt know how big it is. This is sanity-checked in c-decl.c. */ 28247738Sbapt#define C_SIZEOF_STRUCT_LANG_IDENTIFIER \ 29247738Sbapt (sizeof (struct c_common_identifier) + 3 * sizeof (void *)) 30247738Sbapt 31247738Sbapt/* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is read-only. */ 32247738Sbapt#define C_TYPE_FIELDS_READONLY(TYPE) TREE_LANG_FLAG_1 (TYPE) 33247738Sbapt 34247738Sbapt/* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is volatile. */ 35247738Sbapt#define C_TYPE_FIELDS_VOLATILE(TYPE) TREE_LANG_FLAG_2 (TYPE) 36247738Sbapt 37247738Sbapt/* In a RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE 38247738Sbapt nonzero if the definition of the type has already started. */ 39247738Sbapt#define C_TYPE_BEING_DEFINED(TYPE) TYPE_LANG_FLAG_0 (TYPE) 40247738Sbapt 41247738Sbapt/* In an incomplete RECORD_TYPE or UNION_TYPE, a list of variable 42247738Sbapt declarations whose type would be completed by completing that type. */ 43247738Sbapt#define C_TYPE_INCOMPLETE_VARS(TYPE) TYPE_VFIELD (TYPE) 44247738Sbapt 45247738Sbapt/* In an IDENTIFIER_NODE, nonzero if this identifier is actually a 46247738Sbapt keyword. C_RID_CODE (node) is then the RID_* value of the keyword. */ 47247738Sbapt#define C_IS_RESERVED_WORD(ID) TREE_LANG_FLAG_0 (ID) 48247738Sbapt 49247738Sbapt/* Record whether a type or decl was written with nonconstant size. 50247738Sbapt Note that TYPE_SIZE may have simplified to a constant. */ 51247738Sbapt#define C_TYPE_VARIABLE_SIZE(TYPE) TYPE_LANG_FLAG_1 (TYPE) 52247738Sbapt#define C_DECL_VARIABLE_SIZE(TYPE) DECL_LANG_FLAG_0 (TYPE) 53247738Sbapt 54247738Sbapt/* Record whether a type is defined inside a struct or union type. 55247738Sbapt This is used for -Wc++-compat. */ 56247738Sbapt#define C_TYPE_DEFINED_IN_STRUCT(TYPE) TYPE_LANG_FLAG_2 (TYPE) 57247738Sbapt 58247738Sbapt/* Record whether an "incomplete type" error was given for the type. */ 59247738Sbapt#define C_TYPE_ERROR_REPORTED(TYPE) TYPE_LANG_FLAG_3 (TYPE) 60247738Sbapt 61247738Sbapt/* Record whether a typedef for type `int' was actually `signed int'. */ 62247738Sbapt#define C_TYPEDEF_EXPLICITLY_SIGNED(EXP) DECL_LANG_FLAG_1 (EXP) 63247738Sbapt 64247738Sbapt/* For a FUNCTION_DECL, nonzero if it was defined without an explicit 65247738Sbapt return type. */ 66247738Sbapt#define C_FUNCTION_IMPLICIT_INT(EXP) DECL_LANG_FLAG_1 (EXP) 67247738Sbapt 68247738Sbapt/* For a FUNCTION_DECL, nonzero if it was an implicit declaration. */ 69247738Sbapt#define C_DECL_IMPLICIT(EXP) DECL_LANG_FLAG_2 (EXP) 70247738Sbapt 71247738Sbapt/* For a PARM_DECL, nonzero if it was declared as an array. */ 72247738Sbapt#define C_ARRAY_PARAMETER(NODE) DECL_LANG_FLAG_0 (NODE) 73247738Sbapt 74247738Sbapt/* For FUNCTION_DECLs, evaluates true if the decl is built-in but has 75247738Sbapt been declared. */ 76247738Sbapt#define C_DECL_DECLARED_BUILTIN(EXP) \ 77247738Sbapt DECL_LANG_FLAG_3 (FUNCTION_DECL_CHECK (EXP)) 78247738Sbapt 79247738Sbapt/* For FUNCTION_DECLs, evaluates true if the decl is built-in, has a 80247738Sbapt built-in prototype and does not have a non-built-in prototype. */ 81247738Sbapt#define C_DECL_BUILTIN_PROTOTYPE(EXP) \ 82247738Sbapt DECL_LANG_FLAG_6 (FUNCTION_DECL_CHECK (EXP)) 83247738Sbapt 84247738Sbapt/* Record whether a decl was declared register. This is strictly a 85247738Sbapt front-end flag, whereas DECL_REGISTER is used for code generation; 86247738Sbapt they may differ for structures with volatile fields. */ 87247738Sbapt#define C_DECL_REGISTER(EXP) DECL_LANG_FLAG_4 (EXP) 88247738Sbapt 89247738Sbapt/* Record whether a decl was used in an expression anywhere except an 90247738Sbapt unevaluated operand of sizeof / typeof / alignof. This is only 91247738Sbapt used for functions declared static but not defined, though outside 92247738Sbapt sizeof and typeof it is set for other function decls as well. */ 93247738Sbapt#define C_DECL_USED(EXP) DECL_LANG_FLAG_5 (FUNCTION_DECL_CHECK (EXP)) 94247738Sbapt 95247738Sbapt/* Record whether a variable has been declared threadprivate by 96247738Sbapt #pragma omp threadprivate. */ 97247738Sbapt#define C_DECL_THREADPRIVATE_P(DECL) DECL_LANG_FLAG_3 (VAR_DECL_CHECK (DECL)) 98247738Sbapt 99247738Sbapt/* Nonzero for a decl which either doesn't exist or isn't a prototype. 100247738Sbapt N.B. Could be simplified if all built-in decls had complete prototypes 101247738Sbapt (but this is presently difficult because some of them need FILE*). */ 102247738Sbapt#define C_DECL_ISNT_PROTOTYPE(EXP) \ 103247738Sbapt (EXP == 0 \ 104247738Sbapt || (!prototype_p (TREE_TYPE (EXP)) \ 105247738Sbapt && !DECL_BUILT_IN (EXP))) 106247738Sbapt 107247738Sbapt/* For FUNCTION_TYPE, a hidden list of types of arguments. The same as 108247738Sbapt TYPE_ARG_TYPES for functions with prototypes, but created for functions 109247738Sbapt without prototypes. */ 110247738Sbapt#define TYPE_ACTUAL_ARG_TYPES(NODE) TYPE_LANG_SLOT_1 (NODE) 111247738Sbapt 112247738Sbapt/* For a CONSTRUCTOR, whether some initializer contains a 113247738Sbapt subexpression meaning it is not a constant expression. */ 114247738Sbapt#define CONSTRUCTOR_NON_CONST(EXPR) TREE_LANG_FLAG_1 (CONSTRUCTOR_CHECK (EXPR)) 115247738Sbapt 116247738Sbapt/* Record parser information about an expression that is irrelevant 117247738Sbapt for code generation alongside a tree representing its value. */ 118247738Sbaptstruct c_expr 119247738Sbapt{ 120247738Sbapt /* The value of the expression. */ 121247738Sbapt tree value; 122247738Sbapt /* Record the original unary/binary operator of an expression, which may 123247738Sbapt have been changed by fold, STRING_CST for unparenthesized string 124247738Sbapt constants, C_MAYBE_CONST_EXPR for __builtin_constant_p calls 125247738Sbapt (even if parenthesized), for subexpressions, and for non-constant 126247738Sbapt initializers, or ERROR_MARK for other expressions (including 127247738Sbapt parenthesized expressions). */ 128247738Sbapt enum tree_code original_code; 129247738Sbapt /* If not NULL, the original type of an expression. This will 130247738Sbapt differ from the type of the value field for an enum constant. 131247738Sbapt The type of an enum constant is a plain integer type, but this 132247738Sbapt field will be the enum type. */ 133247738Sbapt tree original_type; 134247738Sbapt 135247738Sbapt /* The source range of this expression. This is redundant 136247738Sbapt for node values that have locations, but not all node kinds 137247738Sbapt have locations (e.g. constants, and references to params, locals, 138247738Sbapt etc), so we stash a copy here. */ 139247738Sbapt source_range src_range; 140247738Sbapt 141247738Sbapt /* Access to the first and last locations within the source spelling 142247738Sbapt of this expression. */ 143247738Sbapt location_t get_start () const { return src_range.m_start; } 144247738Sbapt location_t get_finish () const { return src_range.m_finish; } 145247738Sbapt 146247738Sbapt /* Set the value to error_mark_node whilst ensuring that src_range 147247738Sbapt is initialized. */ 148247738Sbapt void set_error () 149247738Sbapt { 150247738Sbapt value = error_mark_node; 151247738Sbapt src_range.m_start = UNKNOWN_LOCATION; 152247738Sbapt src_range.m_finish = UNKNOWN_LOCATION; 153247738Sbapt } 154247738Sbapt}; 155247738Sbapt 156247738Sbapt/* Type alias for struct c_expr. This allows to use the structure 157247738Sbapt inside the VEC types. */ 158247738Sbapttypedef struct c_expr c_expr_t; 159247738Sbapt 160247738Sbapt/* A kind of type specifier. Note that this information is currently 161247738Sbapt only used to distinguish tag definitions, tag references and typeof 162247738Sbapt uses. */ 163247738Sbaptenum c_typespec_kind { 164247738Sbapt /* No typespec. This appears only in struct c_declspec. */ 165247738Sbapt ctsk_none, 166247738Sbapt /* A reserved keyword type specifier. */ 167247738Sbapt ctsk_resword, 168247738Sbapt /* A reference to a tag, previously declared, such as "struct foo". 169247738Sbapt This includes where the previous declaration was as a different 170247738Sbapt kind of tag, in which case this is only valid if shadowing that 171247738Sbapt tag in an inner scope. */ 172247738Sbapt ctsk_tagref, 173247738Sbapt /* A reference to a tag, not previously declared in a visible 174247738Sbapt scope. */ 175247738Sbapt ctsk_tagfirstref, 176247738Sbapt /* A definition of a tag such as "struct foo { int a; }". */ 177247738Sbapt ctsk_tagdef, 178247738Sbapt /* A typedef name. */ 179247738Sbapt ctsk_typedef, 180247738Sbapt /* An ObjC-specific kind of type specifier. */ 181247738Sbapt ctsk_objc, 182247738Sbapt /* A typeof specifier, or _Atomic ( type-name ). */ 183247738Sbapt ctsk_typeof 184247738Sbapt}; 185247738Sbapt 186247738Sbapt/* A type specifier: this structure is created in the parser and 187247738Sbapt passed to declspecs_add_type only. */ 188247738Sbaptstruct c_typespec { 189247738Sbapt /* What kind of type specifier this is. */ 190247738Sbapt enum c_typespec_kind kind; 191247738Sbapt /* Whether the expression has operands suitable for use in constant 192247738Sbapt expressions. */ 193247738Sbapt bool expr_const_operands; 194247738Sbapt /* The specifier itself. */ 195247738Sbapt tree spec; 196247738Sbapt /* An expression to be evaluated before the type specifier, in the 197247738Sbapt case of typeof specifiers, or NULL otherwise or if no such 198247738Sbapt expression is required for a particular typeof specifier. In 199247738Sbapt particular, when typeof is applied to an expression of variably 200247738Sbapt modified type, that expression must be evaluated in order to 201247738Sbapt determine array sizes that form part of the type, but the 202247738Sbapt expression itself (as opposed to the array sizes) forms no part 203247738Sbapt of the type and so needs to be recorded separately. */ 204247738Sbapt tree expr; 205247738Sbapt}; 206247738Sbapt 207247738Sbapt/* A storage class specifier. */ 208247738Sbaptenum c_storage_class { 209247738Sbapt csc_none, 210247738Sbapt csc_auto, 211247738Sbapt csc_extern, 212247738Sbapt csc_register, 213247738Sbapt csc_static, 214247738Sbapt csc_typedef 215247738Sbapt}; 216247738Sbapt 217247738Sbapt/* A type specifier keyword "void", "_Bool", "char", "int", "float", 218247738Sbapt "double", "_Decimal32", "_Decimal64", "_Decimal128", "_Fract", "_Accum", 219247738Sbapt or none of these. */ 220247738Sbaptenum c_typespec_keyword { 221247738Sbapt cts_none, 222247738Sbapt cts_void, 223247738Sbapt cts_bool, 224247738Sbapt cts_char, 225247738Sbapt cts_int, 226247738Sbapt cts_float, 227247738Sbapt cts_int_n, 228247738Sbapt cts_double, 229247738Sbapt cts_dfloat32, 230247738Sbapt cts_dfloat64, 231247738Sbapt cts_dfloat128, 232247738Sbapt cts_floatn_nx, 233247738Sbapt cts_fract, 234247738Sbapt cts_accum, 235247738Sbapt cts_auto_type 236247738Sbapt}; 237247738Sbapt 238247738Sbapt/* This enum lists all the possible declarator specifiers, storage 239247738Sbapt class or attribute that a user can write. There is at least one 240247738Sbapt enumerator per possible declarator specifier in the struct 241247738Sbapt c_declspecs below. 242247738Sbapt 243247738Sbapt It is used to index the array of declspec locations in struct 244247738Sbapt c_declspecs. */ 245247738Sbaptenum c_declspec_word { 246247738Sbapt cdw_typespec /* A catch-all for a typespec. */, 247247738Sbapt cdw_storage_class /* A catch-all for a storage class */, 248247738Sbapt cdw_attributes, 249247738Sbapt cdw_typedef, 250247738Sbapt cdw_explicit_signed, 251247738Sbapt cdw_deprecated, 252247738Sbapt cdw_default_int, 253247738Sbapt cdw_long, 254247738Sbapt cdw_long_long, 255247738Sbapt cdw_short, 256247738Sbapt cdw_signed, 257247738Sbapt cdw_unsigned, 258247738Sbapt cdw_complex, 259247738Sbapt cdw_inline, 260247738Sbapt cdw_noreturn, 261247738Sbapt cdw_thread, 262247738Sbapt cdw_const, 263247738Sbapt cdw_volatile, 264247738Sbapt cdw_restrict, 265247738Sbapt cdw_atomic, 266247738Sbapt cdw_saturating, 267247738Sbapt cdw_alignas, 268247738Sbapt cdw_address_space, 269247738Sbapt cdw_gimple, 270247738Sbapt cdw_rtl, 271247738Sbapt cdw_number_of_elements /* This one must always be the last 272247738Sbapt enumerator. */ 273247738Sbapt}; 274247738Sbapt 275247738Sbapt/* A sequence of declaration specifiers in C. When a new declaration 276247738Sbapt specifier is added, please update the enum c_declspec_word above 277247738Sbapt accordingly. */ 278247738Sbaptstruct c_declspecs { 279247738Sbapt source_location locations[cdw_number_of_elements]; 280247738Sbapt /* The type specified, if a single type specifier such as a struct, 281247738Sbapt union or enum specifier, typedef name or typeof specifies the 282247738Sbapt whole type, or NULL_TREE if none or a keyword such as "void" or 283247738Sbapt "char" is used. Does not include qualifiers. */ 284247738Sbapt tree type; 285247738Sbapt /* Any expression to be evaluated before the type, from a typeof 286247738Sbapt specifier. */ 287247738Sbapt tree expr; 288247738Sbapt /* The attributes from a typedef decl. */ 289247738Sbapt tree decl_attr; 290247738Sbapt /* When parsing, the attributes. Outside the parser, this will be 291247738Sbapt NULL; attributes (possibly from multiple lists) will be passed 292247738Sbapt separately. */ 293247738Sbapt tree attrs; 294247738Sbapt /* The pass to start compiling a __GIMPLE or __RTL function with. */ 295247738Sbapt char *gimple_or_rtl_pass; 296247738Sbapt /* The base-2 log of the greatest alignment required by an _Alignas 297247738Sbapt specifier, in bytes, or -1 if no such specifiers with nonzero 298247738Sbapt alignment. */ 299247738Sbapt int align_log; 300247738Sbapt /* For the __intN declspec, this stores the index into the int_n_* arrays. */ 301247738Sbapt int int_n_idx; 302247738Sbapt /* For the _FloatN and _FloatNx declspec, this stores the index into 303247738Sbapt the floatn_nx_types array. */ 304247738Sbapt int floatn_nx_idx; 305247738Sbapt /* The storage class specifier, or csc_none if none. */ 306247738Sbapt enum c_storage_class storage_class; 307247738Sbapt /* Any type specifier keyword used such as "int", not reflecting 308247738Sbapt modifiers such as "short", or cts_none if none. */ 309247738Sbapt ENUM_BITFIELD (c_typespec_keyword) typespec_word : 8; 310247738Sbapt /* The kind of type specifier if one has been seen, ctsk_none 311247738Sbapt otherwise. */ 312247738Sbapt ENUM_BITFIELD (c_typespec_kind) typespec_kind : 3; 313247738Sbapt /* Whether any expressions in typeof specifiers may appear in 314247738Sbapt constant expressions. */ 315247738Sbapt BOOL_BITFIELD expr_const_operands : 1; 316247738Sbapt /* Whether any declaration specifiers have been seen at all. */ 317247738Sbapt BOOL_BITFIELD declspecs_seen_p : 1; 318247738Sbapt /* Whether something other than a storage class specifier or 319247738Sbapt attribute has been seen. This is used to warn for the 320247738Sbapt obsolescent usage of storage class specifiers other than at the 321247738Sbapt start of the list. (Doing this properly would require function 322247738Sbapt specifiers to be handled separately from storage class 323247738Sbapt specifiers.) */ 324247738Sbapt BOOL_BITFIELD non_sc_seen_p : 1; 325247738Sbapt /* Whether the type is specified by a typedef or typeof name. */ 326247738Sbapt BOOL_BITFIELD typedef_p : 1; 327247738Sbapt /* Whether the type is explicitly "signed" or specified by a typedef 328247738Sbapt whose type is explicitly "signed". */ 329247738Sbapt BOOL_BITFIELD explicit_signed_p : 1; 330247738Sbapt /* Whether the specifiers include a deprecated typedef. */ 331247738Sbapt BOOL_BITFIELD deprecated_p : 1; 332247738Sbapt /* Whether the type defaulted to "int" because there were no type 333247738Sbapt specifiers. */ 334247738Sbapt BOOL_BITFIELD default_int_p : 1; 335247738Sbapt /* Whether "long" was specified. */ 336247738Sbapt BOOL_BITFIELD long_p : 1; 337247738Sbapt /* Whether "long" was specified more than once. */ 338247738Sbapt BOOL_BITFIELD long_long_p : 1; 339247738Sbapt /* Whether "short" was specified. */ 340247738Sbapt BOOL_BITFIELD short_p : 1; 341247738Sbapt /* Whether "signed" was specified. */ 342247738Sbapt BOOL_BITFIELD signed_p : 1; 343247738Sbapt /* Whether "unsigned" was specified. */ 344247738Sbapt BOOL_BITFIELD unsigned_p : 1; 345247738Sbapt /* Whether "complex" was specified. */ 346247738Sbapt BOOL_BITFIELD complex_p : 1; 347247738Sbapt /* Whether "inline" was specified. */ 348247738Sbapt BOOL_BITFIELD inline_p : 1; 349247738Sbapt /* Whether "_Noreturn" was speciied. */ 350247738Sbapt BOOL_BITFIELD noreturn_p : 1; 351247738Sbapt /* Whether "__thread" or "_Thread_local" was specified. */ 352247738Sbapt BOOL_BITFIELD thread_p : 1; 353247738Sbapt /* Whether "__thread" rather than "_Thread_local" was specified. */ 354247738Sbapt BOOL_BITFIELD thread_gnu_p : 1; 355247738Sbapt /* Whether "const" was specified. */ 356247738Sbapt BOOL_BITFIELD const_p : 1; 357247738Sbapt /* Whether "volatile" was specified. */ 358247738Sbapt BOOL_BITFIELD volatile_p : 1; 359247738Sbapt /* Whether "restrict" was specified. */ 360247738Sbapt BOOL_BITFIELD restrict_p : 1; 361247738Sbapt /* Whether "_Atomic" was specified. */ 362247738Sbapt BOOL_BITFIELD atomic_p : 1; 363247738Sbapt /* Whether "_Sat" was specified. */ 364247738Sbapt BOOL_BITFIELD saturating_p : 1; 365247738Sbapt /* Whether any alignment specifier (even with zero alignment) was 366247738Sbapt specified. */ 367247738Sbapt BOOL_BITFIELD alignas_p : 1; 368247738Sbapt /* Whether any __GIMPLE specifier was specified. */ 369247738Sbapt BOOL_BITFIELD gimple_p : 1; 370247738Sbapt /* Whether any __RTL specifier was specified. */ 371247738Sbapt BOOL_BITFIELD rtl_p : 1; 372247738Sbapt /* The address space that the declaration belongs to. */ 373247738Sbapt addr_space_t address_space; 374247738Sbapt}; 375247738Sbapt 376247738Sbapt/* The various kinds of declarators in C. */ 377enum c_declarator_kind { 378 /* An identifier. */ 379 cdk_id, 380 /* A function. */ 381 cdk_function, 382 /* An array. */ 383 cdk_array, 384 /* A pointer. */ 385 cdk_pointer, 386 /* Parenthesized declarator with nested attributes. */ 387 cdk_attrs 388}; 389 390struct c_arg_tag { 391 /* The argument name. */ 392 tree id; 393 /* The type of the argument. */ 394 tree type; 395}; 396 397 398/* Information about the parameters in a function declarator. */ 399struct c_arg_info { 400 /* A list of parameter decls. */ 401 tree parms; 402 /* A list of structure, union and enum tags defined. */ 403 vec<c_arg_tag, va_gc> *tags; 404 /* A list of argument types to go in the FUNCTION_TYPE. */ 405 tree types; 406 /* A list of non-parameter decls (notably enumeration constants) 407 defined with the parameters. */ 408 tree others; 409 /* A compound expression of VLA sizes from the parameters, or NULL. 410 In a function definition, these are used to ensure that 411 side-effects in sizes of arrays converted to pointers (such as a 412 parameter int i[n++]) take place; otherwise, they are 413 ignored. */ 414 tree pending_sizes; 415 /* True when these arguments had [*]. */ 416 BOOL_BITFIELD had_vla_unspec : 1; 417}; 418 419/* A declarator. */ 420struct c_declarator { 421 /* The kind of declarator. */ 422 enum c_declarator_kind kind; 423 location_t id_loc; /* Currently only set for cdk_id, cdk_array. */ 424 /* Except for cdk_id, the contained declarator. For cdk_id, NULL. */ 425 struct c_declarator *declarator; 426 union { 427 /* For identifiers, an IDENTIFIER_NODE or NULL_TREE if an abstract 428 declarator. */ 429 tree id; 430 /* For functions. */ 431 struct c_arg_info *arg_info; 432 /* For arrays. */ 433 struct { 434 /* The array dimension, or NULL for [] and [*]. */ 435 tree dimen; 436 /* The qualifiers inside []. */ 437 int quals; 438 /* The attributes (currently ignored) inside []. */ 439 tree attrs; 440 /* Whether [static] was used. */ 441 BOOL_BITFIELD static_p : 1; 442 /* Whether [*] was used. */ 443 BOOL_BITFIELD vla_unspec_p : 1; 444 } array; 445 /* For pointers, the qualifiers on the pointer type. */ 446 int pointer_quals; 447 /* For attributes. */ 448 tree attrs; 449 } u; 450}; 451 452/* A type name. */ 453struct c_type_name { 454 /* The declaration specifiers. */ 455 struct c_declspecs *specs; 456 /* The declarator. */ 457 struct c_declarator *declarator; 458}; 459 460/* A parameter. */ 461struct c_parm { 462 /* The declaration specifiers, minus any prefix attributes. */ 463 struct c_declspecs *specs; 464 /* The attributes. */ 465 tree attrs; 466 /* The declarator. */ 467 struct c_declarator *declarator; 468}; 469 470/* Used when parsing an enum. Initialized by start_enum. */ 471struct c_enum_contents 472{ 473 /* While defining an enum type, this is 1 plus the last enumerator 474 constant value. */ 475 tree enum_next_value; 476 477 /* Nonzero means that there was overflow computing enum_next_value. */ 478 int enum_overflow; 479}; 480 481/* A type of reference to a static identifier in an inline 482 function. */ 483enum c_inline_static_type { 484 /* Identifier with internal linkage used in function that may be an 485 inline definition (i.e., file-scope static). */ 486 csi_internal, 487 /* Modifiable object with static storage duration defined in 488 function that may be an inline definition (i.e., local 489 static). */ 490 csi_modifiable 491}; 492 493 494/* in c-parser.c */ 495extern void c_parse_init (void); 496extern bool c_keyword_starts_typename (enum rid keyword); 497 498/* in c-aux-info.c */ 499extern void gen_aux_info_record (tree, int, int, int); 500 501/* in c-decl.c */ 502struct c_spot_bindings; 503struct c_struct_parse_info; 504extern struct obstack parser_obstack; 505extern tree c_break_label; 506extern tree c_cont_label; 507 508extern bool global_bindings_p (void); 509extern void push_scope (void); 510extern tree pop_scope (void); 511extern void c_bindings_start_stmt_expr (struct c_spot_bindings *); 512extern void c_bindings_end_stmt_expr (struct c_spot_bindings *); 513 514extern void record_inline_static (location_t, tree, tree, 515 enum c_inline_static_type); 516extern void c_init_decl_processing (void); 517extern void c_print_identifier (FILE *, tree, int); 518extern int quals_from_declspecs (const struct c_declspecs *); 519extern struct c_declarator *build_array_declarator (location_t, tree, 520 struct c_declspecs *, 521 bool, bool); 522extern tree build_enumerator (location_t, location_t, struct c_enum_contents *, 523 tree, tree); 524extern tree check_for_loop_decls (location_t, bool); 525extern void mark_forward_parm_decls (void); 526extern void declare_parm_level (void); 527extern void undeclared_variable (location_t, tree); 528extern tree lookup_label_for_goto (location_t, tree); 529extern tree declare_label (tree); 530extern tree define_label (location_t, tree); 531extern struct c_spot_bindings *c_get_switch_bindings (void); 532extern void c_release_switch_bindings (struct c_spot_bindings *); 533extern bool c_check_switch_jump_warnings (struct c_spot_bindings *, 534 location_t, location_t); 535extern void finish_decl (tree, location_t, tree, tree, tree); 536extern tree finish_enum (tree, tree, tree); 537extern void finish_function (void); 538extern tree finish_struct (location_t, tree, tree, tree, 539 struct c_struct_parse_info *); 540extern struct c_arg_info *build_arg_info (void); 541extern struct c_arg_info *get_parm_info (bool, tree); 542extern tree grokfield (location_t, struct c_declarator *, 543 struct c_declspecs *, tree, tree *); 544extern tree groktypename (struct c_type_name *, tree *, bool *); 545extern tree grokparm (const struct c_parm *, tree *); 546extern tree implicitly_declare (location_t, tree); 547extern void keep_next_level (void); 548extern void pending_xref_error (void); 549extern void c_push_function_context (void); 550extern void c_pop_function_context (void); 551extern void push_parm_decl (const struct c_parm *, tree *); 552extern struct c_declarator *set_array_declarator_inner (struct c_declarator *, 553 struct c_declarator *); 554extern tree c_builtin_function (tree); 555extern tree c_builtin_function_ext_scope (tree); 556extern void shadow_tag (const struct c_declspecs *); 557extern void shadow_tag_warned (const struct c_declspecs *, int); 558extern tree start_enum (location_t, struct c_enum_contents *, tree); 559extern int start_function (struct c_declspecs *, struct c_declarator *, tree); 560extern tree start_decl (struct c_declarator *, struct c_declspecs *, bool, 561 tree); 562extern tree start_struct (location_t, enum tree_code, tree, 563 struct c_struct_parse_info **); 564extern void store_parm_decls (void); 565extern void store_parm_decls_from (struct c_arg_info *); 566extern void temp_store_parm_decls (tree, tree); 567extern void temp_pop_parm_decls (void); 568extern tree xref_tag (enum tree_code, tree); 569extern struct c_typespec parser_xref_tag (location_t, enum tree_code, tree); 570extern struct c_parm *build_c_parm (struct c_declspecs *, tree, 571 struct c_declarator *); 572extern struct c_declarator *build_attrs_declarator (tree, 573 struct c_declarator *); 574extern struct c_declarator *build_function_declarator (struct c_arg_info *, 575 struct c_declarator *); 576extern struct c_declarator *build_id_declarator (tree); 577extern struct c_declarator *make_pointer_declarator (struct c_declspecs *, 578 struct c_declarator *); 579extern struct c_declspecs *build_null_declspecs (void); 580extern struct c_declspecs *declspecs_add_qual (source_location, 581 struct c_declspecs *, tree); 582extern struct c_declspecs *declspecs_add_type (location_t, 583 struct c_declspecs *, 584 struct c_typespec); 585extern struct c_declspecs *declspecs_add_scspec (source_location, 586 struct c_declspecs *, tree); 587extern struct c_declspecs *declspecs_add_attrs (source_location, 588 struct c_declspecs *, tree); 589extern struct c_declspecs *declspecs_add_addrspace (source_location, 590 struct c_declspecs *, 591 addr_space_t); 592extern struct c_declspecs *declspecs_add_alignas (source_location, 593 struct c_declspecs *, tree); 594extern struct c_declspecs *finish_declspecs (struct c_declspecs *); 595 596/* in c-objc-common.c */ 597extern bool c_objc_common_init (void); 598extern bool c_missing_noreturn_ok_p (tree); 599extern bool c_warn_unused_global_decl (const_tree); 600extern void c_initialize_diagnostics (diagnostic_context *); 601extern bool c_vla_unspec_p (tree x, tree fn); 602 603/* in c-typeck.c */ 604extern int in_alignof; 605extern int in_sizeof; 606extern int in_typeof; 607 608extern tree c_last_sizeof_arg; 609 610extern struct c_switch *c_switch_stack; 611 612extern tree c_objc_common_truthvalue_conversion (location_t, tree); 613extern tree require_complete_type (location_t, tree); 614extern int same_translation_unit_p (const_tree, const_tree); 615extern int comptypes (tree, tree); 616extern int comptypes_check_different_types (tree, tree, bool *); 617extern bool c_vla_type_p (const_tree); 618extern bool c_mark_addressable (tree, bool = false); 619extern void c_incomplete_type_error (location_t, const_tree, const_tree); 620extern tree c_type_promotes_to (tree); 621extern struct c_expr default_function_array_conversion (location_t, 622 struct c_expr); 623extern struct c_expr default_function_array_read_conversion (location_t, 624 struct c_expr); 625extern struct c_expr convert_lvalue_to_rvalue (location_t, struct c_expr, 626 bool, bool); 627extern void mark_exp_read (tree); 628extern tree composite_type (tree, tree); 629extern tree build_component_ref (location_t, tree, tree, location_t); 630extern tree build_array_ref (location_t, tree, tree); 631extern tree build_external_ref (location_t, tree, int, tree *); 632extern void pop_maybe_used (bool); 633extern struct c_expr c_expr_sizeof_expr (location_t, struct c_expr); 634extern struct c_expr c_expr_sizeof_type (location_t, struct c_type_name *); 635extern struct c_expr parser_build_unary_op (location_t, enum tree_code, 636 struct c_expr); 637extern struct c_expr parser_build_binary_op (location_t, 638 enum tree_code, struct c_expr, 639 struct c_expr); 640extern tree build_conditional_expr (location_t, tree, bool, tree, tree, 641 tree, tree); 642extern tree build_compound_expr (location_t, tree, tree); 643extern tree c_cast_expr (location_t, struct c_type_name *, tree); 644extern tree build_c_cast (location_t, tree, tree); 645extern void store_init_value (location_t, tree, tree, tree); 646extern void maybe_warn_string_init (location_t, tree, struct c_expr); 647extern void start_init (tree, tree, int, rich_location *); 648extern void finish_init (void); 649extern void really_start_incremental_init (tree); 650extern void finish_implicit_inits (location_t, struct obstack *); 651extern void push_init_level (location_t, int, struct obstack *); 652extern struct c_expr pop_init_level (location_t, int, struct obstack *, 653 location_t); 654extern void set_init_index (location_t, tree, tree, struct obstack *); 655extern void set_init_label (location_t, tree, location_t, struct obstack *); 656extern void process_init_element (location_t, struct c_expr, bool, 657 struct obstack *); 658extern tree build_compound_literal (location_t, tree, tree, bool); 659extern void check_compound_literal_type (location_t, struct c_type_name *); 660extern tree c_start_case (location_t, location_t, tree, bool); 661extern void c_finish_case (tree, tree); 662extern tree build_asm_expr (location_t, tree, tree, tree, tree, tree, bool, 663 bool); 664extern tree build_asm_stmt (bool, tree); 665extern int c_types_compatible_p (tree, tree); 666extern tree c_begin_compound_stmt (bool); 667extern tree c_end_compound_stmt (location_t, tree, bool); 668extern void c_finish_if_stmt (location_t, tree, tree, tree); 669extern void c_finish_loop (location_t, tree, tree, tree, tree, tree, bool); 670extern tree c_begin_stmt_expr (void); 671extern tree c_finish_stmt_expr (location_t, tree); 672extern tree c_process_expr_stmt (location_t, tree); 673extern tree c_finish_expr_stmt (location_t, tree); 674extern tree c_finish_return (location_t, tree, tree); 675extern tree c_finish_bc_stmt (location_t, tree *, bool); 676extern tree c_finish_goto_label (location_t, tree); 677extern tree c_finish_goto_ptr (location_t, tree); 678extern tree c_expr_to_decl (tree, bool *, bool *); 679extern tree c_finish_omp_construct (location_t, enum tree_code, tree, tree); 680extern tree c_finish_oacc_data (location_t, tree, tree); 681extern tree c_finish_oacc_host_data (location_t, tree, tree); 682extern tree c_begin_omp_parallel (void); 683extern tree c_finish_omp_parallel (location_t, tree, tree); 684extern tree c_begin_omp_task (void); 685extern tree c_finish_omp_task (location_t, tree, tree); 686extern void c_finish_omp_cancel (location_t, tree); 687extern void c_finish_omp_cancellation_point (location_t, tree); 688extern tree c_finish_omp_clauses (tree, enum c_omp_region_type); 689extern tree c_build_va_arg (location_t, tree, location_t, tree); 690extern tree c_finish_transaction (location_t, tree, int); 691extern bool c_tree_equal (tree, tree); 692extern tree c_build_function_call_vec (location_t, vec<location_t>, tree, 693 vec<tree, va_gc> *, vec<tree, va_gc> *); 694extern tree c_omp_clause_copy_ctor (tree, tree, tree); 695 696/* Set to 0 at beginning of a function definition, set to 1 if 697 a return statement that specifies a return value is seen. */ 698 699extern int current_function_returns_value; 700 701/* Set to 0 at beginning of a function definition, set to 1 if 702 a return statement with no argument is seen. */ 703 704extern int current_function_returns_null; 705 706/* Set to 0 at beginning of a function definition, set to 1 if 707 a call to a noreturn function is seen. */ 708 709extern int current_function_returns_abnormally; 710 711/* In c-decl.c */ 712 713/* Tell the binding oracle what kind of binding we are looking for. */ 714 715enum c_oracle_request 716{ 717 C_ORACLE_SYMBOL, 718 C_ORACLE_TAG, 719 C_ORACLE_LABEL 720}; 721 722/* If this is non-NULL, then it is a "binding oracle" which can lazily 723 create bindings when needed by the C compiler. The oracle is told 724 the name and type of the binding to create. It can call pushdecl 725 or the like to ensure the binding is visible; or do nothing, 726 leaving the binding untouched. c-decl.c takes note of when the 727 oracle has been called and will not call it again if it fails to 728 create a given binding. */ 729 730typedef void c_binding_oracle_function (enum c_oracle_request, tree identifier); 731 732extern c_binding_oracle_function *c_binding_oracle; 733 734extern void c_finish_incomplete_decl (tree); 735extern tree c_omp_reduction_id (enum tree_code, tree); 736extern tree c_omp_reduction_decl (tree); 737extern tree c_omp_reduction_lookup (tree, tree); 738extern tree c_check_omp_declare_reduction_r (tree *, int *, void *); 739extern void c_pushtag (location_t, tree, tree); 740extern void c_bind (location_t, tree, bool); 741extern bool tag_exists_p (enum tree_code, tree); 742 743/* In c-errors.c */ 744extern bool pedwarn_c90 (location_t, int opt, const char *, ...) 745 ATTRIBUTE_GCC_DIAG(3,4); 746extern bool pedwarn_c99 (location_t, int opt, const char *, ...) 747 ATTRIBUTE_GCC_DIAG(3,4); 748 749extern void 750set_c_expr_source_range (c_expr *expr, 751 location_t start, location_t finish); 752 753extern void 754set_c_expr_source_range (c_expr *expr, 755 source_range src_range); 756 757/* In c-fold.c */ 758extern tree decl_constant_value_for_optimization (tree); 759 760extern vec<tree> incomplete_record_decls; 761 762#endif /* ! GCC_C_TREE_H */ 763