2014-12-19 Andrew MacLeod <amacleod@redhat.com>
[official-gcc.git] / gcc / c / c-decl.c
blob609d8891ffc5710e0263986db18ff8c6dd57ef85
1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988-2014 Free Software Foundation, Inc.
4 This file is part of GCC.
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.
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.
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/>. */
20 /* Process declarations and symbol lookup for C front end.
21 Also constructs types; the standard scalar types at initialization,
22 and structure, union, array and enum types when they are declared. */
24 /* ??? not all decl nodes are given the most useful possible
25 line numbers. For example, the CONST_DECLs for enum values. */
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "input.h"
31 #include "tm.h"
32 #include "intl.h"
33 #include "tree.h"
34 #include "print-tree.h"
35 #include "stor-layout.h"
36 #include "varasm.h"
37 #include "attribs.h"
38 #include "stringpool.h"
39 #include "tree-inline.h"
40 #include "flags.h"
41 #include "hashtab.h"
42 #include "hash-set.h"
43 #include "vec.h"
44 #include "machmode.h"
45 #include "hard-reg-set.h"
46 #include "function.h"
47 #include "c-tree.h"
48 #include "toplev.h"
49 #include "tm_p.h"
50 #include "cpplib.h"
51 #include "target.h"
52 #include "debug.h"
53 #include "opts.h"
54 #include "timevar.h"
55 #include "c-family/c-common.h"
56 #include "c-family/c-objc.h"
57 #include "c-family/c-pragma.h"
58 #include "c-family/c-ubsan.h"
59 #include "c-lang.h"
60 #include "langhooks.h"
61 #include "tree-iterator.h"
62 #include "diagnostic-core.h"
63 #include "dumpfile.h"
64 #include "hash-map.h"
65 #include "is-a.h"
66 #include "plugin-api.h"
67 #include "ipa-ref.h"
68 #include "cgraph.h"
69 #include "hash-table.h"
70 #include "langhooks-def.h"
71 #include "plugin.h"
72 #include "c-family/c-ada-spec.h"
73 #include "cilk.h"
74 #include "builtins.h"
76 /* In grokdeclarator, distinguish syntactic contexts of declarators. */
77 enum decl_context
78 { NORMAL, /* Ordinary declaration */
79 FUNCDEF, /* Function definition */
80 PARM, /* Declaration of parm before function body */
81 FIELD, /* Declaration inside struct or union */
82 TYPENAME}; /* Typename (inside cast or sizeof) */
84 /* States indicating how grokdeclarator() should handle declspecs marked
85 with __attribute__((deprecated)). An object declared as
86 __attribute__((deprecated)) suppresses warnings of uses of other
87 deprecated items. */
89 enum deprecated_states {
90 DEPRECATED_NORMAL,
91 DEPRECATED_SUPPRESS
95 /* Nonzero if we have seen an invalid cross reference
96 to a struct, union, or enum, but not yet printed the message. */
97 tree pending_invalid_xref;
99 /* File and line to appear in the eventual error message. */
100 location_t pending_invalid_xref_location;
102 /* The file and line that the prototype came from if this is an
103 old-style definition; used for diagnostics in
104 store_parm_decls_oldstyle. */
106 static location_t current_function_prototype_locus;
108 /* Whether this prototype was built-in. */
110 static bool current_function_prototype_built_in;
112 /* The argument type information of this prototype. */
114 static tree current_function_prototype_arg_types;
116 /* The argument information structure for the function currently being
117 defined. */
119 static struct c_arg_info *current_function_arg_info;
121 /* The obstack on which parser and related data structures, which are
122 not live beyond their top-level declaration or definition, are
123 allocated. */
124 struct obstack parser_obstack;
126 /* The current statement tree. */
128 static GTY(()) struct stmt_tree_s c_stmt_tree;
130 /* State saving variables. */
131 tree c_break_label;
132 tree c_cont_label;
134 /* A list of decls to be made automatically visible in each file scope. */
135 static GTY(()) tree visible_builtins;
137 /* Set to 0 at beginning of a function definition, set to 1 if
138 a return statement that specifies a return value is seen. */
140 int current_function_returns_value;
142 /* Set to 0 at beginning of a function definition, set to 1 if
143 a return statement with no argument is seen. */
145 int current_function_returns_null;
147 /* Set to 0 at beginning of a function definition, set to 1 if
148 a call to a noreturn function is seen. */
150 int current_function_returns_abnormally;
152 /* Set to nonzero by `grokdeclarator' for a function
153 whose return type is defaulted, if warnings for this are desired. */
155 static int warn_about_return_type;
157 /* Nonzero when the current toplevel function contains a declaration
158 of a nested function which is never defined. */
160 static bool undef_nested_function;
162 /* Mode used to build pointers (VOIDmode means ptr_mode). */
164 machine_mode c_default_pointer_mode = VOIDmode;
166 /* If non-zero, implicit "omp declare target" attribute is added into the
167 attribute lists. */
168 int current_omp_declare_target_attribute;
170 /* Each c_binding structure describes one binding of an identifier to
171 a decl. All the decls in a scope - irrespective of namespace - are
172 chained together by the ->prev field, which (as the name implies)
173 runs in reverse order. All the decls in a given namespace bound to
174 a given identifier are chained by the ->shadowed field, which runs
175 from inner to outer scopes.
177 The ->decl field usually points to a DECL node, but there are two
178 exceptions. In the namespace of type tags, the bound entity is a
179 RECORD_TYPE, UNION_TYPE, or ENUMERAL_TYPE node. If an undeclared
180 identifier is encountered, it is bound to error_mark_node to
181 suppress further errors about that identifier in the current
182 function.
184 The ->u.type field stores the type of the declaration in this scope;
185 if NULL, the type is the type of the ->decl field. This is only of
186 relevance for objects with external or internal linkage which may
187 be redeclared in inner scopes, forming composite types that only
188 persist for the duration of those scopes. In the external scope,
189 this stores the composite of all the types declared for this
190 object, visible or not. The ->inner_comp field (used only at file
191 scope) stores whether an incomplete array type at file scope was
192 completed at an inner scope to an array size other than 1.
194 The ->u.label field is used for labels. It points to a structure
195 which stores additional information used for warnings.
197 The depth field is copied from the scope structure that holds this
198 decl. It is used to preserve the proper ordering of the ->shadowed
199 field (see bind()) and also for a handful of special-case checks.
200 Finally, the invisible bit is true for a decl which should be
201 ignored for purposes of normal name lookup, and the nested bit is
202 true for a decl that's been bound a second time in an inner scope;
203 in all such cases, the binding in the outer scope will have its
204 invisible bit true. */
206 struct GTY((chain_next ("%h.prev"))) c_binding {
207 union GTY(()) { /* first so GTY desc can use decl */
208 tree GTY((tag ("0"))) type; /* the type in this scope */
209 struct c_label_vars * GTY((tag ("1"))) label; /* for warnings */
210 } GTY((desc ("TREE_CODE (%0.decl) == LABEL_DECL"))) u;
211 tree decl; /* the decl bound */
212 tree id; /* the identifier it's bound to */
213 struct c_binding *prev; /* the previous decl in this scope */
214 struct c_binding *shadowed; /* the innermost decl shadowed by this one */
215 unsigned int depth : 28; /* depth of this scope */
216 BOOL_BITFIELD invisible : 1; /* normal lookup should ignore this binding */
217 BOOL_BITFIELD nested : 1; /* do not set DECL_CONTEXT when popping */
218 BOOL_BITFIELD inner_comp : 1; /* incomplete array completed in inner scope */
219 BOOL_BITFIELD in_struct : 1; /* currently defined as struct field */
220 location_t locus; /* location for nested bindings */
222 #define B_IN_SCOPE(b1, b2) ((b1)->depth == (b2)->depth)
223 #define B_IN_CURRENT_SCOPE(b) ((b)->depth == current_scope->depth)
224 #define B_IN_FILE_SCOPE(b) ((b)->depth == 1 /*file_scope->depth*/)
225 #define B_IN_EXTERNAL_SCOPE(b) ((b)->depth == 0 /*external_scope->depth*/)
227 /* Each C symbol points to three linked lists of c_binding structures.
228 These describe the values of the identifier in the three different
229 namespaces defined by the language. */
231 struct GTY(()) lang_identifier {
232 struct c_common_identifier common_id;
233 struct c_binding *symbol_binding; /* vars, funcs, constants, typedefs */
234 struct c_binding *tag_binding; /* struct/union/enum tags */
235 struct c_binding *label_binding; /* labels */
238 /* Validate c-lang.c's assumptions. */
239 extern char C_SIZEOF_STRUCT_LANG_IDENTIFIER_isnt_accurate
240 [(sizeof(struct lang_identifier) == C_SIZEOF_STRUCT_LANG_IDENTIFIER) ? 1 : -1];
242 /* The binding oracle; see c-tree.h. */
243 void (*c_binding_oracle) (enum c_oracle_request, tree identifier);
245 /* This flag is set on an identifier if we have previously asked the
246 binding oracle for this identifier's symbol binding. */
247 #define I_SYMBOL_CHECKED(node) \
248 (TREE_LANG_FLAG_4 (IDENTIFIER_NODE_CHECK (node)))
250 static inline struct c_binding* *
251 i_symbol_binding (tree node)
253 struct lang_identifier *lid
254 = (struct lang_identifier *) IDENTIFIER_NODE_CHECK (node);
256 if (lid->symbol_binding == NULL
257 && c_binding_oracle != NULL
258 && !I_SYMBOL_CHECKED (node))
260 /* Set the "checked" flag first, to avoid infinite recursion
261 when the binding oracle calls back into gcc. */
262 I_SYMBOL_CHECKED (node) = 1;
263 c_binding_oracle (C_ORACLE_SYMBOL, node);
266 return &lid->symbol_binding;
269 #define I_SYMBOL_BINDING(node) (*i_symbol_binding (node))
271 #define I_SYMBOL_DECL(node) \
272 (I_SYMBOL_BINDING(node) ? I_SYMBOL_BINDING(node)->decl : 0)
274 /* This flag is set on an identifier if we have previously asked the
275 binding oracle for this identifier's tag binding. */
276 #define I_TAG_CHECKED(node) \
277 (TREE_LANG_FLAG_5 (IDENTIFIER_NODE_CHECK (node)))
279 static inline struct c_binding **
280 i_tag_binding (tree node)
282 struct lang_identifier *lid
283 = (struct lang_identifier *) IDENTIFIER_NODE_CHECK (node);
285 if (lid->tag_binding == NULL
286 && c_binding_oracle != NULL
287 && !I_TAG_CHECKED (node))
289 /* Set the "checked" flag first, to avoid infinite recursion
290 when the binding oracle calls back into gcc. */
291 I_TAG_CHECKED (node) = 1;
292 c_binding_oracle (C_ORACLE_TAG, node);
295 return &lid->tag_binding;
298 #define I_TAG_BINDING(node) (*i_tag_binding (node))
300 #define I_TAG_DECL(node) \
301 (I_TAG_BINDING(node) ? I_TAG_BINDING(node)->decl : 0)
303 /* This flag is set on an identifier if we have previously asked the
304 binding oracle for this identifier's label binding. */
305 #define I_LABEL_CHECKED(node) \
306 (TREE_LANG_FLAG_6 (IDENTIFIER_NODE_CHECK (node)))
308 static inline struct c_binding **
309 i_label_binding (tree node)
311 struct lang_identifier *lid
312 = (struct lang_identifier *) IDENTIFIER_NODE_CHECK (node);
314 if (lid->label_binding == NULL
315 && c_binding_oracle != NULL
316 && !I_LABEL_CHECKED (node))
318 /* Set the "checked" flag first, to avoid infinite recursion
319 when the binding oracle calls back into gcc. */
320 I_LABEL_CHECKED (node) = 1;
321 c_binding_oracle (C_ORACLE_LABEL, node);
324 return &lid->label_binding;
327 #define I_LABEL_BINDING(node) (*i_label_binding (node))
329 #define I_LABEL_DECL(node) \
330 (I_LABEL_BINDING(node) ? I_LABEL_BINDING(node)->decl : 0)
332 /* The resulting tree type. */
334 union GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"),
335 chain_next ("(union lang_tree_node *) c_tree_chain_next (&%h.generic)"))) lang_tree_node
337 union tree_node GTY ((tag ("0"),
338 desc ("tree_node_structure (&%h)")))
339 generic;
340 struct lang_identifier GTY ((tag ("1"))) identifier;
343 /* Track bindings and other things that matter for goto warnings. For
344 efficiency, we do not gather all the decls at the point of
345 definition. Instead, we point into the bindings structure. As
346 scopes are popped, we update these structures and gather the decls
347 that matter at that time. */
349 struct GTY(()) c_spot_bindings {
350 /* The currently open scope which holds bindings defined when the
351 label was defined or the goto statement was found. */
352 struct c_scope *scope;
353 /* The bindings in the scope field which were defined at the point
354 of the label or goto. This lets us look at older or newer
355 bindings in the scope, as appropriate. */
356 struct c_binding *bindings_in_scope;
357 /* The number of statement expressions that have started since this
358 label or goto statement was defined. This is zero if we are at
359 the same statement expression level. It is positive if we are in
360 a statement expression started since this spot. It is negative
361 if this spot was in a statement expression and we have left
362 it. */
363 int stmt_exprs;
364 /* Whether we started in a statement expression but are no longer in
365 it. This is set to true if stmt_exprs ever goes negative. */
366 bool left_stmt_expr;
369 /* This structure is used to keep track of bindings seen when a goto
370 statement is defined. This is only used if we see the goto
371 statement before we see the label. */
373 struct GTY(()) c_goto_bindings {
374 /* The location of the goto statement. */
375 location_t loc;
376 /* The bindings of the goto statement. */
377 struct c_spot_bindings goto_bindings;
380 typedef struct c_goto_bindings *c_goto_bindings_p;
382 /* The additional information we keep track of for a label binding.
383 These fields are updated as scopes are popped. */
385 struct GTY(()) c_label_vars {
386 /* The shadowed c_label_vars, when one label shadows another (which
387 can only happen using a __label__ declaration). */
388 struct c_label_vars *shadowed;
389 /* The bindings when the label was defined. */
390 struct c_spot_bindings label_bindings;
391 /* A list of decls that we care about: decls about which we should
392 warn if a goto branches to this label from later in the function.
393 Decls are added to this list as scopes are popped. We only add
394 the decls that matter. */
395 vec<tree, va_gc> *decls_in_scope;
396 /* A list of goto statements to this label. This is only used for
397 goto statements seen before the label was defined, so that we can
398 issue appropriate warnings for them. */
399 vec<c_goto_bindings_p, va_gc> *gotos;
402 /* Each c_scope structure describes the complete contents of one
403 scope. Four scopes are distinguished specially: the innermost or
404 current scope, the innermost function scope, the file scope (always
405 the second to outermost) and the outermost or external scope.
407 Most declarations are recorded in the current scope.
409 All normal label declarations are recorded in the innermost
410 function scope, as are bindings of undeclared identifiers to
411 error_mark_node. (GCC permits nested functions as an extension,
412 hence the 'innermost' qualifier.) Explicitly declared labels
413 (using the __label__ extension) appear in the current scope.
415 Being in the file scope (current_scope == file_scope) causes
416 special behavior in several places below. Also, under some
417 conditions the Objective-C front end records declarations in the
418 file scope even though that isn't the current scope.
420 All declarations with external linkage are recorded in the external
421 scope, even if they aren't visible there; this models the fact that
422 such declarations are visible to the entire program, and (with a
423 bit of cleverness, see pushdecl) allows diagnosis of some violations
424 of C99 6.2.2p7 and 6.2.7p2:
426 If, within the same translation unit, the same identifier appears
427 with both internal and external linkage, the behavior is
428 undefined.
430 All declarations that refer to the same object or function shall
431 have compatible type; otherwise, the behavior is undefined.
433 Initially only the built-in declarations, which describe compiler
434 intrinsic functions plus a subset of the standard library, are in
435 this scope.
437 The order of the blocks list matters, and it is frequently appended
438 to. To avoid having to walk all the way to the end of the list on
439 each insertion, or reverse the list later, we maintain a pointer to
440 the last list entry. (FIXME: It should be feasible to use a reversed
441 list here.)
443 The bindings list is strictly in reverse order of declarations;
444 pop_scope relies on this. */
447 struct GTY((chain_next ("%h.outer"))) c_scope {
448 /* The scope containing this one. */
449 struct c_scope *outer;
451 /* The next outermost function scope. */
452 struct c_scope *outer_function;
454 /* All bindings in this scope. */
455 struct c_binding *bindings;
457 /* For each scope (except the global one), a chain of BLOCK nodes
458 for all the scopes that were entered and exited one level down. */
459 tree blocks;
460 tree blocks_last;
462 /* The depth of this scope. Used to keep the ->shadowed chain of
463 bindings sorted innermost to outermost. */
464 unsigned int depth : 28;
466 /* True if we are currently filling this scope with parameter
467 declarations. */
468 BOOL_BITFIELD parm_flag : 1;
470 /* True if we saw [*] in this scope. Used to give an error messages
471 if these appears in a function definition. */
472 BOOL_BITFIELD had_vla_unspec : 1;
474 /* True if we already complained about forward parameter decls
475 in this scope. This prevents double warnings on
476 foo (int a; int b; ...) */
477 BOOL_BITFIELD warned_forward_parm_decls : 1;
479 /* True if this is the outermost block scope of a function body.
480 This scope contains the parameters, the local variables declared
481 in the outermost block, and all the labels (except those in
482 nested functions, or declared at block scope with __label__). */
483 BOOL_BITFIELD function_body : 1;
485 /* True means make a BLOCK for this scope no matter what. */
486 BOOL_BITFIELD keep : 1;
488 /* True means that an unsuffixed float constant is _Decimal64. */
489 BOOL_BITFIELD float_const_decimal64 : 1;
491 /* True if this scope has any label bindings. This is used to speed
492 up searching for labels when popping scopes, particularly since
493 labels are normally only found at function scope. */
494 BOOL_BITFIELD has_label_bindings : 1;
496 /* True if we should issue a warning if a goto statement crosses any
497 of the bindings. We still need to check the list of bindings to
498 find the specific ones we need to warn about. This is true if
499 decl_jump_unsafe would return true for any of the bindings. This
500 is used to avoid looping over all the bindings unnecessarily. */
501 BOOL_BITFIELD has_jump_unsafe_decl : 1;
504 /* The scope currently in effect. */
506 static GTY(()) struct c_scope *current_scope;
508 /* The innermost function scope. Ordinary (not explicitly declared)
509 labels, bindings to error_mark_node, and the lazily-created
510 bindings of __func__ and its friends get this scope. */
512 static GTY(()) struct c_scope *current_function_scope;
514 /* The C file scope. This is reset for each input translation unit. */
516 static GTY(()) struct c_scope *file_scope;
518 /* The outermost scope. This is used for all declarations with
519 external linkage, and only these, hence the name. */
521 static GTY(()) struct c_scope *external_scope;
523 /* A chain of c_scope structures awaiting reuse. */
525 static GTY((deletable)) struct c_scope *scope_freelist;
527 /* A chain of c_binding structures awaiting reuse. */
529 static GTY((deletable)) struct c_binding *binding_freelist;
531 /* Append VAR to LIST in scope SCOPE. */
532 #define SCOPE_LIST_APPEND(scope, list, decl) do { \
533 struct c_scope *s_ = (scope); \
534 tree d_ = (decl); \
535 if (s_->list##_last) \
536 BLOCK_CHAIN (s_->list##_last) = d_; \
537 else \
538 s_->list = d_; \
539 s_->list##_last = d_; \
540 } while (0)
542 /* Concatenate FROM in scope FSCOPE onto TO in scope TSCOPE. */
543 #define SCOPE_LIST_CONCAT(tscope, to, fscope, from) do { \
544 struct c_scope *t_ = (tscope); \
545 struct c_scope *f_ = (fscope); \
546 if (t_->to##_last) \
547 BLOCK_CHAIN (t_->to##_last) = f_->from; \
548 else \
549 t_->to = f_->from; \
550 t_->to##_last = f_->from##_last; \
551 } while (0)
553 /* A c_inline_static structure stores details of a static identifier
554 referenced in a definition of a function that may be an inline
555 definition if no subsequent declaration of that function uses
556 "extern" or does not use "inline". */
558 struct GTY((chain_next ("%h.next"))) c_inline_static {
559 /* The location for a diagnostic. */
560 location_t location;
562 /* The function that may be an inline definition. */
563 tree function;
565 /* The object or function referenced. */
566 tree static_decl;
568 /* What sort of reference this is. */
569 enum c_inline_static_type type;
571 /* The next such structure or NULL. */
572 struct c_inline_static *next;
575 /* List of static identifiers used or referenced in functions that may
576 be inline definitions. */
577 static GTY(()) struct c_inline_static *c_inline_statics;
579 /* True means unconditionally make a BLOCK for the next scope pushed. */
581 static bool keep_next_level_flag;
583 /* True means the next call to push_scope will be the outermost scope
584 of a function body, so do not push a new scope, merely cease
585 expecting parameter decls. */
587 static bool next_is_function_body;
589 /* A vector of pointers to c_binding structures. */
591 typedef struct c_binding *c_binding_ptr;
593 /* Information that we keep for a struct or union while it is being
594 parsed. */
596 struct c_struct_parse_info
598 /* If warn_cxx_compat, a list of types defined within this
599 struct. */
600 vec<tree> struct_types;
601 /* If warn_cxx_compat, a list of field names which have bindings,
602 and which are defined in this struct, but which are not defined
603 in any enclosing struct. This is used to clear the in_struct
604 field of the c_bindings structure. */
605 vec<c_binding_ptr> fields;
606 /* If warn_cxx_compat, a list of typedef names used when defining
607 fields in this struct. */
608 vec<tree> typedefs_seen;
611 /* Information for the struct or union currently being parsed, or
612 NULL if not parsing a struct or union. */
613 static struct c_struct_parse_info *struct_parse_info;
615 /* Forward declarations. */
616 static tree lookup_name_in_scope (tree, struct c_scope *);
617 static tree c_make_fname_decl (location_t, tree, int);
618 static tree grokdeclarator (const struct c_declarator *,
619 struct c_declspecs *,
620 enum decl_context, bool, tree *, tree *, tree *,
621 bool *, enum deprecated_states);
622 static tree grokparms (struct c_arg_info *, bool);
623 static void layout_array_type (tree);
624 static void warn_defaults_to (location_t, int, const char *, ...)
625 ATTRIBUTE_GCC_DIAG(3,4);
627 /* T is a statement. Add it to the statement-tree. This is the
628 C/ObjC version--C++ has a slightly different version of this
629 function. */
631 tree
632 add_stmt (tree t)
634 enum tree_code code = TREE_CODE (t);
636 if (CAN_HAVE_LOCATION_P (t) && code != LABEL_EXPR)
638 if (!EXPR_HAS_LOCATION (t))
639 SET_EXPR_LOCATION (t, input_location);
642 if (code == LABEL_EXPR || code == CASE_LABEL_EXPR)
643 STATEMENT_LIST_HAS_LABEL (cur_stmt_list) = 1;
645 /* Add T to the statement-tree. Non-side-effect statements need to be
646 recorded during statement expressions. */
647 if (!building_stmt_list_p ())
648 push_stmt_list ();
649 append_to_statement_list_force (t, &cur_stmt_list);
651 return t;
654 /* Build a pointer type using the default pointer mode. */
656 static tree
657 c_build_pointer_type (tree to_type)
659 addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
660 : TYPE_ADDR_SPACE (to_type);
661 machine_mode pointer_mode;
663 if (as != ADDR_SPACE_GENERIC || c_default_pointer_mode == VOIDmode)
664 pointer_mode = targetm.addr_space.pointer_mode (as);
665 else
666 pointer_mode = c_default_pointer_mode;
667 return build_pointer_type_for_mode (to_type, pointer_mode, false);
671 /* Return true if we will want to say something if a goto statement
672 crosses DECL. */
674 static bool
675 decl_jump_unsafe (tree decl)
677 if (error_operand_p (decl))
678 return false;
680 /* Always warn about crossing variably modified types. */
681 if ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == TYPE_DECL)
682 && variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
683 return true;
685 /* Otherwise, only warn if -Wgoto-misses-init and this is an
686 initialized automatic decl. */
687 if (warn_jump_misses_init
688 && TREE_CODE (decl) == VAR_DECL
689 && !TREE_STATIC (decl)
690 && DECL_INITIAL (decl) != NULL_TREE)
691 return true;
693 return false;
697 void
698 c_print_identifier (FILE *file, tree node, int indent)
700 void (*save) (enum c_oracle_request, tree identifier);
702 /* Temporarily hide any binding oracle. Without this, calls to
703 debug_tree from the debugger will end up calling into the oracle,
704 making for a confusing debug session. As the oracle isn't needed
705 here for normal operation, it's simplest to suppress it. */
706 save = c_binding_oracle;
707 c_binding_oracle = NULL;
709 print_node (file, "symbol", I_SYMBOL_DECL (node), indent + 4);
710 print_node (file, "tag", I_TAG_DECL (node), indent + 4);
711 print_node (file, "label", I_LABEL_DECL (node), indent + 4);
712 if (C_IS_RESERVED_WORD (node) && C_RID_CODE (node) != RID_CXX_COMPAT_WARN)
714 tree rid = ridpointers[C_RID_CODE (node)];
715 indent_to (file, indent + 4);
716 fprintf (file, "rid " HOST_PTR_PRINTF " \"%s\"",
717 (void *) rid, IDENTIFIER_POINTER (rid));
720 c_binding_oracle = save;
723 /* Establish a binding between NAME, an IDENTIFIER_NODE, and DECL,
724 which may be any of several kinds of DECL or TYPE or error_mark_node,
725 in the scope SCOPE. */
726 static void
727 bind (tree name, tree decl, struct c_scope *scope, bool invisible,
728 bool nested, location_t locus)
730 struct c_binding *b, **here;
732 if (binding_freelist)
734 b = binding_freelist;
735 binding_freelist = b->prev;
737 else
738 b = ggc_alloc<c_binding> ();
740 b->shadowed = 0;
741 b->decl = decl;
742 b->id = name;
743 b->depth = scope->depth;
744 b->invisible = invisible;
745 b->nested = nested;
746 b->inner_comp = 0;
747 b->in_struct = 0;
748 b->locus = locus;
750 b->u.type = NULL;
752 b->prev = scope->bindings;
753 scope->bindings = b;
755 if (decl_jump_unsafe (decl))
756 scope->has_jump_unsafe_decl = 1;
758 if (!name)
759 return;
761 switch (TREE_CODE (decl))
763 case LABEL_DECL: here = &I_LABEL_BINDING (name); break;
764 case ENUMERAL_TYPE:
765 case UNION_TYPE:
766 case RECORD_TYPE: here = &I_TAG_BINDING (name); break;
767 case VAR_DECL:
768 case FUNCTION_DECL:
769 case TYPE_DECL:
770 case CONST_DECL:
771 case PARM_DECL:
772 case ERROR_MARK: here = &I_SYMBOL_BINDING (name); break;
774 default:
775 gcc_unreachable ();
778 /* Locate the appropriate place in the chain of shadowed decls
779 to insert this binding. Normally, scope == current_scope and
780 this does nothing. */
781 while (*here && (*here)->depth > scope->depth)
782 here = &(*here)->shadowed;
784 b->shadowed = *here;
785 *here = b;
788 /* Clear the binding structure B, stick it on the binding_freelist,
789 and return the former value of b->prev. This is used by pop_scope
790 and get_parm_info to iterate destructively over all the bindings
791 from a given scope. */
792 static struct c_binding *
793 free_binding_and_advance (struct c_binding *b)
795 struct c_binding *prev = b->prev;
797 memset (b, 0, sizeof (struct c_binding));
798 b->prev = binding_freelist;
799 binding_freelist = b;
801 return prev;
804 /* Bind a label. Like bind, but skip fields which aren't used for
805 labels, and add the LABEL_VARS value. */
806 static void
807 bind_label (tree name, tree label, struct c_scope *scope,
808 struct c_label_vars *label_vars)
810 struct c_binding *b;
812 bind (name, label, scope, /*invisible=*/false, /*nested=*/false,
813 UNKNOWN_LOCATION);
815 scope->has_label_bindings = true;
817 b = scope->bindings;
818 gcc_assert (b->decl == label);
819 label_vars->shadowed = b->u.label;
820 b->u.label = label_vars;
823 /* Hook called at end of compilation to assume 1 elt
824 for a file-scope tentative array defn that wasn't complete before. */
826 void
827 c_finish_incomplete_decl (tree decl)
829 if (TREE_CODE (decl) == VAR_DECL)
831 tree type = TREE_TYPE (decl);
832 if (type != error_mark_node
833 && TREE_CODE (type) == ARRAY_TYPE
834 && !DECL_EXTERNAL (decl)
835 && TYPE_DOMAIN (type) == 0)
837 warning_at (DECL_SOURCE_LOCATION (decl),
838 0, "array %q+D assumed to have one element", decl);
840 complete_array_type (&TREE_TYPE (decl), NULL_TREE, true);
842 relayout_decl (decl);
847 /* Record that inline function FUNC contains a reference (location
848 LOC) to static DECL (file-scope or function-local according to
849 TYPE). */
851 void
852 record_inline_static (location_t loc, tree func, tree decl,
853 enum c_inline_static_type type)
855 c_inline_static *csi = ggc_alloc<c_inline_static> ();
856 csi->location = loc;
857 csi->function = func;
858 csi->static_decl = decl;
859 csi->type = type;
860 csi->next = c_inline_statics;
861 c_inline_statics = csi;
864 /* Check for references to static declarations in inline functions at
865 the end of the translation unit and diagnose them if the functions
866 are still inline definitions. */
868 static void
869 check_inline_statics (void)
871 struct c_inline_static *csi;
872 for (csi = c_inline_statics; csi; csi = csi->next)
874 if (DECL_EXTERNAL (csi->function))
875 switch (csi->type)
877 case csi_internal:
878 pedwarn (csi->location, 0,
879 "%qD is static but used in inline function %qD "
880 "which is not static", csi->static_decl, csi->function);
881 break;
882 case csi_modifiable:
883 pedwarn (csi->location, 0,
884 "%q+D is static but declared in inline function %qD "
885 "which is not static", csi->static_decl, csi->function);
886 break;
887 default:
888 gcc_unreachable ();
891 c_inline_statics = NULL;
894 /* Fill in a c_spot_bindings structure. If DEFINING is true, set it
895 for the current state, otherwise set it to uninitialized. */
897 static void
898 set_spot_bindings (struct c_spot_bindings *p, bool defining)
900 if (defining)
902 p->scope = current_scope;
903 p->bindings_in_scope = current_scope->bindings;
905 else
907 p->scope = NULL;
908 p->bindings_in_scope = NULL;
910 p->stmt_exprs = 0;
911 p->left_stmt_expr = false;
914 /* Update spot bindings P as we pop out of SCOPE. Return true if we
915 should push decls for a label. */
917 static bool
918 update_spot_bindings (struct c_scope *scope, struct c_spot_bindings *p)
920 if (p->scope != scope)
922 /* This label or goto is defined in some other scope, or it is a
923 label which is not yet defined. There is nothing to
924 update. */
925 return false;
928 /* Adjust the spot bindings to refer to the bindings already defined
929 in the enclosing scope. */
930 p->scope = scope->outer;
931 p->bindings_in_scope = p->scope->bindings;
933 return true;
936 /* The Objective-C front-end often needs to determine the current scope. */
938 void *
939 objc_get_current_scope (void)
941 return current_scope;
944 /* The following function is used only by Objective-C. It needs to live here
945 because it accesses the innards of c_scope. */
947 void
948 objc_mark_locals_volatile (void *enclosing_blk)
950 struct c_scope *scope;
951 struct c_binding *b;
953 for (scope = current_scope;
954 scope && scope != enclosing_blk;
955 scope = scope->outer)
957 for (b = scope->bindings; b; b = b->prev)
958 objc_volatilize_decl (b->decl);
960 /* Do not climb up past the current function. */
961 if (scope->function_body)
962 break;
966 /* Return true if we are in the global binding level. */
968 bool
969 global_bindings_p (void)
971 return current_scope == file_scope;
974 void
975 keep_next_level (void)
977 keep_next_level_flag = true;
980 /* Set the flag for the FLOAT_CONST_DECIMAL64 pragma being ON. */
982 void
983 set_float_const_decimal64 (void)
985 current_scope->float_const_decimal64 = true;
988 /* Clear the flag for the FLOAT_CONST_DECIMAL64 pragma. */
990 void
991 clear_float_const_decimal64 (void)
993 current_scope->float_const_decimal64 = false;
996 /* Return nonzero if an unsuffixed float constant is _Decimal64. */
998 bool
999 float_const_decimal64_p (void)
1001 return current_scope->float_const_decimal64;
1004 /* Identify this scope as currently being filled with parameters. */
1006 void
1007 declare_parm_level (void)
1009 current_scope->parm_flag = true;
1012 void
1013 push_scope (void)
1015 if (next_is_function_body)
1017 /* This is the transition from the parameters to the top level
1018 of the function body. These are the same scope
1019 (C99 6.2.1p4,6) so we do not push another scope structure.
1020 next_is_function_body is set only by store_parm_decls, which
1021 in turn is called when and only when we are about to
1022 encounter the opening curly brace for the function body.
1024 The outermost block of a function always gets a BLOCK node,
1025 because the debugging output routines expect that each
1026 function has at least one BLOCK. */
1027 current_scope->parm_flag = false;
1028 current_scope->function_body = true;
1029 current_scope->keep = true;
1030 current_scope->outer_function = current_function_scope;
1031 current_function_scope = current_scope;
1033 keep_next_level_flag = false;
1034 next_is_function_body = false;
1036 /* The FLOAT_CONST_DECIMAL64 pragma applies to nested scopes. */
1037 if (current_scope->outer)
1038 current_scope->float_const_decimal64
1039 = current_scope->outer->float_const_decimal64;
1040 else
1041 current_scope->float_const_decimal64 = false;
1043 else
1045 struct c_scope *scope;
1046 if (scope_freelist)
1048 scope = scope_freelist;
1049 scope_freelist = scope->outer;
1051 else
1052 scope = ggc_cleared_alloc<c_scope> ();
1054 /* The FLOAT_CONST_DECIMAL64 pragma applies to nested scopes. */
1055 if (current_scope)
1056 scope->float_const_decimal64 = current_scope->float_const_decimal64;
1057 else
1058 scope->float_const_decimal64 = false;
1060 scope->keep = keep_next_level_flag;
1061 scope->outer = current_scope;
1062 scope->depth = current_scope ? (current_scope->depth + 1) : 0;
1064 /* Check for scope depth overflow. Unlikely (2^28 == 268,435,456) but
1065 possible. */
1066 if (current_scope && scope->depth == 0)
1068 scope->depth--;
1069 sorry ("GCC supports only %u nested scopes", scope->depth);
1072 current_scope = scope;
1073 keep_next_level_flag = false;
1077 /* This is called when we are leaving SCOPE. For each label defined
1078 in SCOPE, add any appropriate decls to its decls_in_scope fields.
1079 These are the decls whose initialization will be skipped by a goto
1080 later in the function. */
1082 static void
1083 update_label_decls (struct c_scope *scope)
1085 struct c_scope *s;
1087 s = scope;
1088 while (s != NULL)
1090 if (s->has_label_bindings)
1092 struct c_binding *b;
1094 for (b = s->bindings; b != NULL; b = b->prev)
1096 struct c_label_vars *label_vars;
1097 struct c_binding *b1;
1098 bool hjud;
1099 unsigned int ix;
1100 struct c_goto_bindings *g;
1102 if (TREE_CODE (b->decl) != LABEL_DECL)
1103 continue;
1104 label_vars = b->u.label;
1106 b1 = label_vars->label_bindings.bindings_in_scope;
1107 if (label_vars->label_bindings.scope == NULL)
1108 hjud = false;
1109 else
1110 hjud = label_vars->label_bindings.scope->has_jump_unsafe_decl;
1111 if (update_spot_bindings (scope, &label_vars->label_bindings))
1113 /* This label is defined in this scope. */
1114 if (hjud)
1116 for (; b1 != NULL; b1 = b1->prev)
1118 /* A goto from later in the function to this
1119 label will never see the initialization
1120 of B1, if any. Save it to issue a
1121 warning if needed. */
1122 if (decl_jump_unsafe (b1->decl))
1123 vec_safe_push(label_vars->decls_in_scope, b1->decl);
1128 /* Update the bindings of any goto statements associated
1129 with this label. */
1130 FOR_EACH_VEC_SAFE_ELT (label_vars->gotos, ix, g)
1131 update_spot_bindings (scope, &g->goto_bindings);
1135 /* Don't search beyond the current function. */
1136 if (s == current_function_scope)
1137 break;
1139 s = s->outer;
1143 /* Set the TYPE_CONTEXT of all of TYPE's variants to CONTEXT. */
1145 static void
1146 set_type_context (tree type, tree context)
1148 for (type = TYPE_MAIN_VARIANT (type); type;
1149 type = TYPE_NEXT_VARIANT (type))
1150 TYPE_CONTEXT (type) = context;
1153 /* Exit a scope. Restore the state of the identifier-decl mappings
1154 that were in effect when this scope was entered. Return a BLOCK
1155 node containing all the DECLs in this scope that are of interest
1156 to debug info generation. */
1158 tree
1159 pop_scope (void)
1161 struct c_scope *scope = current_scope;
1162 tree block, context, p;
1163 struct c_binding *b;
1165 bool functionbody = scope->function_body;
1166 bool keep = functionbody || scope->keep || scope->bindings;
1168 update_label_decls (scope);
1170 /* If appropriate, create a BLOCK to record the decls for the life
1171 of this function. */
1172 block = 0;
1173 if (keep)
1175 block = make_node (BLOCK);
1176 BLOCK_SUBBLOCKS (block) = scope->blocks;
1177 TREE_USED (block) = 1;
1179 /* In each subblock, record that this is its superior. */
1180 for (p = scope->blocks; p; p = BLOCK_CHAIN (p))
1181 BLOCK_SUPERCONTEXT (p) = block;
1183 BLOCK_VARS (block) = 0;
1186 /* The TYPE_CONTEXTs for all of the tagged types belonging to this
1187 scope must be set so that they point to the appropriate
1188 construct, i.e. either to the current FUNCTION_DECL node, or
1189 else to the BLOCK node we just constructed.
1191 Note that for tagged types whose scope is just the formal
1192 parameter list for some function type specification, we can't
1193 properly set their TYPE_CONTEXTs here, because we don't have a
1194 pointer to the appropriate FUNCTION_TYPE node readily available
1195 to us. For those cases, the TYPE_CONTEXTs of the relevant tagged
1196 type nodes get set in `grokdeclarator' as soon as we have created
1197 the FUNCTION_TYPE node which will represent the "scope" for these
1198 "parameter list local" tagged types. */
1199 if (scope->function_body)
1200 context = current_function_decl;
1201 else if (scope == file_scope)
1203 tree file_decl = build_translation_unit_decl (NULL_TREE);
1204 context = file_decl;
1206 else
1207 context = block;
1209 /* Clear all bindings in this scope. */
1210 for (b = scope->bindings; b; b = free_binding_and_advance (b))
1212 p = b->decl;
1213 switch (TREE_CODE (p))
1215 case LABEL_DECL:
1216 /* Warnings for unused labels, errors for undefined labels. */
1217 if (TREE_USED (p) && !DECL_INITIAL (p))
1219 error ("label %q+D used but not defined", p);
1220 DECL_INITIAL (p) = error_mark_node;
1222 else
1223 warn_for_unused_label (p);
1225 /* Labels go in BLOCK_VARS. */
1226 DECL_CHAIN (p) = BLOCK_VARS (block);
1227 BLOCK_VARS (block) = p;
1228 gcc_assert (I_LABEL_BINDING (b->id) == b);
1229 I_LABEL_BINDING (b->id) = b->shadowed;
1231 /* Also pop back to the shadowed label_vars. */
1232 release_tree_vector (b->u.label->decls_in_scope);
1233 b->u.label = b->u.label->shadowed;
1234 break;
1236 case ENUMERAL_TYPE:
1237 case UNION_TYPE:
1238 case RECORD_TYPE:
1239 set_type_context (p, context);
1241 /* Types may not have tag-names, in which case the type
1242 appears in the bindings list with b->id NULL. */
1243 if (b->id)
1245 gcc_assert (I_TAG_BINDING (b->id) == b);
1246 I_TAG_BINDING (b->id) = b->shadowed;
1248 break;
1250 case FUNCTION_DECL:
1251 /* Propagate TREE_ADDRESSABLE from nested functions to their
1252 containing functions. */
1253 if (!TREE_ASM_WRITTEN (p)
1254 && DECL_INITIAL (p) != 0
1255 && TREE_ADDRESSABLE (p)
1256 && DECL_ABSTRACT_ORIGIN (p) != 0
1257 && DECL_ABSTRACT_ORIGIN (p) != p)
1258 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (p)) = 1;
1259 if (!DECL_EXTERNAL (p)
1260 && !DECL_INITIAL (p)
1261 && scope != file_scope
1262 && scope != external_scope)
1264 error ("nested function %q+D declared but never defined", p);
1265 undef_nested_function = true;
1267 else if (DECL_DECLARED_INLINE_P (p)
1268 && TREE_PUBLIC (p)
1269 && !DECL_INITIAL (p))
1271 /* C99 6.7.4p6: "a function with external linkage... declared
1272 with an inline function specifier ... shall also be defined
1273 in the same translation unit." */
1274 if (!flag_gnu89_inline
1275 && !lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (p))
1276 && scope != external_scope)
1277 pedwarn (input_location, 0,
1278 "inline function %q+D declared but never defined", p);
1279 DECL_EXTERNAL (p) = 1;
1282 goto common_symbol;
1284 case VAR_DECL:
1285 /* Warnings for unused variables. */
1286 if ((!TREE_USED (p) || !DECL_READ_P (p))
1287 && !TREE_NO_WARNING (p)
1288 && !DECL_IN_SYSTEM_HEADER (p)
1289 && DECL_NAME (p)
1290 && !DECL_ARTIFICIAL (p)
1291 && scope != file_scope
1292 && scope != external_scope)
1294 if (!TREE_USED (p))
1295 warning (OPT_Wunused_variable, "unused variable %q+D", p);
1296 else if (DECL_CONTEXT (p) == current_function_decl)
1297 warning_at (DECL_SOURCE_LOCATION (p),
1298 OPT_Wunused_but_set_variable,
1299 "variable %qD set but not used", p);
1302 if (b->inner_comp)
1304 error ("type of array %q+D completed incompatibly with"
1305 " implicit initialization", p);
1308 /* Fall through. */
1309 case TYPE_DECL:
1310 case CONST_DECL:
1311 common_symbol:
1312 /* All of these go in BLOCK_VARS, but only if this is the
1313 binding in the home scope. */
1314 if (!b->nested)
1316 DECL_CHAIN (p) = BLOCK_VARS (block);
1317 BLOCK_VARS (block) = p;
1319 else if (VAR_OR_FUNCTION_DECL_P (p) && scope != file_scope)
1321 /* For block local externs add a special
1322 DECL_EXTERNAL decl for debug info generation. */
1323 tree extp = copy_node (p);
1325 DECL_EXTERNAL (extp) = 1;
1326 TREE_STATIC (extp) = 0;
1327 TREE_PUBLIC (extp) = 1;
1328 DECL_INITIAL (extp) = NULL_TREE;
1329 DECL_LANG_SPECIFIC (extp) = NULL;
1330 DECL_CONTEXT (extp) = current_function_decl;
1331 if (TREE_CODE (p) == FUNCTION_DECL)
1333 DECL_RESULT (extp) = NULL_TREE;
1334 DECL_SAVED_TREE (extp) = NULL_TREE;
1335 DECL_STRUCT_FUNCTION (extp) = NULL;
1337 if (b->locus != UNKNOWN_LOCATION)
1338 DECL_SOURCE_LOCATION (extp) = b->locus;
1339 DECL_CHAIN (extp) = BLOCK_VARS (block);
1340 BLOCK_VARS (block) = extp;
1342 /* If this is the file scope set DECL_CONTEXT of each decl to
1343 the TRANSLATION_UNIT_DECL. This makes same_translation_unit_p
1344 work. */
1345 if (scope == file_scope)
1347 DECL_CONTEXT (p) = context;
1348 if (TREE_CODE (p) == TYPE_DECL
1349 && TREE_TYPE (p) != error_mark_node)
1350 set_type_context (TREE_TYPE (p), context);
1353 /* Fall through. */
1354 /* Parameters go in DECL_ARGUMENTS, not BLOCK_VARS, and have
1355 already been put there by store_parm_decls. Unused-
1356 parameter warnings are handled by function.c.
1357 error_mark_node obviously does not go in BLOCK_VARS and
1358 does not get unused-variable warnings. */
1359 case PARM_DECL:
1360 case ERROR_MARK:
1361 /* It is possible for a decl not to have a name. We get
1362 here with b->id NULL in this case. */
1363 if (b->id)
1365 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
1366 I_SYMBOL_BINDING (b->id) = b->shadowed;
1367 if (b->shadowed && b->shadowed->u.type)
1368 TREE_TYPE (b->shadowed->decl) = b->shadowed->u.type;
1370 break;
1372 default:
1373 gcc_unreachable ();
1378 /* Dispose of the block that we just made inside some higher level. */
1379 if ((scope->function_body || scope == file_scope) && context)
1381 DECL_INITIAL (context) = block;
1382 BLOCK_SUPERCONTEXT (block) = context;
1384 else if (scope->outer)
1386 if (block)
1387 SCOPE_LIST_APPEND (scope->outer, blocks, block);
1388 /* If we did not make a block for the scope just exited, any
1389 blocks made for inner scopes must be carried forward so they
1390 will later become subblocks of something else. */
1391 else if (scope->blocks)
1392 SCOPE_LIST_CONCAT (scope->outer, blocks, scope, blocks);
1395 /* Pop the current scope, and free the structure for reuse. */
1396 current_scope = scope->outer;
1397 if (scope->function_body)
1398 current_function_scope = scope->outer_function;
1400 memset (scope, 0, sizeof (struct c_scope));
1401 scope->outer = scope_freelist;
1402 scope_freelist = scope;
1404 return block;
1407 void
1408 push_file_scope (void)
1410 tree decl;
1412 if (file_scope)
1413 return;
1415 push_scope ();
1416 file_scope = current_scope;
1418 start_fname_decls ();
1420 for (decl = visible_builtins; decl; decl = DECL_CHAIN (decl))
1421 bind (DECL_NAME (decl), decl, file_scope,
1422 /*invisible=*/false, /*nested=*/true, DECL_SOURCE_LOCATION (decl));
1425 void
1426 pop_file_scope (void)
1428 /* In case there were missing closebraces, get us back to the global
1429 binding level. */
1430 while (current_scope != file_scope)
1431 pop_scope ();
1433 /* __FUNCTION__ is defined at file scope (""). This
1434 call may not be necessary as my tests indicate it
1435 still works without it. */
1436 finish_fname_decls ();
1438 check_inline_statics ();
1440 /* This is the point to write out a PCH if we're doing that.
1441 In that case we do not want to do anything else. */
1442 if (pch_file)
1444 c_common_write_pch ();
1445 return;
1448 /* Pop off the file scope and close this translation unit. */
1449 pop_scope ();
1450 file_scope = 0;
1452 maybe_apply_pending_pragma_weaks ();
1455 /* Adjust the bindings for the start of a statement expression. */
1457 void
1458 c_bindings_start_stmt_expr (struct c_spot_bindings* switch_bindings)
1460 struct c_scope *scope;
1462 for (scope = current_scope; scope != NULL; scope = scope->outer)
1464 struct c_binding *b;
1466 if (!scope->has_label_bindings)
1467 continue;
1469 for (b = scope->bindings; b != NULL; b = b->prev)
1471 struct c_label_vars *label_vars;
1472 unsigned int ix;
1473 struct c_goto_bindings *g;
1475 if (TREE_CODE (b->decl) != LABEL_DECL)
1476 continue;
1477 label_vars = b->u.label;
1478 ++label_vars->label_bindings.stmt_exprs;
1479 FOR_EACH_VEC_SAFE_ELT (label_vars->gotos, ix, g)
1480 ++g->goto_bindings.stmt_exprs;
1484 if (switch_bindings != NULL)
1485 ++switch_bindings->stmt_exprs;
1488 /* Adjust the bindings for the end of a statement expression. */
1490 void
1491 c_bindings_end_stmt_expr (struct c_spot_bindings *switch_bindings)
1493 struct c_scope *scope;
1495 for (scope = current_scope; scope != NULL; scope = scope->outer)
1497 struct c_binding *b;
1499 if (!scope->has_label_bindings)
1500 continue;
1502 for (b = scope->bindings; b != NULL; b = b->prev)
1504 struct c_label_vars *label_vars;
1505 unsigned int ix;
1506 struct c_goto_bindings *g;
1508 if (TREE_CODE (b->decl) != LABEL_DECL)
1509 continue;
1510 label_vars = b->u.label;
1511 --label_vars->label_bindings.stmt_exprs;
1512 if (label_vars->label_bindings.stmt_exprs < 0)
1514 label_vars->label_bindings.left_stmt_expr = true;
1515 label_vars->label_bindings.stmt_exprs = 0;
1517 FOR_EACH_VEC_SAFE_ELT (label_vars->gotos, ix, g)
1519 --g->goto_bindings.stmt_exprs;
1520 if (g->goto_bindings.stmt_exprs < 0)
1522 g->goto_bindings.left_stmt_expr = true;
1523 g->goto_bindings.stmt_exprs = 0;
1529 if (switch_bindings != NULL)
1531 --switch_bindings->stmt_exprs;
1532 gcc_assert (switch_bindings->stmt_exprs >= 0);
1536 /* Push a definition or a declaration of struct, union or enum tag "name".
1537 "type" should be the type node.
1538 We assume that the tag "name" is not already defined, and has a location
1539 of LOC.
1541 Note that the definition may really be just a forward reference.
1542 In that case, the TYPE_SIZE will be zero. */
1544 static void
1545 pushtag (location_t loc, tree name, tree type)
1547 /* Record the identifier as the type's name if it has none. */
1548 if (name && !TYPE_NAME (type))
1549 TYPE_NAME (type) = name;
1550 bind (name, type, current_scope, /*invisible=*/false, /*nested=*/false, loc);
1552 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE will be the
1553 tagged type we just added to the current scope. This fake
1554 NULL-named TYPE_DECL node helps dwarfout.c to know when it needs
1555 to output a representation of a tagged type, and it also gives
1556 us a convenient place to record the "scope start" address for the
1557 tagged type. */
1559 TYPE_STUB_DECL (type) = pushdecl (build_decl (loc,
1560 TYPE_DECL, NULL_TREE, type));
1562 /* An approximation for now, so we can tell this is a function-scope tag.
1563 This will be updated in pop_scope. */
1564 TYPE_CONTEXT (type) = DECL_CONTEXT (TYPE_STUB_DECL (type));
1566 if (warn_cxx_compat && name != NULL_TREE)
1568 struct c_binding *b = I_SYMBOL_BINDING (name);
1570 if (b != NULL
1571 && b->decl != NULL_TREE
1572 && TREE_CODE (b->decl) == TYPE_DECL
1573 && (B_IN_CURRENT_SCOPE (b)
1574 || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
1575 && (TYPE_MAIN_VARIANT (TREE_TYPE (b->decl))
1576 != TYPE_MAIN_VARIANT (type)))
1578 warning_at (loc, OPT_Wc___compat,
1579 ("using %qD as both a typedef and a tag is "
1580 "invalid in C++"),
1581 b->decl);
1582 if (b->locus != UNKNOWN_LOCATION)
1583 inform (b->locus, "originally defined here");
1588 /* An exported interface to pushtag. This is used by the gdb plugin's
1589 binding oracle to introduce a new tag binding. */
1591 void
1592 c_pushtag (location_t loc, tree name, tree type)
1594 pushtag (loc, name, type);
1597 /* An exported interface to bind a declaration. LOC is the location
1598 to use. DECL is the declaration to bind. The decl's name is used
1599 to determine how it is bound. If DECL is a VAR_DECL, then
1600 IS_GLOBAL determines whether the decl is put into the global (file
1601 and external) scope or the current function's scope; if DECL is not
1602 a VAR_DECL then it is always put into the file scope. */
1604 void
1605 c_bind (location_t loc, tree decl, bool is_global)
1607 struct c_scope *scope;
1608 bool nested = false;
1610 if (TREE_CODE (decl) != VAR_DECL || current_function_scope == NULL)
1612 /* Types and functions are always considered to be global. */
1613 scope = file_scope;
1614 DECL_EXTERNAL (decl) = 1;
1615 TREE_PUBLIC (decl) = 1;
1617 else if (is_global)
1619 /* Also bind it into the external scope. */
1620 bind (DECL_NAME (decl), decl, external_scope, true, false, loc);
1621 nested = true;
1622 scope = file_scope;
1623 DECL_EXTERNAL (decl) = 1;
1624 TREE_PUBLIC (decl) = 1;
1626 else
1628 DECL_CONTEXT (decl) = current_function_decl;
1629 TREE_PUBLIC (decl) = 0;
1630 scope = current_function_scope;
1633 bind (DECL_NAME (decl), decl, scope, false, nested, loc);
1636 /* Subroutine of compare_decls. Allow harmless mismatches in return
1637 and argument types provided that the type modes match. This function
1638 return a unified type given a suitable match, and 0 otherwise. */
1640 static tree
1641 match_builtin_function_types (tree newtype, tree oldtype)
1643 tree newrettype, oldrettype;
1644 tree newargs, oldargs;
1645 tree trytype, tryargs;
1647 /* Accept the return type of the new declaration if same modes. */
1648 oldrettype = TREE_TYPE (oldtype);
1649 newrettype = TREE_TYPE (newtype);
1651 if (TYPE_MODE (oldrettype) != TYPE_MODE (newrettype))
1652 return 0;
1654 oldargs = TYPE_ARG_TYPES (oldtype);
1655 newargs = TYPE_ARG_TYPES (newtype);
1656 tryargs = newargs;
1658 while (oldargs || newargs)
1660 if (!oldargs
1661 || !newargs
1662 || !TREE_VALUE (oldargs)
1663 || !TREE_VALUE (newargs)
1664 || TYPE_MODE (TREE_VALUE (oldargs))
1665 != TYPE_MODE (TREE_VALUE (newargs)))
1666 return 0;
1668 oldargs = TREE_CHAIN (oldargs);
1669 newargs = TREE_CHAIN (newargs);
1672 trytype = build_function_type (newrettype, tryargs);
1673 return build_type_attribute_variant (trytype, TYPE_ATTRIBUTES (oldtype));
1676 /* Subroutine of diagnose_mismatched_decls. Check for function type
1677 mismatch involving an empty arglist vs a nonempty one and give clearer
1678 diagnostics. */
1679 static void
1680 diagnose_arglist_conflict (tree newdecl, tree olddecl,
1681 tree newtype, tree oldtype)
1683 tree t;
1685 if (TREE_CODE (olddecl) != FUNCTION_DECL
1686 || !comptypes (TREE_TYPE (oldtype), TREE_TYPE (newtype))
1687 || !((!prototype_p (oldtype) && DECL_INITIAL (olddecl) == 0)
1688 || (!prototype_p (newtype) && DECL_INITIAL (newdecl) == 0)))
1689 return;
1691 t = TYPE_ARG_TYPES (oldtype);
1692 if (t == 0)
1693 t = TYPE_ARG_TYPES (newtype);
1694 for (; t; t = TREE_CHAIN (t))
1696 tree type = TREE_VALUE (t);
1698 if (TREE_CHAIN (t) == 0
1699 && TYPE_MAIN_VARIANT (type) != void_type_node)
1701 inform (input_location, "a parameter list with an ellipsis can%'t match "
1702 "an empty parameter name list declaration");
1703 break;
1706 if (c_type_promotes_to (type) != type)
1708 inform (input_location, "an argument type that has a default promotion can%'t match "
1709 "an empty parameter name list declaration");
1710 break;
1715 /* Another subroutine of diagnose_mismatched_decls. OLDDECL is an
1716 old-style function definition, NEWDECL is a prototype declaration.
1717 Diagnose inconsistencies in the argument list. Returns TRUE if
1718 the prototype is compatible, FALSE if not. */
1719 static bool
1720 validate_proto_after_old_defn (tree newdecl, tree newtype, tree oldtype)
1722 tree newargs, oldargs;
1723 int i;
1725 #define END_OF_ARGLIST(t) ((t) == void_type_node)
1727 oldargs = TYPE_ACTUAL_ARG_TYPES (oldtype);
1728 newargs = TYPE_ARG_TYPES (newtype);
1729 i = 1;
1731 for (;;)
1733 tree oldargtype = TREE_VALUE (oldargs);
1734 tree newargtype = TREE_VALUE (newargs);
1736 if (oldargtype == error_mark_node || newargtype == error_mark_node)
1737 return false;
1739 oldargtype = (TYPE_ATOMIC (oldargtype)
1740 ? c_build_qualified_type (TYPE_MAIN_VARIANT (oldargtype),
1741 TYPE_QUAL_ATOMIC)
1742 : TYPE_MAIN_VARIANT (oldargtype));
1743 newargtype = (TYPE_ATOMIC (newargtype)
1744 ? c_build_qualified_type (TYPE_MAIN_VARIANT (newargtype),
1745 TYPE_QUAL_ATOMIC)
1746 : TYPE_MAIN_VARIANT (newargtype));
1748 if (END_OF_ARGLIST (oldargtype) && END_OF_ARGLIST (newargtype))
1749 break;
1751 /* Reaching the end of just one list means the two decls don't
1752 agree on the number of arguments. */
1753 if (END_OF_ARGLIST (oldargtype))
1755 error ("prototype for %q+D declares more arguments "
1756 "than previous old-style definition", newdecl);
1757 return false;
1759 else if (END_OF_ARGLIST (newargtype))
1761 error ("prototype for %q+D declares fewer arguments "
1762 "than previous old-style definition", newdecl);
1763 return false;
1766 /* Type for passing arg must be consistent with that declared
1767 for the arg. */
1768 else if (!comptypes (oldargtype, newargtype))
1770 error ("prototype for %q+D declares argument %d"
1771 " with incompatible type",
1772 newdecl, i);
1773 return false;
1776 oldargs = TREE_CHAIN (oldargs);
1777 newargs = TREE_CHAIN (newargs);
1778 i++;
1781 /* If we get here, no errors were found, but do issue a warning
1782 for this poor-style construct. */
1783 warning (0, "prototype for %q+D follows non-prototype definition",
1784 newdecl);
1785 return true;
1786 #undef END_OF_ARGLIST
1789 /* Subroutine of diagnose_mismatched_decls. Report the location of DECL,
1790 first in a pair of mismatched declarations, using the diagnostic
1791 function DIAG. */
1792 static void
1793 locate_old_decl (tree decl)
1795 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_BUILT_IN (decl)
1796 && !C_DECL_DECLARED_BUILTIN (decl))
1798 else if (DECL_INITIAL (decl))
1799 inform (input_location, "previous definition of %q+D was here", decl);
1800 else if (C_DECL_IMPLICIT (decl))
1801 inform (input_location, "previous implicit declaration of %q+D was here", decl);
1802 else
1803 inform (input_location, "previous declaration of %q+D was here", decl);
1806 /* Subroutine of duplicate_decls. Compare NEWDECL to OLDDECL.
1807 Returns true if the caller should proceed to merge the two, false
1808 if OLDDECL should simply be discarded. As a side effect, issues
1809 all necessary diagnostics for invalid or poor-style combinations.
1810 If it returns true, writes the types of NEWDECL and OLDDECL to
1811 *NEWTYPEP and *OLDTYPEP - these may have been adjusted from
1812 TREE_TYPE (NEWDECL, OLDDECL) respectively. */
1814 static bool
1815 diagnose_mismatched_decls (tree newdecl, tree olddecl,
1816 tree *newtypep, tree *oldtypep)
1818 tree newtype, oldtype;
1819 bool pedwarned = false;
1820 bool warned = false;
1821 bool retval = true;
1823 #define DECL_EXTERN_INLINE(DECL) (DECL_DECLARED_INLINE_P (DECL) \
1824 && DECL_EXTERNAL (DECL))
1826 /* If we have error_mark_node for either decl or type, just discard
1827 the previous decl - we're in an error cascade already. */
1828 if (olddecl == error_mark_node || newdecl == error_mark_node)
1829 return false;
1830 *oldtypep = oldtype = TREE_TYPE (olddecl);
1831 *newtypep = newtype = TREE_TYPE (newdecl);
1832 if (oldtype == error_mark_node || newtype == error_mark_node)
1833 return false;
1835 /* Two different categories of symbol altogether. This is an error
1836 unless OLDDECL is a builtin. OLDDECL will be discarded in any case. */
1837 if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1839 if (!(TREE_CODE (olddecl) == FUNCTION_DECL
1840 && DECL_BUILT_IN (olddecl)
1841 && !C_DECL_DECLARED_BUILTIN (olddecl)))
1843 error ("%q+D redeclared as different kind of symbol", newdecl);
1844 locate_old_decl (olddecl);
1846 else if (TREE_PUBLIC (newdecl))
1847 warning (0, "built-in function %q+D declared as non-function",
1848 newdecl);
1849 else
1850 warning (OPT_Wshadow, "declaration of %q+D shadows "
1851 "a built-in function", newdecl);
1852 return false;
1855 /* Enumerators have no linkage, so may only be declared once in a
1856 given scope. */
1857 if (TREE_CODE (olddecl) == CONST_DECL)
1859 error ("redeclaration of enumerator %q+D", newdecl);
1860 locate_old_decl (olddecl);
1861 return false;
1864 if (!comptypes (oldtype, newtype))
1866 if (TREE_CODE (olddecl) == FUNCTION_DECL
1867 && DECL_BUILT_IN (olddecl) && !C_DECL_DECLARED_BUILTIN (olddecl))
1869 /* Accept harmless mismatch in function types.
1870 This is for the ffs and fprintf builtins. */
1871 tree trytype = match_builtin_function_types (newtype, oldtype);
1873 if (trytype && comptypes (newtype, trytype))
1874 *oldtypep = oldtype = trytype;
1875 else
1877 /* If types don't match for a built-in, throw away the
1878 built-in. No point in calling locate_old_decl here, it
1879 won't print anything. */
1880 warning (0, "conflicting types for built-in function %q+D",
1881 newdecl);
1882 return false;
1885 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1886 && DECL_IS_BUILTIN (olddecl))
1888 /* A conflicting function declaration for a predeclared
1889 function that isn't actually built in. Objective C uses
1890 these. The new declaration silently overrides everything
1891 but the volatility (i.e. noreturn) indication. See also
1892 below. FIXME: Make Objective C use normal builtins. */
1893 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1894 return false;
1896 /* Permit void foo (...) to match int foo (...) if the latter is
1897 the definition and implicit int was used. See
1898 c-torture/compile/920625-2.c. */
1899 else if (TREE_CODE (newdecl) == FUNCTION_DECL && DECL_INITIAL (newdecl)
1900 && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype)) == void_type_node
1901 && TYPE_MAIN_VARIANT (TREE_TYPE (newtype)) == integer_type_node
1902 && C_FUNCTION_IMPLICIT_INT (newdecl) && !DECL_INITIAL (olddecl))
1904 pedwarned = pedwarn (input_location, 0,
1905 "conflicting types for %q+D", newdecl);
1906 /* Make sure we keep void as the return type. */
1907 TREE_TYPE (newdecl) = *newtypep = newtype = oldtype;
1908 C_FUNCTION_IMPLICIT_INT (newdecl) = 0;
1910 /* Permit void foo (...) to match an earlier call to foo (...) with
1911 no declared type (thus, implicitly int). */
1912 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1913 && TYPE_MAIN_VARIANT (TREE_TYPE (newtype)) == void_type_node
1914 && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype)) == integer_type_node
1915 && C_DECL_IMPLICIT (olddecl) && !DECL_INITIAL (olddecl))
1917 pedwarned = pedwarn (input_location, 0,
1918 "conflicting types for %q+D", newdecl);
1919 /* Make sure we keep void as the return type. */
1920 TREE_TYPE (olddecl) = *oldtypep = oldtype = newtype;
1922 else
1924 int new_quals = TYPE_QUALS (newtype);
1925 int old_quals = TYPE_QUALS (oldtype);
1927 if (new_quals != old_quals)
1929 addr_space_t new_addr = DECODE_QUAL_ADDR_SPACE (new_quals);
1930 addr_space_t old_addr = DECODE_QUAL_ADDR_SPACE (old_quals);
1931 if (new_addr != old_addr)
1933 if (ADDR_SPACE_GENERIC_P (new_addr))
1934 error ("conflicting named address spaces (generic vs %s) "
1935 "for %q+D",
1936 c_addr_space_name (old_addr), newdecl);
1937 else if (ADDR_SPACE_GENERIC_P (old_addr))
1938 error ("conflicting named address spaces (%s vs generic) "
1939 "for %q+D",
1940 c_addr_space_name (new_addr), newdecl);
1941 else
1942 error ("conflicting named address spaces (%s vs %s) "
1943 "for %q+D",
1944 c_addr_space_name (new_addr),
1945 c_addr_space_name (old_addr),
1946 newdecl);
1949 if (CLEAR_QUAL_ADDR_SPACE (new_quals)
1950 != CLEAR_QUAL_ADDR_SPACE (old_quals))
1951 error ("conflicting type qualifiers for %q+D", newdecl);
1953 else
1954 error ("conflicting types for %q+D", newdecl);
1955 diagnose_arglist_conflict (newdecl, olddecl, newtype, oldtype);
1956 locate_old_decl (olddecl);
1957 return false;
1961 /* Redeclaration of a type is a constraint violation (6.7.2.3p1),
1962 but silently ignore the redeclaration if either is in a system
1963 header. (Conflicting redeclarations were handled above.) This
1964 is allowed for C11 if the types are the same, not just
1965 compatible. */
1966 if (TREE_CODE (newdecl) == TYPE_DECL)
1968 bool types_different = false;
1969 int comptypes_result;
1971 comptypes_result
1972 = comptypes_check_different_types (oldtype, newtype, &types_different);
1974 if (comptypes_result != 1 || types_different)
1976 error ("redefinition of typedef %q+D with different type", newdecl);
1977 locate_old_decl (olddecl);
1978 return false;
1981 if (DECL_IN_SYSTEM_HEADER (newdecl)
1982 || DECL_IN_SYSTEM_HEADER (olddecl)
1983 || TREE_NO_WARNING (newdecl)
1984 || TREE_NO_WARNING (olddecl))
1985 return true; /* Allow OLDDECL to continue in use. */
1987 if (variably_modified_type_p (newtype, NULL))
1989 error ("redefinition of typedef %q+D with variably modified type",
1990 newdecl);
1991 locate_old_decl (olddecl);
1993 else if (pedwarn_c99 (input_location, OPT_Wpedantic,
1994 "redefinition of typedef %q+D", newdecl))
1995 locate_old_decl (olddecl);
1997 return true;
2000 /* Function declarations can either be 'static' or 'extern' (no
2001 qualifier is equivalent to 'extern' - C99 6.2.2p5) and therefore
2002 can never conflict with each other on account of linkage
2003 (6.2.2p4). Multiple definitions are not allowed (6.9p3,5) but
2004 gnu89 mode permits two definitions if one is 'extern inline' and
2005 one is not. The non- extern-inline definition supersedes the
2006 extern-inline definition. */
2008 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2010 /* If you declare a built-in function name as static, or
2011 define the built-in with an old-style definition (so we
2012 can't validate the argument list) the built-in definition is
2013 overridden, but optionally warn this was a bad choice of name. */
2014 if (DECL_BUILT_IN (olddecl)
2015 && !C_DECL_DECLARED_BUILTIN (olddecl)
2016 && (!TREE_PUBLIC (newdecl)
2017 || (DECL_INITIAL (newdecl)
2018 && !prototype_p (TREE_TYPE (newdecl)))))
2020 warning (OPT_Wshadow, "declaration of %q+D shadows "
2021 "a built-in function", newdecl);
2022 /* Discard the old built-in function. */
2023 return false;
2026 if (DECL_INITIAL (newdecl))
2028 if (DECL_INITIAL (olddecl))
2030 /* If both decls are in the same TU and the new declaration
2031 isn't overriding an extern inline reject the new decl.
2032 In c99, no overriding is allowed in the same translation
2033 unit. */
2034 if ((!DECL_EXTERN_INLINE (olddecl)
2035 || DECL_EXTERN_INLINE (newdecl)
2036 || (!flag_gnu89_inline
2037 && (!DECL_DECLARED_INLINE_P (olddecl)
2038 || !lookup_attribute ("gnu_inline",
2039 DECL_ATTRIBUTES (olddecl)))
2040 && (!DECL_DECLARED_INLINE_P (newdecl)
2041 || !lookup_attribute ("gnu_inline",
2042 DECL_ATTRIBUTES (newdecl))))
2044 && same_translation_unit_p (newdecl, olddecl))
2046 error ("redefinition of %q+D", newdecl);
2047 locate_old_decl (olddecl);
2048 return false;
2052 /* If we have a prototype after an old-style function definition,
2053 the argument types must be checked specially. */
2054 else if (DECL_INITIAL (olddecl)
2055 && !prototype_p (oldtype) && prototype_p (newtype)
2056 && TYPE_ACTUAL_ARG_TYPES (oldtype)
2057 && !validate_proto_after_old_defn (newdecl, newtype, oldtype))
2059 locate_old_decl (olddecl);
2060 return false;
2062 /* A non-static declaration (even an "extern") followed by a
2063 static declaration is undefined behavior per C99 6.2.2p3-5,7.
2064 The same is true for a static forward declaration at block
2065 scope followed by a non-static declaration/definition at file
2066 scope. Static followed by non-static at the same scope is
2067 not undefined behavior, and is the most convenient way to get
2068 some effects (see e.g. what unwind-dw2-fde-glibc.c does to
2069 the definition of _Unwind_Find_FDE in unwind-dw2-fde.c), but
2070 we do diagnose it if -Wtraditional. */
2071 if (TREE_PUBLIC (olddecl) && !TREE_PUBLIC (newdecl))
2073 /* Two exceptions to the rule. If olddecl is an extern
2074 inline, or a predeclared function that isn't actually
2075 built in, newdecl silently overrides olddecl. The latter
2076 occur only in Objective C; see also above. (FIXME: Make
2077 Objective C use normal builtins.) */
2078 if (!DECL_IS_BUILTIN (olddecl)
2079 && !DECL_EXTERN_INLINE (olddecl))
2081 error ("static declaration of %q+D follows "
2082 "non-static declaration", newdecl);
2083 locate_old_decl (olddecl);
2085 return false;
2087 else if (TREE_PUBLIC (newdecl) && !TREE_PUBLIC (olddecl))
2089 if (DECL_CONTEXT (olddecl))
2091 error ("non-static declaration of %q+D follows "
2092 "static declaration", newdecl);
2093 locate_old_decl (olddecl);
2094 return false;
2096 else if (warn_traditional)
2098 warned |= warning (OPT_Wtraditional,
2099 "non-static declaration of %q+D "
2100 "follows static declaration", newdecl);
2104 /* Make sure gnu_inline attribute is either not present, or
2105 present on all inline decls. */
2106 if (DECL_DECLARED_INLINE_P (olddecl)
2107 && DECL_DECLARED_INLINE_P (newdecl))
2109 bool newa = lookup_attribute ("gnu_inline",
2110 DECL_ATTRIBUTES (newdecl)) != NULL;
2111 bool olda = lookup_attribute ("gnu_inline",
2112 DECL_ATTRIBUTES (olddecl)) != NULL;
2113 if (newa != olda)
2115 error_at (input_location, "%<gnu_inline%> attribute present on %q+D",
2116 newa ? newdecl : olddecl);
2117 error_at (DECL_SOURCE_LOCATION (newa ? olddecl : newdecl),
2118 "but not here");
2122 else if (TREE_CODE (newdecl) == VAR_DECL)
2124 /* Only variables can be thread-local, and all declarations must
2125 agree on this property. */
2126 if (C_DECL_THREADPRIVATE_P (olddecl) && !DECL_THREAD_LOCAL_P (newdecl))
2128 /* Nothing to check. Since OLDDECL is marked threadprivate
2129 and NEWDECL does not have a thread-local attribute, we
2130 will merge the threadprivate attribute into NEWDECL. */
2133 else if (DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl))
2135 if (DECL_THREAD_LOCAL_P (newdecl))
2136 error ("thread-local declaration of %q+D follows "
2137 "non-thread-local declaration", newdecl);
2138 else
2139 error ("non-thread-local declaration of %q+D follows "
2140 "thread-local declaration", newdecl);
2142 locate_old_decl (olddecl);
2143 return false;
2146 /* Multiple initialized definitions are not allowed (6.9p3,5). */
2147 if (DECL_INITIAL (newdecl) && DECL_INITIAL (olddecl))
2149 error ("redefinition of %q+D", newdecl);
2150 locate_old_decl (olddecl);
2151 return false;
2154 /* Objects declared at file scope: if the first declaration had
2155 external linkage (even if it was an external reference) the
2156 second must have external linkage as well, or the behavior is
2157 undefined. If the first declaration had internal linkage, then
2158 the second must too, or else be an external reference (in which
2159 case the composite declaration still has internal linkage).
2160 As for function declarations, we warn about the static-then-
2161 extern case only for -Wtraditional. See generally 6.2.2p3-5,7. */
2162 if (DECL_FILE_SCOPE_P (newdecl)
2163 && TREE_PUBLIC (newdecl) != TREE_PUBLIC (olddecl))
2165 if (DECL_EXTERNAL (newdecl))
2167 if (!DECL_FILE_SCOPE_P (olddecl))
2169 error ("extern declaration of %q+D follows "
2170 "declaration with no linkage", newdecl);
2171 locate_old_decl (olddecl);
2172 return false;
2174 else if (warn_traditional)
2176 warned |= warning (OPT_Wtraditional,
2177 "non-static declaration of %q+D "
2178 "follows static declaration", newdecl);
2181 else
2183 if (TREE_PUBLIC (newdecl))
2184 error ("non-static declaration of %q+D follows "
2185 "static declaration", newdecl);
2186 else
2187 error ("static declaration of %q+D follows "
2188 "non-static declaration", newdecl);
2190 locate_old_decl (olddecl);
2191 return false;
2194 /* Two objects with the same name declared at the same block
2195 scope must both be external references (6.7p3). */
2196 else if (!DECL_FILE_SCOPE_P (newdecl))
2198 if (DECL_EXTERNAL (newdecl))
2200 /* Extern with initializer at block scope, which will
2201 already have received an error. */
2203 else if (DECL_EXTERNAL (olddecl))
2205 error ("declaration of %q+D with no linkage follows "
2206 "extern declaration", newdecl);
2207 locate_old_decl (olddecl);
2209 else
2211 error ("redeclaration of %q+D with no linkage", newdecl);
2212 locate_old_decl (olddecl);
2215 return false;
2218 /* C++ does not permit a decl to appear multiple times at file
2219 scope. */
2220 if (warn_cxx_compat
2221 && DECL_FILE_SCOPE_P (newdecl)
2222 && !DECL_EXTERNAL (newdecl)
2223 && !DECL_EXTERNAL (olddecl))
2224 warned |= warning_at (DECL_SOURCE_LOCATION (newdecl),
2225 OPT_Wc___compat,
2226 ("duplicate declaration of %qD is "
2227 "invalid in C++"),
2228 newdecl);
2231 /* warnings */
2232 /* All decls must agree on a visibility. */
2233 if (CODE_CONTAINS_STRUCT (TREE_CODE (newdecl), TS_DECL_WITH_VIS)
2234 && DECL_VISIBILITY_SPECIFIED (newdecl) && DECL_VISIBILITY_SPECIFIED (olddecl)
2235 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2237 warned |= warning (0, "redeclaration of %q+D with different visibility "
2238 "(old visibility preserved)", newdecl);
2241 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2243 /* Diagnose inline __attribute__ ((noinline)) which is silly. */
2244 if (DECL_DECLARED_INLINE_P (newdecl)
2245 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
2246 warned |= warning (OPT_Wattributes,
2247 "inline declaration of %qD follows "
2248 "declaration with attribute noinline", newdecl);
2249 else if (DECL_DECLARED_INLINE_P (olddecl)
2250 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
2251 warned |= warning (OPT_Wattributes,
2252 "declaration of %q+D with attribute "
2253 "noinline follows inline declaration ", newdecl);
2254 else if (lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl))
2255 && lookup_attribute ("always_inline", DECL_ATTRIBUTES (olddecl)))
2256 warned |= warning (OPT_Wattributes,
2257 "declaration of %q+D with attribute "
2258 "%qs follows declaration with attribute %qs",
2259 newdecl, "noinline", "always_inline");
2260 else if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (newdecl))
2261 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
2262 warned |= warning (OPT_Wattributes,
2263 "declaration of %q+D with attribute "
2264 "%qs follows declaration with attribute %qs",
2265 newdecl, "always_inline", "noinline");
2266 else if (lookup_attribute ("cold", DECL_ATTRIBUTES (newdecl))
2267 && lookup_attribute ("hot", DECL_ATTRIBUTES (olddecl)))
2268 warned |= warning (OPT_Wattributes,
2269 "declaration of %q+D with attribute %qs follows "
2270 "declaration with attribute %qs", newdecl, "cold",
2271 "hot");
2272 else if (lookup_attribute ("hot", DECL_ATTRIBUTES (newdecl))
2273 && lookup_attribute ("cold", DECL_ATTRIBUTES (olddecl)))
2274 warned |= warning (OPT_Wattributes,
2275 "declaration of %q+D with attribute %qs follows "
2276 "declaration with attribute %qs", newdecl, "hot",
2277 "cold");
2279 else /* PARM_DECL, VAR_DECL */
2281 /* Redeclaration of a parameter is a constraint violation (this is
2282 not explicitly stated, but follows from C99 6.7p3 [no more than
2283 one declaration of the same identifier with no linkage in the
2284 same scope, except type tags] and 6.2.2p6 [parameters have no
2285 linkage]). We must check for a forward parameter declaration,
2286 indicated by TREE_ASM_WRITTEN on the old declaration - this is
2287 an extension, the mandatory diagnostic for which is handled by
2288 mark_forward_parm_decls. */
2290 if (TREE_CODE (newdecl) == PARM_DECL
2291 && (!TREE_ASM_WRITTEN (olddecl) || TREE_ASM_WRITTEN (newdecl)))
2293 error ("redefinition of parameter %q+D", newdecl);
2294 locate_old_decl (olddecl);
2295 return false;
2299 /* Optional warning for completely redundant decls. */
2300 if (!warned && !pedwarned
2301 && warn_redundant_decls
2302 /* Don't warn about a function declaration followed by a
2303 definition. */
2304 && !(TREE_CODE (newdecl) == FUNCTION_DECL
2305 && DECL_INITIAL (newdecl) && !DECL_INITIAL (olddecl))
2306 /* Don't warn about redundant redeclarations of builtins. */
2307 && !(TREE_CODE (newdecl) == FUNCTION_DECL
2308 && !DECL_BUILT_IN (newdecl)
2309 && DECL_BUILT_IN (olddecl)
2310 && !C_DECL_DECLARED_BUILTIN (olddecl))
2311 /* Don't warn about an extern followed by a definition. */
2312 && !(DECL_EXTERNAL (olddecl) && !DECL_EXTERNAL (newdecl))
2313 /* Don't warn about forward parameter decls. */
2314 && !(TREE_CODE (newdecl) == PARM_DECL
2315 && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
2316 /* Don't warn about a variable definition following a declaration. */
2317 && !(TREE_CODE (newdecl) == VAR_DECL
2318 && DECL_INITIAL (newdecl) && !DECL_INITIAL (olddecl)))
2320 warned = warning (OPT_Wredundant_decls, "redundant redeclaration of %q+D",
2321 newdecl);
2324 /* Report location of previous decl/defn. */
2325 if (warned || pedwarned)
2326 locate_old_decl (olddecl);
2328 #undef DECL_EXTERN_INLINE
2330 return retval;
2333 /* Subroutine of duplicate_decls. NEWDECL has been found to be
2334 consistent with OLDDECL, but carries new information. Merge the
2335 new information into OLDDECL. This function issues no
2336 diagnostics. */
2338 static void
2339 merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
2341 bool new_is_definition = (TREE_CODE (newdecl) == FUNCTION_DECL
2342 && DECL_INITIAL (newdecl) != 0);
2343 bool new_is_prototype = (TREE_CODE (newdecl) == FUNCTION_DECL
2344 && prototype_p (TREE_TYPE (newdecl)));
2345 bool old_is_prototype = (TREE_CODE (olddecl) == FUNCTION_DECL
2346 && prototype_p (TREE_TYPE (olddecl)));
2348 /* For real parm decl following a forward decl, rechain the old decl
2349 in its new location and clear TREE_ASM_WRITTEN (it's not a
2350 forward decl anymore). */
2351 if (TREE_CODE (newdecl) == PARM_DECL
2352 && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
2354 struct c_binding *b, **here;
2356 for (here = &current_scope->bindings; *here; here = &(*here)->prev)
2357 if ((*here)->decl == olddecl)
2358 goto found;
2359 gcc_unreachable ();
2361 found:
2362 b = *here;
2363 *here = b->prev;
2364 b->prev = current_scope->bindings;
2365 current_scope->bindings = b;
2367 TREE_ASM_WRITTEN (olddecl) = 0;
2370 DECL_ATTRIBUTES (newdecl)
2371 = targetm.merge_decl_attributes (olddecl, newdecl);
2373 /* Merge the data types specified in the two decls. */
2374 TREE_TYPE (newdecl)
2375 = TREE_TYPE (olddecl)
2376 = composite_type (newtype, oldtype);
2378 /* Lay the type out, unless already done. */
2379 if (!comptypes (oldtype, TREE_TYPE (newdecl)))
2381 if (TREE_TYPE (newdecl) != error_mark_node)
2382 layout_type (TREE_TYPE (newdecl));
2383 if (TREE_CODE (newdecl) != FUNCTION_DECL
2384 && TREE_CODE (newdecl) != TYPE_DECL
2385 && TREE_CODE (newdecl) != CONST_DECL)
2386 layout_decl (newdecl, 0);
2388 else
2390 /* Since the type is OLDDECL's, make OLDDECL's size go with. */
2391 DECL_SIZE (newdecl) = DECL_SIZE (olddecl);
2392 DECL_SIZE_UNIT (newdecl) = DECL_SIZE_UNIT (olddecl);
2393 DECL_MODE (newdecl) = DECL_MODE (olddecl);
2394 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2396 DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
2397 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2401 /* Keep the old rtl since we can safely use it. */
2402 if (HAS_RTL_P (olddecl))
2403 COPY_DECL_RTL (olddecl, newdecl);
2405 /* Merge the type qualifiers. */
2406 if (TREE_READONLY (newdecl))
2407 TREE_READONLY (olddecl) = 1;
2409 if (TREE_THIS_VOLATILE (newdecl))
2410 TREE_THIS_VOLATILE (olddecl) = 1;
2412 /* Merge deprecatedness. */
2413 if (TREE_DEPRECATED (newdecl))
2414 TREE_DEPRECATED (olddecl) = 1;
2416 /* If a decl is in a system header and the other isn't, keep the one on the
2417 system header. Otherwise, keep source location of definition rather than
2418 declaration and of prototype rather than non-prototype unless that
2419 prototype is built-in. */
2420 if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS)
2421 && DECL_IN_SYSTEM_HEADER (olddecl)
2422 && !DECL_IN_SYSTEM_HEADER (newdecl) )
2423 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2424 else if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS)
2425 && DECL_IN_SYSTEM_HEADER (newdecl)
2426 && !DECL_IN_SYSTEM_HEADER (olddecl))
2427 DECL_SOURCE_LOCATION (olddecl) = DECL_SOURCE_LOCATION (newdecl);
2428 else if ((DECL_INITIAL (newdecl) == 0 && DECL_INITIAL (olddecl) != 0)
2429 || (old_is_prototype && !new_is_prototype
2430 && !C_DECL_BUILTIN_PROTOTYPE (olddecl)))
2431 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2433 /* Merge the initialization information. */
2434 if (DECL_INITIAL (newdecl) == 0)
2435 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2437 /* Merge the threadprivate attribute. */
2438 if (TREE_CODE (olddecl) == VAR_DECL && C_DECL_THREADPRIVATE_P (olddecl))
2439 C_DECL_THREADPRIVATE_P (newdecl) = 1;
2441 if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS))
2443 /* Copy the assembler name.
2444 Currently, it can only be defined in the prototype. */
2445 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2447 /* Use visibility of whichever declaration had it specified */
2448 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2450 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2451 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2454 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2456 DECL_STATIC_CONSTRUCTOR(newdecl) |= DECL_STATIC_CONSTRUCTOR(olddecl);
2457 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
2458 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2459 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2460 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2461 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
2462 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
2463 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2464 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
2465 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
2466 DECL_IS_NOVOPS (newdecl) |= DECL_IS_NOVOPS (olddecl);
2469 /* Merge the storage class information. */
2470 merge_weak (newdecl, olddecl);
2472 /* For functions, static overrides non-static. */
2473 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2475 TREE_PUBLIC (newdecl) &= TREE_PUBLIC (olddecl);
2476 /* This is since we don't automatically
2477 copy the attributes of NEWDECL into OLDDECL. */
2478 TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
2479 /* If this clears `static', clear it in the identifier too. */
2480 if (!TREE_PUBLIC (olddecl))
2481 TREE_PUBLIC (DECL_NAME (olddecl)) = 0;
2485 /* In c99, 'extern' declaration before (or after) 'inline' means this
2486 function is not DECL_EXTERNAL, unless 'gnu_inline' attribute
2487 is present. */
2488 if (TREE_CODE (newdecl) == FUNCTION_DECL
2489 && !flag_gnu89_inline
2490 && (DECL_DECLARED_INLINE_P (newdecl)
2491 || DECL_DECLARED_INLINE_P (olddecl))
2492 && (!DECL_DECLARED_INLINE_P (newdecl)
2493 || !DECL_DECLARED_INLINE_P (olddecl)
2494 || !DECL_EXTERNAL (olddecl))
2495 && DECL_EXTERNAL (newdecl)
2496 && !lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (newdecl))
2497 && !current_function_decl)
2498 DECL_EXTERNAL (newdecl) = 0;
2500 /* An inline definition following a static declaration is not
2501 DECL_EXTERNAL. */
2502 if (new_is_definition
2503 && (DECL_DECLARED_INLINE_P (newdecl)
2504 || DECL_DECLARED_INLINE_P (olddecl))
2505 && !TREE_PUBLIC (olddecl))
2506 DECL_EXTERNAL (newdecl) = 0;
2508 if (DECL_EXTERNAL (newdecl))
2510 TREE_STATIC (newdecl) = TREE_STATIC (olddecl);
2511 DECL_EXTERNAL (newdecl) = DECL_EXTERNAL (olddecl);
2513 /* An extern decl does not override previous storage class. */
2514 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2515 if (!DECL_EXTERNAL (newdecl))
2517 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
2518 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2521 else
2523 TREE_STATIC (olddecl) = TREE_STATIC (newdecl);
2524 TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
2527 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2529 /* If we're redefining a function previously defined as extern
2530 inline, make sure we emit debug info for the inline before we
2531 throw it away, in case it was inlined into a function that
2532 hasn't been written out yet. */
2533 if (new_is_definition && DECL_INITIAL (olddecl))
2534 /* The new defn must not be inline. */
2535 DECL_UNINLINABLE (newdecl) = 1;
2536 else
2538 /* If either decl says `inline', this fn is inline, unless
2539 its definition was passed already. */
2540 if (DECL_DECLARED_INLINE_P (newdecl)
2541 || DECL_DECLARED_INLINE_P (olddecl))
2542 DECL_DECLARED_INLINE_P (newdecl) = 1;
2544 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2545 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2547 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2548 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2549 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2550 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2553 if (DECL_BUILT_IN (olddecl))
2555 /* If redeclaring a builtin function, it stays built in.
2556 But it gets tagged as having been declared. */
2557 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2558 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2559 C_DECL_DECLARED_BUILTIN (newdecl) = 1;
2560 if (new_is_prototype)
2562 C_DECL_BUILTIN_PROTOTYPE (newdecl) = 0;
2563 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2565 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2566 switch (fncode)
2568 /* If a compatible prototype of these builtin functions
2569 is seen, assume the runtime implements it with the
2570 expected semantics. */
2571 case BUILT_IN_STPCPY:
2572 if (builtin_decl_explicit_p (fncode))
2573 set_builtin_decl_implicit_p (fncode, true);
2574 break;
2575 default:
2576 break;
2580 else
2581 C_DECL_BUILTIN_PROTOTYPE (newdecl)
2582 = C_DECL_BUILTIN_PROTOTYPE (olddecl);
2585 /* Preserve function specific target and optimization options */
2586 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2587 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2588 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2589 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2591 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2592 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2593 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2594 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2596 /* Also preserve various other info from the definition. */
2597 if (!new_is_definition)
2599 tree t;
2600 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2601 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2602 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2603 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2604 DECL_ARGUMENTS (newdecl) = copy_list (DECL_ARGUMENTS (olddecl));
2605 for (t = DECL_ARGUMENTS (newdecl); t ; t = DECL_CHAIN (t))
2606 DECL_CONTEXT (t) = newdecl;
2608 /* See if we've got a function to instantiate from. */
2609 if (DECL_SAVED_TREE (olddecl))
2610 DECL_ABSTRACT_ORIGIN (newdecl)
2611 = DECL_ABSTRACT_ORIGIN (olddecl);
2615 /* Merge the USED information. */
2616 if (TREE_USED (olddecl))
2617 TREE_USED (newdecl) = 1;
2618 else if (TREE_USED (newdecl))
2619 TREE_USED (olddecl) = 1;
2620 if (TREE_CODE (olddecl) == VAR_DECL || TREE_CODE (olddecl) == PARM_DECL)
2621 DECL_READ_P (newdecl) |= DECL_READ_P (olddecl);
2622 if (DECL_PRESERVE_P (olddecl))
2623 DECL_PRESERVE_P (newdecl) = 1;
2624 else if (DECL_PRESERVE_P (newdecl))
2625 DECL_PRESERVE_P (olddecl) = 1;
2627 /* Copy most of the decl-specific fields of NEWDECL into OLDDECL.
2628 But preserve OLDDECL's DECL_UID, DECL_CONTEXT and
2629 DECL_ARGUMENTS (if appropriate). */
2631 unsigned olddecl_uid = DECL_UID (olddecl);
2632 tree olddecl_context = DECL_CONTEXT (olddecl);
2633 tree olddecl_arguments = NULL;
2634 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2635 olddecl_arguments = DECL_ARGUMENTS (olddecl);
2637 memcpy ((char *) olddecl + sizeof (struct tree_common),
2638 (char *) newdecl + sizeof (struct tree_common),
2639 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2640 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2641 switch (TREE_CODE (olddecl))
2643 case FUNCTION_DECL:
2644 case VAR_DECL:
2646 struct symtab_node *snode = olddecl->decl_with_vis.symtab_node;
2648 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2649 (char *) newdecl + sizeof (struct tree_decl_common),
2650 tree_code_size (TREE_CODE (olddecl)) - sizeof (struct tree_decl_common));
2651 olddecl->decl_with_vis.symtab_node = snode;
2653 if ((DECL_EXTERNAL (olddecl)
2654 || TREE_PUBLIC (olddecl)
2655 || TREE_STATIC (olddecl))
2656 && DECL_SECTION_NAME (newdecl) != NULL)
2657 set_decl_section_name (olddecl, DECL_SECTION_NAME (newdecl));
2659 /* This isn't quite correct for something like
2660 int __thread x attribute ((tls_model ("local-exec")));
2661 extern int __thread x;
2662 as we'll lose the "local-exec" model. */
2663 if (TREE_CODE (olddecl) == VAR_DECL
2664 && DECL_THREAD_LOCAL_P (newdecl))
2665 set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
2666 break;
2669 case FIELD_DECL:
2670 case PARM_DECL:
2671 case LABEL_DECL:
2672 case RESULT_DECL:
2673 case CONST_DECL:
2674 case TYPE_DECL:
2675 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2676 (char *) newdecl + sizeof (struct tree_decl_common),
2677 tree_code_size (TREE_CODE (olddecl)) - sizeof (struct tree_decl_common));
2678 break;
2680 default:
2682 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2683 (char *) newdecl + sizeof (struct tree_decl_common),
2684 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common));
2686 DECL_UID (olddecl) = olddecl_uid;
2687 DECL_CONTEXT (olddecl) = olddecl_context;
2688 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2689 DECL_ARGUMENTS (olddecl) = olddecl_arguments;
2692 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2693 so that encode_section_info has a chance to look at the new decl
2694 flags and attributes. */
2695 if (DECL_RTL_SET_P (olddecl)
2696 && (TREE_CODE (olddecl) == FUNCTION_DECL
2697 || (TREE_CODE (olddecl) == VAR_DECL
2698 && TREE_STATIC (olddecl))))
2699 make_decl_rtl (olddecl);
2702 /* Handle when a new declaration NEWDECL has the same name as an old
2703 one OLDDECL in the same binding contour. Prints an error message
2704 if appropriate.
2706 If safely possible, alter OLDDECL to look like NEWDECL, and return
2707 true. Otherwise, return false. */
2709 static bool
2710 duplicate_decls (tree newdecl, tree olddecl)
2712 tree newtype = NULL, oldtype = NULL;
2714 if (!diagnose_mismatched_decls (newdecl, olddecl, &newtype, &oldtype))
2716 /* Avoid `unused variable' and other warnings for OLDDECL. */
2717 TREE_NO_WARNING (olddecl) = 1;
2718 return false;
2721 merge_decls (newdecl, olddecl, newtype, oldtype);
2723 /* The NEWDECL will no longer be needed.
2725 Before releasing the node, be sure to remove function from symbol
2726 table that might have been inserted there to record comdat group.
2727 Be sure to however do not free DECL_STRUCT_FUNCTION because this
2728 structure is shared in between NEWDECL and OLDECL. */
2729 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2730 DECL_STRUCT_FUNCTION (newdecl) = NULL;
2731 if (TREE_CODE (newdecl) == FUNCTION_DECL
2732 || TREE_CODE (newdecl) == VAR_DECL)
2734 struct symtab_node *snode = symtab_node::get (newdecl);
2735 if (snode)
2736 snode->remove ();
2738 ggc_free (newdecl);
2739 return true;
2743 /* Check whether decl-node NEW_DECL shadows an existing declaration. */
2744 static void
2745 warn_if_shadowing (tree new_decl)
2747 struct c_binding *b;
2749 /* Shadow warnings wanted? */
2750 if (!warn_shadow
2751 /* No shadow warnings for internally generated vars. */
2752 || DECL_IS_BUILTIN (new_decl)
2753 /* No shadow warnings for vars made for inlining. */
2754 || DECL_FROM_INLINE (new_decl))
2755 return;
2757 /* Is anything being shadowed? Invisible decls do not count. */
2758 for (b = I_SYMBOL_BINDING (DECL_NAME (new_decl)); b; b = b->shadowed)
2759 if (b->decl && b->decl != new_decl && !b->invisible
2760 && (b->decl == error_mark_node
2761 || diagnostic_report_warnings_p (global_dc,
2762 DECL_SOURCE_LOCATION (b->decl))))
2764 tree old_decl = b->decl;
2765 bool warned = false;
2767 if (old_decl == error_mark_node)
2769 warning (OPT_Wshadow, "declaration of %q+D shadows previous "
2770 "non-variable", new_decl);
2771 break;
2773 else if (TREE_CODE (old_decl) == PARM_DECL)
2774 warned = warning (OPT_Wshadow,
2775 "declaration of %q+D shadows a parameter",
2776 new_decl);
2777 else if (DECL_FILE_SCOPE_P (old_decl))
2779 /* Do not warn if a variable shadows a function, unless
2780 the variable is a function or a pointer-to-function. */
2781 if (TREE_CODE (old_decl) == FUNCTION_DECL
2782 && TREE_CODE (new_decl) != FUNCTION_DECL
2783 && !FUNCTION_POINTER_TYPE_P (TREE_TYPE (new_decl)))
2784 continue;
2786 warned = warning_at (DECL_SOURCE_LOCATION (new_decl), OPT_Wshadow,
2787 "declaration of %qD shadows a global "
2788 "declaration",
2789 new_decl);
2791 else if (TREE_CODE (old_decl) == FUNCTION_DECL
2792 && DECL_BUILT_IN (old_decl))
2794 warning (OPT_Wshadow, "declaration of %q+D shadows "
2795 "a built-in function", new_decl);
2796 break;
2798 else
2799 warned = warning (OPT_Wshadow, "declaration of %q+D shadows a "
2800 "previous local", new_decl);
2802 if (warned)
2803 inform (DECL_SOURCE_LOCATION (old_decl),
2804 "shadowed declaration is here");
2806 break;
2810 /* Record a decl-node X as belonging to the current lexical scope.
2811 Check for errors (such as an incompatible declaration for the same
2812 name already seen in the same scope).
2814 Returns either X or an old decl for the same name.
2815 If an old decl is returned, it may have been smashed
2816 to agree with what X says. */
2818 tree
2819 pushdecl (tree x)
2821 tree name = DECL_NAME (x);
2822 struct c_scope *scope = current_scope;
2823 struct c_binding *b;
2824 bool nested = false;
2825 location_t locus = DECL_SOURCE_LOCATION (x);
2827 /* Must set DECL_CONTEXT for everything not at file scope or
2828 DECL_FILE_SCOPE_P won't work. Local externs don't count
2829 unless they have initializers (which generate code). */
2830 if (current_function_decl
2831 && ((TREE_CODE (x) != FUNCTION_DECL && TREE_CODE (x) != VAR_DECL)
2832 || DECL_INITIAL (x) || !DECL_EXTERNAL (x)))
2833 DECL_CONTEXT (x) = current_function_decl;
2835 /* Anonymous decls are just inserted in the scope. */
2836 if (!name)
2838 bind (name, x, scope, /*invisible=*/false, /*nested=*/false,
2839 locus);
2840 return x;
2843 /* First, see if there is another declaration with the same name in
2844 the current scope. If there is, duplicate_decls may do all the
2845 work for us. If duplicate_decls returns false, that indicates
2846 two incompatible decls in the same scope; we are to silently
2847 replace the old one (duplicate_decls has issued all appropriate
2848 diagnostics). In particular, we should not consider possible
2849 duplicates in the external scope, or shadowing. */
2850 b = I_SYMBOL_BINDING (name);
2851 if (b && B_IN_SCOPE (b, scope))
2853 struct c_binding *b_ext, *b_use;
2854 tree type = TREE_TYPE (x);
2855 tree visdecl = b->decl;
2856 tree vistype = TREE_TYPE (visdecl);
2857 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
2858 && COMPLETE_TYPE_P (TREE_TYPE (x)))
2859 b->inner_comp = false;
2860 b_use = b;
2861 b_ext = b;
2862 /* If this is an external linkage declaration, we should check
2863 for compatibility with the type in the external scope before
2864 setting the type at this scope based on the visible
2865 information only. */
2866 if (TREE_PUBLIC (x) && TREE_PUBLIC (visdecl))
2868 while (b_ext && !B_IN_EXTERNAL_SCOPE (b_ext))
2869 b_ext = b_ext->shadowed;
2870 if (b_ext)
2872 b_use = b_ext;
2873 if (b_use->u.type)
2874 TREE_TYPE (b_use->decl) = b_use->u.type;
2877 if (duplicate_decls (x, b_use->decl))
2879 if (b_use != b)
2881 /* Save the updated type in the external scope and
2882 restore the proper type for this scope. */
2883 tree thistype;
2884 if (comptypes (vistype, type))
2885 thistype = composite_type (vistype, type);
2886 else
2887 thistype = TREE_TYPE (b_use->decl);
2888 b_use->u.type = TREE_TYPE (b_use->decl);
2889 if (TREE_CODE (b_use->decl) == FUNCTION_DECL
2890 && DECL_BUILT_IN (b_use->decl))
2891 thistype
2892 = build_type_attribute_variant (thistype,
2893 TYPE_ATTRIBUTES
2894 (b_use->u.type));
2895 TREE_TYPE (b_use->decl) = thistype;
2897 return b_use->decl;
2899 else
2900 goto skip_external_and_shadow_checks;
2903 /* All declarations with external linkage, and all external
2904 references, go in the external scope, no matter what scope is
2905 current. However, the binding in that scope is ignored for
2906 purposes of normal name lookup. A separate binding structure is
2907 created in the requested scope; this governs the normal
2908 visibility of the symbol.
2910 The binding in the externals scope is used exclusively for
2911 detecting duplicate declarations of the same object, no matter
2912 what scope they are in; this is what we do here. (C99 6.2.7p2:
2913 All declarations that refer to the same object or function shall
2914 have compatible type; otherwise, the behavior is undefined.) */
2915 if (DECL_EXTERNAL (x) || scope == file_scope)
2917 tree type = TREE_TYPE (x);
2918 tree vistype = 0;
2919 tree visdecl = 0;
2920 bool type_saved = false;
2921 if (b && !B_IN_EXTERNAL_SCOPE (b)
2922 && (TREE_CODE (b->decl) == FUNCTION_DECL
2923 || TREE_CODE (b->decl) == VAR_DECL)
2924 && DECL_FILE_SCOPE_P (b->decl))
2926 visdecl = b->decl;
2927 vistype = TREE_TYPE (visdecl);
2929 if (scope != file_scope
2930 && !DECL_IN_SYSTEM_HEADER (x))
2931 warning (OPT_Wnested_externs, "nested extern declaration of %qD", x);
2933 while (b && !B_IN_EXTERNAL_SCOPE (b))
2935 /* If this decl might be modified, save its type. This is
2936 done here rather than when the decl is first bound
2937 because the type may change after first binding, through
2938 being completed or through attributes being added. If we
2939 encounter multiple such decls, only the first should have
2940 its type saved; the others will already have had their
2941 proper types saved and the types will not have changed as
2942 their scopes will not have been re-entered. */
2943 if (DECL_P (b->decl) && DECL_FILE_SCOPE_P (b->decl) && !type_saved)
2945 b->u.type = TREE_TYPE (b->decl);
2946 type_saved = true;
2948 if (B_IN_FILE_SCOPE (b)
2949 && TREE_CODE (b->decl) == VAR_DECL
2950 && TREE_STATIC (b->decl)
2951 && TREE_CODE (TREE_TYPE (b->decl)) == ARRAY_TYPE
2952 && !TYPE_DOMAIN (TREE_TYPE (b->decl))
2953 && TREE_CODE (type) == ARRAY_TYPE
2954 && TYPE_DOMAIN (type)
2955 && TYPE_MAX_VALUE (TYPE_DOMAIN (type))
2956 && !integer_zerop (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
2958 /* Array type completed in inner scope, which should be
2959 diagnosed if the completion does not have size 1 and
2960 it does not get completed in the file scope. */
2961 b->inner_comp = true;
2963 b = b->shadowed;
2966 /* If a matching external declaration has been found, set its
2967 type to the composite of all the types of that declaration.
2968 After the consistency checks, it will be reset to the
2969 composite of the visible types only. */
2970 if (b && (TREE_PUBLIC (x) || same_translation_unit_p (x, b->decl))
2971 && b->u.type)
2972 TREE_TYPE (b->decl) = b->u.type;
2974 /* The point of the same_translation_unit_p check here is,
2975 we want to detect a duplicate decl for a construct like
2976 foo() { extern bar(); } ... static bar(); but not if
2977 they are in different translation units. In any case,
2978 the static does not go in the externals scope. */
2979 if (b
2980 && (TREE_PUBLIC (x) || same_translation_unit_p (x, b->decl))
2981 && duplicate_decls (x, b->decl))
2983 tree thistype;
2984 if (vistype)
2986 if (comptypes (vistype, type))
2987 thistype = composite_type (vistype, type);
2988 else
2989 thistype = TREE_TYPE (b->decl);
2991 else
2992 thistype = type;
2993 b->u.type = TREE_TYPE (b->decl);
2994 if (TREE_CODE (b->decl) == FUNCTION_DECL && DECL_BUILT_IN (b->decl))
2995 thistype
2996 = build_type_attribute_variant (thistype,
2997 TYPE_ATTRIBUTES (b->u.type));
2998 TREE_TYPE (b->decl) = thistype;
2999 bind (name, b->decl, scope, /*invisible=*/false, /*nested=*/true,
3000 locus);
3001 return b->decl;
3003 else if (TREE_PUBLIC (x))
3005 if (visdecl && !b && duplicate_decls (x, visdecl))
3007 /* An external declaration at block scope referring to a
3008 visible entity with internal linkage. The composite
3009 type will already be correct for this scope, so we
3010 just need to fall through to make the declaration in
3011 this scope. */
3012 nested = true;
3013 x = visdecl;
3015 else
3017 bind (name, x, external_scope, /*invisible=*/true,
3018 /*nested=*/false, locus);
3019 nested = true;
3024 if (TREE_CODE (x) != PARM_DECL)
3025 warn_if_shadowing (x);
3027 skip_external_and_shadow_checks:
3028 if (TREE_CODE (x) == TYPE_DECL)
3030 /* So this is a typedef, set its underlying type. */
3031 set_underlying_type (x);
3033 /* If X is a typedef defined in the current function, record it
3034 for the purpose of implementing the -Wunused-local-typedefs
3035 warning. */
3036 record_locally_defined_typedef (x);
3039 bind (name, x, scope, /*invisible=*/false, nested, locus);
3041 /* If x's type is incomplete because it's based on a
3042 structure or union which has not yet been fully declared,
3043 attach it to that structure or union type, so we can go
3044 back and complete the variable declaration later, if the
3045 structure or union gets fully declared.
3047 If the input is erroneous, we can have error_mark in the type
3048 slot (e.g. "f(void a, ...)") - that doesn't count as an
3049 incomplete type. */
3050 if (TREE_TYPE (x) != error_mark_node
3051 && !COMPLETE_TYPE_P (TREE_TYPE (x)))
3053 tree element = TREE_TYPE (x);
3055 while (TREE_CODE (element) == ARRAY_TYPE)
3056 element = TREE_TYPE (element);
3057 element = TYPE_MAIN_VARIANT (element);
3059 if ((TREE_CODE (element) == RECORD_TYPE
3060 || TREE_CODE (element) == UNION_TYPE)
3061 && (TREE_CODE (x) != TYPE_DECL
3062 || TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE)
3063 && !COMPLETE_TYPE_P (element))
3064 C_TYPE_INCOMPLETE_VARS (element)
3065 = tree_cons (NULL_TREE, x, C_TYPE_INCOMPLETE_VARS (element));
3067 return x;
3070 /* Record X as belonging to file scope.
3071 This is used only internally by the Objective-C front end,
3072 and is limited to its needs. duplicate_decls is not called;
3073 if there is any preexisting decl for this identifier, it is an ICE. */
3075 tree
3076 pushdecl_top_level (tree x)
3078 tree name;
3079 bool nested = false;
3080 gcc_assert (TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == CONST_DECL);
3082 name = DECL_NAME (x);
3084 gcc_assert (TREE_CODE (x) == CONST_DECL || !I_SYMBOL_BINDING (name));
3086 if (TREE_PUBLIC (x))
3088 bind (name, x, external_scope, /*invisible=*/true, /*nested=*/false,
3089 UNKNOWN_LOCATION);
3090 nested = true;
3092 if (file_scope)
3093 bind (name, x, file_scope, /*invisible=*/false, nested, UNKNOWN_LOCATION);
3095 return x;
3098 static void
3099 implicit_decl_warning (location_t loc, tree id, tree olddecl)
3101 if (warn_implicit_function_declaration)
3103 bool warned;
3105 if (flag_isoc99)
3106 warned = pedwarn (loc, OPT_Wimplicit_function_declaration,
3107 "implicit declaration of function %qE", id);
3108 else
3109 warned = warning_at (loc, OPT_Wimplicit_function_declaration,
3110 G_("implicit declaration of function %qE"), id);
3111 if (olddecl && warned)
3112 locate_old_decl (olddecl);
3116 /* This function represents mapping of a function code FCODE
3117 to its respective header. */
3119 static const char *
3120 header_for_builtin_fn (enum built_in_function fcode)
3122 switch (fcode)
3124 CASE_FLT_FN (BUILT_IN_ACOS):
3125 CASE_FLT_FN (BUILT_IN_ACOSH):
3126 CASE_FLT_FN (BUILT_IN_ASIN):
3127 CASE_FLT_FN (BUILT_IN_ASINH):
3128 CASE_FLT_FN (BUILT_IN_ATAN):
3129 CASE_FLT_FN (BUILT_IN_ATANH):
3130 CASE_FLT_FN (BUILT_IN_ATAN2):
3131 CASE_FLT_FN (BUILT_IN_CBRT):
3132 CASE_FLT_FN (BUILT_IN_CEIL):
3133 CASE_FLT_FN (BUILT_IN_COPYSIGN):
3134 CASE_FLT_FN (BUILT_IN_COS):
3135 CASE_FLT_FN (BUILT_IN_COSH):
3136 CASE_FLT_FN (BUILT_IN_ERF):
3137 CASE_FLT_FN (BUILT_IN_ERFC):
3138 CASE_FLT_FN (BUILT_IN_EXP):
3139 CASE_FLT_FN (BUILT_IN_EXP2):
3140 CASE_FLT_FN (BUILT_IN_EXPM1):
3141 CASE_FLT_FN (BUILT_IN_FABS):
3142 CASE_FLT_FN (BUILT_IN_FDIM):
3143 CASE_FLT_FN (BUILT_IN_FLOOR):
3144 CASE_FLT_FN (BUILT_IN_FMA):
3145 CASE_FLT_FN (BUILT_IN_FMAX):
3146 CASE_FLT_FN (BUILT_IN_FMIN):
3147 CASE_FLT_FN (BUILT_IN_FMOD):
3148 CASE_FLT_FN (BUILT_IN_FREXP):
3149 CASE_FLT_FN (BUILT_IN_HYPOT):
3150 CASE_FLT_FN (BUILT_IN_ILOGB):
3151 CASE_FLT_FN (BUILT_IN_LDEXP):
3152 CASE_FLT_FN (BUILT_IN_LGAMMA):
3153 CASE_FLT_FN (BUILT_IN_LLRINT):
3154 CASE_FLT_FN (BUILT_IN_LLROUND):
3155 CASE_FLT_FN (BUILT_IN_LOG):
3156 CASE_FLT_FN (BUILT_IN_LOG10):
3157 CASE_FLT_FN (BUILT_IN_LOG1P):
3158 CASE_FLT_FN (BUILT_IN_LOG2):
3159 CASE_FLT_FN (BUILT_IN_LOGB):
3160 CASE_FLT_FN (BUILT_IN_LRINT):
3161 CASE_FLT_FN (BUILT_IN_LROUND):
3162 CASE_FLT_FN (BUILT_IN_MODF):
3163 CASE_FLT_FN (BUILT_IN_NAN):
3164 CASE_FLT_FN (BUILT_IN_NEARBYINT):
3165 CASE_FLT_FN (BUILT_IN_NEXTAFTER):
3166 CASE_FLT_FN (BUILT_IN_NEXTTOWARD):
3167 CASE_FLT_FN (BUILT_IN_POW):
3168 CASE_FLT_FN (BUILT_IN_REMAINDER):
3169 CASE_FLT_FN (BUILT_IN_REMQUO):
3170 CASE_FLT_FN (BUILT_IN_RINT):
3171 CASE_FLT_FN (BUILT_IN_ROUND):
3172 CASE_FLT_FN (BUILT_IN_SCALBLN):
3173 CASE_FLT_FN (BUILT_IN_SCALBN):
3174 CASE_FLT_FN (BUILT_IN_SIN):
3175 CASE_FLT_FN (BUILT_IN_SINH):
3176 CASE_FLT_FN (BUILT_IN_SINCOS):
3177 CASE_FLT_FN (BUILT_IN_SQRT):
3178 CASE_FLT_FN (BUILT_IN_TAN):
3179 CASE_FLT_FN (BUILT_IN_TANH):
3180 CASE_FLT_FN (BUILT_IN_TGAMMA):
3181 CASE_FLT_FN (BUILT_IN_TRUNC):
3182 case BUILT_IN_ISINF:
3183 case BUILT_IN_ISNAN:
3184 return "<math.h>";
3185 CASE_FLT_FN (BUILT_IN_CABS):
3186 CASE_FLT_FN (BUILT_IN_CACOS):
3187 CASE_FLT_FN (BUILT_IN_CACOSH):
3188 CASE_FLT_FN (BUILT_IN_CARG):
3189 CASE_FLT_FN (BUILT_IN_CASIN):
3190 CASE_FLT_FN (BUILT_IN_CASINH):
3191 CASE_FLT_FN (BUILT_IN_CATAN):
3192 CASE_FLT_FN (BUILT_IN_CATANH):
3193 CASE_FLT_FN (BUILT_IN_CCOS):
3194 CASE_FLT_FN (BUILT_IN_CCOSH):
3195 CASE_FLT_FN (BUILT_IN_CEXP):
3196 CASE_FLT_FN (BUILT_IN_CIMAG):
3197 CASE_FLT_FN (BUILT_IN_CLOG):
3198 CASE_FLT_FN (BUILT_IN_CONJ):
3199 CASE_FLT_FN (BUILT_IN_CPOW):
3200 CASE_FLT_FN (BUILT_IN_CPROJ):
3201 CASE_FLT_FN (BUILT_IN_CREAL):
3202 CASE_FLT_FN (BUILT_IN_CSIN):
3203 CASE_FLT_FN (BUILT_IN_CSINH):
3204 CASE_FLT_FN (BUILT_IN_CSQRT):
3205 CASE_FLT_FN (BUILT_IN_CTAN):
3206 CASE_FLT_FN (BUILT_IN_CTANH):
3207 return "<complex.h>";
3208 case BUILT_IN_MEMCHR:
3209 case BUILT_IN_MEMCMP:
3210 case BUILT_IN_MEMCPY:
3211 case BUILT_IN_MEMMOVE:
3212 case BUILT_IN_MEMSET:
3213 case BUILT_IN_STRCAT:
3214 case BUILT_IN_STRCHR:
3215 case BUILT_IN_STRCMP:
3216 case BUILT_IN_STRCPY:
3217 case BUILT_IN_STRCSPN:
3218 case BUILT_IN_STRLEN:
3219 case BUILT_IN_STRNCAT:
3220 case BUILT_IN_STRNCMP:
3221 case BUILT_IN_STRNCPY:
3222 case BUILT_IN_STRPBRK:
3223 case BUILT_IN_STRRCHR:
3224 case BUILT_IN_STRSPN:
3225 case BUILT_IN_STRSTR:
3226 return "<string.h>";
3227 case BUILT_IN_FPRINTF:
3228 case BUILT_IN_PUTC:
3229 case BUILT_IN_FPUTC:
3230 case BUILT_IN_FPUTS:
3231 case BUILT_IN_FSCANF:
3232 case BUILT_IN_FWRITE:
3233 case BUILT_IN_PRINTF:
3234 case BUILT_IN_PUTCHAR:
3235 case BUILT_IN_PUTS:
3236 case BUILT_IN_SCANF:
3237 case BUILT_IN_SNPRINTF:
3238 case BUILT_IN_SPRINTF:
3239 case BUILT_IN_SSCANF:
3240 case BUILT_IN_VFPRINTF:
3241 case BUILT_IN_VFSCANF:
3242 case BUILT_IN_VPRINTF:
3243 case BUILT_IN_VSCANF:
3244 case BUILT_IN_VSNPRINTF:
3245 case BUILT_IN_VSPRINTF:
3246 case BUILT_IN_VSSCANF:
3247 return "<stdio.h>";
3248 case BUILT_IN_ISALNUM:
3249 case BUILT_IN_ISALPHA:
3250 case BUILT_IN_ISBLANK:
3251 case BUILT_IN_ISCNTRL:
3252 case BUILT_IN_ISDIGIT:
3253 case BUILT_IN_ISGRAPH:
3254 case BUILT_IN_ISLOWER:
3255 case BUILT_IN_ISPRINT:
3256 case BUILT_IN_ISPUNCT:
3257 case BUILT_IN_ISSPACE:
3258 case BUILT_IN_ISUPPER:
3259 case BUILT_IN_ISXDIGIT:
3260 case BUILT_IN_TOLOWER:
3261 case BUILT_IN_TOUPPER:
3262 return "<ctype.h>";
3263 case BUILT_IN_ISWALNUM:
3264 case BUILT_IN_ISWALPHA:
3265 case BUILT_IN_ISWBLANK:
3266 case BUILT_IN_ISWCNTRL:
3267 case BUILT_IN_ISWDIGIT:
3268 case BUILT_IN_ISWGRAPH:
3269 case BUILT_IN_ISWLOWER:
3270 case BUILT_IN_ISWPRINT:
3271 case BUILT_IN_ISWPUNCT:
3272 case BUILT_IN_ISWSPACE:
3273 case BUILT_IN_ISWUPPER:
3274 case BUILT_IN_ISWXDIGIT:
3275 case BUILT_IN_TOWLOWER:
3276 case BUILT_IN_TOWUPPER:
3277 return "<wctype.h>";
3278 case BUILT_IN_ABORT:
3279 case BUILT_IN_ABS:
3280 case BUILT_IN_CALLOC:
3281 case BUILT_IN_EXIT:
3282 case BUILT_IN_FREE:
3283 case BUILT_IN_LABS:
3284 case BUILT_IN_LLABS:
3285 case BUILT_IN_MALLOC:
3286 case BUILT_IN_REALLOC:
3287 case BUILT_IN__EXIT2:
3288 case BUILT_IN_ALIGNED_ALLOC:
3289 return "<stdlib.h>";
3290 case BUILT_IN_IMAXABS:
3291 return "<inttypes.h>";
3292 case BUILT_IN_STRFTIME:
3293 return "<time.h>";
3294 default:
3295 return NULL;
3299 /* Generate an implicit declaration for identifier FUNCTIONID at LOC as a
3300 function of type int (). */
3302 tree
3303 implicitly_declare (location_t loc, tree functionid)
3305 struct c_binding *b;
3306 tree decl = 0;
3307 tree asmspec_tree;
3309 for (b = I_SYMBOL_BINDING (functionid); b; b = b->shadowed)
3311 if (B_IN_SCOPE (b, external_scope))
3313 decl = b->decl;
3314 break;
3318 if (decl)
3320 if (decl == error_mark_node)
3321 return decl;
3323 /* FIXME: Objective-C has weird not-really-builtin functions
3324 which are supposed to be visible automatically. They wind up
3325 in the external scope because they're pushed before the file
3326 scope gets created. Catch this here and rebind them into the
3327 file scope. */
3328 if (!DECL_BUILT_IN (decl) && DECL_IS_BUILTIN (decl))
3330 bind (functionid, decl, file_scope,
3331 /*invisible=*/false, /*nested=*/true,
3332 DECL_SOURCE_LOCATION (decl));
3333 return decl;
3335 else
3337 tree newtype = default_function_type;
3338 if (b->u.type)
3339 TREE_TYPE (decl) = b->u.type;
3340 /* Implicit declaration of a function already declared
3341 (somehow) in a different scope, or as a built-in.
3342 If this is the first time this has happened, warn;
3343 then recycle the old declaration but with the new type. */
3344 if (!C_DECL_IMPLICIT (decl))
3346 implicit_decl_warning (loc, functionid, decl);
3347 C_DECL_IMPLICIT (decl) = 1;
3349 if (DECL_BUILT_IN (decl))
3351 newtype = build_type_attribute_variant (newtype,
3352 TYPE_ATTRIBUTES
3353 (TREE_TYPE (decl)));
3354 if (!comptypes (newtype, TREE_TYPE (decl)))
3356 bool warned = warning_at (loc, 0, "incompatible implicit "
3357 "declaration of built-in "
3358 "function %qD", decl);
3359 /* See if we can hint which header to include. */
3360 const char *header
3361 = header_for_builtin_fn (DECL_FUNCTION_CODE (decl));
3362 if (header != NULL && warned)
3363 inform (loc, "include %qs or provide a declaration of %qD",
3364 header, decl);
3365 newtype = TREE_TYPE (decl);
3368 else
3370 if (!comptypes (newtype, TREE_TYPE (decl)))
3372 error_at (loc, "incompatible implicit declaration of "
3373 "function %qD", decl);
3374 locate_old_decl (decl);
3377 b->u.type = TREE_TYPE (decl);
3378 TREE_TYPE (decl) = newtype;
3379 bind (functionid, decl, current_scope,
3380 /*invisible=*/false, /*nested=*/true,
3381 DECL_SOURCE_LOCATION (decl));
3382 return decl;
3386 /* Not seen before. */
3387 decl = build_decl (loc, FUNCTION_DECL, functionid, default_function_type);
3388 DECL_EXTERNAL (decl) = 1;
3389 TREE_PUBLIC (decl) = 1;
3390 C_DECL_IMPLICIT (decl) = 1;
3391 implicit_decl_warning (loc, functionid, 0);
3392 asmspec_tree = maybe_apply_renaming_pragma (decl, /*asmname=*/NULL);
3393 if (asmspec_tree)
3394 set_user_assembler_name (decl, TREE_STRING_POINTER (asmspec_tree));
3396 /* C89 says implicit declarations are in the innermost block.
3397 So we record the decl in the standard fashion. */
3398 decl = pushdecl (decl);
3400 /* No need to call objc_check_decl here - it's a function type. */
3401 rest_of_decl_compilation (decl, 0, 0);
3403 /* Write a record describing this implicit function declaration
3404 to the prototypes file (if requested). */
3405 gen_aux_info_record (decl, 0, 1, 0);
3407 /* Possibly apply some default attributes to this implicit declaration. */
3408 decl_attributes (&decl, NULL_TREE, 0);
3410 return decl;
3413 /* Issue an error message for a reference to an undeclared variable
3414 ID, including a reference to a builtin outside of function-call
3415 context. Establish a binding of the identifier to error_mark_node
3416 in an appropriate scope, which will suppress further errors for the
3417 same identifier. The error message should be given location LOC. */
3418 void
3419 undeclared_variable (location_t loc, tree id)
3421 static bool already = false;
3422 struct c_scope *scope;
3424 if (current_function_decl == 0)
3426 error_at (loc, "%qE undeclared here (not in a function)", id);
3427 scope = current_scope;
3429 else
3431 if (!objc_diagnose_private_ivar (id))
3432 error_at (loc, "%qE undeclared (first use in this function)", id);
3433 if (!already)
3435 inform (loc, "each undeclared identifier is reported only"
3436 " once for each function it appears in");
3437 already = true;
3440 /* If we are parsing old-style parameter decls, current_function_decl
3441 will be nonnull but current_function_scope will be null. */
3442 scope = current_function_scope ? current_function_scope : current_scope;
3444 bind (id, error_mark_node, scope, /*invisible=*/false, /*nested=*/false,
3445 UNKNOWN_LOCATION);
3448 /* Subroutine of lookup_label, declare_label, define_label: construct a
3449 LABEL_DECL with all the proper frills. Also create a struct
3450 c_label_vars initialized for the current scope. */
3452 static tree
3453 make_label (location_t location, tree name, bool defining,
3454 struct c_label_vars **p_label_vars)
3456 tree label = build_decl (location, LABEL_DECL, name, void_type_node);
3457 DECL_CONTEXT (label) = current_function_decl;
3458 DECL_MODE (label) = VOIDmode;
3460 c_label_vars *label_vars = ggc_alloc<c_label_vars> ();
3461 label_vars->shadowed = NULL;
3462 set_spot_bindings (&label_vars->label_bindings, defining);
3463 label_vars->decls_in_scope = make_tree_vector ();
3464 label_vars->gotos = NULL;
3465 *p_label_vars = label_vars;
3467 return label;
3470 /* Get the LABEL_DECL corresponding to identifier NAME as a label.
3471 Create one if none exists so far for the current function.
3472 This is called when a label is used in a goto expression or
3473 has its address taken. */
3475 tree
3476 lookup_label (tree name)
3478 tree label;
3479 struct c_label_vars *label_vars;
3481 if (current_function_scope == 0)
3483 error ("label %qE referenced outside of any function", name);
3484 return 0;
3487 /* Use a label already defined or ref'd with this name, but not if
3488 it is inherited from a containing function and wasn't declared
3489 using __label__. */
3490 label = I_LABEL_DECL (name);
3491 if (label && (DECL_CONTEXT (label) == current_function_decl
3492 || C_DECLARED_LABEL_FLAG (label)))
3494 /* If the label has only been declared, update its apparent
3495 location to point here, for better diagnostics if it
3496 turns out not to have been defined. */
3497 if (DECL_INITIAL (label) == NULL_TREE)
3498 DECL_SOURCE_LOCATION (label) = input_location;
3499 return label;
3502 /* No label binding for that identifier; make one. */
3503 label = make_label (input_location, name, false, &label_vars);
3505 /* Ordinary labels go in the current function scope. */
3506 bind_label (name, label, current_function_scope, label_vars);
3508 return label;
3511 /* Issue a warning about DECL for a goto statement at GOTO_LOC going
3512 to LABEL. */
3514 static void
3515 warn_about_goto (location_t goto_loc, tree label, tree decl)
3517 if (variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
3518 error_at (goto_loc,
3519 "jump into scope of identifier with variably modified type");
3520 else
3521 warning_at (goto_loc, OPT_Wjump_misses_init,
3522 "jump skips variable initialization");
3523 inform (DECL_SOURCE_LOCATION (label), "label %qD defined here", label);
3524 inform (DECL_SOURCE_LOCATION (decl), "%qD declared here", decl);
3527 /* Look up a label because of a goto statement. This is like
3528 lookup_label, but also issues any appropriate warnings. */
3530 tree
3531 lookup_label_for_goto (location_t loc, tree name)
3533 tree label;
3534 struct c_label_vars *label_vars;
3535 unsigned int ix;
3536 tree decl;
3538 label = lookup_label (name);
3539 if (label == NULL_TREE)
3540 return NULL_TREE;
3542 /* If we are jumping to a different function, we can't issue any
3543 useful warnings. */
3544 if (DECL_CONTEXT (label) != current_function_decl)
3546 gcc_assert (C_DECLARED_LABEL_FLAG (label));
3547 return label;
3550 label_vars = I_LABEL_BINDING (name)->u.label;
3552 /* If the label has not yet been defined, then push this goto on a
3553 list for possible later warnings. */
3554 if (label_vars->label_bindings.scope == NULL)
3556 c_goto_bindings *g = ggc_alloc<c_goto_bindings> ();
3558 g->loc = loc;
3559 set_spot_bindings (&g->goto_bindings, true);
3560 vec_safe_push (label_vars->gotos, g);
3561 return label;
3564 /* If there are any decls in label_vars->decls_in_scope, then this
3565 goto has missed the declaration of the decl. This happens for a
3566 case like
3567 int i = 1;
3568 lab:
3570 goto lab;
3571 Issue a warning or error. */
3572 FOR_EACH_VEC_SAFE_ELT (label_vars->decls_in_scope, ix, decl)
3573 warn_about_goto (loc, label, decl);
3575 if (label_vars->label_bindings.left_stmt_expr)
3577 error_at (loc, "jump into statement expression");
3578 inform (DECL_SOURCE_LOCATION (label), "label %qD defined here", label);
3581 return label;
3584 /* Make a label named NAME in the current function, shadowing silently
3585 any that may be inherited from containing functions or containing
3586 scopes. This is called for __label__ declarations. */
3588 tree
3589 declare_label (tree name)
3591 struct c_binding *b = I_LABEL_BINDING (name);
3592 tree label;
3593 struct c_label_vars *label_vars;
3595 /* Check to make sure that the label hasn't already been declared
3596 at this scope */
3597 if (b && B_IN_CURRENT_SCOPE (b))
3599 error ("duplicate label declaration %qE", name);
3600 locate_old_decl (b->decl);
3602 /* Just use the previous declaration. */
3603 return b->decl;
3606 label = make_label (input_location, name, false, &label_vars);
3607 C_DECLARED_LABEL_FLAG (label) = 1;
3609 /* Declared labels go in the current scope. */
3610 bind_label (name, label, current_scope, label_vars);
3612 return label;
3615 /* When we define a label, issue any appropriate warnings if there are
3616 any gotos earlier in the function which jump to this label. */
3618 static void
3619 check_earlier_gotos (tree label, struct c_label_vars* label_vars)
3621 unsigned int ix;
3622 struct c_goto_bindings *g;
3624 FOR_EACH_VEC_SAFE_ELT (label_vars->gotos, ix, g)
3626 struct c_binding *b;
3627 struct c_scope *scope;
3629 /* We have a goto to this label. The goto is going forward. In
3630 g->scope, the goto is going to skip any binding which was
3631 defined after g->bindings_in_scope. */
3632 if (g->goto_bindings.scope->has_jump_unsafe_decl)
3634 for (b = g->goto_bindings.scope->bindings;
3635 b != g->goto_bindings.bindings_in_scope;
3636 b = b->prev)
3638 if (decl_jump_unsafe (b->decl))
3639 warn_about_goto (g->loc, label, b->decl);
3643 /* We also need to warn about decls defined in any scopes
3644 between the scope of the label and the scope of the goto. */
3645 for (scope = label_vars->label_bindings.scope;
3646 scope != g->goto_bindings.scope;
3647 scope = scope->outer)
3649 gcc_assert (scope != NULL);
3650 if (scope->has_jump_unsafe_decl)
3652 if (scope == label_vars->label_bindings.scope)
3653 b = label_vars->label_bindings.bindings_in_scope;
3654 else
3655 b = scope->bindings;
3656 for (; b != NULL; b = b->prev)
3658 if (decl_jump_unsafe (b->decl))
3659 warn_about_goto (g->loc, label, b->decl);
3664 if (g->goto_bindings.stmt_exprs > 0)
3666 error_at (g->loc, "jump into statement expression");
3667 inform (DECL_SOURCE_LOCATION (label), "label %qD defined here",
3668 label);
3672 /* Now that the label is defined, we will issue warnings about
3673 subsequent gotos to this label when we see them. */
3674 vec_safe_truncate (label_vars->gotos, 0);
3675 label_vars->gotos = NULL;
3678 /* Define a label, specifying the location in the source file.
3679 Return the LABEL_DECL node for the label, if the definition is valid.
3680 Otherwise return 0. */
3682 tree
3683 define_label (location_t location, tree name)
3685 /* Find any preexisting label with this name. It is an error
3686 if that label has already been defined in this function, or
3687 if there is a containing function with a declared label with
3688 the same name. */
3689 tree label = I_LABEL_DECL (name);
3691 if (label
3692 && ((DECL_CONTEXT (label) == current_function_decl
3693 && DECL_INITIAL (label) != 0)
3694 || (DECL_CONTEXT (label) != current_function_decl
3695 && C_DECLARED_LABEL_FLAG (label))))
3697 error_at (location, "duplicate label %qD", label);
3698 locate_old_decl (label);
3699 return 0;
3701 else if (label && DECL_CONTEXT (label) == current_function_decl)
3703 struct c_label_vars *label_vars = I_LABEL_BINDING (name)->u.label;
3705 /* The label has been used or declared already in this function,
3706 but not defined. Update its location to point to this
3707 definition. */
3708 DECL_SOURCE_LOCATION (label) = location;
3709 set_spot_bindings (&label_vars->label_bindings, true);
3711 /* Issue warnings as required about any goto statements from
3712 earlier in the function. */
3713 check_earlier_gotos (label, label_vars);
3715 else
3717 struct c_label_vars *label_vars;
3719 /* No label binding for that identifier; make one. */
3720 label = make_label (location, name, true, &label_vars);
3722 /* Ordinary labels go in the current function scope. */
3723 bind_label (name, label, current_function_scope, label_vars);
3726 if (!in_system_header_at (input_location) && lookup_name (name))
3727 warning_at (location, OPT_Wtraditional,
3728 "traditional C lacks a separate namespace "
3729 "for labels, identifier %qE conflicts", name);
3731 /* Mark label as having been defined. */
3732 DECL_INITIAL (label) = error_mark_node;
3733 return label;
3736 /* Get the bindings for a new switch statement. This is used to issue
3737 warnings as appropriate for jumps from the switch to case or
3738 default labels. */
3740 struct c_spot_bindings *
3741 c_get_switch_bindings (void)
3743 struct c_spot_bindings *switch_bindings;
3745 switch_bindings = XNEW (struct c_spot_bindings);
3746 set_spot_bindings (switch_bindings, true);
3747 return switch_bindings;
3750 void
3751 c_release_switch_bindings (struct c_spot_bindings *bindings)
3753 gcc_assert (bindings->stmt_exprs == 0 && !bindings->left_stmt_expr);
3754 XDELETE (bindings);
3757 /* This is called at the point of a case or default label to issue
3758 warnings about decls as needed. It returns true if it found an
3759 error, not just a warning. */
3761 bool
3762 c_check_switch_jump_warnings (struct c_spot_bindings *switch_bindings,
3763 location_t switch_loc, location_t case_loc)
3765 bool saw_error;
3766 struct c_scope *scope;
3768 saw_error = false;
3769 for (scope = current_scope;
3770 scope != switch_bindings->scope;
3771 scope = scope->outer)
3773 struct c_binding *b;
3775 gcc_assert (scope != NULL);
3777 if (!scope->has_jump_unsafe_decl)
3778 continue;
3780 for (b = scope->bindings; b != NULL; b = b->prev)
3782 if (decl_jump_unsafe (b->decl))
3784 if (variably_modified_type_p (TREE_TYPE (b->decl), NULL_TREE))
3786 saw_error = true;
3787 error_at (case_loc,
3788 ("switch jumps into scope of identifier with "
3789 "variably modified type"));
3791 else
3792 warning_at (case_loc, OPT_Wjump_misses_init,
3793 "switch jumps over variable initialization");
3794 inform (switch_loc, "switch starts here");
3795 inform (DECL_SOURCE_LOCATION (b->decl), "%qD declared here",
3796 b->decl);
3801 if (switch_bindings->stmt_exprs > 0)
3803 saw_error = true;
3804 error_at (case_loc, "switch jumps into statement expression");
3805 inform (switch_loc, "switch starts here");
3808 return saw_error;
3811 /* Given NAME, an IDENTIFIER_NODE,
3812 return the structure (or union or enum) definition for that name.
3813 If THISLEVEL_ONLY is nonzero, searches only the current_scope.
3814 CODE says which kind of type the caller wants;
3815 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
3816 If PLOC is not NULL and this returns non-null, it sets *PLOC to the
3817 location where the tag was defined.
3818 If the wrong kind of type is found, an error is reported. */
3820 static tree
3821 lookup_tag (enum tree_code code, tree name, int thislevel_only,
3822 location_t *ploc)
3824 struct c_binding *b = I_TAG_BINDING (name);
3825 int thislevel = 0;
3827 if (!b || !b->decl)
3828 return 0;
3830 /* We only care about whether it's in this level if
3831 thislevel_only was set or it might be a type clash. */
3832 if (thislevel_only || TREE_CODE (b->decl) != code)
3834 /* For our purposes, a tag in the external scope is the same as
3835 a tag in the file scope. (Primarily relevant to Objective-C
3836 and its builtin structure tags, which get pushed before the
3837 file scope is created.) */
3838 if (B_IN_CURRENT_SCOPE (b)
3839 || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
3840 thislevel = 1;
3843 if (thislevel_only && !thislevel)
3844 return 0;
3846 if (TREE_CODE (b->decl) != code)
3848 /* Definition isn't the kind we were looking for. */
3849 pending_invalid_xref = name;
3850 pending_invalid_xref_location = input_location;
3852 /* If in the same binding level as a declaration as a tag
3853 of a different type, this must not be allowed to
3854 shadow that tag, so give the error immediately.
3855 (For example, "struct foo; union foo;" is invalid.) */
3856 if (thislevel)
3857 pending_xref_error ();
3860 if (ploc != NULL)
3861 *ploc = b->locus;
3863 return b->decl;
3866 /* Print an error message now
3867 for a recent invalid struct, union or enum cross reference.
3868 We don't print them immediately because they are not invalid
3869 when used in the `struct foo;' construct for shadowing. */
3871 void
3872 pending_xref_error (void)
3874 if (pending_invalid_xref != 0)
3875 error_at (pending_invalid_xref_location, "%qE defined as wrong kind of tag",
3876 pending_invalid_xref);
3877 pending_invalid_xref = 0;
3881 /* Look up NAME in the current scope and its superiors
3882 in the namespace of variables, functions and typedefs.
3883 Return a ..._DECL node of some kind representing its definition,
3884 or return 0 if it is undefined. */
3886 tree
3887 lookup_name (tree name)
3889 struct c_binding *b = I_SYMBOL_BINDING (name);
3890 if (b && !b->invisible)
3892 maybe_record_typedef_use (b->decl);
3893 return b->decl;
3895 return 0;
3898 /* Similar to `lookup_name' but look only at the indicated scope. */
3900 static tree
3901 lookup_name_in_scope (tree name, struct c_scope *scope)
3903 struct c_binding *b;
3905 for (b = I_SYMBOL_BINDING (name); b; b = b->shadowed)
3906 if (B_IN_SCOPE (b, scope))
3907 return b->decl;
3908 return 0;
3911 /* Create the predefined scalar types of C,
3912 and some nodes representing standard constants (0, 1, (void *) 0).
3913 Initialize the global scope.
3914 Make definitions for built-in primitive functions. */
3916 void
3917 c_init_decl_processing (void)
3919 location_t save_loc = input_location;
3921 /* Initialize reserved words for parser. */
3922 c_parse_init ();
3924 current_function_decl = 0;
3926 gcc_obstack_init (&parser_obstack);
3928 /* Make the externals scope. */
3929 push_scope ();
3930 external_scope = current_scope;
3932 /* Declarations from c_common_nodes_and_builtins must not be associated
3933 with this input file, lest we get differences between using and not
3934 using preprocessed headers. */
3935 input_location = BUILTINS_LOCATION;
3937 c_common_nodes_and_builtins ();
3939 /* In C, comparisons and TRUTH_* expressions have type int. */
3940 truthvalue_type_node = integer_type_node;
3941 truthvalue_true_node = integer_one_node;
3942 truthvalue_false_node = integer_zero_node;
3944 /* Even in C99, which has a real boolean type. */
3945 pushdecl (build_decl (UNKNOWN_LOCATION, TYPE_DECL, get_identifier ("_Bool"),
3946 boolean_type_node));
3948 input_location = save_loc;
3950 make_fname_decl = c_make_fname_decl;
3951 start_fname_decls ();
3954 /* Create the VAR_DECL at LOC for __FUNCTION__ etc. ID is the name to
3955 give the decl, NAME is the initialization string and TYPE_DEP
3956 indicates whether NAME depended on the type of the function. As we
3957 don't yet implement delayed emission of static data, we mark the
3958 decl as emitted so it is not placed in the output. Anything using
3959 it must therefore pull out the STRING_CST initializer directly.
3960 FIXME. */
3962 static tree
3963 c_make_fname_decl (location_t loc, tree id, int type_dep)
3965 const char *name = fname_as_string (type_dep);
3966 tree decl, type, init;
3967 size_t length = strlen (name);
3969 type = build_array_type (char_type_node,
3970 build_index_type (size_int (length)));
3971 type = c_build_qualified_type (type, TYPE_QUAL_CONST);
3973 decl = build_decl (loc, VAR_DECL, id, type);
3975 TREE_STATIC (decl) = 1;
3976 TREE_READONLY (decl) = 1;
3977 DECL_ARTIFICIAL (decl) = 1;
3979 init = build_string (length + 1, name);
3980 free (CONST_CAST (char *, name));
3981 TREE_TYPE (init) = type;
3982 DECL_INITIAL (decl) = init;
3984 TREE_USED (decl) = 1;
3986 if (current_function_decl
3987 /* For invalid programs like this:
3989 void foo()
3990 const char* p = __FUNCTION__;
3992 the __FUNCTION__ is believed to appear in K&R style function
3993 parameter declarator. In that case we still don't have
3994 function_scope. */
3995 && (!seen_error () || current_function_scope))
3997 DECL_CONTEXT (decl) = current_function_decl;
3998 bind (id, decl, current_function_scope,
3999 /*invisible=*/false, /*nested=*/false, UNKNOWN_LOCATION);
4002 finish_decl (decl, loc, init, NULL_TREE, NULL_TREE);
4004 return decl;
4007 tree
4008 c_builtin_function (tree decl)
4010 tree type = TREE_TYPE (decl);
4011 tree id = DECL_NAME (decl);
4013 const char *name = IDENTIFIER_POINTER (id);
4014 C_DECL_BUILTIN_PROTOTYPE (decl) = prototype_p (type);
4016 /* Should never be called on a symbol with a preexisting meaning. */
4017 gcc_assert (!I_SYMBOL_BINDING (id));
4019 bind (id, decl, external_scope, /*invisible=*/true, /*nested=*/false,
4020 UNKNOWN_LOCATION);
4022 /* Builtins in the implementation namespace are made visible without
4023 needing to be explicitly declared. See push_file_scope. */
4024 if (name[0] == '_' && (name[1] == '_' || ISUPPER (name[1])))
4026 DECL_CHAIN (decl) = visible_builtins;
4027 visible_builtins = decl;
4030 return decl;
4033 tree
4034 c_builtin_function_ext_scope (tree decl)
4036 tree type = TREE_TYPE (decl);
4037 tree id = DECL_NAME (decl);
4039 const char *name = IDENTIFIER_POINTER (id);
4040 C_DECL_BUILTIN_PROTOTYPE (decl) = prototype_p (type);
4042 if (external_scope)
4043 bind (id, decl, external_scope, /*invisible=*/false, /*nested=*/false,
4044 UNKNOWN_LOCATION);
4046 /* Builtins in the implementation namespace are made visible without
4047 needing to be explicitly declared. See push_file_scope. */
4048 if (name[0] == '_' && (name[1] == '_' || ISUPPER (name[1])))
4050 DECL_CHAIN (decl) = visible_builtins;
4051 visible_builtins = decl;
4054 return decl;
4057 /* Called when a declaration is seen that contains no names to declare.
4058 If its type is a reference to a structure, union or enum inherited
4059 from a containing scope, shadow that tag name for the current scope
4060 with a forward reference.
4061 If its type defines a new named structure or union
4062 or defines an enum, it is valid but we need not do anything here.
4063 Otherwise, it is an error. */
4065 void
4066 shadow_tag (const struct c_declspecs *declspecs)
4068 shadow_tag_warned (declspecs, 0);
4071 /* WARNED is 1 if we have done a pedwarn, 2 if we have done a warning,
4072 but no pedwarn. */
4073 void
4074 shadow_tag_warned (const struct c_declspecs *declspecs, int warned)
4076 bool found_tag = false;
4078 if (declspecs->type && !declspecs->default_int_p && !declspecs->typedef_p)
4080 tree value = declspecs->type;
4081 enum tree_code code = TREE_CODE (value);
4083 if (code == RECORD_TYPE || code == UNION_TYPE || code == ENUMERAL_TYPE)
4084 /* Used to test also that TYPE_SIZE (value) != 0.
4085 That caused warning for `struct foo;' at top level in the file. */
4087 tree name = TYPE_NAME (value);
4088 tree t;
4090 found_tag = true;
4092 if (declspecs->restrict_p)
4094 error ("invalid use of %<restrict%>");
4095 warned = 1;
4098 if (name == 0)
4100 if (warned != 1 && code != ENUMERAL_TYPE)
4101 /* Empty unnamed enum OK */
4103 pedwarn (input_location, 0,
4104 "unnamed struct/union that defines no instances");
4105 warned = 1;
4108 else if (declspecs->typespec_kind != ctsk_tagdef
4109 && declspecs->typespec_kind != ctsk_tagfirstref
4110 && declspecs->storage_class != csc_none)
4112 if (warned != 1)
4113 pedwarn (input_location, 0,
4114 "empty declaration with storage class specifier "
4115 "does not redeclare tag");
4116 warned = 1;
4117 pending_xref_error ();
4119 else if (declspecs->typespec_kind != ctsk_tagdef
4120 && declspecs->typespec_kind != ctsk_tagfirstref
4121 && (declspecs->const_p
4122 || declspecs->volatile_p
4123 || declspecs->atomic_p
4124 || declspecs->restrict_p
4125 || declspecs->address_space))
4127 if (warned != 1)
4128 pedwarn (input_location, 0,
4129 "empty declaration with type qualifier "
4130 "does not redeclare tag");
4131 warned = 1;
4132 pending_xref_error ();
4134 else if (declspecs->typespec_kind != ctsk_tagdef
4135 && declspecs->typespec_kind != ctsk_tagfirstref
4136 && declspecs->alignas_p)
4138 if (warned != 1)
4139 pedwarn (input_location, 0,
4140 "empty declaration with %<_Alignas%> "
4141 "does not redeclare tag");
4142 warned = 1;
4143 pending_xref_error ();
4145 else
4147 pending_invalid_xref = 0;
4148 t = lookup_tag (code, name, 1, NULL);
4150 if (t == 0)
4152 t = make_node (code);
4153 pushtag (input_location, name, t);
4157 else
4159 if (warned != 1 && !in_system_header_at (input_location))
4161 pedwarn (input_location, 0,
4162 "useless type name in empty declaration");
4163 warned = 1;
4167 else if (warned != 1 && !in_system_header_at (input_location)
4168 && declspecs->typedef_p)
4170 pedwarn (input_location, 0, "useless type name in empty declaration");
4171 warned = 1;
4174 pending_invalid_xref = 0;
4176 if (declspecs->inline_p)
4178 error ("%<inline%> in empty declaration");
4179 warned = 1;
4182 if (declspecs->noreturn_p)
4184 error ("%<_Noreturn%> in empty declaration");
4185 warned = 1;
4188 if (current_scope == file_scope && declspecs->storage_class == csc_auto)
4190 error ("%<auto%> in file-scope empty declaration");
4191 warned = 1;
4194 if (current_scope == file_scope && declspecs->storage_class == csc_register)
4196 error ("%<register%> in file-scope empty declaration");
4197 warned = 1;
4200 if (!warned && !in_system_header_at (input_location)
4201 && declspecs->storage_class != csc_none)
4203 warning (0, "useless storage class specifier in empty declaration");
4204 warned = 2;
4207 if (!warned && !in_system_header_at (input_location) && declspecs->thread_p)
4209 warning (0, "useless %qs in empty declaration",
4210 declspecs->thread_gnu_p ? "__thread" : "_Thread_local");
4211 warned = 2;
4214 if (!warned
4215 && !in_system_header_at (input_location)
4216 && (declspecs->const_p
4217 || declspecs->volatile_p
4218 || declspecs->atomic_p
4219 || declspecs->restrict_p
4220 || declspecs->address_space))
4222 warning (0, "useless type qualifier in empty declaration");
4223 warned = 2;
4226 if (!warned && !in_system_header_at (input_location)
4227 && declspecs->alignas_p)
4229 warning (0, "useless %<_Alignas%> in empty declaration");
4230 warned = 2;
4233 if (warned != 1)
4235 if (!found_tag)
4236 pedwarn (input_location, 0, "empty declaration");
4241 /* Return the qualifiers from SPECS as a bitwise OR of TYPE_QUAL_*
4242 bits. SPECS represents declaration specifiers that the grammar
4243 only permits to contain type qualifiers and attributes. */
4246 quals_from_declspecs (const struct c_declspecs *specs)
4248 int quals = ((specs->const_p ? TYPE_QUAL_CONST : 0)
4249 | (specs->volatile_p ? TYPE_QUAL_VOLATILE : 0)
4250 | (specs->restrict_p ? TYPE_QUAL_RESTRICT : 0)
4251 | (specs->atomic_p ? TYPE_QUAL_ATOMIC : 0)
4252 | (ENCODE_QUAL_ADDR_SPACE (specs->address_space)));
4253 gcc_assert (!specs->type
4254 && !specs->decl_attr
4255 && specs->typespec_word == cts_none
4256 && specs->storage_class == csc_none
4257 && !specs->typedef_p
4258 && !specs->explicit_signed_p
4259 && !specs->deprecated_p
4260 && !specs->long_p
4261 && !specs->long_long_p
4262 && !specs->short_p
4263 && !specs->signed_p
4264 && !specs->unsigned_p
4265 && !specs->complex_p
4266 && !specs->inline_p
4267 && !specs->noreturn_p
4268 && !specs->thread_p);
4269 return quals;
4272 /* Construct an array declarator. LOC is the location of the
4273 beginning of the array (usually the opening brace). EXPR is the
4274 expression inside [], or NULL_TREE. QUALS are the type qualifiers
4275 inside the [] (to be applied to the pointer to which a parameter
4276 array is converted). STATIC_P is true if "static" is inside the
4277 [], false otherwise. VLA_UNSPEC_P is true if the array is [*], a
4278 VLA of unspecified length which is nevertheless a complete type,
4279 false otherwise. The field for the contained declarator is left to
4280 be filled in by set_array_declarator_inner. */
4282 struct c_declarator *
4283 build_array_declarator (location_t loc,
4284 tree expr, struct c_declspecs *quals, bool static_p,
4285 bool vla_unspec_p)
4287 struct c_declarator *declarator = XOBNEW (&parser_obstack,
4288 struct c_declarator);
4289 declarator->id_loc = loc;
4290 declarator->kind = cdk_array;
4291 declarator->declarator = 0;
4292 declarator->u.array.dimen = expr;
4293 if (quals)
4295 declarator->u.array.attrs = quals->attrs;
4296 declarator->u.array.quals = quals_from_declspecs (quals);
4298 else
4300 declarator->u.array.attrs = NULL_TREE;
4301 declarator->u.array.quals = 0;
4303 declarator->u.array.static_p = static_p;
4304 declarator->u.array.vla_unspec_p = vla_unspec_p;
4305 if (static_p || quals != NULL)
4306 pedwarn_c90 (loc, OPT_Wpedantic,
4307 "ISO C90 does not support %<static%> or type "
4308 "qualifiers in parameter array declarators");
4309 if (vla_unspec_p)
4310 pedwarn_c90 (loc, OPT_Wpedantic,
4311 "ISO C90 does not support %<[*]%> array declarators");
4312 if (vla_unspec_p)
4314 if (!current_scope->parm_flag)
4316 /* C99 6.7.5.2p4 */
4317 error_at (loc, "%<[*]%> not allowed in other than "
4318 "function prototype scope");
4319 declarator->u.array.vla_unspec_p = false;
4320 return NULL;
4322 current_scope->had_vla_unspec = true;
4324 return declarator;
4327 /* Set the contained declarator of an array declarator. DECL is the
4328 declarator, as constructed by build_array_declarator; INNER is what
4329 appears on the left of the []. */
4331 struct c_declarator *
4332 set_array_declarator_inner (struct c_declarator *decl,
4333 struct c_declarator *inner)
4335 decl->declarator = inner;
4336 return decl;
4339 /* INIT is a constructor that forms DECL's initializer. If the final
4340 element initializes a flexible array field, add the size of that
4341 initializer to DECL's size. */
4343 static void
4344 add_flexible_array_elts_to_size (tree decl, tree init)
4346 tree elt, type;
4348 if (vec_safe_is_empty (CONSTRUCTOR_ELTS (init)))
4349 return;
4351 elt = CONSTRUCTOR_ELTS (init)->last ().value;
4352 type = TREE_TYPE (elt);
4353 if (TREE_CODE (type) == ARRAY_TYPE
4354 && TYPE_SIZE (type) == NULL_TREE
4355 && TYPE_DOMAIN (type) != NULL_TREE
4356 && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL_TREE)
4358 complete_array_type (&type, elt, false);
4359 DECL_SIZE (decl)
4360 = size_binop (PLUS_EXPR, DECL_SIZE (decl), TYPE_SIZE (type));
4361 DECL_SIZE_UNIT (decl)
4362 = size_binop (PLUS_EXPR, DECL_SIZE_UNIT (decl), TYPE_SIZE_UNIT (type));
4366 /* Decode a "typename", such as "int **", returning a ..._TYPE node.
4367 Set *EXPR, if EXPR not NULL, to any expression to be evaluated
4368 before the type name, and set *EXPR_CONST_OPERANDS, if
4369 EXPR_CONST_OPERANDS not NULL, to indicate whether the type name may
4370 appear in a constant expression. */
4372 tree
4373 groktypename (struct c_type_name *type_name, tree *expr,
4374 bool *expr_const_operands)
4376 tree type;
4377 tree attrs = type_name->specs->attrs;
4379 type_name->specs->attrs = NULL_TREE;
4381 type = grokdeclarator (type_name->declarator, type_name->specs, TYPENAME,
4382 false, NULL, &attrs, expr, expr_const_operands,
4383 DEPRECATED_NORMAL);
4385 /* Apply attributes. */
4386 type_attributes (&type, attrs, 0);
4388 return type;
4391 /* Wrapper for decl_attributes that adds some implicit attributes
4392 to VAR_DECLs or FUNCTION_DECLs. */
4394 static tree
4395 c_decl_attributes (tree *node, tree attributes, int flags)
4397 /* Add implicit "omp declare target" attribute if requested. */
4398 if (current_omp_declare_target_attribute
4399 && ((TREE_CODE (*node) == VAR_DECL && TREE_STATIC (*node))
4400 || TREE_CODE (*node) == FUNCTION_DECL))
4402 if (TREE_CODE (*node) == VAR_DECL
4403 && ((DECL_CONTEXT (*node)
4404 && TREE_CODE (DECL_CONTEXT (*node)) == FUNCTION_DECL)
4405 || (current_function_decl && !DECL_EXTERNAL (*node))))
4406 error ("%q+D in block scope inside of declare target directive",
4407 *node);
4408 else if (TREE_CODE (*node) == VAR_DECL
4409 && !lang_hooks.types.omp_mappable_type (TREE_TYPE (*node)))
4410 error ("%q+D in declare target directive does not have mappable type",
4411 *node);
4412 else
4413 attributes = tree_cons (get_identifier ("omp declare target"),
4414 NULL_TREE, attributes);
4416 return decl_attributes (node, attributes, flags);
4420 /* Decode a declarator in an ordinary declaration or data definition.
4421 This is called as soon as the type information and variable name
4422 have been parsed, before parsing the initializer if any.
4423 Here we create the ..._DECL node, fill in its type,
4424 and put it on the list of decls for the current context.
4425 The ..._DECL node is returned as the value.
4427 Exception: for arrays where the length is not specified,
4428 the type is left null, to be filled in by `finish_decl'.
4430 Function definitions do not come here; they go to start_function
4431 instead. However, external and forward declarations of functions
4432 do go through here. Structure field declarations are done by
4433 grokfield and not through here. */
4435 tree
4436 start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs,
4437 bool initialized, tree attributes)
4439 tree decl;
4440 tree tem;
4441 tree expr = NULL_TREE;
4442 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
4444 /* An object declared as __attribute__((deprecated)) suppresses
4445 warnings of uses of other deprecated items. */
4446 if (lookup_attribute ("deprecated", attributes))
4447 deprecated_state = DEPRECATED_SUPPRESS;
4449 decl = grokdeclarator (declarator, declspecs,
4450 NORMAL, initialized, NULL, &attributes, &expr, NULL,
4451 deprecated_state);
4452 if (!decl)
4453 return 0;
4455 if (expr)
4456 add_stmt (fold_convert (void_type_node, expr));
4458 if (TREE_CODE (decl) != FUNCTION_DECL && MAIN_NAME_P (DECL_NAME (decl)))
4459 warning (OPT_Wmain, "%q+D is usually a function", decl);
4461 if (initialized)
4462 /* Is it valid for this decl to have an initializer at all?
4463 If not, set INITIALIZED to zero, which will indirectly
4464 tell 'finish_decl' to ignore the initializer once it is parsed. */
4465 switch (TREE_CODE (decl))
4467 case TYPE_DECL:
4468 error ("typedef %qD is initialized (use __typeof__ instead)", decl);
4469 initialized = 0;
4470 break;
4472 case FUNCTION_DECL:
4473 error ("function %qD is initialized like a variable", decl);
4474 initialized = 0;
4475 break;
4477 case PARM_DECL:
4478 /* DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. */
4479 error ("parameter %qD is initialized", decl);
4480 initialized = 0;
4481 break;
4483 default:
4484 /* Don't allow initializations for incomplete types except for
4485 arrays which might be completed by the initialization. */
4487 /* This can happen if the array size is an undefined macro.
4488 We already gave a warning, so we don't need another one. */
4489 if (TREE_TYPE (decl) == error_mark_node)
4490 initialized = 0;
4491 else if (COMPLETE_TYPE_P (TREE_TYPE (decl)))
4493 /* A complete type is ok if size is fixed. */
4495 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (decl))) != INTEGER_CST
4496 || C_DECL_VARIABLE_SIZE (decl))
4498 error ("variable-sized object may not be initialized");
4499 initialized = 0;
4502 else if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE)
4504 error ("variable %qD has initializer but incomplete type", decl);
4505 initialized = 0;
4507 else if (C_DECL_VARIABLE_SIZE (decl))
4509 /* Although C99 is unclear about whether incomplete arrays
4510 of VLAs themselves count as VLAs, it does not make
4511 sense to permit them to be initialized given that
4512 ordinary VLAs may not be initialized. */
4513 error ("variable-sized object may not be initialized");
4514 initialized = 0;
4518 if (initialized)
4520 if (current_scope == file_scope)
4521 TREE_STATIC (decl) = 1;
4523 /* Tell 'pushdecl' this is an initialized decl
4524 even though we don't yet have the initializer expression.
4525 Also tell 'finish_decl' it may store the real initializer. */
4526 DECL_INITIAL (decl) = error_mark_node;
4529 /* If this is a function declaration, write a record describing it to the
4530 prototypes file (if requested). */
4532 if (TREE_CODE (decl) == FUNCTION_DECL)
4533 gen_aux_info_record (decl, 0, 0, prototype_p (TREE_TYPE (decl)));
4535 /* ANSI specifies that a tentative definition which is not merged with
4536 a non-tentative definition behaves exactly like a definition with an
4537 initializer equal to zero. (Section 3.7.2)
4539 -fno-common gives strict ANSI behavior, though this tends to break
4540 a large body of code that grew up without this rule.
4542 Thread-local variables are never common, since there's no entrenched
4543 body of code to break, and it allows more efficient variable references
4544 in the presence of dynamic linking. */
4546 if (TREE_CODE (decl) == VAR_DECL
4547 && !initialized
4548 && TREE_PUBLIC (decl)
4549 && !DECL_THREAD_LOCAL_P (decl)
4550 && !flag_no_common)
4551 DECL_COMMON (decl) = 1;
4553 /* Set attributes here so if duplicate decl, will have proper attributes. */
4554 c_decl_attributes (&decl, attributes, 0);
4556 /* Handle gnu_inline attribute. */
4557 if (declspecs->inline_p
4558 && !flag_gnu89_inline
4559 && TREE_CODE (decl) == FUNCTION_DECL
4560 && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl))
4561 || current_function_decl))
4563 if (declspecs->storage_class == csc_auto && current_scope != file_scope)
4565 else if (declspecs->storage_class != csc_static)
4566 DECL_EXTERNAL (decl) = !DECL_EXTERNAL (decl);
4569 if (TREE_CODE (decl) == FUNCTION_DECL
4570 && targetm.calls.promote_prototypes (TREE_TYPE (decl)))
4572 struct c_declarator *ce = declarator;
4574 if (ce->kind == cdk_pointer)
4575 ce = declarator->declarator;
4576 if (ce->kind == cdk_function)
4578 tree args = ce->u.arg_info->parms;
4579 for (; args; args = DECL_CHAIN (args))
4581 tree type = TREE_TYPE (args);
4582 if (type && INTEGRAL_TYPE_P (type)
4583 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
4584 DECL_ARG_TYPE (args) = c_type_promotes_to (type);
4589 if (TREE_CODE (decl) == FUNCTION_DECL
4590 && DECL_DECLARED_INLINE_P (decl)
4591 && DECL_UNINLINABLE (decl)
4592 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4593 warning (OPT_Wattributes, "inline function %q+D given attribute noinline",
4594 decl);
4596 /* C99 6.7.4p3: An inline definition of a function with external
4597 linkage shall not contain a definition of a modifiable object
4598 with static storage duration... */
4599 if (TREE_CODE (decl) == VAR_DECL
4600 && current_scope != file_scope
4601 && TREE_STATIC (decl)
4602 && !TREE_READONLY (decl)
4603 && DECL_DECLARED_INLINE_P (current_function_decl)
4604 && DECL_EXTERNAL (current_function_decl))
4605 record_inline_static (input_location, current_function_decl,
4606 decl, csi_modifiable);
4608 if (c_dialect_objc ()
4609 && (TREE_CODE (decl) == VAR_DECL
4610 || TREE_CODE (decl) == FUNCTION_DECL))
4611 objc_check_global_decl (decl);
4613 /* Add this decl to the current scope.
4614 TEM may equal DECL or it may be a previous decl of the same name. */
4615 tem = pushdecl (decl);
4617 if (initialized && DECL_EXTERNAL (tem))
4619 DECL_EXTERNAL (tem) = 0;
4620 TREE_STATIC (tem) = 1;
4623 return tem;
4626 /* Subroutine of finish_decl. TYPE is the type of an uninitialized object
4627 DECL or the non-array element type if DECL is an uninitialized array.
4628 If that type has a const member, diagnose this. */
4630 static void
4631 diagnose_uninitialized_cst_member (tree decl, tree type)
4633 tree field;
4634 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
4636 tree field_type;
4637 if (TREE_CODE (field) != FIELD_DECL)
4638 continue;
4639 field_type = strip_array_types (TREE_TYPE (field));
4641 if (TYPE_QUALS (field_type) & TYPE_QUAL_CONST)
4643 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wc___compat,
4644 "uninitialized const member in %qT is invalid in C++",
4645 strip_array_types (TREE_TYPE (decl)));
4646 inform (DECL_SOURCE_LOCATION (field), "%qD should be initialized", field);
4649 if (TREE_CODE (field_type) == RECORD_TYPE
4650 || TREE_CODE (field_type) == UNION_TYPE)
4651 diagnose_uninitialized_cst_member (decl, field_type);
4655 /* Finish processing of a declaration;
4656 install its initial value.
4657 If ORIGTYPE is not NULL_TREE, it is the original type of INIT.
4658 If the length of an array type is not known before,
4659 it must be determined now, from the initial value, or it is an error.
4661 INIT_LOC is the location of the initial value. */
4663 void
4664 finish_decl (tree decl, location_t init_loc, tree init,
4665 tree origtype, tree asmspec_tree)
4667 tree type;
4668 bool was_incomplete = (DECL_SIZE (decl) == 0);
4669 const char *asmspec = 0;
4671 /* If a name was specified, get the string. */
4672 if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
4673 && DECL_FILE_SCOPE_P (decl))
4674 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
4675 if (asmspec_tree)
4676 asmspec = TREE_STRING_POINTER (asmspec_tree);
4678 if (TREE_CODE (decl) == VAR_DECL
4679 && TREE_STATIC (decl)
4680 && global_bindings_p ())
4681 /* So decl is a global variable. Record the types it uses
4682 so that we can decide later to emit debug info for them. */
4683 record_types_used_by_current_var_decl (decl);
4685 /* If `start_decl' didn't like having an initialization, ignore it now. */
4686 if (init != 0 && DECL_INITIAL (decl) == 0)
4687 init = 0;
4689 /* Don't crash if parm is initialized. */
4690 if (TREE_CODE (decl) == PARM_DECL)
4691 init = 0;
4693 if (init)
4694 store_init_value (init_loc, decl, init, origtype);
4696 if (c_dialect_objc () && (TREE_CODE (decl) == VAR_DECL
4697 || TREE_CODE (decl) == FUNCTION_DECL
4698 || TREE_CODE (decl) == FIELD_DECL))
4699 objc_check_decl (decl);
4701 type = TREE_TYPE (decl);
4703 /* Deduce size of array from initialization, if not already known. */
4704 if (TREE_CODE (type) == ARRAY_TYPE
4705 && TYPE_DOMAIN (type) == 0
4706 && TREE_CODE (decl) != TYPE_DECL)
4708 bool do_default
4709 = (TREE_STATIC (decl)
4710 /* Even if pedantic, an external linkage array
4711 may have incomplete type at first. */
4712 ? pedantic && !TREE_PUBLIC (decl)
4713 : !DECL_EXTERNAL (decl));
4714 int failure
4715 = complete_array_type (&TREE_TYPE (decl), DECL_INITIAL (decl),
4716 do_default);
4718 /* Get the completed type made by complete_array_type. */
4719 type = TREE_TYPE (decl);
4721 switch (failure)
4723 case 1:
4724 error ("initializer fails to determine size of %q+D", decl);
4725 break;
4727 case 2:
4728 if (do_default)
4729 error ("array size missing in %q+D", decl);
4730 /* If a `static' var's size isn't known,
4731 make it extern as well as static, so it does not get
4732 allocated.
4733 If it is not `static', then do not mark extern;
4734 finish_incomplete_decl will give it a default size
4735 and it will get allocated. */
4736 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4737 DECL_EXTERNAL (decl) = 1;
4738 break;
4740 case 3:
4741 error ("zero or negative size array %q+D", decl);
4742 break;
4744 case 0:
4745 /* For global variables, update the copy of the type that
4746 exists in the binding. */
4747 if (TREE_PUBLIC (decl))
4749 struct c_binding *b_ext = I_SYMBOL_BINDING (DECL_NAME (decl));
4750 while (b_ext && !B_IN_EXTERNAL_SCOPE (b_ext))
4751 b_ext = b_ext->shadowed;
4752 if (b_ext)
4754 if (b_ext->u.type && comptypes (b_ext->u.type, type))
4755 b_ext->u.type = composite_type (b_ext->u.type, type);
4756 else
4757 b_ext->u.type = type;
4760 break;
4762 default:
4763 gcc_unreachable ();
4766 if (DECL_INITIAL (decl))
4767 TREE_TYPE (DECL_INITIAL (decl)) = type;
4769 relayout_decl (decl);
4772 if (TREE_CODE (decl) == VAR_DECL)
4774 if (init && TREE_CODE (init) == CONSTRUCTOR)
4775 add_flexible_array_elts_to_size (decl, init);
4777 if (DECL_SIZE (decl) == 0 && TREE_TYPE (decl) != error_mark_node
4778 && COMPLETE_TYPE_P (TREE_TYPE (decl)))
4779 layout_decl (decl, 0);
4781 if (DECL_SIZE (decl) == 0
4782 /* Don't give an error if we already gave one earlier. */
4783 && TREE_TYPE (decl) != error_mark_node
4784 && (TREE_STATIC (decl)
4785 /* A static variable with an incomplete type
4786 is an error if it is initialized.
4787 Also if it is not file scope.
4788 Otherwise, let it through, but if it is not `extern'
4789 then it may cause an error message later. */
4790 ? (DECL_INITIAL (decl) != 0
4791 || !DECL_FILE_SCOPE_P (decl))
4792 /* An automatic variable with an incomplete type
4793 is an error. */
4794 : !DECL_EXTERNAL (decl)))
4796 error ("storage size of %q+D isn%'t known", decl);
4797 TREE_TYPE (decl) = error_mark_node;
4800 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4801 && DECL_SIZE (decl) != 0)
4803 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4804 constant_expression_warning (DECL_SIZE (decl));
4805 else
4807 error ("storage size of %q+D isn%'t constant", decl);
4808 TREE_TYPE (decl) = error_mark_node;
4812 if (TREE_USED (type))
4814 TREE_USED (decl) = 1;
4815 DECL_READ_P (decl) = 1;
4819 /* If this is a function and an assembler name is specified, reset DECL_RTL
4820 so we can give it its new name. Also, update builtin_decl if it
4821 was a normal built-in. */
4822 if (TREE_CODE (decl) == FUNCTION_DECL && asmspec)
4824 if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
4825 set_builtin_user_assembler_name (decl, asmspec);
4826 set_user_assembler_name (decl, asmspec);
4829 /* If #pragma weak was used, mark the decl weak now. */
4830 maybe_apply_pragma_weak (decl);
4832 /* Output the assembler code and/or RTL code for variables and functions,
4833 unless the type is an undefined structure or union.
4834 If not, it will get done when the type is completed. */
4836 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
4838 /* Determine the ELF visibility. */
4839 if (TREE_PUBLIC (decl))
4840 c_determine_visibility (decl);
4842 /* This is a no-op in c-lang.c or something real in objc-act.c. */
4843 if (c_dialect_objc ())
4844 objc_check_decl (decl);
4846 if (asmspec)
4848 /* If this is not a static variable, issue a warning.
4849 It doesn't make any sense to give an ASMSPEC for an
4850 ordinary, non-register local variable. Historically,
4851 GCC has accepted -- but ignored -- the ASMSPEC in
4852 this case. */
4853 if (!DECL_FILE_SCOPE_P (decl)
4854 && TREE_CODE (decl) == VAR_DECL
4855 && !C_DECL_REGISTER (decl)
4856 && !TREE_STATIC (decl))
4857 warning (0, "ignoring asm-specifier for non-static local "
4858 "variable %q+D", decl);
4859 else
4860 set_user_assembler_name (decl, asmspec);
4863 if (DECL_FILE_SCOPE_P (decl))
4865 if (DECL_INITIAL (decl) == NULL_TREE
4866 || DECL_INITIAL (decl) == error_mark_node)
4867 /* Don't output anything
4868 when a tentative file-scope definition is seen.
4869 But at end of compilation, do output code for them. */
4870 DECL_DEFER_OUTPUT (decl) = 1;
4871 if (asmspec && C_DECL_REGISTER (decl))
4872 DECL_HARD_REGISTER (decl) = 1;
4873 rest_of_decl_compilation (decl, true, 0);
4875 else
4877 /* In conjunction with an ASMSPEC, the `register'
4878 keyword indicates that we should place the variable
4879 in a particular register. */
4880 if (asmspec && C_DECL_REGISTER (decl))
4882 DECL_HARD_REGISTER (decl) = 1;
4883 /* This cannot be done for a structure with volatile
4884 fields, on which DECL_REGISTER will have been
4885 reset. */
4886 if (!DECL_REGISTER (decl))
4887 error ("cannot put object with volatile field into register");
4890 if (TREE_CODE (decl) != FUNCTION_DECL)
4892 /* If we're building a variable sized type, and we might be
4893 reachable other than via the top of the current binding
4894 level, then create a new BIND_EXPR so that we deallocate
4895 the object at the right time. */
4896 /* Note that DECL_SIZE can be null due to errors. */
4897 if (DECL_SIZE (decl)
4898 && !TREE_CONSTANT (DECL_SIZE (decl))
4899 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
4901 tree bind;
4902 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
4903 TREE_SIDE_EFFECTS (bind) = 1;
4904 add_stmt (bind);
4905 BIND_EXPR_BODY (bind) = push_stmt_list ();
4907 add_stmt (build_stmt (DECL_SOURCE_LOCATION (decl),
4908 DECL_EXPR, decl));
4913 if (!DECL_FILE_SCOPE_P (decl))
4915 /* Recompute the RTL of a local array now
4916 if it used to be an incomplete type. */
4917 if (was_incomplete
4918 && !TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
4920 /* If we used it already as memory, it must stay in memory. */
4921 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
4922 /* If it's still incomplete now, no init will save it. */
4923 if (DECL_SIZE (decl) == 0)
4924 DECL_INITIAL (decl) = 0;
4929 if (TREE_CODE (decl) == TYPE_DECL)
4931 if (!DECL_FILE_SCOPE_P (decl)
4932 && variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
4933 add_stmt (build_stmt (DECL_SOURCE_LOCATION (decl), DECL_EXPR, decl));
4935 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl), 0);
4938 /* Install a cleanup (aka destructor) if one was given. */
4939 if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
4941 tree attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
4942 if (attr)
4944 tree cleanup_id = TREE_VALUE (TREE_VALUE (attr));
4945 tree cleanup_decl = lookup_name (cleanup_id);
4946 tree cleanup;
4947 vec<tree, va_gc> *v;
4949 /* Build "cleanup(&decl)" for the destructor. */
4950 cleanup = build_unary_op (input_location, ADDR_EXPR, decl, 0);
4951 vec_alloc (v, 1);
4952 v->quick_push (cleanup);
4953 cleanup = c_build_function_call_vec (DECL_SOURCE_LOCATION (decl),
4954 vNULL, cleanup_decl, v, NULL);
4955 vec_free (v);
4957 /* Don't warn about decl unused; the cleanup uses it. */
4958 TREE_USED (decl) = 1;
4959 TREE_USED (cleanup_decl) = 1;
4960 DECL_READ_P (decl) = 1;
4962 push_cleanup (decl, cleanup, false);
4966 if (warn_cxx_compat
4967 && TREE_CODE (decl) == VAR_DECL
4968 && !DECL_EXTERNAL (decl)
4969 && DECL_INITIAL (decl) == NULL_TREE)
4971 type = strip_array_types (type);
4972 if (TREE_READONLY (decl))
4973 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wc___compat,
4974 "uninitialized const %qD is invalid in C++", decl);
4975 else if ((TREE_CODE (type) == RECORD_TYPE
4976 || TREE_CODE (type) == UNION_TYPE)
4977 && C_TYPE_FIELDS_READONLY (type))
4978 diagnose_uninitialized_cst_member (decl, type);
4981 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
4984 /* Given a parsed parameter declaration, decode it into a PARM_DECL.
4985 EXPR is NULL or a pointer to an expression that needs to be
4986 evaluated for the side effects of array size expressions in the
4987 parameters. */
4989 tree
4990 grokparm (const struct c_parm *parm, tree *expr)
4992 tree attrs = parm->attrs;
4993 tree decl = grokdeclarator (parm->declarator, parm->specs, PARM, false,
4994 NULL, &attrs, expr, NULL, DEPRECATED_NORMAL);
4996 decl_attributes (&decl, attrs, 0);
4998 return decl;
5001 /* Given a parsed parameter declaration, decode it into a PARM_DECL
5002 and push that on the current scope. EXPR is a pointer to an
5003 expression that needs to be evaluated for the side effects of array
5004 size expressions in the parameters. */
5006 void
5007 push_parm_decl (const struct c_parm *parm, tree *expr)
5009 tree attrs = parm->attrs;
5010 tree decl;
5012 decl = grokdeclarator (parm->declarator, parm->specs, PARM, false, NULL,
5013 &attrs, expr, NULL, DEPRECATED_NORMAL);
5014 decl_attributes (&decl, attrs, 0);
5016 decl = pushdecl (decl);
5018 finish_decl (decl, input_location, NULL_TREE, NULL_TREE, NULL_TREE);
5021 /* Mark all the parameter declarations to date as forward decls.
5022 Also diagnose use of this extension. */
5024 void
5025 mark_forward_parm_decls (void)
5027 struct c_binding *b;
5029 if (pedantic && !current_scope->warned_forward_parm_decls)
5031 pedwarn (input_location, OPT_Wpedantic,
5032 "ISO C forbids forward parameter declarations");
5033 current_scope->warned_forward_parm_decls = true;
5036 for (b = current_scope->bindings; b; b = b->prev)
5037 if (TREE_CODE (b->decl) == PARM_DECL)
5038 TREE_ASM_WRITTEN (b->decl) = 1;
5041 /* Build a COMPOUND_LITERAL_EXPR. TYPE is the type given in the compound
5042 literal, which may be an incomplete array type completed by the
5043 initializer; INIT is a CONSTRUCTOR at LOC that initializes the compound
5044 literal. NON_CONST is true if the initializers contain something
5045 that cannot occur in a constant expression. */
5047 tree
5048 build_compound_literal (location_t loc, tree type, tree init, bool non_const)
5050 /* We do not use start_decl here because we have a type, not a declarator;
5051 and do not use finish_decl because the decl should be stored inside
5052 the COMPOUND_LITERAL_EXPR rather than added elsewhere as a DECL_EXPR. */
5053 tree decl;
5054 tree complit;
5055 tree stmt;
5057 if (type == error_mark_node
5058 || init == error_mark_node)
5059 return error_mark_node;
5061 decl = build_decl (loc, VAR_DECL, NULL_TREE, type);
5062 DECL_EXTERNAL (decl) = 0;
5063 TREE_PUBLIC (decl) = 0;
5064 TREE_STATIC (decl) = (current_scope == file_scope);
5065 DECL_CONTEXT (decl) = current_function_decl;
5066 TREE_USED (decl) = 1;
5067 DECL_READ_P (decl) = 1;
5068 TREE_TYPE (decl) = type;
5069 TREE_READONLY (decl) = (TYPE_READONLY (type)
5070 || (TREE_CODE (type) == ARRAY_TYPE
5071 && TYPE_READONLY (TREE_TYPE (type))));
5072 store_init_value (loc, decl, init, NULL_TREE);
5074 if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
5076 int failure = complete_array_type (&TREE_TYPE (decl),
5077 DECL_INITIAL (decl), true);
5078 /* If complete_array_type returns 3, it means that the
5079 initial value of the compound literal is empty. Allow it. */
5080 gcc_assert (failure == 0 || failure == 3);
5082 type = TREE_TYPE (decl);
5083 TREE_TYPE (DECL_INITIAL (decl)) = type;
5086 if (type == error_mark_node || !COMPLETE_TYPE_P (type))
5088 c_incomplete_type_error (NULL_TREE, type);
5089 return error_mark_node;
5092 stmt = build_stmt (DECL_SOURCE_LOCATION (decl), DECL_EXPR, decl);
5093 complit = build1 (COMPOUND_LITERAL_EXPR, type, stmt);
5094 TREE_SIDE_EFFECTS (complit) = 1;
5096 layout_decl (decl, 0);
5098 if (TREE_STATIC (decl))
5100 /* This decl needs a name for the assembler output. */
5101 set_compound_literal_name (decl);
5102 DECL_DEFER_OUTPUT (decl) = 1;
5103 DECL_COMDAT (decl) = 1;
5104 DECL_ARTIFICIAL (decl) = 1;
5105 DECL_IGNORED_P (decl) = 1;
5106 pushdecl (decl);
5107 rest_of_decl_compilation (decl, 1, 0);
5110 if (non_const)
5112 complit = build2 (C_MAYBE_CONST_EXPR, type, NULL, complit);
5113 C_MAYBE_CONST_EXPR_NON_CONST (complit) = 1;
5116 return complit;
5119 /* Check the type of a compound literal. Here we just check that it
5120 is valid for C++. */
5122 void
5123 check_compound_literal_type (location_t loc, struct c_type_name *type_name)
5125 if (warn_cxx_compat
5126 && (type_name->specs->typespec_kind == ctsk_tagdef
5127 || type_name->specs->typespec_kind == ctsk_tagfirstref))
5128 warning_at (loc, OPT_Wc___compat,
5129 "defining a type in a compound literal is invalid in C++");
5132 /* Determine whether TYPE is a structure with a flexible array member,
5133 or a union containing such a structure (possibly recursively). */
5135 static bool
5136 flexible_array_type_p (tree type)
5138 tree x;
5139 switch (TREE_CODE (type))
5141 case RECORD_TYPE:
5142 x = TYPE_FIELDS (type);
5143 if (x == NULL_TREE)
5144 return false;
5145 while (DECL_CHAIN (x) != NULL_TREE)
5146 x = DECL_CHAIN (x);
5147 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
5148 && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
5149 && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
5150 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
5151 return true;
5152 return false;
5153 case UNION_TYPE:
5154 for (x = TYPE_FIELDS (type); x != NULL_TREE; x = DECL_CHAIN (x))
5156 if (flexible_array_type_p (TREE_TYPE (x)))
5157 return true;
5159 return false;
5160 default:
5161 return false;
5165 /* Performs sanity checks on the TYPE and WIDTH of the bit-field NAME,
5166 replacing with appropriate values if they are invalid. */
5167 static void
5168 check_bitfield_type_and_width (tree *type, tree *width, tree orig_name)
5170 tree type_mv;
5171 unsigned int max_width;
5172 unsigned HOST_WIDE_INT w;
5173 const char *name = (orig_name
5174 ? identifier_to_locale (IDENTIFIER_POINTER (orig_name))
5175 : _("<anonymous>"));
5177 /* Detect and ignore out of range field width and process valid
5178 field widths. */
5179 if (!INTEGRAL_TYPE_P (TREE_TYPE (*width)))
5181 error ("bit-field %qs width not an integer constant", name);
5182 *width = integer_one_node;
5184 else
5186 if (TREE_CODE (*width) != INTEGER_CST)
5188 *width = c_fully_fold (*width, false, NULL);
5189 if (TREE_CODE (*width) == INTEGER_CST)
5190 pedwarn (input_location, OPT_Wpedantic,
5191 "bit-field %qs width not an integer constant expression",
5192 name);
5194 if (TREE_CODE (*width) != INTEGER_CST)
5196 error ("bit-field %qs width not an integer constant", name);
5197 *width = integer_one_node;
5199 constant_expression_warning (*width);
5200 if (tree_int_cst_sgn (*width) < 0)
5202 error ("negative width in bit-field %qs", name);
5203 *width = integer_one_node;
5205 else if (integer_zerop (*width) && orig_name)
5207 error ("zero width for bit-field %qs", name);
5208 *width = integer_one_node;
5212 /* Detect invalid bit-field type. */
5213 if (TREE_CODE (*type) != INTEGER_TYPE
5214 && TREE_CODE (*type) != BOOLEAN_TYPE
5215 && TREE_CODE (*type) != ENUMERAL_TYPE)
5217 error ("bit-field %qs has invalid type", name);
5218 *type = unsigned_type_node;
5221 type_mv = TYPE_MAIN_VARIANT (*type);
5222 if (!in_system_header_at (input_location)
5223 && type_mv != integer_type_node
5224 && type_mv != unsigned_type_node
5225 && type_mv != boolean_type_node)
5226 pedwarn_c90 (input_location, OPT_Wpedantic,
5227 "type of bit-field %qs is a GCC extension", name);
5229 max_width = TYPE_PRECISION (*type);
5231 if (0 < compare_tree_int (*width, max_width))
5233 error ("width of %qs exceeds its type", name);
5234 w = max_width;
5235 *width = build_int_cst (integer_type_node, w);
5237 else
5238 w = tree_to_uhwi (*width);
5240 if (TREE_CODE (*type) == ENUMERAL_TYPE)
5242 struct lang_type *lt = TYPE_LANG_SPECIFIC (*type);
5243 if (!lt
5244 || w < tree_int_cst_min_precision (lt->enum_min, TYPE_SIGN (*type))
5245 || w < tree_int_cst_min_precision (lt->enum_max, TYPE_SIGN (*type)))
5246 warning (0, "%qs is narrower than values of its type", name);
5252 /* Print warning about variable length array if necessary. */
5254 static void
5255 warn_variable_length_array (tree name, tree size)
5257 if (TREE_CONSTANT (size))
5259 if (name)
5260 pedwarn_c90 (input_location, OPT_Wvla,
5261 "ISO C90 forbids array %qE whose size "
5262 "can%'t be evaluated", name);
5263 else
5264 pedwarn_c90 (input_location, OPT_Wvla, "ISO C90 forbids array "
5265 "whose size can%'t be evaluated");
5267 else
5269 if (name)
5270 pedwarn_c90 (input_location, OPT_Wvla,
5271 "ISO C90 forbids variable length array %qE", name);
5272 else
5273 pedwarn_c90 (input_location, OPT_Wvla, "ISO C90 forbids variable "
5274 "length array");
5278 /* Print warning about defaulting to int if necessary. */
5280 static void
5281 warn_defaults_to (location_t location, int opt, const char *gmsgid, ...)
5283 diagnostic_info diagnostic;
5284 va_list ap;
5286 va_start (ap, gmsgid);
5287 diagnostic_set_info (&diagnostic, gmsgid, &ap, location,
5288 flag_isoc99 ? DK_PEDWARN : DK_WARNING);
5289 diagnostic.option_index = opt;
5290 report_diagnostic (&diagnostic);
5291 va_end (ap);
5294 /* Given declspecs and a declarator,
5295 determine the name and type of the object declared
5296 and construct a ..._DECL node for it.
5297 (In one case we can return a ..._TYPE node instead.
5298 For invalid input we sometimes return 0.)
5300 DECLSPECS is a c_declspecs structure for the declaration specifiers.
5302 DECL_CONTEXT says which syntactic context this declaration is in:
5303 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
5304 FUNCDEF for a function definition. Like NORMAL but a few different
5305 error messages in each case. Return value may be zero meaning
5306 this definition is too screwy to try to parse.
5307 PARM for a parameter declaration (either within a function prototype
5308 or before a function body). Make a PARM_DECL, or return void_type_node.
5309 TYPENAME if for a typename (in a cast or sizeof).
5310 Don't make a DECL node; just return the ..._TYPE node.
5311 FIELD for a struct or union field; make a FIELD_DECL.
5312 INITIALIZED is true if the decl has an initializer.
5313 WIDTH is non-NULL for bit-fields, and is a pointer to an INTEGER_CST node
5314 representing the width of the bit-field.
5315 DECL_ATTRS points to the list of attributes that should be added to this
5316 decl. Any nested attributes that belong on the decl itself will be
5317 added to this list.
5318 If EXPR is not NULL, any expressions that need to be evaluated as
5319 part of evaluating variably modified types will be stored in *EXPR.
5320 If EXPR_CONST_OPERANDS is not NULL, *EXPR_CONST_OPERANDS will be
5321 set to indicate whether operands in *EXPR can be used in constant
5322 expressions.
5323 DEPRECATED_STATE is a deprecated_states value indicating whether
5324 deprecation warnings should be suppressed.
5326 In the TYPENAME case, DECLARATOR is really an absolute declarator.
5327 It may also be so in the PARM case, for a prototype where the
5328 argument type is specified but not the name.
5330 This function is where the complicated C meanings of `static'
5331 and `extern' are interpreted. */
5333 static tree
5334 grokdeclarator (const struct c_declarator *declarator,
5335 struct c_declspecs *declspecs,
5336 enum decl_context decl_context, bool initialized, tree *width,
5337 tree *decl_attrs, tree *expr, bool *expr_const_operands,
5338 enum deprecated_states deprecated_state)
5340 tree type = declspecs->type;
5341 bool threadp = declspecs->thread_p;
5342 enum c_storage_class storage_class = declspecs->storage_class;
5343 int constp;
5344 int restrictp;
5345 int volatilep;
5346 int atomicp;
5347 int type_quals = TYPE_UNQUALIFIED;
5348 tree name = NULL_TREE;
5349 bool funcdef_flag = false;
5350 bool funcdef_syntax = false;
5351 bool size_varies = false;
5352 tree decl_attr = declspecs->decl_attr;
5353 int array_ptr_quals = TYPE_UNQUALIFIED;
5354 tree array_ptr_attrs = NULL_TREE;
5355 int array_parm_static = 0;
5356 bool array_parm_vla_unspec_p = false;
5357 tree returned_attrs = NULL_TREE;
5358 bool bitfield = width != NULL;
5359 tree element_type;
5360 struct c_arg_info *arg_info = 0;
5361 addr_space_t as1, as2, address_space;
5362 location_t loc = UNKNOWN_LOCATION;
5363 const char *errmsg;
5364 tree expr_dummy;
5365 bool expr_const_operands_dummy;
5366 enum c_declarator_kind first_non_attr_kind;
5367 unsigned int alignas_align = 0;
5369 if (TREE_CODE (type) == ERROR_MARK)
5370 return error_mark_node;
5371 if (expr == NULL)
5372 expr = &expr_dummy;
5373 if (expr_const_operands == NULL)
5374 expr_const_operands = &expr_const_operands_dummy;
5376 *expr = declspecs->expr;
5377 *expr_const_operands = declspecs->expr_const_operands;
5379 if (decl_context == FUNCDEF)
5380 funcdef_flag = true, decl_context = NORMAL;
5382 /* Look inside a declarator for the name being declared
5383 and get it as an IDENTIFIER_NODE, for an error message. */
5385 const struct c_declarator *decl = declarator;
5387 first_non_attr_kind = cdk_attrs;
5388 while (decl)
5389 switch (decl->kind)
5391 case cdk_array:
5392 loc = decl->id_loc;
5393 /* FALL THRU. */
5395 case cdk_function:
5396 case cdk_pointer:
5397 funcdef_syntax = (decl->kind == cdk_function);
5398 decl = decl->declarator;
5399 if (first_non_attr_kind == cdk_attrs)
5400 first_non_attr_kind = decl->kind;
5401 break;
5403 case cdk_attrs:
5404 decl = decl->declarator;
5405 break;
5407 case cdk_id:
5408 loc = decl->id_loc;
5409 if (decl->u.id)
5410 name = decl->u.id;
5411 if (first_non_attr_kind == cdk_attrs)
5412 first_non_attr_kind = decl->kind;
5413 decl = 0;
5414 break;
5416 default:
5417 gcc_unreachable ();
5419 if (name == 0)
5421 gcc_assert (decl_context == PARM
5422 || decl_context == TYPENAME
5423 || (decl_context == FIELD
5424 && declarator->kind == cdk_id));
5425 gcc_assert (!initialized);
5429 /* A function definition's declarator must have the form of
5430 a function declarator. */
5432 if (funcdef_flag && !funcdef_syntax)
5433 return 0;
5435 /* If this looks like a function definition, make it one,
5436 even if it occurs where parms are expected.
5437 Then store_parm_decls will reject it and not use it as a parm. */
5438 if (decl_context == NORMAL && !funcdef_flag && current_scope->parm_flag)
5439 decl_context = PARM;
5441 if (declspecs->deprecated_p && deprecated_state != DEPRECATED_SUPPRESS)
5442 warn_deprecated_use (declspecs->type, declspecs->decl_attr);
5444 if ((decl_context == NORMAL || decl_context == FIELD)
5445 && current_scope == file_scope
5446 && variably_modified_type_p (type, NULL_TREE))
5448 if (name)
5449 error_at (loc, "variably modified %qE at file scope", name);
5450 else
5451 error_at (loc, "variably modified field at file scope");
5452 type = integer_type_node;
5455 size_varies = C_TYPE_VARIABLE_SIZE (type) != 0;
5457 /* Diagnose defaulting to "int". */
5459 if (declspecs->default_int_p && !in_system_header_at (input_location))
5461 /* Issue a warning if this is an ISO C 99 program or if
5462 -Wreturn-type and this is a function, or if -Wimplicit;
5463 prefer the former warning since it is more explicit. */
5464 if ((warn_implicit_int || warn_return_type || flag_isoc99)
5465 && funcdef_flag)
5466 warn_about_return_type = 1;
5467 else
5469 if (name)
5470 warn_defaults_to (loc, OPT_Wimplicit_int,
5471 "type defaults to %<int%> in declaration "
5472 "of %qE", name);
5473 else
5474 warn_defaults_to (loc, OPT_Wimplicit_int,
5475 "type defaults to %<int%> in type name");
5479 /* Adjust the type if a bit-field is being declared,
5480 -funsigned-bitfields applied and the type is not explicitly
5481 "signed". */
5482 if (bitfield && !flag_signed_bitfields && !declspecs->explicit_signed_p
5483 && TREE_CODE (type) == INTEGER_TYPE)
5484 type = unsigned_type_for (type);
5486 /* Figure out the type qualifiers for the declaration. There are
5487 two ways a declaration can become qualified. One is something
5488 like `const int i' where the `const' is explicit. Another is
5489 something like `typedef const int CI; CI i' where the type of the
5490 declaration contains the `const'. A third possibility is that
5491 there is a type qualifier on the element type of a typedefed
5492 array type, in which case we should extract that qualifier so
5493 that c_apply_type_quals_to_decl receives the full list of
5494 qualifiers to work with (C90 is not entirely clear about whether
5495 duplicate qualifiers should be diagnosed in this case, but it
5496 seems most appropriate to do so). */
5497 element_type = strip_array_types (type);
5498 constp = declspecs->const_p + TYPE_READONLY (element_type);
5499 restrictp = declspecs->restrict_p + TYPE_RESTRICT (element_type);
5500 volatilep = declspecs->volatile_p + TYPE_VOLATILE (element_type);
5501 atomicp = declspecs->atomic_p + TYPE_ATOMIC (element_type);
5502 as1 = declspecs->address_space;
5503 as2 = TYPE_ADDR_SPACE (element_type);
5504 address_space = ADDR_SPACE_GENERIC_P (as1)? as2 : as1;
5506 if (constp > 1)
5507 pedwarn_c90 (loc, OPT_Wpedantic, "duplicate %<const%>");
5508 if (restrictp > 1)
5509 pedwarn_c90 (loc, OPT_Wpedantic, "duplicate %<restrict%>");
5510 if (volatilep > 1)
5511 pedwarn_c90 (loc, OPT_Wpedantic, "duplicate %<volatile%>");
5512 if (atomicp > 1)
5513 pedwarn_c90 (loc, OPT_Wpedantic, "duplicate %<_Atomic%>");
5515 if (!ADDR_SPACE_GENERIC_P (as1) && !ADDR_SPACE_GENERIC_P (as2) && as1 != as2)
5516 error_at (loc, "conflicting named address spaces (%s vs %s)",
5517 c_addr_space_name (as1), c_addr_space_name (as2));
5519 if ((TREE_CODE (type) == ARRAY_TYPE
5520 || first_non_attr_kind == cdk_array)
5521 && TYPE_QUALS (element_type))
5522 type = TYPE_MAIN_VARIANT (type);
5523 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
5524 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
5525 | (volatilep ? TYPE_QUAL_VOLATILE : 0)
5526 | (atomicp ? TYPE_QUAL_ATOMIC : 0)
5527 | ENCODE_QUAL_ADDR_SPACE (address_space));
5529 /* Applying the _Atomic qualifier to an array type (through the use
5530 of typedefs or typeof) must be detected here. If the qualifier
5531 is introduced later, any appearance of applying it to an array is
5532 actually applying it to an element of that array. */
5533 if (atomicp && TREE_CODE (type) == ARRAY_TYPE)
5534 error_at (loc, "%<_Atomic%>-qualified array type");
5536 /* Warn about storage classes that are invalid for certain
5537 kinds of declarations (parameters, typenames, etc.). */
5539 if (funcdef_flag
5540 && (threadp
5541 || storage_class == csc_auto
5542 || storage_class == csc_register
5543 || storage_class == csc_typedef))
5545 if (storage_class == csc_auto)
5546 pedwarn (loc,
5547 (current_scope == file_scope) ? 0 : OPT_Wpedantic,
5548 "function definition declared %<auto%>");
5549 if (storage_class == csc_register)
5550 error_at (loc, "function definition declared %<register%>");
5551 if (storage_class == csc_typedef)
5552 error_at (loc, "function definition declared %<typedef%>");
5553 if (threadp)
5554 error_at (loc, "function definition declared %qs",
5555 declspecs->thread_gnu_p ? "__thread" : "_Thread_local");
5556 threadp = false;
5557 if (storage_class == csc_auto
5558 || storage_class == csc_register
5559 || storage_class == csc_typedef)
5560 storage_class = csc_none;
5562 else if (decl_context != NORMAL && (storage_class != csc_none || threadp))
5564 if (decl_context == PARM && storage_class == csc_register)
5566 else
5568 switch (decl_context)
5570 case FIELD:
5571 if (name)
5572 error_at (loc, "storage class specified for structure "
5573 "field %qE", name);
5574 else
5575 error_at (loc, "storage class specified for structure field");
5576 break;
5577 case PARM:
5578 if (name)
5579 error_at (loc, "storage class specified for parameter %qE",
5580 name);
5581 else
5582 error_at (loc, "storage class specified for unnamed parameter");
5583 break;
5584 default:
5585 error_at (loc, "storage class specified for typename");
5586 break;
5588 storage_class = csc_none;
5589 threadp = false;
5592 else if (storage_class == csc_extern
5593 && initialized
5594 && !funcdef_flag)
5596 /* 'extern' with initialization is invalid if not at file scope. */
5597 if (current_scope == file_scope)
5599 /* It is fine to have 'extern const' when compiling at C
5600 and C++ intersection. */
5601 if (!(warn_cxx_compat && constp))
5602 warning_at (loc, 0, "%qE initialized and declared %<extern%>",
5603 name);
5605 else
5606 error_at (loc, "%qE has both %<extern%> and initializer", name);
5608 else if (current_scope == file_scope)
5610 if (storage_class == csc_auto)
5611 error_at (loc, "file-scope declaration of %qE specifies %<auto%>",
5612 name);
5613 if (pedantic && storage_class == csc_register)
5614 pedwarn (input_location, OPT_Wpedantic,
5615 "file-scope declaration of %qE specifies %<register%>", name);
5617 else
5619 if (storage_class == csc_extern && funcdef_flag)
5620 error_at (loc, "nested function %qE declared %<extern%>", name);
5621 else if (threadp && storage_class == csc_none)
5623 error_at (loc, "function-scope %qE implicitly auto and declared "
5624 "%qs", name,
5625 declspecs->thread_gnu_p ? "__thread" : "_Thread_local");
5626 threadp = false;
5630 /* Now figure out the structure of the declarator proper.
5631 Descend through it, creating more complex types, until we reach
5632 the declared identifier (or NULL_TREE, in an absolute declarator).
5633 At each stage we maintain an unqualified version of the type
5634 together with any qualifiers that should be applied to it with
5635 c_build_qualified_type; this way, array types including
5636 multidimensional array types are first built up in unqualified
5637 form and then the qualified form is created with
5638 TYPE_MAIN_VARIANT pointing to the unqualified form. */
5640 while (declarator && declarator->kind != cdk_id)
5642 if (type == error_mark_node)
5644 declarator = declarator->declarator;
5645 continue;
5648 /* Each level of DECLARATOR is either a cdk_array (for ...[..]),
5649 a cdk_pointer (for *...),
5650 a cdk_function (for ...(...)),
5651 a cdk_attrs (for nested attributes),
5652 or a cdk_id (for the name being declared
5653 or the place in an absolute declarator
5654 where the name was omitted).
5655 For the last case, we have just exited the loop.
5657 At this point, TYPE is the type of elements of an array,
5658 or for a function to return, or for a pointer to point to.
5659 After this sequence of ifs, TYPE is the type of the
5660 array or function or pointer, and DECLARATOR has had its
5661 outermost layer removed. */
5663 if (array_ptr_quals != TYPE_UNQUALIFIED
5664 || array_ptr_attrs != NULL_TREE
5665 || array_parm_static)
5667 /* Only the innermost declarator (making a parameter be of
5668 array type which is converted to pointer type)
5669 may have static or type qualifiers. */
5670 error_at (loc, "static or type qualifiers in non-parameter array declarator");
5671 array_ptr_quals = TYPE_UNQUALIFIED;
5672 array_ptr_attrs = NULL_TREE;
5673 array_parm_static = 0;
5676 switch (declarator->kind)
5678 case cdk_attrs:
5680 /* A declarator with embedded attributes. */
5681 tree attrs = declarator->u.attrs;
5682 const struct c_declarator *inner_decl;
5683 int attr_flags = 0;
5684 declarator = declarator->declarator;
5685 inner_decl = declarator;
5686 while (inner_decl->kind == cdk_attrs)
5687 inner_decl = inner_decl->declarator;
5688 if (inner_decl->kind == cdk_id)
5689 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
5690 else if (inner_decl->kind == cdk_function)
5691 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
5692 else if (inner_decl->kind == cdk_array)
5693 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
5694 returned_attrs = type_attributes (&type,
5695 chainon (returned_attrs, attrs),
5696 attr_flags);
5697 break;
5699 case cdk_array:
5701 tree itype = NULL_TREE;
5702 tree size = declarator->u.array.dimen;
5703 /* The index is a signed object `sizetype' bits wide. */
5704 tree index_type = c_common_signed_type (sizetype);
5706 array_ptr_quals = declarator->u.array.quals;
5707 array_ptr_attrs = declarator->u.array.attrs;
5708 array_parm_static = declarator->u.array.static_p;
5709 array_parm_vla_unspec_p = declarator->u.array.vla_unspec_p;
5711 declarator = declarator->declarator;
5713 /* Check for some types that there cannot be arrays of. */
5715 if (VOID_TYPE_P (type))
5717 if (name)
5718 error_at (loc, "declaration of %qE as array of voids", name);
5719 else
5720 error_at (loc, "declaration of type name as array of voids");
5721 type = error_mark_node;
5724 if (TREE_CODE (type) == FUNCTION_TYPE)
5726 if (name)
5727 error_at (loc, "declaration of %qE as array of functions",
5728 name);
5729 else
5730 error_at (loc, "declaration of type name as array of "
5731 "functions");
5732 type = error_mark_node;
5735 if (pedantic && !in_system_header_at (input_location)
5736 && flexible_array_type_p (type))
5737 pedwarn (loc, OPT_Wpedantic,
5738 "invalid use of structure with flexible array member");
5740 if (size == error_mark_node)
5741 type = error_mark_node;
5743 if (type == error_mark_node)
5744 continue;
5746 /* If size was specified, set ITYPE to a range-type for
5747 that size. Otherwise, ITYPE remains null. finish_decl
5748 may figure it out from an initial value. */
5750 if (size)
5752 bool size_maybe_const = true;
5753 bool size_int_const = (TREE_CODE (size) == INTEGER_CST
5754 && !TREE_OVERFLOW (size));
5755 bool this_size_varies = false;
5757 /* Strip NON_LVALUE_EXPRs since we aren't using as an
5758 lvalue. */
5759 STRIP_TYPE_NOPS (size);
5761 if (!INTEGRAL_TYPE_P (TREE_TYPE (size)))
5763 if (name)
5764 error_at (loc, "size of array %qE has non-integer type",
5765 name);
5766 else
5767 error_at (loc,
5768 "size of unnamed array has non-integer type");
5769 size = integer_one_node;
5772 size = c_fully_fold (size, false, &size_maybe_const);
5774 if (pedantic && size_maybe_const && integer_zerop (size))
5776 if (name)
5777 pedwarn (loc, OPT_Wpedantic,
5778 "ISO C forbids zero-size array %qE", name);
5779 else
5780 pedwarn (loc, OPT_Wpedantic,
5781 "ISO C forbids zero-size array");
5784 if (TREE_CODE (size) == INTEGER_CST && size_maybe_const)
5786 constant_expression_warning (size);
5787 if (tree_int_cst_sgn (size) < 0)
5789 if (name)
5790 error_at (loc, "size of array %qE is negative", name);
5791 else
5792 error_at (loc, "size of unnamed array is negative");
5793 size = integer_one_node;
5795 /* Handle a size folded to an integer constant but
5796 not an integer constant expression. */
5797 if (!size_int_const)
5799 /* If this is a file scope declaration of an
5800 ordinary identifier, this is invalid code;
5801 diagnosing it here and not subsequently
5802 treating the type as variable-length avoids
5803 more confusing diagnostics later. */
5804 if ((decl_context == NORMAL || decl_context == FIELD)
5805 && current_scope == file_scope)
5806 pedwarn (input_location, 0,
5807 "variably modified %qE at file scope",
5808 name);
5809 else
5810 this_size_varies = size_varies = true;
5811 warn_variable_length_array (name, size);
5814 else if ((decl_context == NORMAL || decl_context == FIELD)
5815 && current_scope == file_scope)
5817 error_at (loc, "variably modified %qE at file scope", name);
5818 size = integer_one_node;
5820 else
5822 /* Make sure the array size remains visibly
5823 nonconstant even if it is (eg) a const variable
5824 with known value. */
5825 this_size_varies = size_varies = true;
5826 warn_variable_length_array (name, size);
5827 if (flag_sanitize & SANITIZE_VLA
5828 && decl_context == NORMAL
5829 && current_function_decl != NULL_TREE
5830 && !lookup_attribute ("no_sanitize_undefined",
5831 DECL_ATTRIBUTES
5832 (current_function_decl)))
5834 /* Evaluate the array size only once. */
5835 size = c_save_expr (size);
5836 size = c_fully_fold (size, false, NULL);
5837 size = fold_build2 (COMPOUND_EXPR, TREE_TYPE (size),
5838 ubsan_instrument_vla (loc, size),
5839 size);
5843 if (integer_zerop (size) && !this_size_varies)
5845 /* A zero-length array cannot be represented with
5846 an unsigned index type, which is what we'll
5847 get with build_index_type. Create an
5848 open-ended range instead. */
5849 itype = build_range_type (sizetype, size, NULL_TREE);
5851 else
5853 /* Arrange for the SAVE_EXPR on the inside of the
5854 MINUS_EXPR, which allows the -1 to get folded
5855 with the +1 that happens when building TYPE_SIZE. */
5856 if (size_varies)
5857 size = save_expr (size);
5858 if (this_size_varies && TREE_CODE (size) == INTEGER_CST)
5859 size = build2 (COMPOUND_EXPR, TREE_TYPE (size),
5860 integer_zero_node, size);
5862 /* Compute the maximum valid index, that is, size
5863 - 1. Do the calculation in index_type, so that
5864 if it is a variable the computations will be
5865 done in the proper mode. */
5866 itype = fold_build2_loc (loc, MINUS_EXPR, index_type,
5867 convert (index_type, size),
5868 convert (index_type,
5869 size_one_node));
5871 /* The above overflows when size does not fit
5872 in index_type.
5873 ??? While a size of INT_MAX+1 technically shouldn't
5874 cause an overflow (because we subtract 1), handling
5875 this case seems like an unnecessary complication. */
5876 if (TREE_CODE (size) == INTEGER_CST
5877 && !int_fits_type_p (size, index_type))
5879 if (name)
5880 error_at (loc, "size of array %qE is too large",
5881 name);
5882 else
5883 error_at (loc, "size of unnamed array is too large");
5884 type = error_mark_node;
5885 continue;
5888 itype = build_index_type (itype);
5890 if (this_size_varies)
5892 if (*expr)
5893 *expr = build2 (COMPOUND_EXPR, TREE_TYPE (size),
5894 *expr, size);
5895 else
5896 *expr = size;
5897 *expr_const_operands &= size_maybe_const;
5900 else if (decl_context == FIELD)
5902 bool flexible_array_member = false;
5903 if (array_parm_vla_unspec_p)
5904 /* Field names can in fact have function prototype
5905 scope so [*] is disallowed here through making
5906 the field variably modified, not through being
5907 something other than a declaration with function
5908 prototype scope. */
5909 size_varies = true;
5910 else
5912 const struct c_declarator *t = declarator;
5913 while (t->kind == cdk_attrs)
5914 t = t->declarator;
5915 flexible_array_member = (t->kind == cdk_id);
5917 if (flexible_array_member
5918 && !in_system_header_at (input_location))
5919 pedwarn_c90 (loc, OPT_Wpedantic, "ISO C90 does not "
5920 "support flexible array members");
5922 /* ISO C99 Flexible array members are effectively
5923 identical to GCC's zero-length array extension. */
5924 if (flexible_array_member || array_parm_vla_unspec_p)
5925 itype = build_range_type (sizetype, size_zero_node,
5926 NULL_TREE);
5928 else if (decl_context == PARM)
5930 if (array_parm_vla_unspec_p)
5932 itype = build_range_type (sizetype, size_zero_node, NULL_TREE);
5933 size_varies = true;
5936 else if (decl_context == TYPENAME)
5938 if (array_parm_vla_unspec_p)
5940 /* C99 6.7.5.2p4 */
5941 warning (0, "%<[*]%> not in a declaration");
5942 /* We use this to avoid messing up with incomplete
5943 array types of the same type, that would
5944 otherwise be modified below. */
5945 itype = build_range_type (sizetype, size_zero_node,
5946 NULL_TREE);
5947 size_varies = true;
5951 /* Complain about arrays of incomplete types. */
5952 if (!COMPLETE_TYPE_P (type))
5954 error_at (loc, "array type has incomplete element type");
5955 type = error_mark_node;
5957 else
5958 /* When itype is NULL, a shared incomplete array type is
5959 returned for all array of a given type. Elsewhere we
5960 make sure we don't complete that type before copying
5961 it, but here we want to make sure we don't ever
5962 modify the shared type, so we gcc_assert (itype)
5963 below. */
5965 addr_space_t as = DECODE_QUAL_ADDR_SPACE (type_quals);
5966 if (!ADDR_SPACE_GENERIC_P (as) && as != TYPE_ADDR_SPACE (type))
5967 type = build_qualified_type (type,
5968 ENCODE_QUAL_ADDR_SPACE (as));
5970 type = build_array_type (type, itype);
5973 if (type != error_mark_node)
5975 if (size_varies)
5977 /* It is ok to modify type here even if itype is
5978 NULL: if size_varies, we're in a
5979 multi-dimensional array and the inner type has
5980 variable size, so the enclosing shared array type
5981 must too. */
5982 if (size && TREE_CODE (size) == INTEGER_CST)
5983 type
5984 = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
5985 C_TYPE_VARIABLE_SIZE (type) = 1;
5988 /* The GCC extension for zero-length arrays differs from
5989 ISO flexible array members in that sizeof yields
5990 zero. */
5991 if (size && integer_zerop (size))
5993 gcc_assert (itype);
5994 type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
5995 TYPE_SIZE (type) = bitsize_zero_node;
5996 TYPE_SIZE_UNIT (type) = size_zero_node;
5997 SET_TYPE_STRUCTURAL_EQUALITY (type);
5999 if (array_parm_vla_unspec_p)
6001 gcc_assert (itype);
6002 /* The type is complete. C99 6.7.5.2p4 */
6003 type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
6004 TYPE_SIZE (type) = bitsize_zero_node;
6005 TYPE_SIZE_UNIT (type) = size_zero_node;
6006 SET_TYPE_STRUCTURAL_EQUALITY (type);
6010 if (decl_context != PARM
6011 && (array_ptr_quals != TYPE_UNQUALIFIED
6012 || array_ptr_attrs != NULL_TREE
6013 || array_parm_static))
6015 error_at (loc, "static or type qualifiers in non-parameter array declarator");
6016 array_ptr_quals = TYPE_UNQUALIFIED;
6017 array_ptr_attrs = NULL_TREE;
6018 array_parm_static = 0;
6020 break;
6022 case cdk_function:
6024 /* Say it's a definition only for the declarator closest
6025 to the identifier, apart possibly from some
6026 attributes. */
6027 bool really_funcdef = false;
6028 tree arg_types;
6029 if (funcdef_flag)
6031 const struct c_declarator *t = declarator->declarator;
6032 while (t->kind == cdk_attrs)
6033 t = t->declarator;
6034 really_funcdef = (t->kind == cdk_id);
6037 /* Declaring a function type. Make sure we have a valid
6038 type for the function to return. */
6039 if (type == error_mark_node)
6040 continue;
6042 size_varies = false;
6044 /* Warn about some types functions can't return. */
6045 if (TREE_CODE (type) == FUNCTION_TYPE)
6047 if (name)
6048 error_at (loc, "%qE declared as function returning a "
6049 "function", name);
6050 else
6051 error_at (loc, "type name declared as function "
6052 "returning a function");
6053 type = integer_type_node;
6055 if (TREE_CODE (type) == ARRAY_TYPE)
6057 if (name)
6058 error_at (loc, "%qE declared as function returning an array",
6059 name);
6060 else
6061 error_at (loc, "type name declared as function returning "
6062 "an array");
6063 type = integer_type_node;
6065 errmsg = targetm.invalid_return_type (type);
6066 if (errmsg)
6068 error (errmsg);
6069 type = integer_type_node;
6072 /* Construct the function type and go to the next
6073 inner layer of declarator. */
6074 arg_info = declarator->u.arg_info;
6075 arg_types = grokparms (arg_info, really_funcdef);
6077 /* Type qualifiers before the return type of the function
6078 qualify the return type, not the function type. */
6079 if (type_quals)
6081 /* Type qualifiers on a function return type are
6082 normally permitted by the standard but have no
6083 effect, so give a warning at -Wreturn-type.
6084 Qualifiers on a void return type are banned on
6085 function definitions in ISO C; GCC used to used
6086 them for noreturn functions. */
6087 if (VOID_TYPE_P (type) && really_funcdef)
6088 pedwarn (loc, 0,
6089 "function definition has qualified void return type");
6090 else
6091 warning_at (loc, OPT_Wignored_qualifiers,
6092 "type qualifiers ignored on function return type");
6094 type = c_build_qualified_type (type, type_quals);
6096 type_quals = TYPE_UNQUALIFIED;
6098 type = build_function_type (type, arg_types);
6099 declarator = declarator->declarator;
6101 /* Set the TYPE_CONTEXTs for each tagged type which is local to
6102 the formal parameter list of this FUNCTION_TYPE to point to
6103 the FUNCTION_TYPE node itself. */
6105 c_arg_tag *tag;
6106 unsigned ix;
6108 FOR_EACH_VEC_SAFE_ELT_REVERSE (arg_info->tags, ix, tag)
6109 TYPE_CONTEXT (tag->type) = type;
6111 break;
6113 case cdk_pointer:
6115 /* Merge any constancy or volatility into the target type
6116 for the pointer. */
6117 if ((type_quals & TYPE_QUAL_ATOMIC)
6118 && TREE_CODE (type) == FUNCTION_TYPE)
6120 error_at (loc,
6121 "%<_Atomic%>-qualified function type");
6122 type_quals &= ~TYPE_QUAL_ATOMIC;
6124 else if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
6125 && type_quals)
6126 pedwarn (loc, OPT_Wpedantic,
6127 "ISO C forbids qualified function types");
6128 if (type_quals)
6129 type = c_build_qualified_type (type, type_quals);
6130 size_varies = false;
6132 /* When the pointed-to type involves components of variable size,
6133 care must be taken to ensure that the size evaluation code is
6134 emitted early enough to dominate all the possible later uses
6135 and late enough for the variables on which it depends to have
6136 been assigned.
6138 This is expected to happen automatically when the pointed-to
6139 type has a name/declaration of it's own, but special attention
6140 is required if the type is anonymous.
6142 We handle the NORMAL and FIELD contexts here by attaching an
6143 artificial TYPE_DECL to such pointed-to type. This forces the
6144 sizes evaluation at a safe point and ensures it is not deferred
6145 until e.g. within a deeper conditional context.
6147 We expect nothing to be needed here for PARM or TYPENAME.
6148 Pushing a TYPE_DECL at this point for TYPENAME would actually
6149 be incorrect, as we might be in the middle of an expression
6150 with side effects on the pointed-to type size "arguments" prior
6151 to the pointer declaration point and the fake TYPE_DECL in the
6152 enclosing context would force the size evaluation prior to the
6153 side effects. */
6155 if (!TYPE_NAME (type)
6156 && (decl_context == NORMAL || decl_context == FIELD)
6157 && variably_modified_type_p (type, NULL_TREE))
6159 tree decl = build_decl (loc, TYPE_DECL, NULL_TREE, type);
6160 DECL_ARTIFICIAL (decl) = 1;
6161 pushdecl (decl);
6162 finish_decl (decl, loc, NULL_TREE, NULL_TREE, NULL_TREE);
6163 TYPE_NAME (type) = decl;
6166 type = c_build_pointer_type (type);
6168 /* Process type qualifiers (such as const or volatile)
6169 that were given inside the `*'. */
6170 type_quals = declarator->u.pointer_quals;
6172 declarator = declarator->declarator;
6173 break;
6175 default:
6176 gcc_unreachable ();
6179 *decl_attrs = chainon (returned_attrs, *decl_attrs);
6181 /* Now TYPE has the actual type, apart from any qualifiers in
6182 TYPE_QUALS. */
6184 /* Warn about address space used for things other than static memory or
6185 pointers. */
6186 address_space = DECODE_QUAL_ADDR_SPACE (type_quals);
6187 if (!ADDR_SPACE_GENERIC_P (address_space))
6189 if (decl_context == NORMAL)
6191 switch (storage_class)
6193 case csc_auto:
6194 error ("%qs combined with %<auto%> qualifier for %qE",
6195 c_addr_space_name (address_space), name);
6196 break;
6197 case csc_register:
6198 error ("%qs combined with %<register%> qualifier for %qE",
6199 c_addr_space_name (address_space), name);
6200 break;
6201 case csc_none:
6202 if (current_function_scope)
6204 error ("%qs specified for auto variable %qE",
6205 c_addr_space_name (address_space), name);
6206 break;
6208 break;
6209 case csc_static:
6210 case csc_extern:
6211 case csc_typedef:
6212 break;
6213 default:
6214 gcc_unreachable ();
6217 else if (decl_context == PARM && TREE_CODE (type) != ARRAY_TYPE)
6219 if (name)
6220 error ("%qs specified for parameter %qE",
6221 c_addr_space_name (address_space), name);
6222 else
6223 error ("%qs specified for unnamed parameter",
6224 c_addr_space_name (address_space));
6226 else if (decl_context == FIELD)
6228 if (name)
6229 error ("%qs specified for structure field %qE",
6230 c_addr_space_name (address_space), name);
6231 else
6232 error ("%qs specified for structure field",
6233 c_addr_space_name (address_space));
6237 /* Check the type and width of a bit-field. */
6238 if (bitfield)
6240 check_bitfield_type_and_width (&type, width, name);
6241 /* C11 makes it implementation-defined (6.7.2.1#5) whether
6242 atomic types are permitted for bit-fields; we have no code to
6243 make bit-field accesses atomic, so disallow them. */
6244 if (type_quals & TYPE_QUAL_ATOMIC)
6246 if (name)
6247 error ("bit-field %qE has atomic type", name);
6248 else
6249 error ("bit-field has atomic type");
6250 type_quals &= ~TYPE_QUAL_ATOMIC;
6254 /* Reject invalid uses of _Alignas. */
6255 if (declspecs->alignas_p)
6257 if (storage_class == csc_typedef)
6258 error_at (loc, "alignment specified for typedef %qE", name);
6259 else if (storage_class == csc_register)
6260 error_at (loc, "alignment specified for %<register%> object %qE",
6261 name);
6262 else if (decl_context == PARM)
6264 if (name)
6265 error_at (loc, "alignment specified for parameter %qE", name);
6266 else
6267 error_at (loc, "alignment specified for unnamed parameter");
6269 else if (bitfield)
6271 if (name)
6272 error_at (loc, "alignment specified for bit-field %qE", name);
6273 else
6274 error_at (loc, "alignment specified for unnamed bit-field");
6276 else if (TREE_CODE (type) == FUNCTION_TYPE)
6277 error_at (loc, "alignment specified for function %qE", name);
6278 else if (declspecs->align_log != -1)
6280 alignas_align = 1U << declspecs->align_log;
6281 if (alignas_align < min_align_of_type (type))
6283 if (name)
6284 error_at (loc, "%<_Alignas%> specifiers cannot reduce "
6285 "alignment of %qE", name);
6286 else
6287 error_at (loc, "%<_Alignas%> specifiers cannot reduce "
6288 "alignment of unnamed field");
6289 alignas_align = 0;
6294 /* Did array size calculations overflow or does the array cover more
6295 than half of the address-space? */
6296 if (TREE_CODE (type) == ARRAY_TYPE
6297 && COMPLETE_TYPE_P (type)
6298 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
6299 && ! valid_constant_size_p (TYPE_SIZE_UNIT (type)))
6301 if (name)
6302 error_at (loc, "size of array %qE is too large", name);
6303 else
6304 error_at (loc, "size of unnamed array is too large");
6305 /* If we proceed with the array type as it is, we'll eventually
6306 crash in tree_to_[su]hwi(). */
6307 type = error_mark_node;
6310 /* If this is declaring a typedef name, return a TYPE_DECL. */
6312 if (storage_class == csc_typedef)
6314 tree decl;
6315 if ((type_quals & TYPE_QUAL_ATOMIC)
6316 && TREE_CODE (type) == FUNCTION_TYPE)
6318 error_at (loc,
6319 "%<_Atomic%>-qualified function type");
6320 type_quals &= ~TYPE_QUAL_ATOMIC;
6322 else if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
6323 && type_quals)
6324 pedwarn (loc, OPT_Wpedantic,
6325 "ISO C forbids qualified function types");
6326 if (type_quals)
6327 type = c_build_qualified_type (type, type_quals);
6328 decl = build_decl (declarator->id_loc,
6329 TYPE_DECL, declarator->u.id, type);
6330 if (declspecs->explicit_signed_p)
6331 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
6332 if (declspecs->inline_p)
6333 pedwarn (loc, 0,"typedef %q+D declared %<inline%>", decl);
6334 if (declspecs->noreturn_p)
6335 pedwarn (loc, 0,"typedef %q+D declared %<_Noreturn%>", decl);
6337 if (warn_cxx_compat && declarator->u.id != NULL_TREE)
6339 struct c_binding *b = I_TAG_BINDING (declarator->u.id);
6341 if (b != NULL
6342 && b->decl != NULL_TREE
6343 && (B_IN_CURRENT_SCOPE (b)
6344 || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
6345 && TYPE_MAIN_VARIANT (b->decl) != TYPE_MAIN_VARIANT (type))
6347 warning_at (declarator->id_loc, OPT_Wc___compat,
6348 ("using %qD as both a typedef and a tag is "
6349 "invalid in C++"),
6350 decl);
6351 if (b->locus != UNKNOWN_LOCATION)
6352 inform (b->locus, "originally defined here");
6356 return decl;
6359 /* If this is a type name (such as, in a cast or sizeof),
6360 compute the type and return it now. */
6362 if (decl_context == TYPENAME)
6364 /* Note that the grammar rejects storage classes in typenames
6365 and fields. */
6366 gcc_assert (storage_class == csc_none && !threadp
6367 && !declspecs->inline_p && !declspecs->noreturn_p);
6368 if ((type_quals & TYPE_QUAL_ATOMIC)
6369 && TREE_CODE (type) == FUNCTION_TYPE)
6371 error_at (loc,
6372 "%<_Atomic%>-qualified function type");
6373 type_quals &= ~TYPE_QUAL_ATOMIC;
6375 else if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
6376 && type_quals)
6377 pedwarn (loc, OPT_Wpedantic,
6378 "ISO C forbids const or volatile function types");
6379 if (type_quals)
6380 type = c_build_qualified_type (type, type_quals);
6381 return type;
6384 if (pedantic && decl_context == FIELD
6385 && variably_modified_type_p (type, NULL_TREE))
6387 /* C99 6.7.2.1p8 */
6388 pedwarn (loc, OPT_Wpedantic, "a member of a structure or union cannot "
6389 "have a variably modified type");
6392 /* Aside from typedefs and type names (handle above),
6393 `void' at top level (not within pointer)
6394 is allowed only in public variables.
6395 We don't complain about parms either, but that is because
6396 a better error message can be made later. */
6398 if (VOID_TYPE_P (type) && decl_context != PARM
6399 && !((decl_context != FIELD && TREE_CODE (type) != FUNCTION_TYPE)
6400 && (storage_class == csc_extern
6401 || (current_scope == file_scope
6402 && !(storage_class == csc_static
6403 || storage_class == csc_register)))))
6405 error_at (loc, "variable or field %qE declared void", name);
6406 type = integer_type_node;
6409 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
6410 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
6413 tree decl;
6415 if (decl_context == PARM)
6417 tree promoted_type;
6418 bool array_parameter_p = false;
6420 /* A parameter declared as an array of T is really a pointer to T.
6421 One declared as a function is really a pointer to a function. */
6423 if (TREE_CODE (type) == ARRAY_TYPE)
6425 /* Transfer const-ness of array into that of type pointed to. */
6426 type = TREE_TYPE (type);
6427 if (type_quals)
6428 type = c_build_qualified_type (type, type_quals);
6429 type = c_build_pointer_type (type);
6430 type_quals = array_ptr_quals;
6431 if (type_quals)
6432 type = c_build_qualified_type (type, type_quals);
6434 /* We don't yet implement attributes in this context. */
6435 if (array_ptr_attrs != NULL_TREE)
6436 warning_at (loc, OPT_Wattributes,
6437 "attributes in parameter array declarator ignored");
6439 size_varies = false;
6440 array_parameter_p = true;
6442 else if (TREE_CODE (type) == FUNCTION_TYPE)
6444 if (type_quals & TYPE_QUAL_ATOMIC)
6446 error_at (loc,
6447 "%<_Atomic%>-qualified function type");
6448 type_quals &= ~TYPE_QUAL_ATOMIC;
6450 else if (type_quals)
6451 pedwarn (loc, OPT_Wpedantic,
6452 "ISO C forbids qualified function types");
6453 if (type_quals)
6454 type = c_build_qualified_type (type, type_quals);
6455 type = c_build_pointer_type (type);
6456 type_quals = TYPE_UNQUALIFIED;
6458 else if (type_quals)
6459 type = c_build_qualified_type (type, type_quals);
6461 decl = build_decl (declarator->id_loc,
6462 PARM_DECL, declarator->u.id, type);
6463 if (size_varies)
6464 C_DECL_VARIABLE_SIZE (decl) = 1;
6465 C_ARRAY_PARAMETER (decl) = array_parameter_p;
6467 /* Compute the type actually passed in the parmlist,
6468 for the case where there is no prototype.
6469 (For example, shorts and chars are passed as ints.)
6470 When there is a prototype, this is overridden later. */
6472 if (type == error_mark_node)
6473 promoted_type = type;
6474 else
6475 promoted_type = c_type_promotes_to (type);
6477 DECL_ARG_TYPE (decl) = promoted_type;
6478 if (declspecs->inline_p)
6479 pedwarn (loc, 0, "parameter %q+D declared %<inline%>", decl);
6480 if (declspecs->noreturn_p)
6481 pedwarn (loc, 0, "parameter %q+D declared %<_Noreturn%>", decl);
6483 else if (decl_context == FIELD)
6485 /* Note that the grammar rejects storage classes in typenames
6486 and fields. */
6487 gcc_assert (storage_class == csc_none && !threadp
6488 && !declspecs->inline_p && !declspecs->noreturn_p);
6490 /* Structure field. It may not be a function. */
6492 if (TREE_CODE (type) == FUNCTION_TYPE)
6494 error_at (loc, "field %qE declared as a function", name);
6495 type = build_pointer_type (type);
6497 else if (TREE_CODE (type) != ERROR_MARK
6498 && !COMPLETE_OR_UNBOUND_ARRAY_TYPE_P (type))
6500 if (name)
6501 error_at (loc, "field %qE has incomplete type", name);
6502 else
6503 error_at (loc, "unnamed field has incomplete type");
6504 type = error_mark_node;
6506 type = c_build_qualified_type (type, type_quals);
6507 decl = build_decl (declarator->id_loc,
6508 FIELD_DECL, declarator->u.id, type);
6509 DECL_NONADDRESSABLE_P (decl) = bitfield;
6510 if (bitfield && !declarator->u.id)
6511 TREE_NO_WARNING (decl) = 1;
6513 if (size_varies)
6514 C_DECL_VARIABLE_SIZE (decl) = 1;
6516 else if (TREE_CODE (type) == FUNCTION_TYPE)
6518 if (storage_class == csc_register || threadp)
6520 error_at (loc, "invalid storage class for function %qE", name);
6522 else if (current_scope != file_scope)
6524 /* Function declaration not at file scope. Storage
6525 classes other than `extern' are not allowed, C99
6526 6.7.1p5, and `extern' makes no difference. However,
6527 GCC allows 'auto', perhaps with 'inline', to support
6528 nested functions. */
6529 if (storage_class == csc_auto)
6530 pedwarn (loc, OPT_Wpedantic,
6531 "invalid storage class for function %qE", name);
6532 else if (storage_class == csc_static)
6534 error_at (loc, "invalid storage class for function %qE", name);
6535 if (funcdef_flag)
6536 storage_class = declspecs->storage_class = csc_none;
6537 else
6538 return 0;
6542 decl = build_decl (declarator->id_loc,
6543 FUNCTION_DECL, declarator->u.id, type);
6544 decl = build_decl_attribute_variant (decl, decl_attr);
6546 if (type_quals & TYPE_QUAL_ATOMIC)
6548 error_at (loc,
6549 "%<_Atomic%>-qualified function type");
6550 type_quals &= ~TYPE_QUAL_ATOMIC;
6552 else if (pedantic && type_quals && !DECL_IN_SYSTEM_HEADER (decl))
6553 pedwarn (loc, OPT_Wpedantic,
6554 "ISO C forbids qualified function types");
6556 /* Every function declaration is an external reference
6557 (DECL_EXTERNAL) except for those which are not at file
6558 scope and are explicitly declared "auto". This is
6559 forbidden by standard C (C99 6.7.1p5) and is interpreted by
6560 GCC to signify a forward declaration of a nested function. */
6561 if (storage_class == csc_auto && current_scope != file_scope)
6562 DECL_EXTERNAL (decl) = 0;
6563 /* In C99, a function which is declared 'inline' with 'extern'
6564 is not an external reference (which is confusing). It
6565 means that the later definition of the function must be output
6566 in this file, C99 6.7.4p6. In GNU C89, a function declared
6567 'extern inline' is an external reference. */
6568 else if (declspecs->inline_p && storage_class != csc_static)
6569 DECL_EXTERNAL (decl) = ((storage_class == csc_extern)
6570 == flag_gnu89_inline);
6571 else
6572 DECL_EXTERNAL (decl) = !initialized;
6574 /* Record absence of global scope for `static' or `auto'. */
6575 TREE_PUBLIC (decl)
6576 = !(storage_class == csc_static || storage_class == csc_auto);
6578 /* For a function definition, record the argument information
6579 block where store_parm_decls will look for it. */
6580 if (funcdef_flag)
6581 current_function_arg_info = arg_info;
6583 if (declspecs->default_int_p)
6584 C_FUNCTION_IMPLICIT_INT (decl) = 1;
6586 /* Record presence of `inline' and `_Noreturn', if it is
6587 reasonable. */
6588 if (flag_hosted && MAIN_NAME_P (declarator->u.id))
6590 if (declspecs->inline_p)
6591 pedwarn (loc, 0, "cannot inline function %<main%>");
6592 if (declspecs->noreturn_p)
6593 pedwarn (loc, 0, "%<main%> declared %<_Noreturn%>");
6595 else
6597 if (declspecs->inline_p)
6598 /* Record that the function is declared `inline'. */
6599 DECL_DECLARED_INLINE_P (decl) = 1;
6600 if (declspecs->noreturn_p)
6602 if (flag_isoc99)
6603 pedwarn_c99 (loc, OPT_Wpedantic,
6604 "ISO C99 does not support %<_Noreturn%>");
6605 else
6606 pedwarn_c99 (loc, OPT_Wpedantic,
6607 "ISO C90 does not support %<_Noreturn%>");
6608 TREE_THIS_VOLATILE (decl) = 1;
6612 else
6614 /* It's a variable. */
6615 /* An uninitialized decl with `extern' is a reference. */
6616 int extern_ref = !initialized && storage_class == csc_extern;
6618 type = c_build_qualified_type (type, type_quals);
6620 /* C99 6.2.2p7: It is invalid (compile-time undefined
6621 behavior) to create an 'extern' declaration for a
6622 variable if there is a global declaration that is
6623 'static' and the global declaration is not visible.
6624 (If the static declaration _is_ currently visible,
6625 the 'extern' declaration is taken to refer to that decl.) */
6626 if (extern_ref && current_scope != file_scope)
6628 tree global_decl = identifier_global_value (declarator->u.id);
6629 tree visible_decl = lookup_name (declarator->u.id);
6631 if (global_decl
6632 && global_decl != visible_decl
6633 && TREE_CODE (global_decl) == VAR_DECL
6634 && !TREE_PUBLIC (global_decl))
6635 error_at (loc, "variable previously declared %<static%> "
6636 "redeclared %<extern%>");
6639 decl = build_decl (declarator->id_loc,
6640 VAR_DECL, declarator->u.id, type);
6641 if (size_varies)
6642 C_DECL_VARIABLE_SIZE (decl) = 1;
6644 if (declspecs->inline_p)
6645 pedwarn (loc, 0, "variable %q+D declared %<inline%>", decl);
6646 if (declspecs->noreturn_p)
6647 pedwarn (loc, 0, "variable %q+D declared %<_Noreturn%>", decl);
6649 /* At file scope, an initialized extern declaration may follow
6650 a static declaration. In that case, DECL_EXTERNAL will be
6651 reset later in start_decl. */
6652 DECL_EXTERNAL (decl) = (storage_class == csc_extern);
6654 /* At file scope, the presence of a `static' or `register' storage
6655 class specifier, or the absence of all storage class specifiers
6656 makes this declaration a definition (perhaps tentative). Also,
6657 the absence of `static' makes it public. */
6658 if (current_scope == file_scope)
6660 TREE_PUBLIC (decl) = storage_class != csc_static;
6661 TREE_STATIC (decl) = !extern_ref;
6663 /* Not at file scope, only `static' makes a static definition. */
6664 else
6666 TREE_STATIC (decl) = (storage_class == csc_static);
6667 TREE_PUBLIC (decl) = extern_ref;
6670 if (threadp)
6671 set_decl_tls_model (decl, decl_default_tls_model (decl));
6674 if ((storage_class == csc_extern
6675 || (storage_class == csc_none
6676 && TREE_CODE (type) == FUNCTION_TYPE
6677 && !funcdef_flag))
6678 && variably_modified_type_p (type, NULL_TREE))
6680 /* C99 6.7.5.2p2 */
6681 if (TREE_CODE (type) == FUNCTION_TYPE)
6682 error_at (loc, "non-nested function with variably modified type");
6683 else
6684 error_at (loc, "object with variably modified type must have "
6685 "no linkage");
6688 /* Record `register' declaration for warnings on &
6689 and in case doing stupid register allocation. */
6691 if (storage_class == csc_register)
6693 C_DECL_REGISTER (decl) = 1;
6694 DECL_REGISTER (decl) = 1;
6697 /* Record constancy and volatility. */
6698 c_apply_type_quals_to_decl (type_quals, decl);
6700 /* Apply _Alignas specifiers. */
6701 if (alignas_align)
6703 DECL_ALIGN (decl) = alignas_align * BITS_PER_UNIT;
6704 DECL_USER_ALIGN (decl) = 1;
6707 /* If a type has volatile components, it should be stored in memory.
6708 Otherwise, the fact that those components are volatile
6709 will be ignored, and would even crash the compiler.
6710 Of course, this only makes sense on VAR,PARM, and RESULT decl's. */
6711 if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl))
6712 && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
6713 || TREE_CODE (decl) == RESULT_DECL))
6715 /* It is not an error for a structure with volatile fields to
6716 be declared register, but reset DECL_REGISTER since it
6717 cannot actually go in a register. */
6718 int was_reg = C_DECL_REGISTER (decl);
6719 C_DECL_REGISTER (decl) = 0;
6720 DECL_REGISTER (decl) = 0;
6721 c_mark_addressable (decl);
6722 C_DECL_REGISTER (decl) = was_reg;
6725 /* This is the earliest point at which we might know the assembler
6726 name of a variable. Thus, if it's known before this, die horribly. */
6727 gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl));
6729 if (warn_cxx_compat
6730 && TREE_CODE (decl) == VAR_DECL
6731 && TREE_PUBLIC (decl)
6732 && TREE_STATIC (decl)
6733 && (TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
6734 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
6735 || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
6736 && TYPE_NAME (TREE_TYPE (decl)) == NULL_TREE)
6737 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wc___compat,
6738 ("non-local variable %qD with anonymous type is "
6739 "questionable in C++"),
6740 decl);
6742 return decl;
6746 /* Decode the parameter-list info for a function type or function definition.
6747 The argument is the value returned by `get_parm_info' (or made in c-parse.c
6748 if there is an identifier list instead of a parameter decl list).
6749 These two functions are separate because when a function returns
6750 or receives functions then each is called multiple times but the order
6751 of calls is different. The last call to `grokparms' is always the one
6752 that contains the formal parameter names of a function definition.
6754 Return a list of arg types to use in the FUNCTION_TYPE for this function.
6756 FUNCDEF_FLAG is true for a function definition, false for
6757 a mere declaration. A nonempty identifier-list gets an error message
6758 when FUNCDEF_FLAG is false. */
6760 static tree
6761 grokparms (struct c_arg_info *arg_info, bool funcdef_flag)
6763 tree arg_types = arg_info->types;
6765 if (funcdef_flag && arg_info->had_vla_unspec)
6767 /* A function definition isn't function prototype scope C99 6.2.1p4. */
6768 /* C99 6.7.5.2p4 */
6769 error ("%<[*]%> not allowed in other than function prototype scope");
6772 if (arg_types == 0 && !funcdef_flag
6773 && !in_system_header_at (input_location))
6774 warning (OPT_Wstrict_prototypes,
6775 "function declaration isn%'t a prototype");
6777 if (arg_types == error_mark_node)
6778 return 0; /* don't set TYPE_ARG_TYPES in this case */
6780 else if (arg_types && TREE_CODE (TREE_VALUE (arg_types)) == IDENTIFIER_NODE)
6782 if (!funcdef_flag)
6784 pedwarn (input_location, 0, "parameter names (without types) in function declaration");
6785 arg_info->parms = NULL_TREE;
6787 else
6788 arg_info->parms = arg_info->types;
6790 arg_info->types = 0;
6791 return 0;
6793 else
6795 tree parm, type, typelt;
6796 unsigned int parmno;
6797 const char *errmsg;
6799 /* If there is a parameter of incomplete type in a definition,
6800 this is an error. In a declaration this is valid, and a
6801 struct or union type may be completed later, before any calls
6802 or definition of the function. In the case where the tag was
6803 first declared within the parameter list, a warning has
6804 already been given. If a parameter has void type, then
6805 however the function cannot be defined or called, so
6806 warn. */
6808 for (parm = arg_info->parms, typelt = arg_types, parmno = 1;
6809 parm;
6810 parm = DECL_CHAIN (parm), typelt = TREE_CHAIN (typelt), parmno++)
6812 type = TREE_VALUE (typelt);
6813 if (type == error_mark_node)
6814 continue;
6816 if (!COMPLETE_TYPE_P (type))
6818 if (funcdef_flag)
6820 if (DECL_NAME (parm))
6821 error_at (input_location,
6822 "parameter %u (%q+D) has incomplete type",
6823 parmno, parm);
6824 else
6825 error_at (DECL_SOURCE_LOCATION (parm),
6826 "parameter %u has incomplete type",
6827 parmno);
6829 TREE_VALUE (typelt) = error_mark_node;
6830 TREE_TYPE (parm) = error_mark_node;
6831 arg_types = NULL_TREE;
6833 else if (VOID_TYPE_P (type))
6835 if (DECL_NAME (parm))
6836 warning_at (input_location, 0,
6837 "parameter %u (%q+D) has void type",
6838 parmno, parm);
6839 else
6840 warning_at (DECL_SOURCE_LOCATION (parm), 0,
6841 "parameter %u has void type",
6842 parmno);
6846 errmsg = targetm.invalid_parameter_type (type);
6847 if (errmsg)
6849 error (errmsg);
6850 TREE_VALUE (typelt) = error_mark_node;
6851 TREE_TYPE (parm) = error_mark_node;
6852 arg_types = NULL_TREE;
6855 if (DECL_NAME (parm) && TREE_USED (parm))
6856 warn_if_shadowing (parm);
6858 return arg_types;
6862 /* Allocate and initialize a c_arg_info structure from the parser's
6863 obstack. */
6865 struct c_arg_info *
6866 build_arg_info (void)
6868 struct c_arg_info *ret = XOBNEW (&parser_obstack, struct c_arg_info);
6869 ret->parms = NULL_TREE;
6870 ret->tags = NULL;
6871 ret->types = NULL_TREE;
6872 ret->others = NULL_TREE;
6873 ret->pending_sizes = NULL;
6874 ret->had_vla_unspec = 0;
6875 return ret;
6878 /* Take apart the current scope and return a c_arg_info structure with
6879 info on a parameter list just parsed.
6881 This structure is later fed to 'grokparms' and 'store_parm_decls'.
6883 ELLIPSIS being true means the argument list ended in '...' so don't
6884 append a sentinel (void_list_node) to the end of the type-list.
6886 EXPR is NULL or an expression that needs to be evaluated for the
6887 side effects of array size expressions in the parameters. */
6889 struct c_arg_info *
6890 get_parm_info (bool ellipsis, tree expr)
6892 struct c_binding *b = current_scope->bindings;
6893 struct c_arg_info *arg_info = build_arg_info ();
6895 tree parms = 0;
6896 vec<c_arg_tag, va_gc> *tags = NULL;
6897 tree types = 0;
6898 tree others = 0;
6900 static bool explained_incomplete_types = false;
6901 bool gave_void_only_once_err = false;
6903 arg_info->had_vla_unspec = current_scope->had_vla_unspec;
6905 /* The bindings in this scope must not get put into a block.
6906 We will take care of deleting the binding nodes. */
6907 current_scope->bindings = 0;
6909 /* This function is only called if there was *something* on the
6910 parameter list. */
6911 gcc_assert (b);
6913 /* A parameter list consisting solely of 'void' indicates that the
6914 function takes no arguments. But if the 'void' is qualified
6915 (by 'const' or 'volatile'), or has a storage class specifier
6916 ('register'), then the behavior is undefined; issue an error.
6917 Typedefs for 'void' are OK (see DR#157). */
6918 if (b->prev == 0 /* one binding */
6919 && TREE_CODE (b->decl) == PARM_DECL /* which is a parameter */
6920 && !DECL_NAME (b->decl) /* anonymous */
6921 && VOID_TYPE_P (TREE_TYPE (b->decl))) /* of void type */
6923 if (TYPE_QUALS (TREE_TYPE (b->decl)) != TYPE_UNQUALIFIED
6924 || C_DECL_REGISTER (b->decl))
6925 error ("%<void%> as only parameter may not be qualified");
6927 /* There cannot be an ellipsis. */
6928 if (ellipsis)
6929 error ("%<void%> must be the only parameter");
6931 arg_info->types = void_list_node;
6932 return arg_info;
6935 if (!ellipsis)
6936 types = void_list_node;
6938 /* Break up the bindings list into parms, tags, types, and others;
6939 apply sanity checks; purge the name-to-decl bindings. */
6940 while (b)
6942 tree decl = b->decl;
6943 tree type = TREE_TYPE (decl);
6944 c_arg_tag tag;
6945 const char *keyword;
6947 switch (TREE_CODE (decl))
6949 case PARM_DECL:
6950 if (b->id)
6952 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
6953 I_SYMBOL_BINDING (b->id) = b->shadowed;
6956 /* Check for forward decls that never got their actual decl. */
6957 if (TREE_ASM_WRITTEN (decl))
6958 error ("parameter %q+D has just a forward declaration", decl);
6959 /* Check for (..., void, ...) and issue an error. */
6960 else if (VOID_TYPE_P (type) && !DECL_NAME (decl))
6962 if (!gave_void_only_once_err)
6964 error ("%<void%> must be the only parameter");
6965 gave_void_only_once_err = true;
6968 else
6970 /* Valid parameter, add it to the list. */
6971 DECL_CHAIN (decl) = parms;
6972 parms = decl;
6974 /* Since there is a prototype, args are passed in their
6975 declared types. The back end may override this later. */
6976 DECL_ARG_TYPE (decl) = type;
6977 types = tree_cons (0, type, types);
6979 break;
6981 case ENUMERAL_TYPE: keyword = "enum"; goto tag;
6982 case UNION_TYPE: keyword = "union"; goto tag;
6983 case RECORD_TYPE: keyword = "struct"; goto tag;
6984 tag:
6985 /* Types may not have tag-names, in which case the type
6986 appears in the bindings list with b->id NULL. */
6987 if (b->id)
6989 gcc_assert (I_TAG_BINDING (b->id) == b);
6990 I_TAG_BINDING (b->id) = b->shadowed;
6993 /* Warn about any struct, union or enum tags defined in a
6994 parameter list. The scope of such types is limited to
6995 the parameter list, which is rarely if ever desirable
6996 (it's impossible to call such a function with type-
6997 correct arguments). An anonymous union parm type is
6998 meaningful as a GNU extension, so don't warn for that. */
6999 if (TREE_CODE (decl) != UNION_TYPE || b->id != 0)
7001 if (b->id)
7002 /* The %s will be one of 'struct', 'union', or 'enum'. */
7003 warning (0, "%<%s %E%> declared inside parameter list",
7004 keyword, b->id);
7005 else
7006 /* The %s will be one of 'struct', 'union', or 'enum'. */
7007 warning (0, "anonymous %s declared inside parameter list",
7008 keyword);
7010 if (!explained_incomplete_types)
7012 warning (0, "its scope is only this definition or declaration,"
7013 " which is probably not what you want");
7014 explained_incomplete_types = true;
7018 tag.id = b->id;
7019 tag.type = decl;
7020 vec_safe_push (tags, tag);
7021 break;
7023 case CONST_DECL:
7024 case TYPE_DECL:
7025 case FUNCTION_DECL:
7026 /* CONST_DECLs appear here when we have an embedded enum,
7027 and TYPE_DECLs appear here when we have an embedded struct
7028 or union. No warnings for this - we already warned about the
7029 type itself. FUNCTION_DECLs appear when there is an implicit
7030 function declaration in the parameter list. */
7032 /* When we reinsert this decl in the function body, we need
7033 to reconstruct whether it was marked as nested. */
7034 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
7035 ? b->nested
7036 : !b->nested);
7037 DECL_CHAIN (decl) = others;
7038 others = decl;
7039 /* fall through */
7041 case ERROR_MARK:
7042 /* error_mark_node appears here when we have an undeclared
7043 variable. Just throw it away. */
7044 if (b->id)
7046 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
7047 I_SYMBOL_BINDING (b->id) = b->shadowed;
7049 break;
7051 /* Other things that might be encountered. */
7052 case LABEL_DECL:
7053 case VAR_DECL:
7054 default:
7055 gcc_unreachable ();
7058 b = free_binding_and_advance (b);
7061 arg_info->parms = parms;
7062 arg_info->tags = tags;
7063 arg_info->types = types;
7064 arg_info->others = others;
7065 arg_info->pending_sizes = expr;
7066 return arg_info;
7069 /* Get the struct, enum or union (CODE says which) with tag NAME.
7070 Define the tag as a forward-reference with location LOC if it is
7071 not defined. Return a c_typespec structure for the type
7072 specifier. */
7074 struct c_typespec
7075 parser_xref_tag (location_t loc, enum tree_code code, tree name)
7077 struct c_typespec ret;
7078 tree ref;
7079 location_t refloc;
7081 ret.expr = NULL_TREE;
7082 ret.expr_const_operands = true;
7084 /* If a cross reference is requested, look up the type
7085 already defined for this tag and return it. */
7087 ref = lookup_tag (code, name, 0, &refloc);
7088 /* If this is the right type of tag, return what we found.
7089 (This reference will be shadowed by shadow_tag later if appropriate.)
7090 If this is the wrong type of tag, do not return it. If it was the
7091 wrong type in the same scope, we will have had an error
7092 message already; if in a different scope and declaring
7093 a name, pending_xref_error will give an error message; but if in a
7094 different scope and not declaring a name, this tag should
7095 shadow the previous declaration of a different type of tag, and
7096 this would not work properly if we return the reference found.
7097 (For example, with "struct foo" in an outer scope, "union foo;"
7098 must shadow that tag with a new one of union type.) */
7099 ret.kind = (ref ? ctsk_tagref : ctsk_tagfirstref);
7100 if (ref && TREE_CODE (ref) == code)
7102 if (C_TYPE_DEFINED_IN_STRUCT (ref)
7103 && loc != UNKNOWN_LOCATION
7104 && warn_cxx_compat)
7106 switch (code)
7108 case ENUMERAL_TYPE:
7109 warning_at (loc, OPT_Wc___compat,
7110 ("enum type defined in struct or union "
7111 "is not visible in C++"));
7112 inform (refloc, "enum type defined here");
7113 break;
7114 case RECORD_TYPE:
7115 warning_at (loc, OPT_Wc___compat,
7116 ("struct defined in struct or union "
7117 "is not visible in C++"));
7118 inform (refloc, "struct defined here");
7119 break;
7120 case UNION_TYPE:
7121 warning_at (loc, OPT_Wc___compat,
7122 ("union defined in struct or union "
7123 "is not visible in C++"));
7124 inform (refloc, "union defined here");
7125 break;
7126 default:
7127 gcc_unreachable();
7131 ret.spec = ref;
7132 return ret;
7135 /* If no such tag is yet defined, create a forward-reference node
7136 and record it as the "definition".
7137 When a real declaration of this type is found,
7138 the forward-reference will be altered into a real type. */
7140 ref = make_node (code);
7141 if (code == ENUMERAL_TYPE)
7143 /* Give the type a default layout like unsigned int
7144 to avoid crashing if it does not get defined. */
7145 SET_TYPE_MODE (ref, TYPE_MODE (unsigned_type_node));
7146 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
7147 TYPE_USER_ALIGN (ref) = 0;
7148 TYPE_UNSIGNED (ref) = 1;
7149 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
7150 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
7151 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
7154 pushtag (loc, name, ref);
7156 ret.spec = ref;
7157 return ret;
7160 /* Get the struct, enum or union (CODE says which) with tag NAME.
7161 Define the tag as a forward-reference if it is not defined.
7162 Return a tree for the type. */
7164 tree
7165 xref_tag (enum tree_code code, tree name)
7167 return parser_xref_tag (input_location, code, name).spec;
7170 /* Make sure that the tag NAME is defined *in the current scope*
7171 at least as a forward reference.
7172 LOC is the location of the struct's definition.
7173 CODE says which kind of tag NAME ought to be.
7175 This stores the current value of the file static STRUCT_PARSE_INFO
7176 in *ENCLOSING_STRUCT_PARSE_INFO, and points STRUCT_PARSE_INFO at a
7177 new c_struct_parse_info structure. The old value of
7178 STRUCT_PARSE_INFO is restored in finish_struct. */
7180 tree
7181 start_struct (location_t loc, enum tree_code code, tree name,
7182 struct c_struct_parse_info **enclosing_struct_parse_info)
7184 /* If there is already a tag defined at this scope
7185 (as a forward reference), just return it. */
7187 tree ref = NULL_TREE;
7188 location_t refloc = UNKNOWN_LOCATION;
7190 if (name != NULL_TREE)
7191 ref = lookup_tag (code, name, 1, &refloc);
7192 if (ref && TREE_CODE (ref) == code)
7194 if (TYPE_SIZE (ref))
7196 if (code == UNION_TYPE)
7197 error_at (loc, "redefinition of %<union %E%>", name);
7198 else
7199 error_at (loc, "redefinition of %<struct %E%>", name);
7200 if (refloc != UNKNOWN_LOCATION)
7201 inform (refloc, "originally defined here");
7202 /* Don't create structures using a name already in use. */
7203 ref = NULL_TREE;
7205 else if (C_TYPE_BEING_DEFINED (ref))
7207 if (code == UNION_TYPE)
7208 error_at (loc, "nested redefinition of %<union %E%>", name);
7209 else
7210 error_at (loc, "nested redefinition of %<struct %E%>", name);
7211 /* Don't bother to report "originally defined here" for a
7212 nested redefinition; the original definition should be
7213 obvious. */
7214 /* Don't create structures that contain themselves. */
7215 ref = NULL_TREE;
7219 /* Otherwise create a forward-reference just so the tag is in scope. */
7221 if (ref == NULL_TREE || TREE_CODE (ref) != code)
7223 ref = make_node (code);
7224 pushtag (loc, name, ref);
7227 C_TYPE_BEING_DEFINED (ref) = 1;
7228 TYPE_PACKED (ref) = flag_pack_struct;
7230 *enclosing_struct_parse_info = struct_parse_info;
7231 struct_parse_info = XNEW (struct c_struct_parse_info);
7232 struct_parse_info->struct_types.create (0);
7233 struct_parse_info->fields.create (0);
7234 struct_parse_info->typedefs_seen.create (0);
7236 /* FIXME: This will issue a warning for a use of a type defined
7237 within a statement expr used within sizeof, et. al. This is not
7238 terribly serious as C++ doesn't permit statement exprs within
7239 sizeof anyhow. */
7240 if (warn_cxx_compat && (in_sizeof || in_typeof || in_alignof))
7241 warning_at (loc, OPT_Wc___compat,
7242 "defining type in %qs expression is invalid in C++",
7243 (in_sizeof
7244 ? "sizeof"
7245 : (in_typeof ? "typeof" : "alignof")));
7247 return ref;
7250 /* Process the specs, declarator and width (NULL if omitted)
7251 of a structure component, returning a FIELD_DECL node.
7252 WIDTH is non-NULL for bit-fields only, and is an INTEGER_CST node.
7253 DECL_ATTRS is as for grokdeclarator.
7255 LOC is the location of the structure component.
7257 This is done during the parsing of the struct declaration.
7258 The FIELD_DECL nodes are chained together and the lot of them
7259 are ultimately passed to `build_struct' to make the RECORD_TYPE node. */
7261 tree
7262 grokfield (location_t loc,
7263 struct c_declarator *declarator, struct c_declspecs *declspecs,
7264 tree width, tree *decl_attrs)
7266 tree value;
7268 if (declarator->kind == cdk_id && declarator->u.id == NULL_TREE
7269 && width == NULL_TREE)
7271 /* This is an unnamed decl.
7273 If we have something of the form "union { list } ;" then this
7274 is the anonymous union extension. Similarly for struct.
7276 If this is something of the form "struct foo;", then
7277 If MS or Plan 9 extensions are enabled, this is handled as
7278 an anonymous struct.
7279 Otherwise this is a forward declaration of a structure tag.
7281 If this is something of the form "foo;" and foo is a TYPE_DECL, then
7282 If foo names a structure or union without a tag, then this
7283 is an anonymous struct (this is permitted by C11).
7284 If MS or Plan 9 extensions are enabled and foo names a
7285 structure, then again this is an anonymous struct.
7286 Otherwise this is an error.
7288 Oh what a horrid tangled web we weave. I wonder if MS consciously
7289 took this from Plan 9 or if it was an accident of implementation
7290 that took root before someone noticed the bug... */
7292 tree type = declspecs->type;
7293 bool type_ok = (TREE_CODE (type) == RECORD_TYPE
7294 || TREE_CODE (type) == UNION_TYPE);
7295 bool ok = false;
7297 if (type_ok
7298 && (flag_ms_extensions
7299 || flag_plan9_extensions
7300 || !declspecs->typedef_p))
7302 if (flag_ms_extensions || flag_plan9_extensions)
7303 ok = true;
7304 else if (TYPE_NAME (type) == NULL)
7305 ok = true;
7306 else
7307 ok = false;
7309 if (!ok)
7311 pedwarn (loc, 0, "declaration does not declare anything");
7312 return NULL_TREE;
7314 if (flag_isoc99)
7315 pedwarn_c99 (loc, OPT_Wpedantic,
7316 "ISO C99 doesn%'t support unnamed structs/unions");
7317 else
7318 pedwarn_c99 (loc, OPT_Wpedantic,
7319 "ISO C90 doesn%'t support unnamed structs/unions");
7322 value = grokdeclarator (declarator, declspecs, FIELD, false,
7323 width ? &width : NULL, decl_attrs, NULL, NULL,
7324 DEPRECATED_NORMAL);
7326 finish_decl (value, loc, NULL_TREE, NULL_TREE, NULL_TREE);
7327 DECL_INITIAL (value) = width;
7329 if (warn_cxx_compat && DECL_NAME (value) != NULL_TREE)
7331 /* If we currently have a binding for this field, set the
7332 in_struct field in the binding, so that we warn about lookups
7333 which find it. */
7334 struct c_binding *b = I_SYMBOL_BINDING (DECL_NAME (value));
7335 if (b != NULL)
7337 /* If the in_struct field is not yet set, push it on a list
7338 to be cleared when this struct is finished. */
7339 if (!b->in_struct)
7341 struct_parse_info->fields.safe_push (b);
7342 b->in_struct = 1;
7347 return value;
7350 /* Subroutine of detect_field_duplicates: return whether X and Y,
7351 which are both fields in the same struct, have duplicate field
7352 names. */
7354 static bool
7355 is_duplicate_field (tree x, tree y)
7357 if (DECL_NAME (x) != NULL_TREE && DECL_NAME (x) == DECL_NAME (y))
7358 return true;
7360 /* When using -fplan9-extensions, an anonymous field whose name is a
7361 typedef can duplicate a field name. */
7362 if (flag_plan9_extensions
7363 && (DECL_NAME (x) == NULL_TREE || DECL_NAME (y) == NULL_TREE))
7365 tree xt, xn, yt, yn;
7367 xt = TREE_TYPE (x);
7368 if (DECL_NAME (x) != NULL_TREE)
7369 xn = DECL_NAME (x);
7370 else if ((TREE_CODE (xt) == RECORD_TYPE || TREE_CODE (xt) == UNION_TYPE)
7371 && TYPE_NAME (xt) != NULL_TREE
7372 && TREE_CODE (TYPE_NAME (xt)) == TYPE_DECL)
7373 xn = DECL_NAME (TYPE_NAME (xt));
7374 else
7375 xn = NULL_TREE;
7377 yt = TREE_TYPE (y);
7378 if (DECL_NAME (y) != NULL_TREE)
7379 yn = DECL_NAME (y);
7380 else if ((TREE_CODE (yt) == RECORD_TYPE || TREE_CODE (yt) == UNION_TYPE)
7381 && TYPE_NAME (yt) != NULL_TREE
7382 && TREE_CODE (TYPE_NAME (yt)) == TYPE_DECL)
7383 yn = DECL_NAME (TYPE_NAME (yt));
7384 else
7385 yn = NULL_TREE;
7387 if (xn != NULL_TREE && xn == yn)
7388 return true;
7391 return false;
7394 /* Subroutine of detect_field_duplicates: add the fields of FIELDLIST
7395 to HTAB, giving errors for any duplicates. */
7397 static void
7398 detect_field_duplicates_hash (tree fieldlist,
7399 hash_table<pointer_hash <tree_node> > *htab)
7401 tree x, y;
7402 tree_node **slot;
7404 for (x = fieldlist; x ; x = DECL_CHAIN (x))
7405 if ((y = DECL_NAME (x)) != 0)
7407 slot = htab->find_slot (y, INSERT);
7408 if (*slot)
7410 error ("duplicate member %q+D", x);
7411 DECL_NAME (x) = NULL_TREE;
7413 *slot = y;
7415 else if (TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
7416 || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE)
7418 detect_field_duplicates_hash (TYPE_FIELDS (TREE_TYPE (x)), htab);
7420 /* When using -fplan9-extensions, an anonymous field whose
7421 name is a typedef can duplicate a field name. */
7422 if (flag_plan9_extensions
7423 && TYPE_NAME (TREE_TYPE (x)) != NULL_TREE
7424 && TREE_CODE (TYPE_NAME (TREE_TYPE (x))) == TYPE_DECL)
7426 tree xn = DECL_NAME (TYPE_NAME (TREE_TYPE (x)));
7427 slot = htab->find_slot (xn, INSERT);
7428 if (*slot)
7429 error ("duplicate member %q+D", TYPE_NAME (TREE_TYPE (x)));
7430 *slot = xn;
7435 /* Generate an error for any duplicate field names in FIELDLIST. Munge
7436 the list such that this does not present a problem later. */
7438 static void
7439 detect_field_duplicates (tree fieldlist)
7441 tree x, y;
7442 int timeout = 10;
7444 /* If the struct is the list of instance variables of an Objective-C
7445 class, then we need to check all the instance variables of
7446 superclasses when checking for duplicates (since you can't have
7447 an instance variable in a subclass with the same name as an
7448 instance variable in a superclass). We pass on this job to the
7449 Objective-C compiler. objc_detect_field_duplicates() will return
7450 false if we are not checking the list of instance variables and
7451 the C frontend should proceed with the standard field duplicate
7452 checks. If we are checking the list of instance variables, the
7453 ObjC frontend will do the check, emit the errors if needed, and
7454 then return true. */
7455 if (c_dialect_objc ())
7456 if (objc_detect_field_duplicates (false))
7457 return;
7459 /* First, see if there are more than "a few" fields.
7460 This is trivially true if there are zero or one fields. */
7461 if (!fieldlist || !DECL_CHAIN (fieldlist))
7462 return;
7463 x = fieldlist;
7464 do {
7465 timeout--;
7466 if (DECL_NAME (x) == NULL_TREE
7467 && (TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
7468 || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE))
7469 timeout = 0;
7470 x = DECL_CHAIN (x);
7471 } while (timeout > 0 && x);
7473 /* If there were "few" fields and no anonymous structures or unions,
7474 avoid the overhead of allocating a hash table. Instead just do
7475 the nested traversal thing. */
7476 if (timeout > 0)
7478 for (x = DECL_CHAIN (fieldlist); x; x = DECL_CHAIN (x))
7479 /* When using -fplan9-extensions, we can have duplicates
7480 between typedef names and fields. */
7481 if (DECL_NAME (x)
7482 || (flag_plan9_extensions
7483 && DECL_NAME (x) == NULL_TREE
7484 && (TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
7485 || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE)
7486 && TYPE_NAME (TREE_TYPE (x)) != NULL_TREE
7487 && TREE_CODE (TYPE_NAME (TREE_TYPE (x))) == TYPE_DECL))
7489 for (y = fieldlist; y != x; y = TREE_CHAIN (y))
7490 if (is_duplicate_field (y, x))
7492 error ("duplicate member %q+D", x);
7493 DECL_NAME (x) = NULL_TREE;
7497 else
7499 hash_table<pointer_hash <tree_node> > htab (37);
7500 detect_field_duplicates_hash (fieldlist, &htab);
7504 /* Finish up struct info used by -Wc++-compat. */
7506 static void
7507 warn_cxx_compat_finish_struct (tree fieldlist)
7509 unsigned int ix;
7510 tree x;
7511 struct c_binding *b;
7513 /* Set the C_TYPE_DEFINED_IN_STRUCT flag for each type defined in
7514 the current struct. We do this now at the end of the struct
7515 because the flag is used to issue visibility warnings, and we
7516 only want to issue those warnings if the type is referenced
7517 outside of the struct declaration. */
7518 FOR_EACH_VEC_ELT (struct_parse_info->struct_types, ix, x)
7519 C_TYPE_DEFINED_IN_STRUCT (x) = 1;
7521 /* The TYPEDEFS_SEEN field of STRUCT_PARSE_INFO is a list of
7522 typedefs used when declaring fields in this struct. If the name
7523 of any of the fields is also a typedef name then the struct would
7524 not parse in C++, because the C++ lookup rules say that the
7525 typedef name would be looked up in the context of the struct, and
7526 would thus be the field rather than the typedef. */
7527 if (!struct_parse_info->typedefs_seen.is_empty ()
7528 && fieldlist != NULL_TREE)
7530 /* Use a hash_set<tree> using the name of the typedef. We can use
7531 a hash_set<tree> because identifiers are interned. */
7532 hash_set<tree> tset;
7534 FOR_EACH_VEC_ELT (struct_parse_info->typedefs_seen, ix, x)
7535 tset.add (DECL_NAME (x));
7537 for (x = fieldlist; x != NULL_TREE; x = DECL_CHAIN (x))
7539 if (DECL_NAME (x) != NULL_TREE
7540 && tset.contains (DECL_NAME (x)))
7542 warning_at (DECL_SOURCE_LOCATION (x), OPT_Wc___compat,
7543 ("using %qD as both field and typedef name is "
7544 "invalid in C++"),
7546 /* FIXME: It would be nice to report the location where
7547 the typedef name is used. */
7552 /* For each field which has a binding and which was not defined in
7553 an enclosing struct, clear the in_struct field. */
7554 FOR_EACH_VEC_ELT (struct_parse_info->fields, ix, b)
7555 b->in_struct = 0;
7558 /* Fill in the fields of a RECORD_TYPE or UNION_TYPE node, T.
7559 LOC is the location of the RECORD_TYPE or UNION_TYPE's definition.
7560 FIELDLIST is a chain of FIELD_DECL nodes for the fields.
7561 ATTRIBUTES are attributes to be applied to the structure.
7563 ENCLOSING_STRUCT_PARSE_INFO is the value of STRUCT_PARSE_INFO when
7564 the struct was started. */
7566 tree
7567 finish_struct (location_t loc, tree t, tree fieldlist, tree attributes,
7568 struct c_struct_parse_info *enclosing_struct_parse_info)
7570 tree x;
7571 bool toplevel = file_scope == current_scope;
7572 int saw_named_field;
7574 /* If this type was previously laid out as a forward reference,
7575 make sure we lay it out again. */
7577 TYPE_SIZE (t) = 0;
7579 type_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
7581 if (pedantic)
7583 for (x = fieldlist; x; x = DECL_CHAIN (x))
7585 if (DECL_NAME (x) != 0)
7586 break;
7587 if (flag_isoc11
7588 && (TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
7589 || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE))
7590 break;
7593 if (x == 0)
7595 if (TREE_CODE (t) == UNION_TYPE)
7597 if (fieldlist)
7598 pedwarn (loc, OPT_Wpedantic, "union has no named members");
7599 else
7600 pedwarn (loc, OPT_Wpedantic, "union has no members");
7602 else
7604 if (fieldlist)
7605 pedwarn (loc, OPT_Wpedantic, "struct has no named members");
7606 else
7607 pedwarn (loc, OPT_Wpedantic, "struct has no members");
7612 /* Install struct as DECL_CONTEXT of each field decl.
7613 Also process specified field sizes, found in the DECL_INITIAL,
7614 storing 0 there after the type has been changed to precision equal
7615 to its width, rather than the precision of the specified standard
7616 type. (Correct layout requires the original type to have been preserved
7617 until now.) */
7619 saw_named_field = 0;
7620 for (x = fieldlist; x; x = DECL_CHAIN (x))
7622 if (TREE_TYPE (x) == error_mark_node)
7623 continue;
7625 DECL_CONTEXT (x) = t;
7627 /* If any field is const, the structure type is pseudo-const. */
7628 if (TREE_READONLY (x))
7629 C_TYPE_FIELDS_READONLY (t) = 1;
7630 else
7632 /* A field that is pseudo-const makes the structure likewise. */
7633 tree t1 = strip_array_types (TREE_TYPE (x));
7634 if ((TREE_CODE (t1) == RECORD_TYPE || TREE_CODE (t1) == UNION_TYPE)
7635 && C_TYPE_FIELDS_READONLY (t1))
7636 C_TYPE_FIELDS_READONLY (t) = 1;
7639 /* Any field that is volatile means variables of this type must be
7640 treated in some ways as volatile. */
7641 if (TREE_THIS_VOLATILE (x))
7642 C_TYPE_FIELDS_VOLATILE (t) = 1;
7644 /* Any field of nominal variable size implies structure is too. */
7645 if (C_DECL_VARIABLE_SIZE (x))
7646 C_TYPE_VARIABLE_SIZE (t) = 1;
7648 if (DECL_INITIAL (x))
7650 unsigned HOST_WIDE_INT width = tree_to_uhwi (DECL_INITIAL (x));
7651 DECL_SIZE (x) = bitsize_int (width);
7652 DECL_BIT_FIELD (x) = 1;
7653 SET_DECL_C_BIT_FIELD (x);
7656 if (TYPE_PACKED (t)
7657 && (DECL_BIT_FIELD (x)
7658 || TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT))
7659 DECL_PACKED (x) = 1;
7661 /* Detect flexible array member in an invalid context. */
7662 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
7663 && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
7664 && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
7665 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
7667 if (TREE_CODE (t) == UNION_TYPE)
7669 error_at (DECL_SOURCE_LOCATION (x),
7670 "flexible array member in union");
7671 TREE_TYPE (x) = error_mark_node;
7673 else if (DECL_CHAIN (x) != NULL_TREE)
7675 error_at (DECL_SOURCE_LOCATION (x),
7676 "flexible array member not at end of struct");
7677 TREE_TYPE (x) = error_mark_node;
7679 else if (!saw_named_field)
7681 error_at (DECL_SOURCE_LOCATION (x),
7682 "flexible array member in otherwise empty struct");
7683 TREE_TYPE (x) = error_mark_node;
7687 if (pedantic && TREE_CODE (t) == RECORD_TYPE
7688 && flexible_array_type_p (TREE_TYPE (x)))
7689 pedwarn (DECL_SOURCE_LOCATION (x), OPT_Wpedantic,
7690 "invalid use of structure with flexible array member");
7692 if (DECL_NAME (x)
7693 || TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
7694 || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE)
7695 saw_named_field = 1;
7698 detect_field_duplicates (fieldlist);
7700 /* Now we have the nearly final fieldlist. Record it,
7701 then lay out the structure or union (including the fields). */
7703 TYPE_FIELDS (t) = fieldlist;
7705 layout_type (t);
7707 if (TYPE_SIZE_UNIT (t)
7708 && TREE_CODE (TYPE_SIZE_UNIT (t)) == INTEGER_CST
7709 && !TREE_OVERFLOW (TYPE_SIZE_UNIT (t))
7710 && !valid_constant_size_p (TYPE_SIZE_UNIT (t)))
7711 error ("type %qT is too large", t);
7713 /* Give bit-fields their proper types. */
7715 tree *fieldlistp = &fieldlist;
7716 while (*fieldlistp)
7717 if (TREE_CODE (*fieldlistp) == FIELD_DECL && DECL_INITIAL (*fieldlistp)
7718 && TREE_TYPE (*fieldlistp) != error_mark_node)
7720 unsigned HOST_WIDE_INT width
7721 = tree_to_uhwi (DECL_INITIAL (*fieldlistp));
7722 tree type = TREE_TYPE (*fieldlistp);
7723 if (width != TYPE_PRECISION (type))
7725 TREE_TYPE (*fieldlistp)
7726 = c_build_bitfield_integer_type (width, TYPE_UNSIGNED (type));
7727 DECL_MODE (*fieldlistp) = TYPE_MODE (TREE_TYPE (*fieldlistp));
7729 DECL_INITIAL (*fieldlistp) = 0;
7731 else
7732 fieldlistp = &DECL_CHAIN (*fieldlistp);
7735 /* Now we have the truly final field list.
7736 Store it in this type and in the variants. */
7738 TYPE_FIELDS (t) = fieldlist;
7740 /* If there are lots of fields, sort so we can look through them fast.
7741 We arbitrarily consider 16 or more elts to be "a lot". */
7744 int len = 0;
7746 for (x = fieldlist; x; x = DECL_CHAIN (x))
7748 if (len > 15 || DECL_NAME (x) == NULL)
7749 break;
7750 len += 1;
7753 if (len > 15)
7755 tree *field_array;
7756 struct lang_type *space;
7757 struct sorted_fields_type *space2;
7759 len += list_length (x);
7761 /* Use the same allocation policy here that make_node uses, to
7762 ensure that this lives as long as the rest of the struct decl.
7763 All decls in an inline function need to be saved. */
7765 space = ggc_cleared_alloc<struct lang_type> ();
7766 space2 = (sorted_fields_type *) ggc_internal_alloc
7767 (sizeof (struct sorted_fields_type) + len * sizeof (tree));
7769 len = 0;
7770 space->s = space2;
7771 field_array = &space2->elts[0];
7772 for (x = fieldlist; x; x = DECL_CHAIN (x))
7774 field_array[len++] = x;
7776 /* If there is anonymous struct or union, break out of the loop. */
7777 if (DECL_NAME (x) == NULL)
7778 break;
7780 /* Found no anonymous struct/union. Add the TYPE_LANG_SPECIFIC. */
7781 if (x == NULL)
7783 TYPE_LANG_SPECIFIC (t) = space;
7784 TYPE_LANG_SPECIFIC (t)->s->len = len;
7785 field_array = TYPE_LANG_SPECIFIC (t)->s->elts;
7786 qsort (field_array, len, sizeof (tree), field_decl_cmp);
7791 for (x = TYPE_MAIN_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
7793 TYPE_FIELDS (x) = TYPE_FIELDS (t);
7794 TYPE_LANG_SPECIFIC (x) = TYPE_LANG_SPECIFIC (t);
7795 C_TYPE_FIELDS_READONLY (x) = C_TYPE_FIELDS_READONLY (t);
7796 C_TYPE_FIELDS_VOLATILE (x) = C_TYPE_FIELDS_VOLATILE (t);
7797 C_TYPE_VARIABLE_SIZE (x) = C_TYPE_VARIABLE_SIZE (t);
7800 /* If this was supposed to be a transparent union, but we can't
7801 make it one, warn and turn off the flag. */
7802 if (TREE_CODE (t) == UNION_TYPE
7803 && TYPE_TRANSPARENT_AGGR (t)
7804 && (!TYPE_FIELDS (t) || TYPE_MODE (t) != DECL_MODE (TYPE_FIELDS (t))))
7806 TYPE_TRANSPARENT_AGGR (t) = 0;
7807 warning_at (loc, 0, "union cannot be made transparent");
7810 /* If this structure or union completes the type of any previous
7811 variable declaration, lay it out and output its rtl. */
7812 for (x = C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t));
7814 x = TREE_CHAIN (x))
7816 tree decl = TREE_VALUE (x);
7817 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
7818 layout_array_type (TREE_TYPE (decl));
7819 if (TREE_CODE (decl) != TYPE_DECL)
7821 layout_decl (decl, 0);
7822 if (c_dialect_objc ())
7823 objc_check_decl (decl);
7824 rest_of_decl_compilation (decl, toplevel, 0);
7827 C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t)) = 0;
7829 /* Update type location to the one of the definition, instead of e.g.
7830 a forward declaration. */
7831 if (TYPE_STUB_DECL (t))
7832 DECL_SOURCE_LOCATION (TYPE_STUB_DECL (t)) = loc;
7834 /* Finish debugging output for this type. */
7835 rest_of_type_compilation (t, toplevel);
7837 /* If we're inside a function proper, i.e. not file-scope and not still
7838 parsing parameters, then arrange for the size of a variable sized type
7839 to be bound now. */
7840 if (building_stmt_list_p () && variably_modified_type_p (t, NULL_TREE))
7841 add_stmt (build_stmt (loc,
7842 DECL_EXPR, build_decl (loc, TYPE_DECL, NULL, t)));
7844 if (warn_cxx_compat)
7845 warn_cxx_compat_finish_struct (fieldlist);
7847 struct_parse_info->struct_types.release ();
7848 struct_parse_info->fields.release ();
7849 struct_parse_info->typedefs_seen.release ();
7850 XDELETE (struct_parse_info);
7852 struct_parse_info = enclosing_struct_parse_info;
7854 /* If this struct is defined inside a struct, add it to
7855 struct_types. */
7856 if (warn_cxx_compat
7857 && struct_parse_info != NULL
7858 && !in_sizeof && !in_typeof && !in_alignof)
7859 struct_parse_info->struct_types.safe_push (t);
7861 return t;
7864 /* Lay out the type T, and its element type, and so on. */
7866 static void
7867 layout_array_type (tree t)
7869 if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
7870 layout_array_type (TREE_TYPE (t));
7871 layout_type (t);
7874 /* Begin compiling the definition of an enumeration type.
7875 NAME is its name (or null if anonymous).
7876 LOC is the enum's location.
7877 Returns the type object, as yet incomplete.
7878 Also records info about it so that build_enumerator
7879 may be used to declare the individual values as they are read. */
7881 tree
7882 start_enum (location_t loc, struct c_enum_contents *the_enum, tree name)
7884 tree enumtype = NULL_TREE;
7885 location_t enumloc = UNKNOWN_LOCATION;
7887 /* If this is the real definition for a previous forward reference,
7888 fill in the contents in the same object that used to be the
7889 forward reference. */
7891 if (name != NULL_TREE)
7892 enumtype = lookup_tag (ENUMERAL_TYPE, name, 1, &enumloc);
7894 if (enumtype == 0 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
7896 enumtype = make_node (ENUMERAL_TYPE);
7897 pushtag (loc, name, enumtype);
7900 if (C_TYPE_BEING_DEFINED (enumtype))
7901 error_at (loc, "nested redefinition of %<enum %E%>", name);
7903 C_TYPE_BEING_DEFINED (enumtype) = 1;
7905 if (TYPE_VALUES (enumtype) != 0)
7907 /* This enum is a named one that has been declared already. */
7908 error_at (loc, "redeclaration of %<enum %E%>", name);
7909 if (enumloc != UNKNOWN_LOCATION)
7910 inform (enumloc, "originally defined here");
7912 /* Completely replace its old definition.
7913 The old enumerators remain defined, however. */
7914 TYPE_VALUES (enumtype) = 0;
7917 the_enum->enum_next_value = integer_zero_node;
7918 the_enum->enum_overflow = 0;
7920 if (flag_short_enums)
7921 TYPE_PACKED (enumtype) = 1;
7923 /* FIXME: This will issue a warning for a use of a type defined
7924 within sizeof in a statement expr. This is not terribly serious
7925 as C++ doesn't permit statement exprs within sizeof anyhow. */
7926 if (warn_cxx_compat && (in_sizeof || in_typeof || in_alignof))
7927 warning_at (loc, OPT_Wc___compat,
7928 "defining type in %qs expression is invalid in C++",
7929 (in_sizeof
7930 ? "sizeof"
7931 : (in_typeof ? "typeof" : "alignof")));
7933 return enumtype;
7936 /* After processing and defining all the values of an enumeration type,
7937 install their decls in the enumeration type and finish it off.
7938 ENUMTYPE is the type object, VALUES a list of decl-value pairs,
7939 and ATTRIBUTES are the specified attributes.
7940 Returns ENUMTYPE. */
7942 tree
7943 finish_enum (tree enumtype, tree values, tree attributes)
7945 tree pair, tem;
7946 tree minnode = 0, maxnode = 0;
7947 int precision;
7948 signop sign;
7949 bool toplevel = (file_scope == current_scope);
7950 struct lang_type *lt;
7952 type_attributes (&enumtype, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
7954 /* Calculate the maximum value of any enumerator in this type. */
7956 if (values == error_mark_node)
7957 minnode = maxnode = integer_zero_node;
7958 else
7960 minnode = maxnode = TREE_VALUE (values);
7961 for (pair = TREE_CHAIN (values); pair; pair = TREE_CHAIN (pair))
7963 tree value = TREE_VALUE (pair);
7964 if (tree_int_cst_lt (maxnode, value))
7965 maxnode = value;
7966 if (tree_int_cst_lt (value, minnode))
7967 minnode = value;
7971 /* Construct the final type of this enumeration. It is the same
7972 as one of the integral types - the narrowest one that fits, except
7973 that normally we only go as narrow as int - and signed iff any of
7974 the values are negative. */
7975 sign = (tree_int_cst_sgn (minnode) >= 0) ? UNSIGNED : SIGNED;
7976 precision = MAX (tree_int_cst_min_precision (minnode, sign),
7977 tree_int_cst_min_precision (maxnode, sign));
7979 if (TYPE_PACKED (enumtype) || precision > TYPE_PRECISION (integer_type_node))
7981 tem = c_common_type_for_size (precision, sign == UNSIGNED ? 1 : 0);
7982 if (tem == NULL)
7984 warning (0, "enumeration values exceed range of largest integer");
7985 tem = long_long_integer_type_node;
7988 else
7989 tem = sign == UNSIGNED ? unsigned_type_node : integer_type_node;
7991 TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (tem);
7992 TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (tem);
7993 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (tem);
7994 TYPE_SIZE (enumtype) = 0;
7996 /* If the precision of the type was specific with an attribute and it
7997 was too small, give an error. Otherwise, use it. */
7998 if (TYPE_PRECISION (enumtype))
8000 if (precision > TYPE_PRECISION (enumtype))
8001 error ("specified mode too small for enumeral values");
8003 else
8004 TYPE_PRECISION (enumtype) = TYPE_PRECISION (tem);
8006 layout_type (enumtype);
8008 if (values != error_mark_node)
8010 /* Change the type of the enumerators to be the enum type. We
8011 need to do this irrespective of the size of the enum, for
8012 proper type checking. Replace the DECL_INITIALs of the
8013 enumerators, and the value slots of the list, with copies
8014 that have the enum type; they cannot be modified in place
8015 because they may be shared (e.g. integer_zero_node) Finally,
8016 change the purpose slots to point to the names of the decls. */
8017 for (pair = values; pair; pair = TREE_CHAIN (pair))
8019 tree enu = TREE_PURPOSE (pair);
8020 tree ini = DECL_INITIAL (enu);
8022 TREE_TYPE (enu) = enumtype;
8024 /* The ISO C Standard mandates enumerators to have type int,
8025 even though the underlying type of an enum type is
8026 unspecified. However, GCC allows enumerators of any
8027 integer type as an extensions. build_enumerator()
8028 converts any enumerators that fit in an int to type int,
8029 to avoid promotions to unsigned types when comparing
8030 integers with enumerators that fit in the int range.
8031 When -pedantic is given, build_enumerator() would have
8032 already warned about those that don't fit. Here we
8033 convert the rest to the enumerator type. */
8034 if (TREE_TYPE (ini) != integer_type_node)
8035 ini = convert (enumtype, ini);
8037 DECL_INITIAL (enu) = ini;
8038 TREE_PURPOSE (pair) = DECL_NAME (enu);
8039 TREE_VALUE (pair) = ini;
8042 TYPE_VALUES (enumtype) = values;
8045 /* Record the min/max values so that we can warn about bit-field
8046 enumerations that are too small for the values. */
8047 lt = ggc_cleared_alloc<struct lang_type> ();
8048 lt->enum_min = minnode;
8049 lt->enum_max = maxnode;
8050 TYPE_LANG_SPECIFIC (enumtype) = lt;
8052 /* Fix up all variant types of this enum type. */
8053 for (tem = TYPE_MAIN_VARIANT (enumtype); tem; tem = TYPE_NEXT_VARIANT (tem))
8055 if (tem == enumtype)
8056 continue;
8057 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
8058 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
8059 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
8060 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
8061 TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
8062 SET_TYPE_MODE (tem, TYPE_MODE (enumtype));
8063 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
8064 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
8065 TYPE_USER_ALIGN (tem) = TYPE_USER_ALIGN (enumtype);
8066 TYPE_UNSIGNED (tem) = TYPE_UNSIGNED (enumtype);
8067 TYPE_LANG_SPECIFIC (tem) = TYPE_LANG_SPECIFIC (enumtype);
8070 /* Finish debugging output for this type. */
8071 rest_of_type_compilation (enumtype, toplevel);
8073 /* If this enum is defined inside a struct, add it to
8074 struct_types. */
8075 if (warn_cxx_compat
8076 && struct_parse_info != NULL
8077 && !in_sizeof && !in_typeof && !in_alignof)
8078 struct_parse_info->struct_types.safe_push (enumtype);
8080 return enumtype;
8083 /* Build and install a CONST_DECL for one value of the
8084 current enumeration type (one that was begun with start_enum).
8085 DECL_LOC is the location of the enumerator.
8086 LOC is the location of the '=' operator if any, DECL_LOC otherwise.
8087 Return a tree-list containing the CONST_DECL and its value.
8088 Assignment of sequential values by default is handled here. */
8090 tree
8091 build_enumerator (location_t decl_loc, location_t loc,
8092 struct c_enum_contents *the_enum, tree name, tree value)
8094 tree decl, type;
8096 /* Validate and default VALUE. */
8098 if (value != 0)
8100 /* Don't issue more errors for error_mark_node (i.e. an
8101 undeclared identifier) - just ignore the value expression. */
8102 if (value == error_mark_node)
8103 value = 0;
8104 else if (!INTEGRAL_TYPE_P (TREE_TYPE (value)))
8106 error_at (loc, "enumerator value for %qE is not an integer constant",
8107 name);
8108 value = 0;
8110 else
8112 if (TREE_CODE (value) != INTEGER_CST)
8114 value = c_fully_fold (value, false, NULL);
8115 if (TREE_CODE (value) == INTEGER_CST)
8116 pedwarn (loc, OPT_Wpedantic,
8117 "enumerator value for %qE is not an integer "
8118 "constant expression", name);
8120 if (TREE_CODE (value) != INTEGER_CST)
8122 error ("enumerator value for %qE is not an integer constant",
8123 name);
8124 value = 0;
8126 else
8128 value = default_conversion (value);
8129 constant_expression_warning (value);
8134 /* Default based on previous value. */
8135 /* It should no longer be possible to have NON_LVALUE_EXPR
8136 in the default. */
8137 if (value == 0)
8139 value = the_enum->enum_next_value;
8140 if (the_enum->enum_overflow)
8141 error_at (loc, "overflow in enumeration values");
8143 /* Even though the underlying type of an enum is unspecified, the
8144 type of enumeration constants is explicitly defined as int
8145 (6.4.4.3/2 in the C99 Standard). GCC allows any integer type as
8146 an extension. */
8147 else if (!int_fits_type_p (value, integer_type_node))
8148 pedwarn (loc, OPT_Wpedantic,
8149 "ISO C restricts enumerator values to range of %<int%>");
8151 /* The ISO C Standard mandates enumerators to have type int, even
8152 though the underlying type of an enum type is unspecified.
8153 However, GCC allows enumerators of any integer type as an
8154 extensions. Here we convert any enumerators that fit in an int
8155 to type int, to avoid promotions to unsigned types when comparing
8156 integers with enumerators that fit in the int range. When
8157 -pedantic is given, we would have already warned about those that
8158 don't fit. We have to do this here rather than in finish_enum
8159 because this value may be used to define more enumerators. */
8160 if (int_fits_type_p (value, integer_type_node))
8161 value = convert (integer_type_node, value);
8163 /* Set basis for default for next value. */
8164 the_enum->enum_next_value
8165 = build_binary_op (EXPR_LOC_OR_LOC (value, input_location),
8166 PLUS_EXPR, value, integer_one_node, 0);
8167 the_enum->enum_overflow = tree_int_cst_lt (the_enum->enum_next_value, value);
8169 /* Now create a declaration for the enum value name. */
8171 type = TREE_TYPE (value);
8172 type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
8173 TYPE_PRECISION (integer_type_node)),
8174 (TYPE_PRECISION (type)
8175 >= TYPE_PRECISION (integer_type_node)
8176 && TYPE_UNSIGNED (type)));
8178 decl = build_decl (decl_loc, CONST_DECL, name, type);
8179 DECL_INITIAL (decl) = convert (type, value);
8180 pushdecl (decl);
8182 return tree_cons (decl, value, NULL_TREE);
8186 /* Create the FUNCTION_DECL for a function definition.
8187 DECLSPECS, DECLARATOR and ATTRIBUTES are the parts of
8188 the declaration; they describe the function's name and the type it returns,
8189 but twisted together in a fashion that parallels the syntax of C.
8191 This function creates a binding context for the function body
8192 as well as setting up the FUNCTION_DECL in current_function_decl.
8194 Returns 1 on success. If the DECLARATOR is not suitable for a function
8195 (it defines a datum instead), we return 0, which tells
8196 yyparse to report a parse error. */
8199 start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
8200 tree attributes)
8202 tree decl1, old_decl;
8203 tree restype, resdecl;
8204 location_t loc;
8206 current_function_returns_value = 0; /* Assume, until we see it does. */
8207 current_function_returns_null = 0;
8208 current_function_returns_abnormally = 0;
8209 warn_about_return_type = 0;
8210 c_switch_stack = NULL;
8212 /* Indicate no valid break/continue context by setting these variables
8213 to some non-null, non-label value. We'll notice and emit the proper
8214 error message in c_finish_bc_stmt. */
8215 c_break_label = c_cont_label = size_zero_node;
8217 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, true, NULL,
8218 &attributes, NULL, NULL, DEPRECATED_NORMAL);
8220 /* If the declarator is not suitable for a function definition,
8221 cause a syntax error. */
8222 if (decl1 == 0
8223 || TREE_CODE (decl1) != FUNCTION_DECL)
8224 return 0;
8226 loc = DECL_SOURCE_LOCATION (decl1);
8228 c_decl_attributes (&decl1, attributes, 0);
8230 if (DECL_DECLARED_INLINE_P (decl1)
8231 && DECL_UNINLINABLE (decl1)
8232 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl1)))
8233 warning_at (loc, OPT_Wattributes,
8234 "inline function %qD given attribute noinline",
8235 decl1);
8237 /* Handle gnu_inline attribute. */
8238 if (declspecs->inline_p
8239 && !flag_gnu89_inline
8240 && TREE_CODE (decl1) == FUNCTION_DECL
8241 && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl1))
8242 || current_function_decl))
8244 if (declspecs->storage_class != csc_static)
8245 DECL_EXTERNAL (decl1) = !DECL_EXTERNAL (decl1);
8248 announce_function (decl1);
8250 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl1))))
8252 error_at (loc, "return type is an incomplete type");
8253 /* Make it return void instead. */
8254 TREE_TYPE (decl1)
8255 = build_function_type (void_type_node,
8256 TYPE_ARG_TYPES (TREE_TYPE (decl1)));
8259 if (warn_about_return_type)
8260 warn_defaults_to (loc, flag_isoc99 ? OPT_Wimplicit_int
8261 : (warn_return_type ? OPT_Wreturn_type
8262 : OPT_Wimplicit_int),
8263 "return type defaults to %<int%>");
8265 /* Make the init_value nonzero so pushdecl knows this is not tentative.
8266 error_mark_node is replaced below (in pop_scope) with the BLOCK. */
8267 DECL_INITIAL (decl1) = error_mark_node;
8269 /* A nested function is not global. */
8270 if (current_function_decl != 0)
8271 TREE_PUBLIC (decl1) = 0;
8273 /* If this definition isn't a prototype and we had a prototype declaration
8274 before, copy the arg type info from that prototype. */
8275 old_decl = lookup_name_in_scope (DECL_NAME (decl1), current_scope);
8276 if (old_decl && TREE_CODE (old_decl) != FUNCTION_DECL)
8277 old_decl = 0;
8278 current_function_prototype_locus = UNKNOWN_LOCATION;
8279 current_function_prototype_built_in = false;
8280 current_function_prototype_arg_types = NULL_TREE;
8281 if (!prototype_p (TREE_TYPE (decl1)))
8283 if (old_decl != 0 && TREE_CODE (TREE_TYPE (old_decl)) == FUNCTION_TYPE
8284 && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
8285 TREE_TYPE (TREE_TYPE (old_decl))))
8287 TREE_TYPE (decl1) = composite_type (TREE_TYPE (old_decl),
8288 TREE_TYPE (decl1));
8289 current_function_prototype_locus = DECL_SOURCE_LOCATION (old_decl);
8290 current_function_prototype_built_in
8291 = C_DECL_BUILTIN_PROTOTYPE (old_decl);
8292 current_function_prototype_arg_types
8293 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
8295 if (TREE_PUBLIC (decl1))
8297 /* If there is an external prototype declaration of this
8298 function, record its location but do not copy information
8299 to this decl. This may be an invisible declaration
8300 (built-in or in a scope which has finished) or simply
8301 have more refined argument types than any declaration
8302 found above. */
8303 struct c_binding *b;
8304 for (b = I_SYMBOL_BINDING (DECL_NAME (decl1)); b; b = b->shadowed)
8305 if (B_IN_SCOPE (b, external_scope))
8306 break;
8307 if (b)
8309 tree ext_decl, ext_type;
8310 ext_decl = b->decl;
8311 ext_type = b->u.type ? b->u.type : TREE_TYPE (ext_decl);
8312 if (TREE_CODE (ext_type) == FUNCTION_TYPE
8313 && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
8314 TREE_TYPE (ext_type)))
8316 current_function_prototype_locus
8317 = DECL_SOURCE_LOCATION (ext_decl);
8318 current_function_prototype_built_in
8319 = C_DECL_BUILTIN_PROTOTYPE (ext_decl);
8320 current_function_prototype_arg_types
8321 = TYPE_ARG_TYPES (ext_type);
8327 /* Optionally warn of old-fashioned def with no previous prototype. */
8328 if (warn_strict_prototypes
8329 && old_decl != error_mark_node
8330 && !prototype_p (TREE_TYPE (decl1))
8331 && C_DECL_ISNT_PROTOTYPE (old_decl))
8332 warning_at (loc, OPT_Wstrict_prototypes,
8333 "function declaration isn%'t a prototype");
8334 /* Optionally warn of any global def with no previous prototype. */
8335 else if (warn_missing_prototypes
8336 && old_decl != error_mark_node
8337 && TREE_PUBLIC (decl1)
8338 && !MAIN_NAME_P (DECL_NAME (decl1))
8339 && C_DECL_ISNT_PROTOTYPE (old_decl)
8340 && !DECL_DECLARED_INLINE_P (decl1))
8341 warning_at (loc, OPT_Wmissing_prototypes,
8342 "no previous prototype for %qD", decl1);
8343 /* Optionally warn of any def with no previous prototype
8344 if the function has already been used. */
8345 else if (warn_missing_prototypes
8346 && old_decl != 0
8347 && old_decl != error_mark_node
8348 && TREE_USED (old_decl)
8349 && !prototype_p (TREE_TYPE (old_decl)))
8350 warning_at (loc, OPT_Wmissing_prototypes,
8351 "%qD was used with no prototype before its definition", decl1);
8352 /* Optionally warn of any global def with no previous declaration. */
8353 else if (warn_missing_declarations
8354 && TREE_PUBLIC (decl1)
8355 && old_decl == 0
8356 && !MAIN_NAME_P (DECL_NAME (decl1))
8357 && !DECL_DECLARED_INLINE_P (decl1))
8358 warning_at (loc, OPT_Wmissing_declarations,
8359 "no previous declaration for %qD",
8360 decl1);
8361 /* Optionally warn of any def with no previous declaration
8362 if the function has already been used. */
8363 else if (warn_missing_declarations
8364 && old_decl != 0
8365 && old_decl != error_mark_node
8366 && TREE_USED (old_decl)
8367 && C_DECL_IMPLICIT (old_decl))
8368 warning_at (loc, OPT_Wmissing_declarations,
8369 "%qD was used with no declaration before its definition", decl1);
8371 /* This function exists in static storage.
8372 (This does not mean `static' in the C sense!) */
8373 TREE_STATIC (decl1) = 1;
8375 /* This is the earliest point at which we might know the assembler
8376 name of the function. Thus, if it's set before this, die horribly. */
8377 gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl1));
8379 /* If #pragma weak was used, mark the decl weak now. */
8380 if (current_scope == file_scope)
8381 maybe_apply_pragma_weak (decl1);
8383 /* Warn for unlikely, improbable, or stupid declarations of `main'. */
8384 if (warn_main && MAIN_NAME_P (DECL_NAME (decl1)))
8386 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1)))
8387 != integer_type_node)
8388 pedwarn (loc, OPT_Wmain, "return type of %qD is not %<int%>", decl1);
8389 else if (TYPE_ATOMIC (TREE_TYPE (TREE_TYPE (decl1))))
8390 pedwarn (loc, OPT_Wmain, "%<_Atomic%>-qualified return type of %qD",
8391 decl1);
8393 check_main_parameter_types (decl1);
8395 if (!TREE_PUBLIC (decl1))
8396 pedwarn (loc, OPT_Wmain,
8397 "%qD is normally a non-static function", decl1);
8400 /* Record the decl so that the function name is defined.
8401 If we already have a decl for this name, and it is a FUNCTION_DECL,
8402 use the old decl. */
8404 current_function_decl = pushdecl (decl1);
8406 push_scope ();
8407 declare_parm_level ();
8409 restype = TREE_TYPE (TREE_TYPE (current_function_decl));
8410 resdecl = build_decl (loc, RESULT_DECL, NULL_TREE, restype);
8411 DECL_ARTIFICIAL (resdecl) = 1;
8412 DECL_IGNORED_P (resdecl) = 1;
8413 DECL_RESULT (current_function_decl) = resdecl;
8415 start_fname_decls ();
8417 return 1;
8420 /* Subroutine of store_parm_decls which handles new-style function
8421 definitions (prototype format). The parms already have decls, so we
8422 need only record them as in effect and complain if any redundant
8423 old-style parm decls were written. */
8424 static void
8425 store_parm_decls_newstyle (tree fndecl, const struct c_arg_info *arg_info)
8427 tree decl;
8428 c_arg_tag *tag;
8429 unsigned ix;
8431 if (current_scope->bindings)
8433 error_at (DECL_SOURCE_LOCATION (fndecl),
8434 "old-style parameter declarations in prototyped "
8435 "function definition");
8437 /* Get rid of the old-style declarations. */
8438 pop_scope ();
8439 push_scope ();
8441 /* Don't issue this warning for nested functions, and don't issue this
8442 warning if we got here because ARG_INFO_TYPES was error_mark_node
8443 (this happens when a function definition has just an ellipsis in
8444 its parameter list). */
8445 else if (!in_system_header_at (input_location)
8446 && !current_function_scope
8447 && arg_info->types != error_mark_node)
8448 warning_at (DECL_SOURCE_LOCATION (fndecl), OPT_Wtraditional,
8449 "traditional C rejects ISO C style function definitions");
8451 /* Now make all the parameter declarations visible in the function body.
8452 We can bypass most of the grunt work of pushdecl. */
8453 for (decl = arg_info->parms; decl; decl = DECL_CHAIN (decl))
8455 DECL_CONTEXT (decl) = current_function_decl;
8456 if (DECL_NAME (decl))
8458 bind (DECL_NAME (decl), decl, current_scope,
8459 /*invisible=*/false, /*nested=*/false,
8460 UNKNOWN_LOCATION);
8461 if (!TREE_USED (decl))
8462 warn_if_shadowing (decl);
8464 else
8465 error_at (DECL_SOURCE_LOCATION (decl), "parameter name omitted");
8468 /* Record the parameter list in the function declaration. */
8469 DECL_ARGUMENTS (fndecl) = arg_info->parms;
8471 /* Now make all the ancillary declarations visible, likewise. */
8472 for (decl = arg_info->others; decl; decl = DECL_CHAIN (decl))
8474 DECL_CONTEXT (decl) = current_function_decl;
8475 if (DECL_NAME (decl))
8476 bind (DECL_NAME (decl), decl, current_scope,
8477 /*invisible=*/false,
8478 /*nested=*/(TREE_CODE (decl) == FUNCTION_DECL),
8479 UNKNOWN_LOCATION);
8482 /* And all the tag declarations. */
8483 FOR_EACH_VEC_SAFE_ELT_REVERSE (arg_info->tags, ix, tag)
8484 if (tag->id)
8485 bind (tag->id, tag->type, current_scope,
8486 /*invisible=*/false, /*nested=*/false, UNKNOWN_LOCATION);
8489 /* Subroutine of store_parm_decls which handles old-style function
8490 definitions (separate parameter list and declarations). */
8492 static void
8493 store_parm_decls_oldstyle (tree fndecl, const struct c_arg_info *arg_info)
8495 struct c_binding *b;
8496 tree parm, decl, last;
8497 tree parmids = arg_info->parms;
8498 hash_set<tree> seen_args;
8500 if (!in_system_header_at (input_location))
8501 warning_at (DECL_SOURCE_LOCATION (fndecl),
8502 OPT_Wold_style_definition, "old-style function definition");
8504 /* Match each formal parameter name with its declaration. Save each
8505 decl in the appropriate TREE_PURPOSE slot of the parmids chain. */
8506 for (parm = parmids; parm; parm = TREE_CHAIN (parm))
8508 if (TREE_VALUE (parm) == 0)
8510 error_at (DECL_SOURCE_LOCATION (fndecl),
8511 "parameter name missing from parameter list");
8512 TREE_PURPOSE (parm) = 0;
8513 continue;
8516 b = I_SYMBOL_BINDING (TREE_VALUE (parm));
8517 if (b && B_IN_CURRENT_SCOPE (b))
8519 decl = b->decl;
8520 /* Skip erroneous parameters. */
8521 if (decl == error_mark_node)
8522 continue;
8523 /* If we got something other than a PARM_DECL it is an error. */
8524 if (TREE_CODE (decl) != PARM_DECL)
8525 error_at (DECL_SOURCE_LOCATION (decl),
8526 "%qD declared as a non-parameter", decl);
8527 /* If the declaration is already marked, we have a duplicate
8528 name. Complain and ignore the duplicate. */
8529 else if (seen_args.contains (decl))
8531 error_at (DECL_SOURCE_LOCATION (decl),
8532 "multiple parameters named %qD", decl);
8533 TREE_PURPOSE (parm) = 0;
8534 continue;
8536 /* If the declaration says "void", complain and turn it into
8537 an int. */
8538 else if (VOID_TYPE_P (TREE_TYPE (decl)))
8540 error_at (DECL_SOURCE_LOCATION (decl),
8541 "parameter %qD declared with void type", decl);
8542 TREE_TYPE (decl) = integer_type_node;
8543 DECL_ARG_TYPE (decl) = integer_type_node;
8544 layout_decl (decl, 0);
8546 warn_if_shadowing (decl);
8548 /* If no declaration found, default to int. */
8549 else
8551 /* FIXME diagnostics: This should be the location of the argument,
8552 not the FNDECL. E.g., for an old-style declaration
8554 int f10(v) { blah; }
8556 We should use the location of the V, not the F10.
8557 Unfortunately, the V is an IDENTIFIER_NODE which has no
8558 location. In the future we need locations for c_arg_info
8559 entries.
8561 See gcc.dg/Wshadow-3.c for an example of this problem. */
8562 decl = build_decl (DECL_SOURCE_LOCATION (fndecl),
8563 PARM_DECL, TREE_VALUE (parm), integer_type_node);
8564 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
8565 pushdecl (decl);
8566 warn_if_shadowing (decl);
8568 if (flag_isoc99)
8569 pedwarn (DECL_SOURCE_LOCATION (decl),
8570 OPT_Wimplicit_int, "type of %qD defaults to %<int%>",
8571 decl);
8572 else
8573 warning_at (DECL_SOURCE_LOCATION (decl),
8574 OPT_Wmissing_parameter_type,
8575 "type of %qD defaults to %<int%>", decl);
8578 TREE_PURPOSE (parm) = decl;
8579 seen_args.add (decl);
8582 /* Now examine the parms chain for incomplete declarations
8583 and declarations with no corresponding names. */
8585 for (b = current_scope->bindings; b; b = b->prev)
8587 parm = b->decl;
8588 if (TREE_CODE (parm) != PARM_DECL)
8589 continue;
8591 if (TREE_TYPE (parm) != error_mark_node
8592 && !COMPLETE_TYPE_P (TREE_TYPE (parm)))
8594 error_at (DECL_SOURCE_LOCATION (parm),
8595 "parameter %qD has incomplete type", parm);
8596 TREE_TYPE (parm) = error_mark_node;
8599 if (!seen_args.contains (parm))
8601 error_at (DECL_SOURCE_LOCATION (parm),
8602 "declaration for parameter %qD but no such parameter",
8603 parm);
8605 /* Pretend the parameter was not missing.
8606 This gets us to a standard state and minimizes
8607 further error messages. */
8608 parmids = chainon (parmids, tree_cons (parm, 0, 0));
8612 /* Chain the declarations together in the order of the list of
8613 names. Store that chain in the function decl, replacing the
8614 list of names. Update the current scope to match. */
8615 DECL_ARGUMENTS (fndecl) = 0;
8617 for (parm = parmids; parm; parm = TREE_CHAIN (parm))
8618 if (TREE_PURPOSE (parm))
8619 break;
8620 if (parm && TREE_PURPOSE (parm))
8622 last = TREE_PURPOSE (parm);
8623 DECL_ARGUMENTS (fndecl) = last;
8625 for (parm = TREE_CHAIN (parm); parm; parm = TREE_CHAIN (parm))
8626 if (TREE_PURPOSE (parm))
8628 DECL_CHAIN (last) = TREE_PURPOSE (parm);
8629 last = TREE_PURPOSE (parm);
8631 DECL_CHAIN (last) = 0;
8634 /* If there was a previous prototype,
8635 set the DECL_ARG_TYPE of each argument according to
8636 the type previously specified, and report any mismatches. */
8638 if (current_function_prototype_arg_types)
8640 tree type;
8641 for (parm = DECL_ARGUMENTS (fndecl),
8642 type = current_function_prototype_arg_types;
8643 parm || (type && TREE_VALUE (type) != error_mark_node
8644 && (TYPE_MAIN_VARIANT (TREE_VALUE (type)) != void_type_node));
8645 parm = DECL_CHAIN (parm), type = TREE_CHAIN (type))
8647 if (parm == 0 || type == 0
8648 || TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
8650 if (current_function_prototype_built_in)
8651 warning_at (DECL_SOURCE_LOCATION (fndecl),
8652 0, "number of arguments doesn%'t match "
8653 "built-in prototype");
8654 else
8656 /* FIXME diagnostics: This should be the location of
8657 FNDECL, but there is bug when a prototype is
8658 declared inside function context, but defined
8659 outside of it (e.g., gcc.dg/pr15698-2.c). In
8660 which case FNDECL gets the location of the
8661 prototype, not the definition. */
8662 error_at (input_location,
8663 "number of arguments doesn%'t match prototype");
8665 error_at (current_function_prototype_locus,
8666 "prototype declaration");
8668 break;
8670 /* Type for passing arg must be consistent with that
8671 declared for the arg. ISO C says we take the unqualified
8672 type for parameters declared with qualified type. */
8673 if (TREE_TYPE (parm) != error_mark_node
8674 && TREE_TYPE (type) != error_mark_node
8675 && ((TYPE_ATOMIC (DECL_ARG_TYPE (parm))
8676 != TYPE_ATOMIC (TREE_VALUE (type)))
8677 || !comptypes (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (parm)),
8678 TYPE_MAIN_VARIANT (TREE_VALUE (type)))))
8680 if ((TYPE_ATOMIC (DECL_ARG_TYPE (parm))
8681 == TYPE_ATOMIC (TREE_VALUE (type)))
8682 && (TYPE_MAIN_VARIANT (TREE_TYPE (parm))
8683 == TYPE_MAIN_VARIANT (TREE_VALUE (type))))
8685 /* Adjust argument to match prototype. E.g. a previous
8686 `int foo(float);' prototype causes
8687 `int foo(x) float x; {...}' to be treated like
8688 `int foo(float x) {...}'. This is particularly
8689 useful for argument types like uid_t. */
8690 DECL_ARG_TYPE (parm) = TREE_TYPE (parm);
8692 if (targetm.calls.promote_prototypes (TREE_TYPE (current_function_decl))
8693 && INTEGRAL_TYPE_P (TREE_TYPE (parm))
8694 && TYPE_PRECISION (TREE_TYPE (parm))
8695 < TYPE_PRECISION (integer_type_node))
8696 DECL_ARG_TYPE (parm)
8697 = c_type_promotes_to (TREE_TYPE (parm));
8699 /* ??? Is it possible to get here with a
8700 built-in prototype or will it always have
8701 been diagnosed as conflicting with an
8702 old-style definition and discarded? */
8703 if (current_function_prototype_built_in)
8704 warning_at (DECL_SOURCE_LOCATION (parm),
8705 OPT_Wpedantic, "promoted argument %qD "
8706 "doesn%'t match built-in prototype", parm);
8707 else
8709 pedwarn (DECL_SOURCE_LOCATION (parm),
8710 OPT_Wpedantic, "promoted argument %qD "
8711 "doesn%'t match prototype", parm);
8712 pedwarn (current_function_prototype_locus, OPT_Wpedantic,
8713 "prototype declaration");
8716 else
8718 if (current_function_prototype_built_in)
8719 warning_at (DECL_SOURCE_LOCATION (parm),
8720 0, "argument %qD doesn%'t match "
8721 "built-in prototype", parm);
8722 else
8724 error_at (DECL_SOURCE_LOCATION (parm),
8725 "argument %qD doesn%'t match prototype", parm);
8726 error_at (current_function_prototype_locus,
8727 "prototype declaration");
8732 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = 0;
8735 /* Otherwise, create a prototype that would match. */
8737 else
8739 tree actual = 0, last = 0, type;
8741 for (parm = DECL_ARGUMENTS (fndecl); parm; parm = DECL_CHAIN (parm))
8743 type = tree_cons (NULL_TREE, DECL_ARG_TYPE (parm), NULL_TREE);
8744 if (last)
8745 TREE_CHAIN (last) = type;
8746 else
8747 actual = type;
8748 last = type;
8750 type = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
8751 if (last)
8752 TREE_CHAIN (last) = type;
8753 else
8754 actual = type;
8756 /* We are going to assign a new value for the TYPE_ACTUAL_ARG_TYPES
8757 of the type of this function, but we need to avoid having this
8758 affect the types of other similarly-typed functions, so we must
8759 first force the generation of an identical (but separate) type
8760 node for the relevant function type. The new node we create
8761 will be a variant of the main variant of the original function
8762 type. */
8764 TREE_TYPE (fndecl) = build_variant_type_copy (TREE_TYPE (fndecl));
8766 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = actual;
8770 /* Store parameter declarations passed in ARG_INFO into the current
8771 function declaration. */
8773 void
8774 store_parm_decls_from (struct c_arg_info *arg_info)
8776 current_function_arg_info = arg_info;
8777 store_parm_decls ();
8780 /* Store the parameter declarations into the current function declaration.
8781 This is called after parsing the parameter declarations, before
8782 digesting the body of the function.
8784 For an old-style definition, construct a prototype out of the old-style
8785 parameter declarations and inject it into the function's type. */
8787 void
8788 store_parm_decls (void)
8790 tree fndecl = current_function_decl;
8791 bool proto;
8793 /* The argument information block for FNDECL. */
8794 struct c_arg_info *arg_info = current_function_arg_info;
8795 current_function_arg_info = 0;
8797 /* True if this definition is written with a prototype. Note:
8798 despite C99 6.7.5.3p14, we can *not* treat an empty argument
8799 list in a function definition as equivalent to (void) -- an
8800 empty argument list specifies the function has no parameters,
8801 but only (void) sets up a prototype for future calls. */
8802 proto = arg_info->types != 0;
8804 if (proto)
8805 store_parm_decls_newstyle (fndecl, arg_info);
8806 else
8807 store_parm_decls_oldstyle (fndecl, arg_info);
8809 /* The next call to push_scope will be a function body. */
8811 next_is_function_body = true;
8813 /* Write a record describing this function definition to the prototypes
8814 file (if requested). */
8816 gen_aux_info_record (fndecl, 1, 0, proto);
8818 /* Initialize the RTL code for the function. */
8819 allocate_struct_function (fndecl, false);
8821 if (warn_unused_local_typedefs)
8822 cfun->language = ggc_cleared_alloc<language_function> ();
8824 /* Begin the statement tree for this function. */
8825 DECL_SAVED_TREE (fndecl) = push_stmt_list ();
8827 /* ??? Insert the contents of the pending sizes list into the function
8828 to be evaluated. The only reason left to have this is
8829 void foo(int n, int array[n++])
8830 because we throw away the array type in favor of a pointer type, and
8831 thus won't naturally see the SAVE_EXPR containing the increment. All
8832 other pending sizes would be handled by gimplify_parameters. */
8833 if (arg_info->pending_sizes)
8834 add_stmt (arg_info->pending_sizes);
8837 /* Store PARM_DECLs in PARMS into scope temporarily. Used for
8838 c_finish_omp_declare_simd for function prototypes. No diagnostics
8839 should be done. */
8841 void
8842 temp_store_parm_decls (tree fndecl, tree parms)
8844 push_scope ();
8845 for (tree p = parms; p; p = DECL_CHAIN (p))
8847 DECL_CONTEXT (p) = fndecl;
8848 if (DECL_NAME (p))
8849 bind (DECL_NAME (p), p, current_scope,
8850 /*invisible=*/false, /*nested=*/false,
8851 UNKNOWN_LOCATION);
8855 /* Undo what temp_store_parm_decls did. */
8857 void
8858 temp_pop_parm_decls (void)
8860 /* Clear all bindings in this temporary scope, so that
8861 pop_scope doesn't create a BLOCK. */
8862 struct c_binding *b = current_scope->bindings;
8863 current_scope->bindings = NULL;
8864 for (; b; b = free_binding_and_advance (b))
8866 gcc_assert (TREE_CODE (b->decl) == PARM_DECL);
8867 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
8868 I_SYMBOL_BINDING (b->id) = b->shadowed;
8869 if (b->shadowed && b->shadowed->u.type)
8870 TREE_TYPE (b->shadowed->decl) = b->shadowed->u.type;
8872 pop_scope ();
8876 /* Finish up a function declaration and compile that function
8877 all the way to assembler language output. Then free the storage
8878 for the function definition.
8880 This is called after parsing the body of the function definition. */
8882 void
8883 finish_function (void)
8885 tree fndecl = current_function_decl;
8887 if (c_dialect_objc ())
8888 objc_finish_function ();
8890 if (TREE_CODE (fndecl) == FUNCTION_DECL
8891 && targetm.calls.promote_prototypes (TREE_TYPE (fndecl)))
8893 tree args = DECL_ARGUMENTS (fndecl);
8894 for (; args; args = DECL_CHAIN (args))
8896 tree type = TREE_TYPE (args);
8897 if (INTEGRAL_TYPE_P (type)
8898 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
8899 DECL_ARG_TYPE (args) = c_type_promotes_to (type);
8903 if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node)
8904 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
8906 /* Must mark the RESULT_DECL as being in this function. */
8908 if (DECL_RESULT (fndecl) && DECL_RESULT (fndecl) != error_mark_node)
8909 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
8911 if (MAIN_NAME_P (DECL_NAME (fndecl)) && flag_hosted
8912 && TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (fndecl)))
8913 == integer_type_node && flag_isoc99)
8915 /* Hack. We don't want the middle-end to warn that this return
8916 is unreachable, so we mark its location as special. Using
8917 UNKNOWN_LOCATION has the problem that it gets clobbered in
8918 annotate_one_with_locus. A cleaner solution might be to
8919 ensure ! should_carry_locus_p (stmt), but that needs a flag.
8921 c_finish_return (BUILTINS_LOCATION, integer_zero_node, NULL_TREE);
8924 /* Tie off the statement tree for this function. */
8925 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
8927 /* If the function has _Cilk_spawn in front of a function call inside it
8928 i.e. it is a spawning function, then add the appropriate Cilk plus
8929 functions inside. */
8930 if (fn_contains_cilk_spawn_p (cfun))
8931 cfun->cilk_frame_decl = insert_cilk_frame (fndecl);
8933 finish_fname_decls ();
8935 /* Complain if there's just no return statement. */
8936 if (warn_return_type
8937 && TREE_CODE (TREE_TYPE (TREE_TYPE (fndecl))) != VOID_TYPE
8938 && !current_function_returns_value && !current_function_returns_null
8939 /* Don't complain if we are no-return. */
8940 && !current_function_returns_abnormally
8941 /* Don't complain if we are declared noreturn. */
8942 && !TREE_THIS_VOLATILE (fndecl)
8943 /* Don't warn for main(). */
8944 && !MAIN_NAME_P (DECL_NAME (fndecl))
8945 /* Or if they didn't actually specify a return type. */
8946 && !C_FUNCTION_IMPLICIT_INT (fndecl)
8947 /* Normally, with -Wreturn-type, flow will complain, but we might
8948 optimize out static functions. */
8949 && !TREE_PUBLIC (fndecl))
8951 warning (OPT_Wreturn_type,
8952 "no return statement in function returning non-void");
8953 TREE_NO_WARNING (fndecl) = 1;
8956 /* Complain about parameters that are only set, but never otherwise used. */
8957 if (warn_unused_but_set_parameter)
8959 tree decl;
8961 for (decl = DECL_ARGUMENTS (fndecl);
8962 decl;
8963 decl = DECL_CHAIN (decl))
8964 if (TREE_USED (decl)
8965 && TREE_CODE (decl) == PARM_DECL
8966 && !DECL_READ_P (decl)
8967 && DECL_NAME (decl)
8968 && !DECL_ARTIFICIAL (decl)
8969 && !TREE_NO_WARNING (decl))
8970 warning_at (DECL_SOURCE_LOCATION (decl),
8971 OPT_Wunused_but_set_parameter,
8972 "parameter %qD set but not used", decl);
8975 /* Complain about locally defined typedefs that are not used in this
8976 function. */
8977 maybe_warn_unused_local_typedefs ();
8979 /* Store the end of the function, so that we get good line number
8980 info for the epilogue. */
8981 cfun->function_end_locus = input_location;
8983 /* Finalize the ELF visibility for the function. */
8984 c_determine_visibility (fndecl);
8986 /* For GNU C extern inline functions disregard inline limits. */
8987 if (DECL_EXTERNAL (fndecl)
8988 && DECL_DECLARED_INLINE_P (fndecl))
8989 DECL_DISREGARD_INLINE_LIMITS (fndecl) = 1;
8991 /* Genericize before inlining. Delay genericizing nested functions
8992 until their parent function is genericized. Since finalizing
8993 requires GENERIC, delay that as well. */
8995 if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node
8996 && !undef_nested_function)
8998 if (!decl_function_context (fndecl))
9000 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
9001 c_genericize (fndecl);
9003 /* ??? Objc emits functions after finalizing the compilation unit.
9004 This should be cleaned up later and this conditional removed. */
9005 if (symtab->global_info_ready)
9007 cgraph_node::add_new_function (fndecl, false);
9008 return;
9010 cgraph_node::finalize_function (fndecl, false);
9012 else
9014 /* Register this function with cgraph just far enough to get it
9015 added to our parent's nested function list. Handy, since the
9016 C front end doesn't have such a list. */
9017 (void) cgraph_node::get_create (fndecl);
9021 if (!decl_function_context (fndecl))
9022 undef_nested_function = false;
9024 if (cfun->language != NULL)
9026 ggc_free (cfun->language);
9027 cfun->language = NULL;
9030 /* We're leaving the context of this function, so zap cfun.
9031 It's still in DECL_STRUCT_FUNCTION, and we'll restore it in
9032 tree_rest_of_compilation. */
9033 set_cfun (NULL);
9034 current_function_decl = NULL;
9037 /* Check the declarations given in a for-loop for satisfying the C99
9038 constraints. If exactly one such decl is found, return it. LOC is
9039 the location of the opening parenthesis of the for loop. The last
9040 parameter allows you to control the "for loop initial declarations
9041 are only allowed in C99 mode". Normally, you should pass
9042 flag_isoc99 as that parameter. But in some cases (Objective-C
9043 foreach loop, for example) we want to run the checks in this
9044 function even if not in C99 mode, so we allow the caller to turn
9045 off the error about not being in C99 mode.
9048 tree
9049 check_for_loop_decls (location_t loc, bool turn_off_iso_c99_error)
9051 struct c_binding *b;
9052 tree one_decl = NULL_TREE;
9053 int n_decls = 0;
9055 if (!turn_off_iso_c99_error)
9057 static bool hint = true;
9058 /* If we get here, declarations have been used in a for loop without
9059 the C99 for loop scope. This doesn't make much sense, so don't
9060 allow it. */
9061 error_at (loc, "%<for%> loop initial declarations "
9062 "are only allowed in C99 or C11 mode");
9063 if (hint)
9065 inform (loc,
9066 "use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 "
9067 "to compile your code");
9068 hint = false;
9070 return NULL_TREE;
9072 /* C99 subclause 6.8.5 paragraph 3:
9074 [#3] The declaration part of a for statement shall only
9075 declare identifiers for objects having storage class auto or
9076 register.
9078 It isn't clear whether, in this sentence, "identifiers" binds to
9079 "shall only declare" or to "objects" - that is, whether all identifiers
9080 declared must be identifiers for objects, or whether the restriction
9081 only applies to those that are. (A question on this in comp.std.c
9082 in November 2000 received no answer.) We implement the strictest
9083 interpretation, to avoid creating an extension which later causes
9084 problems. */
9086 for (b = current_scope->bindings; b; b = b->prev)
9088 tree id = b->id;
9089 tree decl = b->decl;
9091 if (!id)
9092 continue;
9094 switch (TREE_CODE (decl))
9096 case VAR_DECL:
9098 location_t decl_loc = DECL_SOURCE_LOCATION (decl);
9099 if (TREE_STATIC (decl))
9100 error_at (decl_loc,
9101 "declaration of static variable %qD in %<for%> loop "
9102 "initial declaration", decl);
9103 else if (DECL_EXTERNAL (decl))
9104 error_at (decl_loc,
9105 "declaration of %<extern%> variable %qD in %<for%> loop "
9106 "initial declaration", decl);
9108 break;
9110 case RECORD_TYPE:
9111 error_at (loc,
9112 "%<struct %E%> declared in %<for%> loop initial "
9113 "declaration", id);
9114 break;
9115 case UNION_TYPE:
9116 error_at (loc,
9117 "%<union %E%> declared in %<for%> loop initial declaration",
9118 id);
9119 break;
9120 case ENUMERAL_TYPE:
9121 error_at (loc, "%<enum %E%> declared in %<for%> loop "
9122 "initial declaration", id);
9123 break;
9124 default:
9125 error_at (loc, "declaration of non-variable "
9126 "%qD in %<for%> loop initial declaration", decl);
9129 n_decls++;
9130 one_decl = decl;
9133 return n_decls == 1 ? one_decl : NULL_TREE;
9136 /* Save and reinitialize the variables
9137 used during compilation of a C function. */
9139 void
9140 c_push_function_context (void)
9142 struct language_function *p = cfun->language;
9143 /* cfun->language might have been already allocated by the use of
9144 -Wunused-local-typedefs. In that case, just re-use it. */
9145 if (p == NULL)
9146 cfun->language = p = ggc_cleared_alloc<language_function> ();
9148 p->base.x_stmt_tree = c_stmt_tree;
9149 c_stmt_tree.x_cur_stmt_list = vec_safe_copy (c_stmt_tree.x_cur_stmt_list);
9150 p->x_break_label = c_break_label;
9151 p->x_cont_label = c_cont_label;
9152 p->x_switch_stack = c_switch_stack;
9153 p->arg_info = current_function_arg_info;
9154 p->returns_value = current_function_returns_value;
9155 p->returns_null = current_function_returns_null;
9156 p->returns_abnormally = current_function_returns_abnormally;
9157 p->warn_about_return_type = warn_about_return_type;
9159 push_function_context ();
9162 /* Restore the variables used during compilation of a C function. */
9164 void
9165 c_pop_function_context (void)
9167 struct language_function *p;
9169 pop_function_context ();
9170 p = cfun->language;
9172 /* When -Wunused-local-typedefs is in effect, cfun->languages is
9173 used to store data throughout the life time of the current cfun,
9174 So don't deallocate it. */
9175 if (!warn_unused_local_typedefs)
9176 cfun->language = NULL;
9178 if (DECL_STRUCT_FUNCTION (current_function_decl) == 0
9179 && DECL_SAVED_TREE (current_function_decl) == NULL_TREE)
9181 /* Stop pointing to the local nodes about to be freed. */
9182 /* But DECL_INITIAL must remain nonzero so we know this
9183 was an actual function definition. */
9184 DECL_INITIAL (current_function_decl) = error_mark_node;
9185 DECL_ARGUMENTS (current_function_decl) = 0;
9188 c_stmt_tree = p->base.x_stmt_tree;
9189 p->base.x_stmt_tree.x_cur_stmt_list = NULL;
9190 c_break_label = p->x_break_label;
9191 c_cont_label = p->x_cont_label;
9192 c_switch_stack = p->x_switch_stack;
9193 current_function_arg_info = p->arg_info;
9194 current_function_returns_value = p->returns_value;
9195 current_function_returns_null = p->returns_null;
9196 current_function_returns_abnormally = p->returns_abnormally;
9197 warn_about_return_type = p->warn_about_return_type;
9200 /* The functions below are required for functionality of doing
9201 function at once processing in the C front end. Currently these
9202 functions are not called from anywhere in the C front end, but as
9203 these changes continue, that will change. */
9205 /* Returns the stmt_tree (if any) to which statements are currently
9206 being added. If there is no active statement-tree, NULL is
9207 returned. */
9209 stmt_tree
9210 current_stmt_tree (void)
9212 return &c_stmt_tree;
9215 /* Return the global value of T as a symbol. */
9217 tree
9218 identifier_global_value (tree t)
9220 struct c_binding *b;
9222 for (b = I_SYMBOL_BINDING (t); b; b = b->shadowed)
9223 if (B_IN_FILE_SCOPE (b) || B_IN_EXTERNAL_SCOPE (b))
9224 return b->decl;
9226 return 0;
9229 /* In C, the only C-linkage public declaration is at file scope. */
9231 tree
9232 c_linkage_bindings (tree name)
9234 return identifier_global_value (name);
9237 /* Record a builtin type for C. If NAME is non-NULL, it is the name used;
9238 otherwise the name is found in ridpointers from RID_INDEX. */
9240 void
9241 record_builtin_type (enum rid rid_index, const char *name, tree type)
9243 tree id, decl;
9244 if (name == 0)
9245 id = ridpointers[(int) rid_index];
9246 else
9247 id = get_identifier (name);
9248 decl = build_decl (UNKNOWN_LOCATION, TYPE_DECL, id, type);
9249 pushdecl (decl);
9250 if (debug_hooks->type_decl)
9251 debug_hooks->type_decl (decl, false);
9254 /* Build the void_list_node (void_type_node having been created). */
9255 tree
9256 build_void_list_node (void)
9258 tree t = build_tree_list (NULL_TREE, void_type_node);
9259 return t;
9262 /* Return a c_parm structure with the given SPECS, ATTRS and DECLARATOR. */
9264 struct c_parm *
9265 build_c_parm (struct c_declspecs *specs, tree attrs,
9266 struct c_declarator *declarator)
9268 struct c_parm *ret = XOBNEW (&parser_obstack, struct c_parm);
9269 ret->specs = specs;
9270 ret->attrs = attrs;
9271 ret->declarator = declarator;
9272 return ret;
9275 /* Return a declarator with nested attributes. TARGET is the inner
9276 declarator to which these attributes apply. ATTRS are the
9277 attributes. */
9279 struct c_declarator *
9280 build_attrs_declarator (tree attrs, struct c_declarator *target)
9282 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
9283 ret->kind = cdk_attrs;
9284 ret->declarator = target;
9285 ret->u.attrs = attrs;
9286 return ret;
9289 /* Return a declarator for a function with arguments specified by ARGS
9290 and return type specified by TARGET. */
9292 struct c_declarator *
9293 build_function_declarator (struct c_arg_info *args,
9294 struct c_declarator *target)
9296 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
9297 ret->kind = cdk_function;
9298 ret->declarator = target;
9299 ret->u.arg_info = args;
9300 return ret;
9303 /* Return a declarator for the identifier IDENT (which may be
9304 NULL_TREE for an abstract declarator). */
9306 struct c_declarator *
9307 build_id_declarator (tree ident)
9309 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
9310 ret->kind = cdk_id;
9311 ret->declarator = 0;
9312 ret->u.id = ident;
9313 /* Default value - may get reset to a more precise location. */
9314 ret->id_loc = input_location;
9315 return ret;
9318 /* Return something to represent absolute declarators containing a *.
9319 TARGET is the absolute declarator that the * contains.
9320 TYPE_QUALS_ATTRS is a structure for type qualifiers and attributes
9321 to apply to the pointer type. */
9323 struct c_declarator *
9324 make_pointer_declarator (struct c_declspecs *type_quals_attrs,
9325 struct c_declarator *target)
9327 tree attrs;
9328 int quals = 0;
9329 struct c_declarator *itarget = target;
9330 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
9331 if (type_quals_attrs)
9333 attrs = type_quals_attrs->attrs;
9334 quals = quals_from_declspecs (type_quals_attrs);
9335 if (attrs != NULL_TREE)
9336 itarget = build_attrs_declarator (attrs, target);
9338 ret->kind = cdk_pointer;
9339 ret->declarator = itarget;
9340 ret->u.pointer_quals = quals;
9341 return ret;
9344 /* Return a pointer to a structure for an empty list of declaration
9345 specifiers. */
9347 struct c_declspecs *
9348 build_null_declspecs (void)
9350 struct c_declspecs *ret = XOBNEW (&parser_obstack, struct c_declspecs);
9351 memset (&ret->locations, 0, cdw_number_of_elements);
9352 ret->type = 0;
9353 ret->expr = 0;
9354 ret->decl_attr = 0;
9355 ret->attrs = 0;
9356 ret->align_log = -1;
9357 ret->typespec_word = cts_none;
9358 ret->storage_class = csc_none;
9359 ret->expr_const_operands = true;
9360 ret->declspecs_seen_p = false;
9361 ret->typespec_kind = ctsk_none;
9362 ret->non_sc_seen_p = false;
9363 ret->typedef_p = false;
9364 ret->explicit_signed_p = false;
9365 ret->deprecated_p = false;
9366 ret->default_int_p = false;
9367 ret->long_p = false;
9368 ret->long_long_p = false;
9369 ret->short_p = false;
9370 ret->signed_p = false;
9371 ret->unsigned_p = false;
9372 ret->complex_p = false;
9373 ret->inline_p = false;
9374 ret->noreturn_p = false;
9375 ret->thread_p = false;
9376 ret->thread_gnu_p = false;
9377 ret->const_p = false;
9378 ret->volatile_p = false;
9379 ret->atomic_p = false;
9380 ret->restrict_p = false;
9381 ret->saturating_p = false;
9382 ret->alignas_p = false;
9383 ret->address_space = ADDR_SPACE_GENERIC;
9384 return ret;
9387 /* Add the address space ADDRSPACE to the declaration specifiers
9388 SPECS, returning SPECS. */
9390 struct c_declspecs *
9391 declspecs_add_addrspace (source_location location,
9392 struct c_declspecs *specs, addr_space_t as)
9394 specs->non_sc_seen_p = true;
9395 specs->declspecs_seen_p = true;
9397 if (!ADDR_SPACE_GENERIC_P (specs->address_space)
9398 && specs->address_space != as)
9399 error ("incompatible address space qualifiers %qs and %qs",
9400 c_addr_space_name (as),
9401 c_addr_space_name (specs->address_space));
9402 else
9404 specs->address_space = as;
9405 specs->locations[cdw_address_space] = location;
9407 return specs;
9410 /* Add the type qualifier QUAL to the declaration specifiers SPECS,
9411 returning SPECS. */
9413 struct c_declspecs *
9414 declspecs_add_qual (source_location loc,
9415 struct c_declspecs *specs, tree qual)
9417 enum rid i;
9418 bool dupe = false;
9419 specs->non_sc_seen_p = true;
9420 specs->declspecs_seen_p = true;
9421 gcc_assert (TREE_CODE (qual) == IDENTIFIER_NODE
9422 && C_IS_RESERVED_WORD (qual));
9423 i = C_RID_CODE (qual);
9424 switch (i)
9426 case RID_CONST:
9427 dupe = specs->const_p;
9428 specs->const_p = true;
9429 specs->locations[cdw_const] = loc;
9430 break;
9431 case RID_VOLATILE:
9432 dupe = specs->volatile_p;
9433 specs->volatile_p = true;
9434 specs->locations[cdw_volatile] = loc;
9435 break;
9436 case RID_RESTRICT:
9437 dupe = specs->restrict_p;
9438 specs->restrict_p = true;
9439 specs->locations[cdw_restrict] = loc;
9440 break;
9441 case RID_ATOMIC:
9442 dupe = specs->atomic_p;
9443 specs->atomic_p = true;
9444 break;
9445 default:
9446 gcc_unreachable ();
9448 if (dupe)
9449 pedwarn_c90 (loc, OPT_Wpedantic, "duplicate %qE", qual);
9450 return specs;
9453 /* Add the type specifier TYPE to the declaration specifiers SPECS,
9454 returning SPECS. */
9456 struct c_declspecs *
9457 declspecs_add_type (location_t loc, struct c_declspecs *specs,
9458 struct c_typespec spec)
9460 tree type = spec.spec;
9461 specs->non_sc_seen_p = true;
9462 specs->declspecs_seen_p = true;
9463 specs->typespec_kind = spec.kind;
9464 if (TREE_DEPRECATED (type))
9465 specs->deprecated_p = true;
9467 /* Handle type specifier keywords. */
9468 if (TREE_CODE (type) == IDENTIFIER_NODE
9469 && C_IS_RESERVED_WORD (type)
9470 && C_RID_CODE (type) != RID_CXX_COMPAT_WARN)
9472 enum rid i = C_RID_CODE (type);
9473 if (specs->type)
9475 error_at (loc, "two or more data types in declaration specifiers");
9476 return specs;
9478 if ((int) i <= (int) RID_LAST_MODIFIER)
9480 /* "long", "short", "signed", "unsigned", "_Complex" or "_Sat". */
9481 bool dupe = false;
9482 switch (i)
9484 case RID_LONG:
9485 if (specs->long_long_p)
9487 error_at (loc, "%<long long long%> is too long for GCC");
9488 break;
9490 if (specs->long_p)
9492 if (specs->typespec_word == cts_double)
9494 error_at (loc,
9495 ("both %<long long%> and %<double%> in "
9496 "declaration specifiers"));
9497 break;
9499 pedwarn_c90 (loc, OPT_Wlong_long,
9500 "ISO C90 does not support %<long long%>");
9501 specs->long_long_p = 1;
9502 specs->locations[cdw_long_long] = loc;
9503 break;
9505 if (specs->short_p)
9506 error_at (loc,
9507 ("both %<long%> and %<short%> in "
9508 "declaration specifiers"));
9509 else if (specs->typespec_word == cts_auto_type)
9510 error_at (loc,
9511 ("both %<long%> and %<__auto_type%> in "
9512 "declaration specifiers"));
9513 else if (specs->typespec_word == cts_void)
9514 error_at (loc,
9515 ("both %<long%> and %<void%> in "
9516 "declaration specifiers"));
9517 else if (specs->typespec_word == cts_int_n)
9518 error_at (loc,
9519 ("both %<long%> and %<__int%d%> in "
9520 "declaration specifiers"),
9521 int_n_data[specs->int_n_idx].bitsize);
9522 else if (specs->typespec_word == cts_bool)
9523 error_at (loc,
9524 ("both %<long%> and %<_Bool%> in "
9525 "declaration specifiers"));
9526 else if (specs->typespec_word == cts_char)
9527 error_at (loc,
9528 ("both %<long%> and %<char%> in "
9529 "declaration specifiers"));
9530 else if (specs->typespec_word == cts_float)
9531 error_at (loc,
9532 ("both %<long%> and %<float%> in "
9533 "declaration specifiers"));
9534 else if (specs->typespec_word == cts_dfloat32)
9535 error_at (loc,
9536 ("both %<long%> and %<_Decimal32%> in "
9537 "declaration specifiers"));
9538 else if (specs->typespec_word == cts_dfloat64)
9539 error_at (loc,
9540 ("both %<long%> and %<_Decimal64%> in "
9541 "declaration specifiers"));
9542 else if (specs->typespec_word == cts_dfloat128)
9543 error_at (loc,
9544 ("both %<long%> and %<_Decimal128%> in "
9545 "declaration specifiers"));
9546 else
9548 specs->long_p = true;
9549 specs->locations[cdw_long] = loc;
9551 break;
9552 case RID_SHORT:
9553 dupe = specs->short_p;
9554 if (specs->long_p)
9555 error_at (loc,
9556 ("both %<long%> and %<short%> in "
9557 "declaration specifiers"));
9558 else if (specs->typespec_word == cts_auto_type)
9559 error_at (loc,
9560 ("both %<short%> and %<__auto_type%> in "
9561 "declaration specifiers"));
9562 else if (specs->typespec_word == cts_void)
9563 error_at (loc,
9564 ("both %<short%> and %<void%> in "
9565 "declaration specifiers"));
9566 else if (specs->typespec_word == cts_int_n)
9567 error_at (loc,
9568 ("both %<short%> and %<__int%d%> in "
9569 "declaration specifiers"),
9570 int_n_data[specs->int_n_idx].bitsize);
9571 else if (specs->typespec_word == cts_bool)
9572 error_at (loc,
9573 ("both %<short%> and %<_Bool%> in "
9574 "declaration specifiers"));
9575 else if (specs->typespec_word == cts_char)
9576 error_at (loc,
9577 ("both %<short%> and %<char%> in "
9578 "declaration specifiers"));
9579 else if (specs->typespec_word == cts_float)
9580 error_at (loc,
9581 ("both %<short%> and %<float%> in "
9582 "declaration specifiers"));
9583 else if (specs->typespec_word == cts_double)
9584 error_at (loc,
9585 ("both %<short%> and %<double%> in "
9586 "declaration specifiers"));
9587 else if (specs->typespec_word == cts_dfloat32)
9588 error_at (loc,
9589 ("both %<short%> and %<_Decimal32%> in "
9590 "declaration specifiers"));
9591 else if (specs->typespec_word == cts_dfloat64)
9592 error_at (loc,
9593 ("both %<short%> and %<_Decimal64%> in "
9594 "declaration specifiers"));
9595 else if (specs->typespec_word == cts_dfloat128)
9596 error_at (loc,
9597 ("both %<short%> and %<_Decimal128%> in "
9598 "declaration specifiers"));
9599 else
9601 specs->short_p = true;
9602 specs->locations[cdw_short] = loc;
9604 break;
9605 case RID_SIGNED:
9606 dupe = specs->signed_p;
9607 if (specs->unsigned_p)
9608 error_at (loc,
9609 ("both %<signed%> and %<unsigned%> in "
9610 "declaration specifiers"));
9611 else if (specs->typespec_word == cts_auto_type)
9612 error_at (loc,
9613 ("both %<signed%> and %<__auto_type%> in "
9614 "declaration specifiers"));
9615 else if (specs->typespec_word == cts_void)
9616 error_at (loc,
9617 ("both %<signed%> and %<void%> in "
9618 "declaration specifiers"));
9619 else if (specs->typespec_word == cts_bool)
9620 error_at (loc,
9621 ("both %<signed%> and %<_Bool%> in "
9622 "declaration specifiers"));
9623 else if (specs->typespec_word == cts_float)
9624 error_at (loc,
9625 ("both %<signed%> and %<float%> in "
9626 "declaration specifiers"));
9627 else if (specs->typespec_word == cts_double)
9628 error_at (loc,
9629 ("both %<signed%> and %<double%> in "
9630 "declaration specifiers"));
9631 else if (specs->typespec_word == cts_dfloat32)
9632 error_at (loc,
9633 ("both %<signed%> and %<_Decimal32%> in "
9634 "declaration specifiers"));
9635 else if (specs->typespec_word == cts_dfloat64)
9636 error_at (loc,
9637 ("both %<signed%> and %<_Decimal64%> in "
9638 "declaration specifiers"));
9639 else if (specs->typespec_word == cts_dfloat128)
9640 error_at (loc,
9641 ("both %<signed%> and %<_Decimal128%> in "
9642 "declaration specifiers"));
9643 else
9645 specs->signed_p = true;
9646 specs->locations[cdw_signed] = loc;
9648 break;
9649 case RID_UNSIGNED:
9650 dupe = specs->unsigned_p;
9651 if (specs->signed_p)
9652 error_at (loc,
9653 ("both %<signed%> and %<unsigned%> in "
9654 "declaration specifiers"));
9655 else if (specs->typespec_word == cts_auto_type)
9656 error_at (loc,
9657 ("both %<unsigned%> and %<__auto_type%> in "
9658 "declaration specifiers"));
9659 else if (specs->typespec_word == cts_void)
9660 error_at (loc,
9661 ("both %<unsigned%> and %<void%> in "
9662 "declaration specifiers"));
9663 else if (specs->typespec_word == cts_bool)
9664 error_at (loc,
9665 ("both %<unsigned%> and %<_Bool%> in "
9666 "declaration specifiers"));
9667 else if (specs->typespec_word == cts_float)
9668 error_at (loc,
9669 ("both %<unsigned%> and %<float%> in "
9670 "declaration specifiers"));
9671 else if (specs->typespec_word == cts_double)
9672 error_at (loc,
9673 ("both %<unsigned%> and %<double%> in "
9674 "declaration specifiers"));
9675 else if (specs->typespec_word == cts_dfloat32)
9676 error_at (loc,
9677 ("both %<unsigned%> and %<_Decimal32%> in "
9678 "declaration specifiers"));
9679 else if (specs->typespec_word == cts_dfloat64)
9680 error_at (loc,
9681 ("both %<unsigned%> and %<_Decimal64%> in "
9682 "declaration specifiers"));
9683 else if (specs->typespec_word == cts_dfloat128)
9684 error_at (loc,
9685 ("both %<unsigned%> and %<_Decimal128%> in "
9686 "declaration specifiers"));
9687 else
9689 specs->unsigned_p = true;
9690 specs->locations[cdw_unsigned] = loc;
9692 break;
9693 case RID_COMPLEX:
9694 dupe = specs->complex_p;
9695 if (!in_system_header_at (loc))
9696 pedwarn_c90 (loc, OPT_Wpedantic,
9697 "ISO C90 does not support complex types");
9698 if (specs->typespec_word == cts_auto_type)
9699 error_at (loc,
9700 ("both %<complex%> and %<__auto_type%> in "
9701 "declaration specifiers"));
9702 else if (specs->typespec_word == cts_void)
9703 error_at (loc,
9704 ("both %<complex%> and %<void%> in "
9705 "declaration specifiers"));
9706 else if (specs->typespec_word == cts_bool)
9707 error_at (loc,
9708 ("both %<complex%> and %<_Bool%> in "
9709 "declaration specifiers"));
9710 else if (specs->typespec_word == cts_dfloat32)
9711 error_at (loc,
9712 ("both %<complex%> and %<_Decimal32%> in "
9713 "declaration specifiers"));
9714 else if (specs->typespec_word == cts_dfloat64)
9715 error_at (loc,
9716 ("both %<complex%> and %<_Decimal64%> in "
9717 "declaration specifiers"));
9718 else if (specs->typespec_word == cts_dfloat128)
9719 error_at (loc,
9720 ("both %<complex%> and %<_Decimal128%> in "
9721 "declaration specifiers"));
9722 else if (specs->typespec_word == cts_fract)
9723 error_at (loc,
9724 ("both %<complex%> and %<_Fract%> in "
9725 "declaration specifiers"));
9726 else if (specs->typespec_word == cts_accum)
9727 error_at (loc,
9728 ("both %<complex%> and %<_Accum%> in "
9729 "declaration specifiers"));
9730 else if (specs->saturating_p)
9731 error_at (loc,
9732 ("both %<complex%> and %<_Sat%> in "
9733 "declaration specifiers"));
9734 else
9736 specs->complex_p = true;
9737 specs->locations[cdw_complex] = loc;
9739 break;
9740 case RID_SAT:
9741 dupe = specs->saturating_p;
9742 pedwarn (loc, OPT_Wpedantic,
9743 "ISO C does not support saturating types");
9744 if (specs->typespec_word == cts_int_n)
9746 error_at (loc,
9747 ("both %<_Sat%> and %<__int%d%> in "
9748 "declaration specifiers"),
9749 int_n_data[specs->int_n_idx].bitsize);
9751 else if (specs->typespec_word == cts_auto_type)
9752 error_at (loc,
9753 ("both %<_Sat%> and %<__auto_type%> in "
9754 "declaration specifiers"));
9755 else if (specs->typespec_word == cts_void)
9756 error_at (loc,
9757 ("both %<_Sat%> and %<void%> in "
9758 "declaration specifiers"));
9759 else if (specs->typespec_word == cts_bool)
9760 error_at (loc,
9761 ("both %<_Sat%> and %<_Bool%> in "
9762 "declaration specifiers"));
9763 else if (specs->typespec_word == cts_char)
9764 error_at (loc,
9765 ("both %<_Sat%> and %<char%> in "
9766 "declaration specifiers"));
9767 else if (specs->typespec_word == cts_int)
9768 error_at (loc,
9769 ("both %<_Sat%> and %<int%> in "
9770 "declaration specifiers"));
9771 else if (specs->typespec_word == cts_float)
9772 error_at (loc,
9773 ("both %<_Sat%> and %<float%> in "
9774 "declaration specifiers"));
9775 else if (specs->typespec_word == cts_double)
9776 error_at (loc,
9777 ("both %<_Sat%> and %<double%> in "
9778 "declaration specifiers"));
9779 else if (specs->typespec_word == cts_dfloat32)
9780 error_at (loc,
9781 ("both %<_Sat%> and %<_Decimal32%> in "
9782 "declaration specifiers"));
9783 else if (specs->typespec_word == cts_dfloat64)
9784 error_at (loc,
9785 ("both %<_Sat%> and %<_Decimal64%> in "
9786 "declaration specifiers"));
9787 else if (specs->typespec_word == cts_dfloat128)
9788 error_at (loc,
9789 ("both %<_Sat%> and %<_Decimal128%> in "
9790 "declaration specifiers"));
9791 else if (specs->complex_p)
9792 error_at (loc,
9793 ("both %<_Sat%> and %<complex%> in "
9794 "declaration specifiers"));
9795 else
9797 specs->saturating_p = true;
9798 specs->locations[cdw_saturating] = loc;
9800 break;
9801 default:
9802 gcc_unreachable ();
9805 if (dupe)
9806 error_at (loc, "duplicate %qE", type);
9808 return specs;
9810 else
9812 /* "void", "_Bool", "char", "int", "float", "double", "_Decimal32",
9813 "__intN", "_Decimal64", "_Decimal128", "_Fract", "_Accum" or
9814 "__auto_type". */
9815 if (specs->typespec_word != cts_none)
9817 error_at (loc,
9818 "two or more data types in declaration specifiers");
9819 return specs;
9821 switch (i)
9823 case RID_AUTO_TYPE:
9824 if (specs->long_p)
9825 error_at (loc,
9826 ("both %<long%> and %<__auto_type%> in "
9827 "declaration specifiers"));
9828 else if (specs->short_p)
9829 error_at (loc,
9830 ("both %<short%> and %<__auto_type%> in "
9831 "declaration specifiers"));
9832 else if (specs->signed_p)
9833 error_at (loc,
9834 ("both %<signed%> and %<__auto_type%> in "
9835 "declaration specifiers"));
9836 else if (specs->unsigned_p)
9837 error_at (loc,
9838 ("both %<unsigned%> and %<__auto_type%> in "
9839 "declaration specifiers"));
9840 else if (specs->complex_p)
9841 error_at (loc,
9842 ("both %<complex%> and %<__auto_type%> in "
9843 "declaration specifiers"));
9844 else if (specs->saturating_p)
9845 error_at (loc,
9846 ("both %<_Sat%> and %<__auto_type%> in "
9847 "declaration specifiers"));
9848 else
9850 specs->typespec_word = cts_auto_type;
9851 specs->locations[cdw_typespec] = loc;
9853 return specs;
9854 case RID_INT_N_0:
9855 case RID_INT_N_1:
9856 case RID_INT_N_2:
9857 case RID_INT_N_3:
9858 specs->int_n_idx = i - RID_INT_N_0;
9859 if (!in_system_header_at (input_location))
9860 pedwarn (loc, OPT_Wpedantic,
9861 "ISO C does not support %<__int%d%> types",
9862 int_n_data[specs->int_n_idx].bitsize);
9864 if (specs->long_p)
9865 error_at (loc,
9866 ("both %<__int%d%> and %<long%> in "
9867 "declaration specifiers"),
9868 int_n_data[specs->int_n_idx].bitsize);
9869 else if (specs->saturating_p)
9870 error_at (loc,
9871 ("both %<_Sat%> and %<__int%d%> in "
9872 "declaration specifiers"),
9873 int_n_data[specs->int_n_idx].bitsize);
9874 else if (specs->short_p)
9875 error_at (loc,
9876 ("both %<__int%d%> and %<short%> in "
9877 "declaration specifiers"),
9878 int_n_data[specs->int_n_idx].bitsize);
9879 else if (! int_n_enabled_p [specs->int_n_idx])
9880 error_at (loc,
9881 "%<__int%d%> is not supported on this target",
9882 int_n_data[specs->int_n_idx].bitsize);
9883 else
9885 specs->typespec_word = cts_int_n;
9886 specs->locations[cdw_typespec] = loc;
9888 return specs;
9889 case RID_VOID:
9890 if (specs->long_p)
9891 error_at (loc,
9892 ("both %<long%> and %<void%> in "
9893 "declaration specifiers"));
9894 else if (specs->short_p)
9895 error_at (loc,
9896 ("both %<short%> and %<void%> in "
9897 "declaration specifiers"));
9898 else if (specs->signed_p)
9899 error_at (loc,
9900 ("both %<signed%> and %<void%> in "
9901 "declaration specifiers"));
9902 else if (specs->unsigned_p)
9903 error_at (loc,
9904 ("both %<unsigned%> and %<void%> in "
9905 "declaration specifiers"));
9906 else if (specs->complex_p)
9907 error_at (loc,
9908 ("both %<complex%> and %<void%> in "
9909 "declaration specifiers"));
9910 else if (specs->saturating_p)
9911 error_at (loc,
9912 ("both %<_Sat%> and %<void%> in "
9913 "declaration specifiers"));
9914 else
9916 specs->typespec_word = cts_void;
9917 specs->locations[cdw_typespec] = loc;
9919 return specs;
9920 case RID_BOOL:
9921 if (!in_system_header_at (loc))
9922 pedwarn_c90 (loc, OPT_Wpedantic,
9923 "ISO C90 does not support boolean types");
9924 if (specs->long_p)
9925 error_at (loc,
9926 ("both %<long%> and %<_Bool%> in "
9927 "declaration specifiers"));
9928 else if (specs->short_p)
9929 error_at (loc,
9930 ("both %<short%> and %<_Bool%> in "
9931 "declaration specifiers"));
9932 else if (specs->signed_p)
9933 error_at (loc,
9934 ("both %<signed%> and %<_Bool%> in "
9935 "declaration specifiers"));
9936 else if (specs->unsigned_p)
9937 error_at (loc,
9938 ("both %<unsigned%> and %<_Bool%> in "
9939 "declaration specifiers"));
9940 else if (specs->complex_p)
9941 error_at (loc,
9942 ("both %<complex%> and %<_Bool%> in "
9943 "declaration specifiers"));
9944 else if (specs->saturating_p)
9945 error_at (loc,
9946 ("both %<_Sat%> and %<_Bool%> in "
9947 "declaration specifiers"));
9948 else
9950 specs->typespec_word = cts_bool;
9951 specs->locations[cdw_typespec] = loc;
9953 return specs;
9954 case RID_CHAR:
9955 if (specs->long_p)
9956 error_at (loc,
9957 ("both %<long%> and %<char%> in "
9958 "declaration specifiers"));
9959 else if (specs->short_p)
9960 error_at (loc,
9961 ("both %<short%> and %<char%> in "
9962 "declaration specifiers"));
9963 else if (specs->saturating_p)
9964 error_at (loc,
9965 ("both %<_Sat%> and %<char%> in "
9966 "declaration specifiers"));
9967 else
9969 specs->typespec_word = cts_char;
9970 specs->locations[cdw_typespec] = loc;
9972 return specs;
9973 case RID_INT:
9974 if (specs->saturating_p)
9975 error_at (loc,
9976 ("both %<_Sat%> and %<int%> in "
9977 "declaration specifiers"));
9978 else
9980 specs->typespec_word = cts_int;
9981 specs->locations[cdw_typespec] = loc;
9983 return specs;
9984 case RID_FLOAT:
9985 if (specs->long_p)
9986 error_at (loc,
9987 ("both %<long%> and %<float%> in "
9988 "declaration specifiers"));
9989 else if (specs->short_p)
9990 error_at (loc,
9991 ("both %<short%> and %<float%> in "
9992 "declaration specifiers"));
9993 else if (specs->signed_p)
9994 error_at (loc,
9995 ("both %<signed%> and %<float%> in "
9996 "declaration specifiers"));
9997 else if (specs->unsigned_p)
9998 error_at (loc,
9999 ("both %<unsigned%> and %<float%> in "
10000 "declaration specifiers"));
10001 else if (specs->saturating_p)
10002 error_at (loc,
10003 ("both %<_Sat%> and %<float%> in "
10004 "declaration specifiers"));
10005 else
10007 specs->typespec_word = cts_float;
10008 specs->locations[cdw_typespec] = loc;
10010 return specs;
10011 case RID_DOUBLE:
10012 if (specs->long_long_p)
10013 error_at (loc,
10014 ("both %<long long%> and %<double%> in "
10015 "declaration specifiers"));
10016 else if (specs->short_p)
10017 error_at (loc,
10018 ("both %<short%> and %<double%> in "
10019 "declaration specifiers"));
10020 else if (specs->signed_p)
10021 error_at (loc,
10022 ("both %<signed%> and %<double%> in "
10023 "declaration specifiers"));
10024 else if (specs->unsigned_p)
10025 error_at (loc,
10026 ("both %<unsigned%> and %<double%> in "
10027 "declaration specifiers"));
10028 else if (specs->saturating_p)
10029 error_at (loc,
10030 ("both %<_Sat%> and %<double%> in "
10031 "declaration specifiers"));
10032 else
10034 specs->typespec_word = cts_double;
10035 specs->locations[cdw_typespec] = loc;
10037 return specs;
10038 case RID_DFLOAT32:
10039 case RID_DFLOAT64:
10040 case RID_DFLOAT128:
10042 const char *str;
10043 if (i == RID_DFLOAT32)
10044 str = "_Decimal32";
10045 else if (i == RID_DFLOAT64)
10046 str = "_Decimal64";
10047 else
10048 str = "_Decimal128";
10049 if (specs->long_long_p)
10050 error_at (loc,
10051 ("both %<long long%> and %<%s%> in "
10052 "declaration specifiers"),
10053 str);
10054 if (specs->long_p)
10055 error_at (loc,
10056 ("both %<long%> and %<%s%> in "
10057 "declaration specifiers"),
10058 str);
10059 else if (specs->short_p)
10060 error_at (loc,
10061 ("both %<short%> and %<%s%> in "
10062 "declaration specifiers"),
10063 str);
10064 else if (specs->signed_p)
10065 error_at (loc,
10066 ("both %<signed%> and %<%s%> in "
10067 "declaration specifiers"),
10068 str);
10069 else if (specs->unsigned_p)
10070 error_at (loc,
10071 ("both %<unsigned%> and %<%s%> in "
10072 "declaration specifiers"),
10073 str);
10074 else if (specs->complex_p)
10075 error_at (loc,
10076 ("both %<complex%> and %<%s%> in "
10077 "declaration specifiers"),
10078 str);
10079 else if (specs->saturating_p)
10080 error_at (loc,
10081 ("both %<_Sat%> and %<%s%> in "
10082 "declaration specifiers"),
10083 str);
10084 else if (i == RID_DFLOAT32)
10085 specs->typespec_word = cts_dfloat32;
10086 else if (i == RID_DFLOAT64)
10087 specs->typespec_word = cts_dfloat64;
10088 else
10089 specs->typespec_word = cts_dfloat128;
10090 specs->locations[cdw_typespec] = loc;
10092 if (!targetm.decimal_float_supported_p ())
10093 error_at (loc,
10094 ("decimal floating point not supported "
10095 "for this target"));
10096 pedwarn (loc, OPT_Wpedantic,
10097 "ISO C does not support decimal floating point");
10098 return specs;
10099 case RID_FRACT:
10100 case RID_ACCUM:
10102 const char *str;
10103 if (i == RID_FRACT)
10104 str = "_Fract";
10105 else
10106 str = "_Accum";
10107 if (specs->complex_p)
10108 error_at (loc,
10109 ("both %<complex%> and %<%s%> in "
10110 "declaration specifiers"),
10111 str);
10112 else if (i == RID_FRACT)
10113 specs->typespec_word = cts_fract;
10114 else
10115 specs->typespec_word = cts_accum;
10116 specs->locations[cdw_typespec] = loc;
10118 if (!targetm.fixed_point_supported_p ())
10119 error_at (loc,
10120 "fixed-point types not supported for this target");
10121 pedwarn (loc, OPT_Wpedantic,
10122 "ISO C does not support fixed-point types");
10123 return specs;
10124 default:
10125 /* ObjC reserved word "id", handled below. */
10126 break;
10131 /* Now we have a typedef (a TYPE_DECL node), an identifier (some
10132 form of ObjC type, cases such as "int" and "long" being handled
10133 above), a TYPE (struct, union, enum and typeof specifiers) or an
10134 ERROR_MARK. In none of these cases may there have previously
10135 been any type specifiers. */
10136 if (specs->type || specs->typespec_word != cts_none
10137 || specs->long_p || specs->short_p || specs->signed_p
10138 || specs->unsigned_p || specs->complex_p)
10139 error_at (loc, "two or more data types in declaration specifiers");
10140 else if (TREE_CODE (type) == TYPE_DECL)
10142 if (TREE_TYPE (type) == error_mark_node)
10143 ; /* Allow the type to default to int to avoid cascading errors. */
10144 else
10146 specs->type = TREE_TYPE (type);
10147 specs->decl_attr = DECL_ATTRIBUTES (type);
10148 specs->typedef_p = true;
10149 specs->explicit_signed_p = C_TYPEDEF_EXPLICITLY_SIGNED (type);
10150 specs->locations[cdw_typedef] = loc;
10152 /* If this typedef name is defined in a struct, then a C++
10153 lookup would return a different value. */
10154 if (warn_cxx_compat
10155 && I_SYMBOL_BINDING (DECL_NAME (type))->in_struct)
10156 warning_at (loc, OPT_Wc___compat,
10157 "C++ lookup of %qD would return a field, not a type",
10158 type);
10160 /* If we are parsing a struct, record that a struct field
10161 used a typedef. */
10162 if (warn_cxx_compat && struct_parse_info != NULL)
10163 struct_parse_info->typedefs_seen.safe_push (type);
10166 else if (TREE_CODE (type) == IDENTIFIER_NODE)
10168 tree t = lookup_name (type);
10169 if (!t || TREE_CODE (t) != TYPE_DECL)
10170 error_at (loc, "%qE fails to be a typedef or built in type", type);
10171 else if (TREE_TYPE (t) == error_mark_node)
10173 else
10175 specs->type = TREE_TYPE (t);
10176 specs->locations[cdw_typespec] = loc;
10179 else
10181 if (TREE_CODE (type) != ERROR_MARK && spec.kind == ctsk_typeof)
10183 specs->typedef_p = true;
10184 specs->locations[cdw_typedef] = loc;
10185 if (spec.expr)
10187 if (specs->expr)
10188 specs->expr = build2 (COMPOUND_EXPR, TREE_TYPE (spec.expr),
10189 specs->expr, spec.expr);
10190 else
10191 specs->expr = spec.expr;
10192 specs->expr_const_operands &= spec.expr_const_operands;
10195 specs->type = type;
10198 return specs;
10201 /* Add the storage class specifier or function specifier SCSPEC to the
10202 declaration specifiers SPECS, returning SPECS. */
10204 struct c_declspecs *
10205 declspecs_add_scspec (source_location loc,
10206 struct c_declspecs *specs,
10207 tree scspec)
10209 enum rid i;
10210 enum c_storage_class n = csc_none;
10211 bool dupe = false;
10212 specs->declspecs_seen_p = true;
10213 gcc_assert (TREE_CODE (scspec) == IDENTIFIER_NODE
10214 && C_IS_RESERVED_WORD (scspec));
10215 i = C_RID_CODE (scspec);
10216 if (specs->non_sc_seen_p)
10217 warning (OPT_Wold_style_declaration,
10218 "%qE is not at beginning of declaration", scspec);
10219 switch (i)
10221 case RID_INLINE:
10222 /* C99 permits duplicate inline. Although of doubtful utility,
10223 it seems simplest to permit it in gnu89 mode as well, as
10224 there is also little utility in maintaining this as a
10225 difference between gnu89 and C99 inline. */
10226 dupe = false;
10227 specs->inline_p = true;
10228 specs->locations[cdw_inline] = loc;
10229 break;
10230 case RID_NORETURN:
10231 /* Duplicate _Noreturn is permitted. */
10232 dupe = false;
10233 specs->noreturn_p = true;
10234 specs->locations[cdw_noreturn] = loc;
10235 break;
10236 case RID_THREAD:
10237 dupe = specs->thread_p;
10238 if (specs->storage_class == csc_auto)
10239 error ("%qE used with %<auto%>", scspec);
10240 else if (specs->storage_class == csc_register)
10241 error ("%qE used with %<register%>", scspec);
10242 else if (specs->storage_class == csc_typedef)
10243 error ("%qE used with %<typedef%>", scspec);
10244 else
10246 specs->thread_p = true;
10247 specs->thread_gnu_p = (strcmp (IDENTIFIER_POINTER (scspec),
10248 "__thread") == 0);
10249 /* A diagnostic is not required for the use of this
10250 identifier in the implementation namespace; only diagnose
10251 it for the C11 spelling because of existing code using
10252 the other spelling. */
10253 if (!specs->thread_gnu_p)
10255 if (flag_isoc99)
10256 pedwarn_c99 (loc, OPT_Wpedantic,
10257 "ISO C99 does not support %qE", scspec);
10258 else
10259 pedwarn_c99 (loc, OPT_Wpedantic,
10260 "ISO C90 does not support %qE", scspec);
10262 specs->locations[cdw_thread] = loc;
10264 break;
10265 case RID_AUTO:
10266 n = csc_auto;
10267 break;
10268 case RID_EXTERN:
10269 n = csc_extern;
10270 /* Diagnose "__thread extern". */
10271 if (specs->thread_p && specs->thread_gnu_p)
10272 error ("%<__thread%> before %<extern%>");
10273 break;
10274 case RID_REGISTER:
10275 n = csc_register;
10276 break;
10277 case RID_STATIC:
10278 n = csc_static;
10279 /* Diagnose "__thread static". */
10280 if (specs->thread_p && specs->thread_gnu_p)
10281 error ("%<__thread%> before %<static%>");
10282 break;
10283 case RID_TYPEDEF:
10284 n = csc_typedef;
10285 break;
10286 default:
10287 gcc_unreachable ();
10289 if (n != csc_none && n == specs->storage_class)
10290 dupe = true;
10291 if (dupe)
10293 if (i == RID_THREAD)
10294 error ("duplicate %<_Thread_local%> or %<__thread%>");
10295 else
10296 error ("duplicate %qE", scspec);
10298 if (n != csc_none)
10300 if (specs->storage_class != csc_none && n != specs->storage_class)
10302 error ("multiple storage classes in declaration specifiers");
10304 else
10306 specs->storage_class = n;
10307 specs->locations[cdw_storage_class] = loc;
10308 if (n != csc_extern && n != csc_static && specs->thread_p)
10310 error ("%qs used with %qE",
10311 specs->thread_gnu_p ? "__thread" : "_Thread_local",
10312 scspec);
10313 specs->thread_p = false;
10317 return specs;
10320 /* Add the attributes ATTRS to the declaration specifiers SPECS,
10321 returning SPECS. */
10323 struct c_declspecs *
10324 declspecs_add_attrs (source_location loc, struct c_declspecs *specs, tree attrs)
10326 specs->attrs = chainon (attrs, specs->attrs);
10327 specs->locations[cdw_attributes] = loc;
10328 specs->declspecs_seen_p = true;
10329 return specs;
10332 /* Add an _Alignas specifier (expression ALIGN, or type whose
10333 alignment is ALIGN) to the declaration specifiers SPECS, returning
10334 SPECS. */
10335 struct c_declspecs *
10336 declspecs_add_alignas (source_location loc,
10337 struct c_declspecs *specs, tree align)
10339 int align_log;
10340 specs->alignas_p = true;
10341 specs->locations[cdw_alignas] = loc;
10342 if (align == error_mark_node)
10343 return specs;
10344 align_log = check_user_alignment (align, true);
10345 if (align_log > specs->align_log)
10346 specs->align_log = align_log;
10347 return specs;
10350 /* Combine "long", "short", "signed", "unsigned" and "_Complex" type
10351 specifiers with any other type specifier to determine the resulting
10352 type. This is where ISO C checks on complex types are made, since
10353 "_Complex long" is a prefix of the valid ISO C type "_Complex long
10354 double". */
10356 struct c_declspecs *
10357 finish_declspecs (struct c_declspecs *specs)
10359 /* If a type was specified as a whole, we have no modifiers and are
10360 done. */
10361 if (specs->type != NULL_TREE)
10363 gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
10364 && !specs->signed_p && !specs->unsigned_p
10365 && !specs->complex_p);
10367 /* Set a dummy type. */
10368 if (TREE_CODE (specs->type) == ERROR_MARK)
10369 specs->type = integer_type_node;
10370 return specs;
10373 /* If none of "void", "_Bool", "char", "int", "float" or "double"
10374 has been specified, treat it as "int" unless "_Complex" is
10375 present and there are no other specifiers. If we just have
10376 "_Complex", it is equivalent to "_Complex double", but e.g.
10377 "_Complex short" is equivalent to "_Complex short int". */
10378 if (specs->typespec_word == cts_none)
10380 if (specs->saturating_p)
10382 error_at (specs->locations[cdw_saturating],
10383 "%<_Sat%> is used without %<_Fract%> or %<_Accum%>");
10384 if (!targetm.fixed_point_supported_p ())
10385 error_at (specs->locations[cdw_saturating],
10386 "fixed-point types not supported for this target");
10387 specs->typespec_word = cts_fract;
10389 else if (specs->long_p || specs->short_p
10390 || specs->signed_p || specs->unsigned_p)
10392 specs->typespec_word = cts_int;
10394 else if (specs->complex_p)
10396 specs->typespec_word = cts_double;
10397 pedwarn (specs->locations[cdw_complex], OPT_Wpedantic,
10398 "ISO C does not support plain %<complex%> meaning "
10399 "%<double complex%>");
10401 else
10403 specs->typespec_word = cts_int;
10404 specs->default_int_p = true;
10405 /* We don't diagnose this here because grokdeclarator will
10406 give more specific diagnostics according to whether it is
10407 a function definition. */
10411 /* If "signed" was specified, record this to distinguish "int" and
10412 "signed int" in the case of a bit-field with
10413 -funsigned-bitfields. */
10414 specs->explicit_signed_p = specs->signed_p;
10416 /* Now compute the actual type. */
10417 switch (specs->typespec_word)
10419 case cts_auto_type:
10420 gcc_assert (!specs->long_p && !specs->short_p
10421 && !specs->signed_p && !specs->unsigned_p
10422 && !specs->complex_p);
10423 /* Type to be filled in later. */
10424 break;
10425 case cts_void:
10426 gcc_assert (!specs->long_p && !specs->short_p
10427 && !specs->signed_p && !specs->unsigned_p
10428 && !specs->complex_p);
10429 specs->type = void_type_node;
10430 break;
10431 case cts_bool:
10432 gcc_assert (!specs->long_p && !specs->short_p
10433 && !specs->signed_p && !specs->unsigned_p
10434 && !specs->complex_p);
10435 specs->type = boolean_type_node;
10436 break;
10437 case cts_char:
10438 gcc_assert (!specs->long_p && !specs->short_p);
10439 gcc_assert (!(specs->signed_p && specs->unsigned_p));
10440 if (specs->signed_p)
10441 specs->type = signed_char_type_node;
10442 else if (specs->unsigned_p)
10443 specs->type = unsigned_char_type_node;
10444 else
10445 specs->type = char_type_node;
10446 if (specs->complex_p)
10448 pedwarn (specs->locations[cdw_complex], OPT_Wpedantic,
10449 "ISO C does not support complex integer types");
10450 specs->type = build_complex_type (specs->type);
10452 break;
10453 case cts_int_n:
10454 gcc_assert (!specs->long_p && !specs->short_p && !specs->long_long_p);
10455 gcc_assert (!(specs->signed_p && specs->unsigned_p));
10456 specs->type = (specs->unsigned_p
10457 ? int_n_trees[specs->int_n_idx].unsigned_type
10458 : int_n_trees[specs->int_n_idx].signed_type);
10459 if (specs->complex_p)
10461 pedwarn (specs->locations[cdw_complex], OPT_Wpedantic,
10462 "ISO C does not support complex integer types");
10463 specs->type = build_complex_type (specs->type);
10465 break;
10466 case cts_int:
10467 gcc_assert (!(specs->long_p && specs->short_p));
10468 gcc_assert (!(specs->signed_p && specs->unsigned_p));
10469 if (specs->long_long_p)
10470 specs->type = (specs->unsigned_p
10471 ? long_long_unsigned_type_node
10472 : long_long_integer_type_node);
10473 else if (specs->long_p)
10474 specs->type = (specs->unsigned_p
10475 ? long_unsigned_type_node
10476 : long_integer_type_node);
10477 else if (specs->short_p)
10478 specs->type = (specs->unsigned_p
10479 ? short_unsigned_type_node
10480 : short_integer_type_node);
10481 else
10482 specs->type = (specs->unsigned_p
10483 ? unsigned_type_node
10484 : integer_type_node);
10485 if (specs->complex_p)
10487 pedwarn (specs->locations[cdw_complex], OPT_Wpedantic,
10488 "ISO C does not support complex integer types");
10489 specs->type = build_complex_type (specs->type);
10491 break;
10492 case cts_float:
10493 gcc_assert (!specs->long_p && !specs->short_p
10494 && !specs->signed_p && !specs->unsigned_p);
10495 specs->type = (specs->complex_p
10496 ? complex_float_type_node
10497 : float_type_node);
10498 break;
10499 case cts_double:
10500 gcc_assert (!specs->long_long_p && !specs->short_p
10501 && !specs->signed_p && !specs->unsigned_p);
10502 if (specs->long_p)
10504 specs->type = (specs->complex_p
10505 ? complex_long_double_type_node
10506 : long_double_type_node);
10508 else
10510 specs->type = (specs->complex_p
10511 ? complex_double_type_node
10512 : double_type_node);
10514 break;
10515 case cts_dfloat32:
10516 case cts_dfloat64:
10517 case cts_dfloat128:
10518 gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
10519 && !specs->signed_p && !specs->unsigned_p && !specs->complex_p);
10520 if (specs->typespec_word == cts_dfloat32)
10521 specs->type = dfloat32_type_node;
10522 else if (specs->typespec_word == cts_dfloat64)
10523 specs->type = dfloat64_type_node;
10524 else
10525 specs->type = dfloat128_type_node;
10526 break;
10527 case cts_fract:
10528 gcc_assert (!specs->complex_p);
10529 if (!targetm.fixed_point_supported_p ())
10530 specs->type = integer_type_node;
10531 else if (specs->saturating_p)
10533 if (specs->long_long_p)
10534 specs->type = specs->unsigned_p
10535 ? sat_unsigned_long_long_fract_type_node
10536 : sat_long_long_fract_type_node;
10537 else if (specs->long_p)
10538 specs->type = specs->unsigned_p
10539 ? sat_unsigned_long_fract_type_node
10540 : sat_long_fract_type_node;
10541 else if (specs->short_p)
10542 specs->type = specs->unsigned_p
10543 ? sat_unsigned_short_fract_type_node
10544 : sat_short_fract_type_node;
10545 else
10546 specs->type = specs->unsigned_p
10547 ? sat_unsigned_fract_type_node
10548 : sat_fract_type_node;
10550 else
10552 if (specs->long_long_p)
10553 specs->type = specs->unsigned_p
10554 ? unsigned_long_long_fract_type_node
10555 : long_long_fract_type_node;
10556 else if (specs->long_p)
10557 specs->type = specs->unsigned_p
10558 ? unsigned_long_fract_type_node
10559 : long_fract_type_node;
10560 else if (specs->short_p)
10561 specs->type = specs->unsigned_p
10562 ? unsigned_short_fract_type_node
10563 : short_fract_type_node;
10564 else
10565 specs->type = specs->unsigned_p
10566 ? unsigned_fract_type_node
10567 : fract_type_node;
10569 break;
10570 case cts_accum:
10571 gcc_assert (!specs->complex_p);
10572 if (!targetm.fixed_point_supported_p ())
10573 specs->type = integer_type_node;
10574 else if (specs->saturating_p)
10576 if (specs->long_long_p)
10577 specs->type = specs->unsigned_p
10578 ? sat_unsigned_long_long_accum_type_node
10579 : sat_long_long_accum_type_node;
10580 else if (specs->long_p)
10581 specs->type = specs->unsigned_p
10582 ? sat_unsigned_long_accum_type_node
10583 : sat_long_accum_type_node;
10584 else if (specs->short_p)
10585 specs->type = specs->unsigned_p
10586 ? sat_unsigned_short_accum_type_node
10587 : sat_short_accum_type_node;
10588 else
10589 specs->type = specs->unsigned_p
10590 ? sat_unsigned_accum_type_node
10591 : sat_accum_type_node;
10593 else
10595 if (specs->long_long_p)
10596 specs->type = specs->unsigned_p
10597 ? unsigned_long_long_accum_type_node
10598 : long_long_accum_type_node;
10599 else if (specs->long_p)
10600 specs->type = specs->unsigned_p
10601 ? unsigned_long_accum_type_node
10602 : long_accum_type_node;
10603 else if (specs->short_p)
10604 specs->type = specs->unsigned_p
10605 ? unsigned_short_accum_type_node
10606 : short_accum_type_node;
10607 else
10608 specs->type = specs->unsigned_p
10609 ? unsigned_accum_type_node
10610 : accum_type_node;
10612 break;
10613 default:
10614 gcc_unreachable ();
10617 return specs;
10620 /* A subroutine of c_write_global_declarations. Perform final processing
10621 on one file scope's declarations (or the external scope's declarations),
10622 GLOBALS. */
10624 static void
10625 c_write_global_declarations_1 (tree globals)
10627 tree decl;
10628 bool reconsider;
10630 /* Process the decls in the order they were written. */
10631 for (decl = globals; decl; decl = DECL_CHAIN (decl))
10633 /* Check for used but undefined static functions using the C
10634 standard's definition of "used", and set TREE_NO_WARNING so
10635 that check_global_declarations doesn't repeat the check. */
10636 if (TREE_CODE (decl) == FUNCTION_DECL
10637 && DECL_INITIAL (decl) == 0
10638 && DECL_EXTERNAL (decl)
10639 && !TREE_PUBLIC (decl)
10640 && C_DECL_USED (decl))
10642 pedwarn (input_location, 0, "%q+F used but never defined", decl);
10643 TREE_NO_WARNING (decl) = 1;
10646 wrapup_global_declaration_1 (decl);
10651 reconsider = false;
10652 for (decl = globals; decl; decl = DECL_CHAIN (decl))
10653 reconsider |= wrapup_global_declaration_2 (decl);
10655 while (reconsider);
10657 for (decl = globals; decl; decl = DECL_CHAIN (decl))
10658 check_global_declaration_1 (decl);
10661 /* A subroutine of c_write_global_declarations Emit debug information for each
10662 of the declarations in GLOBALS. */
10664 static void
10665 c_write_global_declarations_2 (tree globals)
10667 tree decl;
10669 for (decl = globals; decl ; decl = DECL_CHAIN (decl))
10670 debug_hooks->global_decl (decl);
10673 /* Callback to collect a source_ref from a DECL. */
10675 static void
10676 collect_source_ref_cb (tree decl)
10678 if (!DECL_IS_BUILTIN (decl))
10679 collect_source_ref (LOCATION_FILE (decl_sloc (decl, false)));
10682 /* Preserve the external declarations scope across a garbage collect. */
10683 static GTY(()) tree ext_block;
10685 /* Collect all references relevant to SOURCE_FILE. */
10687 static void
10688 collect_all_refs (const char *source_file)
10690 tree t;
10691 unsigned i;
10693 FOR_EACH_VEC_ELT (*all_translation_units, i, t)
10694 collect_ada_nodes (BLOCK_VARS (DECL_INITIAL (t)), source_file);
10696 collect_ada_nodes (BLOCK_VARS (ext_block), source_file);
10699 /* Iterate over all global declarations and call CALLBACK. */
10701 static void
10702 for_each_global_decl (void (*callback) (tree decl))
10704 tree t;
10705 tree decls;
10706 tree decl;
10707 unsigned i;
10709 FOR_EACH_VEC_ELT (*all_translation_units, i, t)
10711 decls = DECL_INITIAL (t);
10712 for (decl = BLOCK_VARS (decls); decl; decl = TREE_CHAIN (decl))
10713 callback (decl);
10716 for (decl = BLOCK_VARS (ext_block); decl; decl = TREE_CHAIN (decl))
10717 callback (decl);
10720 void
10721 c_write_global_declarations (void)
10723 tree t;
10724 unsigned i;
10726 /* We don't want to do this if generating a PCH. */
10727 if (pch_file)
10728 return;
10730 timevar_start (TV_PHASE_DEFERRED);
10732 /* Do the Objective-C stuff. This is where all the Objective-C
10733 module stuff gets generated (symtab, class/protocol/selector
10734 lists etc). */
10735 if (c_dialect_objc ())
10736 objc_write_global_declarations ();
10738 /* Close the external scope. */
10739 ext_block = pop_scope ();
10740 external_scope = 0;
10741 gcc_assert (!current_scope);
10743 /* Handle -fdump-ada-spec[-slim]. */
10744 if (flag_dump_ada_spec || flag_dump_ada_spec_slim)
10746 /* Build a table of files to generate specs for */
10747 if (flag_dump_ada_spec_slim)
10748 collect_source_ref (main_input_filename);
10749 else
10750 for_each_global_decl (collect_source_ref_cb);
10752 dump_ada_specs (collect_all_refs, NULL);
10755 if (ext_block)
10757 tree tmp = BLOCK_VARS (ext_block);
10758 int flags;
10759 FILE * stream = dump_begin (TDI_tu, &flags);
10760 if (stream && tmp)
10762 dump_node (tmp, flags & ~TDF_SLIM, stream);
10763 dump_end (TDI_tu, stream);
10767 /* Process all file scopes in this compilation, and the external_scope,
10768 through wrapup_global_declarations and check_global_declarations. */
10769 FOR_EACH_VEC_ELT (*all_translation_units, i, t)
10770 c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t)));
10771 c_write_global_declarations_1 (BLOCK_VARS (ext_block));
10773 timevar_stop (TV_PHASE_DEFERRED);
10774 timevar_start (TV_PHASE_OPT_GEN);
10776 /* We're done parsing; proceed to optimize and emit assembly.
10777 FIXME: shouldn't be the front end's responsibility to call this. */
10778 symtab->finalize_compilation_unit ();
10780 timevar_stop (TV_PHASE_OPT_GEN);
10781 timevar_start (TV_PHASE_DBGINFO);
10783 /* After cgraph has had a chance to emit everything that's going to
10784 be emitted, output debug information for globals. */
10785 if (!seen_error ())
10787 timevar_push (TV_SYMOUT);
10788 FOR_EACH_VEC_ELT (*all_translation_units, i, t)
10789 c_write_global_declarations_2 (BLOCK_VARS (DECL_INITIAL (t)));
10790 c_write_global_declarations_2 (BLOCK_VARS (ext_block));
10791 timevar_pop (TV_SYMOUT);
10794 ext_block = NULL;
10795 timevar_stop (TV_PHASE_DBGINFO);
10798 /* Register reserved keyword WORD as qualifier for address space AS. */
10800 void
10801 c_register_addr_space (const char *word, addr_space_t as)
10803 int rid = RID_FIRST_ADDR_SPACE + as;
10804 tree id;
10806 /* Address space qualifiers are only supported
10807 in C with GNU extensions enabled. */
10808 if (c_dialect_objc () || flag_no_asm)
10809 return;
10811 id = get_identifier (word);
10812 C_SET_RID_CODE (id, rid);
10813 C_IS_RESERVED_WORD (id) = 1;
10814 ridpointers [rid] = id;
10817 /* Return identifier to look up for omp declare reduction. */
10819 tree
10820 c_omp_reduction_id (enum tree_code reduction_code, tree reduction_id)
10822 const char *p = NULL;
10823 switch (reduction_code)
10825 case PLUS_EXPR: p = "+"; break;
10826 case MULT_EXPR: p = "*"; break;
10827 case MINUS_EXPR: p = "-"; break;
10828 case BIT_AND_EXPR: p = "&"; break;
10829 case BIT_XOR_EXPR: p = "^"; break;
10830 case BIT_IOR_EXPR: p = "|"; break;
10831 case TRUTH_ANDIF_EXPR: p = "&&"; break;
10832 case TRUTH_ORIF_EXPR: p = "||"; break;
10833 case MIN_EXPR: p = "min"; break;
10834 case MAX_EXPR: p = "max"; break;
10835 default:
10836 break;
10839 if (p == NULL)
10841 if (TREE_CODE (reduction_id) != IDENTIFIER_NODE)
10842 return error_mark_node;
10843 p = IDENTIFIER_POINTER (reduction_id);
10846 const char prefix[] = "omp declare reduction ";
10847 size_t lenp = sizeof (prefix);
10848 size_t len = strlen (p);
10849 char *name = XALLOCAVEC (char, lenp + len);
10850 memcpy (name, prefix, lenp - 1);
10851 memcpy (name + lenp - 1, p, len + 1);
10852 return get_identifier (name);
10855 /* Lookup REDUCTION_ID in the current scope, or create an artificial
10856 VAR_DECL, bind it into the current scope and return it. */
10858 tree
10859 c_omp_reduction_decl (tree reduction_id)
10861 struct c_binding *b = I_SYMBOL_BINDING (reduction_id);
10862 if (b != NULL && B_IN_CURRENT_SCOPE (b))
10863 return b->decl;
10865 tree decl = build_decl (BUILTINS_LOCATION, VAR_DECL,
10866 reduction_id, integer_type_node);
10867 DECL_ARTIFICIAL (decl) = 1;
10868 DECL_EXTERNAL (decl) = 1;
10869 TREE_STATIC (decl) = 1;
10870 TREE_PUBLIC (decl) = 0;
10871 bind (reduction_id, decl, current_scope, true, false, BUILTINS_LOCATION);
10872 return decl;
10875 /* Lookup REDUCTION_ID in the first scope where it has entry for TYPE. */
10877 tree
10878 c_omp_reduction_lookup (tree reduction_id, tree type)
10880 struct c_binding *b = I_SYMBOL_BINDING (reduction_id);
10881 while (b)
10883 tree t;
10884 for (t = DECL_INITIAL (b->decl); t; t = TREE_CHAIN (t))
10885 if (comptypes (TREE_PURPOSE (t), type))
10886 return TREE_VALUE (t);
10887 b = b->shadowed;
10889 return error_mark_node;
10892 /* Helper function called via walk_tree, to diagnose invalid
10893 #pragma omp declare reduction combiners or initializers. */
10895 tree
10896 c_check_omp_declare_reduction_r (tree *tp, int *, void *data)
10898 tree *vars = (tree *) data;
10899 if (SSA_VAR_P (*tp)
10900 && !DECL_ARTIFICIAL (*tp)
10901 && *tp != vars[0]
10902 && *tp != vars[1])
10904 location_t loc = DECL_SOURCE_LOCATION (vars[0]);
10905 if (strcmp (IDENTIFIER_POINTER (DECL_NAME (vars[0])), "omp_out") == 0)
10906 error_at (loc, "%<#pragma omp declare reduction%> combiner refers to "
10907 "variable %qD which is not %<omp_out%> nor %<omp_in%>",
10908 *tp);
10909 else
10910 error_at (loc, "%<#pragma omp declare reduction%> initializer refers "
10911 "to variable %qD which is not %<omp_priv%> nor "
10912 "%<omp_orig%>",
10913 *tp);
10914 return *tp;
10916 return NULL_TREE;
10919 #include "gt-c-c-decl.h"