Force a dependence distance of 1 in gnat.dg/vect17.adb
[official-gcc.git] / gcc / c / c-decl.c
blob317d5cdd099d0c31a5970e7ecd8845f4d48fa49e
1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988-2017 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 "target.h"
31 #include "function.h"
32 #include "c-tree.h"
33 #include "timevar.h"
34 #include "stringpool.h"
35 #include "cgraph.h"
36 #include "intl.h"
37 #include "print-tree.h"
38 #include "stor-layout.h"
39 #include "varasm.h"
40 #include "attribs.h"
41 #include "toplev.h"
42 #include "debug.h"
43 #include "c-family/c-objc.h"
44 #include "c-family/c-pragma.h"
45 #include "c-family/c-ubsan.h"
46 #include "c-lang.h"
47 #include "langhooks.h"
48 #include "tree-iterator.h"
49 #include "dumpfile.h"
50 #include "plugin.h"
51 #include "c-family/c-ada-spec.h"
52 #include "cilk.h"
53 #include "builtins.h"
54 #include "spellcheck-tree.h"
55 #include "gcc-rich-location.h"
56 #include "asan.h"
58 /* In grokdeclarator, distinguish syntactic contexts of declarators. */
59 enum decl_context
60 { NORMAL, /* Ordinary declaration */
61 FUNCDEF, /* Function definition */
62 PARM, /* Declaration of parm before function body */
63 FIELD, /* Declaration inside struct or union */
64 TYPENAME}; /* Typename (inside cast or sizeof) */
66 /* States indicating how grokdeclarator() should handle declspecs marked
67 with __attribute__((deprecated)). An object declared as
68 __attribute__((deprecated)) suppresses warnings of uses of other
69 deprecated items. */
71 enum deprecated_states {
72 DEPRECATED_NORMAL,
73 DEPRECATED_SUPPRESS
77 /* Nonzero if we have seen an invalid cross reference
78 to a struct, union, or enum, but not yet printed the message. */
79 tree pending_invalid_xref;
81 /* File and line to appear in the eventual error message. */
82 location_t pending_invalid_xref_location;
84 /* The file and line that the prototype came from if this is an
85 old-style definition; used for diagnostics in
86 store_parm_decls_oldstyle. */
88 static location_t current_function_prototype_locus;
90 /* Whether this prototype was built-in. */
92 static bool current_function_prototype_built_in;
94 /* The argument type information of this prototype. */
96 static tree current_function_prototype_arg_types;
98 /* The argument information structure for the function currently being
99 defined. */
101 static struct c_arg_info *current_function_arg_info;
103 /* The obstack on which parser and related data structures, which are
104 not live beyond their top-level declaration or definition, are
105 allocated. */
106 struct obstack parser_obstack;
108 /* The current statement tree. */
110 static GTY(()) struct stmt_tree_s c_stmt_tree;
112 /* State saving variables. */
113 tree c_break_label;
114 tree c_cont_label;
116 /* A list of decls to be made automatically visible in each file scope. */
117 static GTY(()) tree visible_builtins;
119 /* Set to 0 at beginning of a function definition, set to 1 if
120 a return statement that specifies a return value is seen. */
122 int current_function_returns_value;
124 /* Set to 0 at beginning of a function definition, set to 1 if
125 a return statement with no argument is seen. */
127 int current_function_returns_null;
129 /* Set to 0 at beginning of a function definition, set to 1 if
130 a call to a noreturn function is seen. */
132 int current_function_returns_abnormally;
134 /* Set to nonzero by `grokdeclarator' for a function
135 whose return type is defaulted, if warnings for this are desired. */
137 static int warn_about_return_type;
139 /* Nonzero when the current toplevel function contains a declaration
140 of a nested function which is never defined. */
142 static bool undef_nested_function;
144 /* If non-zero, implicit "omp declare target" attribute is added into the
145 attribute lists. */
146 int current_omp_declare_target_attribute;
148 /* Each c_binding structure describes one binding of an identifier to
149 a decl. All the decls in a scope - irrespective of namespace - are
150 chained together by the ->prev field, which (as the name implies)
151 runs in reverse order. All the decls in a given namespace bound to
152 a given identifier are chained by the ->shadowed field, which runs
153 from inner to outer scopes.
155 The ->decl field usually points to a DECL node, but there are two
156 exceptions. In the namespace of type tags, the bound entity is a
157 RECORD_TYPE, UNION_TYPE, or ENUMERAL_TYPE node. If an undeclared
158 identifier is encountered, it is bound to error_mark_node to
159 suppress further errors about that identifier in the current
160 function.
162 The ->u.type field stores the type of the declaration in this scope;
163 if NULL, the type is the type of the ->decl field. This is only of
164 relevance for objects with external or internal linkage which may
165 be redeclared in inner scopes, forming composite types that only
166 persist for the duration of those scopes. In the external scope,
167 this stores the composite of all the types declared for this
168 object, visible or not. The ->inner_comp field (used only at file
169 scope) stores whether an incomplete array type at file scope was
170 completed at an inner scope to an array size other than 1.
172 The ->u.label field is used for labels. It points to a structure
173 which stores additional information used for warnings.
175 The depth field is copied from the scope structure that holds this
176 decl. It is used to preserve the proper ordering of the ->shadowed
177 field (see bind()) and also for a handful of special-case checks.
178 Finally, the invisible bit is true for a decl which should be
179 ignored for purposes of normal name lookup, and the nested bit is
180 true for a decl that's been bound a second time in an inner scope;
181 in all such cases, the binding in the outer scope will have its
182 invisible bit true. */
184 struct GTY((chain_next ("%h.prev"))) c_binding {
185 union GTY(()) { /* first so GTY desc can use decl */
186 tree GTY((tag ("0"))) type; /* the type in this scope */
187 struct c_label_vars * GTY((tag ("1"))) label; /* for warnings */
188 } GTY((desc ("TREE_CODE (%0.decl) == LABEL_DECL"))) u;
189 tree decl; /* the decl bound */
190 tree id; /* the identifier it's bound to */
191 struct c_binding *prev; /* the previous decl in this scope */
192 struct c_binding *shadowed; /* the innermost decl shadowed by this one */
193 unsigned int depth : 28; /* depth of this scope */
194 BOOL_BITFIELD invisible : 1; /* normal lookup should ignore this binding */
195 BOOL_BITFIELD nested : 1; /* do not set DECL_CONTEXT when popping */
196 BOOL_BITFIELD inner_comp : 1; /* incomplete array completed in inner scope */
197 BOOL_BITFIELD in_struct : 1; /* currently defined as struct field */
198 location_t locus; /* location for nested bindings */
200 #define B_IN_SCOPE(b1, b2) ((b1)->depth == (b2)->depth)
201 #define B_IN_CURRENT_SCOPE(b) ((b)->depth == current_scope->depth)
202 #define B_IN_FILE_SCOPE(b) ((b)->depth == 1 /*file_scope->depth*/)
203 #define B_IN_EXTERNAL_SCOPE(b) ((b)->depth == 0 /*external_scope->depth*/)
205 /* Each C symbol points to three linked lists of c_binding structures.
206 These describe the values of the identifier in the three different
207 namespaces defined by the language. */
209 struct GTY(()) lang_identifier {
210 struct c_common_identifier common_id;
211 struct c_binding *symbol_binding; /* vars, funcs, constants, typedefs */
212 struct c_binding *tag_binding; /* struct/union/enum tags */
213 struct c_binding *label_binding; /* labels */
216 /* Validate c-lang.c's assumptions. */
217 extern char C_SIZEOF_STRUCT_LANG_IDENTIFIER_isnt_accurate
218 [(sizeof(struct lang_identifier) == C_SIZEOF_STRUCT_LANG_IDENTIFIER) ? 1 : -1];
220 /* The binding oracle; see c-tree.h. */
221 void (*c_binding_oracle) (enum c_oracle_request, tree identifier);
223 /* This flag is set on an identifier if we have previously asked the
224 binding oracle for this identifier's symbol binding. */
225 #define I_SYMBOL_CHECKED(node) \
226 (TREE_LANG_FLAG_4 (IDENTIFIER_NODE_CHECK (node)))
228 static inline struct c_binding* *
229 i_symbol_binding (tree node)
231 struct lang_identifier *lid
232 = (struct lang_identifier *) IDENTIFIER_NODE_CHECK (node);
234 if (lid->symbol_binding == NULL
235 && c_binding_oracle != NULL
236 && !I_SYMBOL_CHECKED (node))
238 /* Set the "checked" flag first, to avoid infinite recursion
239 when the binding oracle calls back into gcc. */
240 I_SYMBOL_CHECKED (node) = 1;
241 c_binding_oracle (C_ORACLE_SYMBOL, node);
244 return &lid->symbol_binding;
247 #define I_SYMBOL_BINDING(node) (*i_symbol_binding (node))
249 #define I_SYMBOL_DECL(node) \
250 (I_SYMBOL_BINDING(node) ? I_SYMBOL_BINDING(node)->decl : 0)
252 /* This flag is set on an identifier if we have previously asked the
253 binding oracle for this identifier's tag binding. */
254 #define I_TAG_CHECKED(node) \
255 (TREE_LANG_FLAG_5 (IDENTIFIER_NODE_CHECK (node)))
257 static inline struct c_binding **
258 i_tag_binding (tree node)
260 struct lang_identifier *lid
261 = (struct lang_identifier *) IDENTIFIER_NODE_CHECK (node);
263 if (lid->tag_binding == NULL
264 && c_binding_oracle != NULL
265 && !I_TAG_CHECKED (node))
267 /* Set the "checked" flag first, to avoid infinite recursion
268 when the binding oracle calls back into gcc. */
269 I_TAG_CHECKED (node) = 1;
270 c_binding_oracle (C_ORACLE_TAG, node);
273 return &lid->tag_binding;
276 #define I_TAG_BINDING(node) (*i_tag_binding (node))
278 #define I_TAG_DECL(node) \
279 (I_TAG_BINDING(node) ? I_TAG_BINDING(node)->decl : 0)
281 /* This flag is set on an identifier if we have previously asked the
282 binding oracle for this identifier's label binding. */
283 #define I_LABEL_CHECKED(node) \
284 (TREE_LANG_FLAG_6 (IDENTIFIER_NODE_CHECK (node)))
286 static inline struct c_binding **
287 i_label_binding (tree node)
289 struct lang_identifier *lid
290 = (struct lang_identifier *) IDENTIFIER_NODE_CHECK (node);
292 if (lid->label_binding == NULL
293 && c_binding_oracle != NULL
294 && !I_LABEL_CHECKED (node))
296 /* Set the "checked" flag first, to avoid infinite recursion
297 when the binding oracle calls back into gcc. */
298 I_LABEL_CHECKED (node) = 1;
299 c_binding_oracle (C_ORACLE_LABEL, node);
302 return &lid->label_binding;
305 #define I_LABEL_BINDING(node) (*i_label_binding (node))
307 #define I_LABEL_DECL(node) \
308 (I_LABEL_BINDING(node) ? I_LABEL_BINDING(node)->decl : 0)
310 /* The resulting tree type. */
312 union GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"),
313 chain_next ("(union lang_tree_node *) c_tree_chain_next (&%h.generic)"))) lang_tree_node
315 union tree_node GTY ((tag ("0"),
316 desc ("tree_node_structure (&%h)")))
317 generic;
318 struct lang_identifier GTY ((tag ("1"))) identifier;
321 /* Track bindings and other things that matter for goto warnings. For
322 efficiency, we do not gather all the decls at the point of
323 definition. Instead, we point into the bindings structure. As
324 scopes are popped, we update these structures and gather the decls
325 that matter at that time. */
327 struct GTY(()) c_spot_bindings {
328 /* The currently open scope which holds bindings defined when the
329 label was defined or the goto statement was found. */
330 struct c_scope *scope;
331 /* The bindings in the scope field which were defined at the point
332 of the label or goto. This lets us look at older or newer
333 bindings in the scope, as appropriate. */
334 struct c_binding *bindings_in_scope;
335 /* The number of statement expressions that have started since this
336 label or goto statement was defined. This is zero if we are at
337 the same statement expression level. It is positive if we are in
338 a statement expression started since this spot. It is negative
339 if this spot was in a statement expression and we have left
340 it. */
341 int stmt_exprs;
342 /* Whether we started in a statement expression but are no longer in
343 it. This is set to true if stmt_exprs ever goes negative. */
344 bool left_stmt_expr;
347 /* This structure is used to keep track of bindings seen when a goto
348 statement is defined. This is only used if we see the goto
349 statement before we see the label. */
351 struct GTY(()) c_goto_bindings {
352 /* The location of the goto statement. */
353 location_t loc;
354 /* The bindings of the goto statement. */
355 struct c_spot_bindings goto_bindings;
358 typedef struct c_goto_bindings *c_goto_bindings_p;
360 /* The additional information we keep track of for a label binding.
361 These fields are updated as scopes are popped. */
363 struct GTY(()) c_label_vars {
364 /* The shadowed c_label_vars, when one label shadows another (which
365 can only happen using a __label__ declaration). */
366 struct c_label_vars *shadowed;
367 /* The bindings when the label was defined. */
368 struct c_spot_bindings label_bindings;
369 /* A list of decls that we care about: decls about which we should
370 warn if a goto branches to this label from later in the function.
371 Decls are added to this list as scopes are popped. We only add
372 the decls that matter. */
373 vec<tree, va_gc> *decls_in_scope;
374 /* A list of goto statements to this label. This is only used for
375 goto statements seen before the label was defined, so that we can
376 issue appropriate warnings for them. */
377 vec<c_goto_bindings_p, va_gc> *gotos;
380 /* Each c_scope structure describes the complete contents of one
381 scope. Four scopes are distinguished specially: the innermost or
382 current scope, the innermost function scope, the file scope (always
383 the second to outermost) and the outermost or external scope.
385 Most declarations are recorded in the current scope.
387 All normal label declarations are recorded in the innermost
388 function scope, as are bindings of undeclared identifiers to
389 error_mark_node. (GCC permits nested functions as an extension,
390 hence the 'innermost' qualifier.) Explicitly declared labels
391 (using the __label__ extension) appear in the current scope.
393 Being in the file scope (current_scope == file_scope) causes
394 special behavior in several places below. Also, under some
395 conditions the Objective-C front end records declarations in the
396 file scope even though that isn't the current scope.
398 All declarations with external linkage are recorded in the external
399 scope, even if they aren't visible there; this models the fact that
400 such declarations are visible to the entire program, and (with a
401 bit of cleverness, see pushdecl) allows diagnosis of some violations
402 of C99 6.2.2p7 and 6.2.7p2:
404 If, within the same translation unit, the same identifier appears
405 with both internal and external linkage, the behavior is
406 undefined.
408 All declarations that refer to the same object or function shall
409 have compatible type; otherwise, the behavior is undefined.
411 Initially only the built-in declarations, which describe compiler
412 intrinsic functions plus a subset of the standard library, are in
413 this scope.
415 The order of the blocks list matters, and it is frequently appended
416 to. To avoid having to walk all the way to the end of the list on
417 each insertion, or reverse the list later, we maintain a pointer to
418 the last list entry. (FIXME: It should be feasible to use a reversed
419 list here.)
421 The bindings list is strictly in reverse order of declarations;
422 pop_scope relies on this. */
425 struct GTY((chain_next ("%h.outer"))) c_scope {
426 /* The scope containing this one. */
427 struct c_scope *outer;
429 /* The next outermost function scope. */
430 struct c_scope *outer_function;
432 /* All bindings in this scope. */
433 struct c_binding *bindings;
435 /* For each scope (except the global one), a chain of BLOCK nodes
436 for all the scopes that were entered and exited one level down. */
437 tree blocks;
438 tree blocks_last;
440 /* The depth of this scope. Used to keep the ->shadowed chain of
441 bindings sorted innermost to outermost. */
442 unsigned int depth : 28;
444 /* True if we are currently filling this scope with parameter
445 declarations. */
446 BOOL_BITFIELD parm_flag : 1;
448 /* True if we saw [*] in this scope. Used to give an error messages
449 if these appears in a function definition. */
450 BOOL_BITFIELD had_vla_unspec : 1;
452 /* True if we already complained about forward parameter decls
453 in this scope. This prevents double warnings on
454 foo (int a; int b; ...) */
455 BOOL_BITFIELD warned_forward_parm_decls : 1;
457 /* True if this is the outermost block scope of a function body.
458 This scope contains the parameters, the local variables declared
459 in the outermost block, and all the labels (except those in
460 nested functions, or declared at block scope with __label__). */
461 BOOL_BITFIELD function_body : 1;
463 /* True means make a BLOCK for this scope no matter what. */
464 BOOL_BITFIELD keep : 1;
466 /* True means that an unsuffixed float constant is _Decimal64. */
467 BOOL_BITFIELD float_const_decimal64 : 1;
469 /* True if this scope has any label bindings. This is used to speed
470 up searching for labels when popping scopes, particularly since
471 labels are normally only found at function scope. */
472 BOOL_BITFIELD has_label_bindings : 1;
474 /* True if we should issue a warning if a goto statement crosses any
475 of the bindings. We still need to check the list of bindings to
476 find the specific ones we need to warn about. This is true if
477 decl_jump_unsafe would return true for any of the bindings. This
478 is used to avoid looping over all the bindings unnecessarily. */
479 BOOL_BITFIELD has_jump_unsafe_decl : 1;
482 /* The scope currently in effect. */
484 static GTY(()) struct c_scope *current_scope;
486 /* The innermost function scope. Ordinary (not explicitly declared)
487 labels, bindings to error_mark_node, and the lazily-created
488 bindings of __func__ and its friends get this scope. */
490 static GTY(()) struct c_scope *current_function_scope;
492 /* The C file scope. This is reset for each input translation unit. */
494 static GTY(()) struct c_scope *file_scope;
496 /* The outermost scope. This is used for all declarations with
497 external linkage, and only these, hence the name. */
499 static GTY(()) struct c_scope *external_scope;
501 /* A chain of c_scope structures awaiting reuse. */
503 static GTY((deletable)) struct c_scope *scope_freelist;
505 /* A chain of c_binding structures awaiting reuse. */
507 static GTY((deletable)) struct c_binding *binding_freelist;
509 /* Append VAR to LIST in scope SCOPE. */
510 #define SCOPE_LIST_APPEND(scope, list, decl) do { \
511 struct c_scope *s_ = (scope); \
512 tree d_ = (decl); \
513 if (s_->list##_last) \
514 BLOCK_CHAIN (s_->list##_last) = d_; \
515 else \
516 s_->list = d_; \
517 s_->list##_last = d_; \
518 } while (0)
520 /* Concatenate FROM in scope FSCOPE onto TO in scope TSCOPE. */
521 #define SCOPE_LIST_CONCAT(tscope, to, fscope, from) do { \
522 struct c_scope *t_ = (tscope); \
523 struct c_scope *f_ = (fscope); \
524 if (t_->to##_last) \
525 BLOCK_CHAIN (t_->to##_last) = f_->from; \
526 else \
527 t_->to = f_->from; \
528 t_->to##_last = f_->from##_last; \
529 } while (0)
531 /* A c_inline_static structure stores details of a static identifier
532 referenced in a definition of a function that may be an inline
533 definition if no subsequent declaration of that function uses
534 "extern" or does not use "inline". */
536 struct GTY((chain_next ("%h.next"))) c_inline_static {
537 /* The location for a diagnostic. */
538 location_t location;
540 /* The function that may be an inline definition. */
541 tree function;
543 /* The object or function referenced. */
544 tree static_decl;
546 /* What sort of reference this is. */
547 enum c_inline_static_type type;
549 /* The next such structure or NULL. */
550 struct c_inline_static *next;
553 /* List of static identifiers used or referenced in functions that may
554 be inline definitions. */
555 static GTY(()) struct c_inline_static *c_inline_statics;
557 /* True means unconditionally make a BLOCK for the next scope pushed. */
559 static bool keep_next_level_flag;
561 /* True means the next call to push_scope will be the outermost scope
562 of a function body, so do not push a new scope, merely cease
563 expecting parameter decls. */
565 static bool next_is_function_body;
567 /* A vector of pointers to c_binding structures. */
569 typedef struct c_binding *c_binding_ptr;
571 /* Information that we keep for a struct or union while it is being
572 parsed. */
574 struct c_struct_parse_info
576 /* If warn_cxx_compat, a list of types defined within this
577 struct. */
578 auto_vec<tree> struct_types;
579 /* If warn_cxx_compat, a list of field names which have bindings,
580 and which are defined in this struct, but which are not defined
581 in any enclosing struct. This is used to clear the in_struct
582 field of the c_bindings structure. */
583 auto_vec<c_binding_ptr> fields;
584 /* If warn_cxx_compat, a list of typedef names used when defining
585 fields in this struct. */
586 auto_vec<tree> typedefs_seen;
589 /* Information for the struct or union currently being parsed, or
590 NULL if not parsing a struct or union. */
591 static struct c_struct_parse_info *struct_parse_info;
593 /* Forward declarations. */
594 static tree lookup_name_in_scope (tree, struct c_scope *);
595 static tree c_make_fname_decl (location_t, tree, int);
596 static tree grokdeclarator (const struct c_declarator *,
597 struct c_declspecs *,
598 enum decl_context, bool, tree *, tree *, tree *,
599 bool *, enum deprecated_states);
600 static tree grokparms (struct c_arg_info *, bool);
601 static void layout_array_type (tree);
602 static void warn_defaults_to (location_t, int, const char *, ...)
603 ATTRIBUTE_GCC_DIAG(3,4);
605 /* T is a statement. Add it to the statement-tree. This is the
606 C/ObjC version--C++ has a slightly different version of this
607 function. */
609 tree
610 add_stmt (tree t)
612 enum tree_code code = TREE_CODE (t);
614 if (CAN_HAVE_LOCATION_P (t) && code != LABEL_EXPR)
616 if (!EXPR_HAS_LOCATION (t))
617 SET_EXPR_LOCATION (t, input_location);
620 if (code == LABEL_EXPR || code == CASE_LABEL_EXPR)
621 STATEMENT_LIST_HAS_LABEL (cur_stmt_list) = 1;
623 /* Add T to the statement-tree. Non-side-effect statements need to be
624 recorded during statement expressions. */
625 if (!building_stmt_list_p ())
626 push_stmt_list ();
627 append_to_statement_list_force (t, &cur_stmt_list);
629 return t;
632 /* Build a pointer type using the default pointer mode. */
634 static tree
635 c_build_pointer_type (tree to_type)
637 addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
638 : TYPE_ADDR_SPACE (to_type);
639 machine_mode pointer_mode;
641 if (as != ADDR_SPACE_GENERIC || c_default_pointer_mode == VOIDmode)
642 pointer_mode = targetm.addr_space.pointer_mode (as);
643 else
644 pointer_mode = c_default_pointer_mode;
645 return build_pointer_type_for_mode (to_type, pointer_mode, false);
649 /* Return true if we will want to say something if a goto statement
650 crosses DECL. */
652 static bool
653 decl_jump_unsafe (tree decl)
655 if (error_operand_p (decl))
656 return false;
658 /* Always warn about crossing variably modified types. */
659 if ((VAR_P (decl) || TREE_CODE (decl) == TYPE_DECL)
660 && variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
661 return true;
663 /* Otherwise, only warn if -Wgoto-misses-init and this is an
664 initialized automatic decl. */
665 if (warn_jump_misses_init
666 && VAR_P (decl)
667 && !TREE_STATIC (decl)
668 && DECL_INITIAL (decl) != NULL_TREE)
669 return true;
671 return false;
675 void
676 c_print_identifier (FILE *file, tree node, int indent)
678 void (*save) (enum c_oracle_request, tree identifier);
680 /* Temporarily hide any binding oracle. Without this, calls to
681 debug_tree from the debugger will end up calling into the oracle,
682 making for a confusing debug session. As the oracle isn't needed
683 here for normal operation, it's simplest to suppress it. */
684 save = c_binding_oracle;
685 c_binding_oracle = NULL;
687 print_node (file, "symbol", I_SYMBOL_DECL (node), indent + 4);
688 print_node (file, "tag", I_TAG_DECL (node), indent + 4);
689 print_node (file, "label", I_LABEL_DECL (node), indent + 4);
690 if (C_IS_RESERVED_WORD (node) && C_RID_CODE (node) != RID_CXX_COMPAT_WARN)
692 tree rid = ridpointers[C_RID_CODE (node)];
693 indent_to (file, indent + 4);
694 fprintf (file, "rid " HOST_PTR_PRINTF " \"%s\"",
695 (void *) rid, IDENTIFIER_POINTER (rid));
698 c_binding_oracle = save;
701 /* Establish a binding between NAME, an IDENTIFIER_NODE, and DECL,
702 which may be any of several kinds of DECL or TYPE or error_mark_node,
703 in the scope SCOPE. */
704 static void
705 bind (tree name, tree decl, struct c_scope *scope, bool invisible,
706 bool nested, location_t locus)
708 struct c_binding *b, **here;
710 if (binding_freelist)
712 b = binding_freelist;
713 binding_freelist = b->prev;
715 else
716 b = ggc_alloc<c_binding> ();
718 b->shadowed = 0;
719 b->decl = decl;
720 b->id = name;
721 b->depth = scope->depth;
722 b->invisible = invisible;
723 b->nested = nested;
724 b->inner_comp = 0;
725 b->in_struct = 0;
726 b->locus = locus;
728 b->u.type = NULL;
730 b->prev = scope->bindings;
731 scope->bindings = b;
733 if (decl_jump_unsafe (decl))
734 scope->has_jump_unsafe_decl = 1;
736 if (!name)
737 return;
739 switch (TREE_CODE (decl))
741 case LABEL_DECL: here = &I_LABEL_BINDING (name); break;
742 case ENUMERAL_TYPE:
743 case UNION_TYPE:
744 case RECORD_TYPE: here = &I_TAG_BINDING (name); break;
745 case VAR_DECL:
746 case FUNCTION_DECL:
747 case TYPE_DECL:
748 case CONST_DECL:
749 case PARM_DECL:
750 case ERROR_MARK: here = &I_SYMBOL_BINDING (name); break;
752 default:
753 gcc_unreachable ();
756 /* Locate the appropriate place in the chain of shadowed decls
757 to insert this binding. Normally, scope == current_scope and
758 this does nothing. */
759 while (*here && (*here)->depth > scope->depth)
760 here = &(*here)->shadowed;
762 b->shadowed = *here;
763 *here = b;
766 /* Clear the binding structure B, stick it on the binding_freelist,
767 and return the former value of b->prev. This is used by pop_scope
768 and get_parm_info to iterate destructively over all the bindings
769 from a given scope. */
770 static struct c_binding *
771 free_binding_and_advance (struct c_binding *b)
773 struct c_binding *prev = b->prev;
775 memset (b, 0, sizeof (struct c_binding));
776 b->prev = binding_freelist;
777 binding_freelist = b;
779 return prev;
782 /* Bind a label. Like bind, but skip fields which aren't used for
783 labels, and add the LABEL_VARS value. */
784 static void
785 bind_label (tree name, tree label, struct c_scope *scope,
786 struct c_label_vars *label_vars)
788 struct c_binding *b;
790 bind (name, label, scope, /*invisible=*/false, /*nested=*/false,
791 UNKNOWN_LOCATION);
793 scope->has_label_bindings = true;
795 b = scope->bindings;
796 gcc_assert (b->decl == label);
797 label_vars->shadowed = b->u.label;
798 b->u.label = label_vars;
801 /* Hook called at end of compilation to assume 1 elt
802 for a file-scope tentative array defn that wasn't complete before. */
804 void
805 c_finish_incomplete_decl (tree decl)
807 if (VAR_P (decl))
809 tree type = TREE_TYPE (decl);
810 if (type != error_mark_node
811 && TREE_CODE (type) == ARRAY_TYPE
812 && !DECL_EXTERNAL (decl)
813 && TYPE_DOMAIN (type) == NULL_TREE)
815 warning_at (DECL_SOURCE_LOCATION (decl),
816 0, "array %q+D assumed to have one element", decl);
818 complete_array_type (&TREE_TYPE (decl), NULL_TREE, true);
820 relayout_decl (decl);
825 /* Record that inline function FUNC contains a reference (location
826 LOC) to static DECL (file-scope or function-local according to
827 TYPE). */
829 void
830 record_inline_static (location_t loc, tree func, tree decl,
831 enum c_inline_static_type type)
833 c_inline_static *csi = ggc_alloc<c_inline_static> ();
834 csi->location = loc;
835 csi->function = func;
836 csi->static_decl = decl;
837 csi->type = type;
838 csi->next = c_inline_statics;
839 c_inline_statics = csi;
842 /* Check for references to static declarations in inline functions at
843 the end of the translation unit and diagnose them if the functions
844 are still inline definitions. */
846 static void
847 check_inline_statics (void)
849 struct c_inline_static *csi;
850 for (csi = c_inline_statics; csi; csi = csi->next)
852 if (DECL_EXTERNAL (csi->function))
853 switch (csi->type)
855 case csi_internal:
856 pedwarn (csi->location, 0,
857 "%qD is static but used in inline function %qD "
858 "which is not static", csi->static_decl, csi->function);
859 break;
860 case csi_modifiable:
861 pedwarn (csi->location, 0,
862 "%q+D is static but declared in inline function %qD "
863 "which is not static", csi->static_decl, csi->function);
864 break;
865 default:
866 gcc_unreachable ();
869 c_inline_statics = NULL;
872 /* Fill in a c_spot_bindings structure. If DEFINING is true, set it
873 for the current state, otherwise set it to uninitialized. */
875 static void
876 set_spot_bindings (struct c_spot_bindings *p, bool defining)
878 if (defining)
880 p->scope = current_scope;
881 p->bindings_in_scope = current_scope->bindings;
883 else
885 p->scope = NULL;
886 p->bindings_in_scope = NULL;
888 p->stmt_exprs = 0;
889 p->left_stmt_expr = false;
892 /* Update spot bindings P as we pop out of SCOPE. Return true if we
893 should push decls for a label. */
895 static bool
896 update_spot_bindings (struct c_scope *scope, struct c_spot_bindings *p)
898 if (p->scope != scope)
900 /* This label or goto is defined in some other scope, or it is a
901 label which is not yet defined. There is nothing to
902 update. */
903 return false;
906 /* Adjust the spot bindings to refer to the bindings already defined
907 in the enclosing scope. */
908 p->scope = scope->outer;
909 p->bindings_in_scope = p->scope->bindings;
911 return true;
914 /* The Objective-C front-end often needs to determine the current scope. */
916 void *
917 objc_get_current_scope (void)
919 return current_scope;
922 /* The following function is used only by Objective-C. It needs to live here
923 because it accesses the innards of c_scope. */
925 void
926 objc_mark_locals_volatile (void *enclosing_blk)
928 struct c_scope *scope;
929 struct c_binding *b;
931 for (scope = current_scope;
932 scope && scope != enclosing_blk;
933 scope = scope->outer)
935 for (b = scope->bindings; b; b = b->prev)
936 objc_volatilize_decl (b->decl);
938 /* Do not climb up past the current function. */
939 if (scope->function_body)
940 break;
944 /* Return true if we are in the global binding level. */
946 bool
947 global_bindings_p (void)
949 return current_scope == file_scope;
952 void
953 keep_next_level (void)
955 keep_next_level_flag = true;
958 /* Set the flag for the FLOAT_CONST_DECIMAL64 pragma being ON. */
960 void
961 set_float_const_decimal64 (void)
963 current_scope->float_const_decimal64 = true;
966 /* Clear the flag for the FLOAT_CONST_DECIMAL64 pragma. */
968 void
969 clear_float_const_decimal64 (void)
971 current_scope->float_const_decimal64 = false;
974 /* Return nonzero if an unsuffixed float constant is _Decimal64. */
976 bool
977 float_const_decimal64_p (void)
979 return current_scope->float_const_decimal64;
982 /* Identify this scope as currently being filled with parameters. */
984 void
985 declare_parm_level (void)
987 current_scope->parm_flag = true;
990 void
991 push_scope (void)
993 if (next_is_function_body)
995 /* This is the transition from the parameters to the top level
996 of the function body. These are the same scope
997 (C99 6.2.1p4,6) so we do not push another scope structure.
998 next_is_function_body is set only by store_parm_decls, which
999 in turn is called when and only when we are about to
1000 encounter the opening curly brace for the function body.
1002 The outermost block of a function always gets a BLOCK node,
1003 because the debugging output routines expect that each
1004 function has at least one BLOCK. */
1005 current_scope->parm_flag = false;
1006 current_scope->function_body = true;
1007 current_scope->keep = true;
1008 current_scope->outer_function = current_function_scope;
1009 current_function_scope = current_scope;
1011 keep_next_level_flag = false;
1012 next_is_function_body = false;
1014 /* The FLOAT_CONST_DECIMAL64 pragma applies to nested scopes. */
1015 if (current_scope->outer)
1016 current_scope->float_const_decimal64
1017 = current_scope->outer->float_const_decimal64;
1018 else
1019 current_scope->float_const_decimal64 = false;
1021 else
1023 struct c_scope *scope;
1024 if (scope_freelist)
1026 scope = scope_freelist;
1027 scope_freelist = scope->outer;
1029 else
1030 scope = ggc_cleared_alloc<c_scope> ();
1032 /* The FLOAT_CONST_DECIMAL64 pragma applies to nested scopes. */
1033 if (current_scope)
1034 scope->float_const_decimal64 = current_scope->float_const_decimal64;
1035 else
1036 scope->float_const_decimal64 = false;
1038 scope->keep = keep_next_level_flag;
1039 scope->outer = current_scope;
1040 scope->depth = current_scope ? (current_scope->depth + 1) : 0;
1042 /* Check for scope depth overflow. Unlikely (2^28 == 268,435,456) but
1043 possible. */
1044 if (current_scope && scope->depth == 0)
1046 scope->depth--;
1047 sorry ("GCC supports only %u nested scopes", scope->depth);
1050 current_scope = scope;
1051 keep_next_level_flag = false;
1055 /* This is called when we are leaving SCOPE. For each label defined
1056 in SCOPE, add any appropriate decls to its decls_in_scope fields.
1057 These are the decls whose initialization will be skipped by a goto
1058 later in the function. */
1060 static void
1061 update_label_decls (struct c_scope *scope)
1063 struct c_scope *s;
1065 s = scope;
1066 while (s != NULL)
1068 if (s->has_label_bindings)
1070 struct c_binding *b;
1072 for (b = s->bindings; b != NULL; b = b->prev)
1074 struct c_label_vars *label_vars;
1075 struct c_binding *b1;
1076 bool hjud;
1077 unsigned int ix;
1078 struct c_goto_bindings *g;
1080 if (TREE_CODE (b->decl) != LABEL_DECL)
1081 continue;
1082 label_vars = b->u.label;
1084 b1 = label_vars->label_bindings.bindings_in_scope;
1085 if (label_vars->label_bindings.scope == NULL)
1086 hjud = false;
1087 else
1088 hjud = label_vars->label_bindings.scope->has_jump_unsafe_decl;
1089 if (update_spot_bindings (scope, &label_vars->label_bindings))
1091 /* This label is defined in this scope. */
1092 if (hjud)
1094 for (; b1 != NULL; b1 = b1->prev)
1096 /* A goto from later in the function to this
1097 label will never see the initialization
1098 of B1, if any. Save it to issue a
1099 warning if needed. */
1100 if (decl_jump_unsafe (b1->decl))
1101 vec_safe_push(label_vars->decls_in_scope, b1->decl);
1106 /* Update the bindings of any goto statements associated
1107 with this label. */
1108 FOR_EACH_VEC_SAFE_ELT (label_vars->gotos, ix, g)
1109 update_spot_bindings (scope, &g->goto_bindings);
1113 /* Don't search beyond the current function. */
1114 if (s == current_function_scope)
1115 break;
1117 s = s->outer;
1121 /* Set the TYPE_CONTEXT of all of TYPE's variants to CONTEXT. */
1123 static void
1124 set_type_context (tree type, tree context)
1126 for (type = TYPE_MAIN_VARIANT (type); type;
1127 type = TYPE_NEXT_VARIANT (type))
1128 TYPE_CONTEXT (type) = context;
1131 /* Exit a scope. Restore the state of the identifier-decl mappings
1132 that were in effect when this scope was entered. Return a BLOCK
1133 node containing all the DECLs in this scope that are of interest
1134 to debug info generation. */
1136 tree
1137 pop_scope (void)
1139 struct c_scope *scope = current_scope;
1140 tree block, context, p;
1141 struct c_binding *b;
1143 bool functionbody = scope->function_body;
1144 bool keep = functionbody || scope->keep || scope->bindings;
1146 update_label_decls (scope);
1148 /* If appropriate, create a BLOCK to record the decls for the life
1149 of this function. */
1150 block = NULL_TREE;
1151 if (keep)
1153 block = make_node (BLOCK);
1154 BLOCK_SUBBLOCKS (block) = scope->blocks;
1155 TREE_USED (block) = 1;
1157 /* In each subblock, record that this is its superior. */
1158 for (p = scope->blocks; p; p = BLOCK_CHAIN (p))
1159 BLOCK_SUPERCONTEXT (p) = block;
1161 BLOCK_VARS (block) = NULL_TREE;
1164 /* The TYPE_CONTEXTs for all of the tagged types belonging to this
1165 scope must be set so that they point to the appropriate
1166 construct, i.e. either to the current FUNCTION_DECL node, or
1167 else to the BLOCK node we just constructed.
1169 Note that for tagged types whose scope is just the formal
1170 parameter list for some function type specification, we can't
1171 properly set their TYPE_CONTEXTs here, because we don't have a
1172 pointer to the appropriate FUNCTION_TYPE node readily available
1173 to us. For those cases, the TYPE_CONTEXTs of the relevant tagged
1174 type nodes get set in `grokdeclarator' as soon as we have created
1175 the FUNCTION_TYPE node which will represent the "scope" for these
1176 "parameter list local" tagged types. */
1177 if (scope->function_body)
1178 context = current_function_decl;
1179 else if (scope == file_scope)
1181 tree file_decl
1182 = build_translation_unit_decl (get_identifier (main_input_filename));
1183 context = file_decl;
1184 debug_hooks->register_main_translation_unit (file_decl);
1186 else
1187 context = block;
1189 /* Clear all bindings in this scope. */
1190 for (b = scope->bindings; b; b = free_binding_and_advance (b))
1192 p = b->decl;
1193 switch (TREE_CODE (p))
1195 case LABEL_DECL:
1196 /* Warnings for unused labels, errors for undefined labels. */
1197 if (TREE_USED (p) && !DECL_INITIAL (p))
1199 error ("label %q+D used but not defined", p);
1200 DECL_INITIAL (p) = error_mark_node;
1202 else
1203 warn_for_unused_label (p);
1205 /* Labels go in BLOCK_VARS. */
1206 DECL_CHAIN (p) = BLOCK_VARS (block);
1207 BLOCK_VARS (block) = p;
1208 gcc_assert (I_LABEL_BINDING (b->id) == b);
1209 I_LABEL_BINDING (b->id) = b->shadowed;
1211 /* Also pop back to the shadowed label_vars. */
1212 release_tree_vector (b->u.label->decls_in_scope);
1213 b->u.label = b->u.label->shadowed;
1214 break;
1216 case ENUMERAL_TYPE:
1217 case UNION_TYPE:
1218 case RECORD_TYPE:
1219 set_type_context (p, context);
1221 /* Types may not have tag-names, in which case the type
1222 appears in the bindings list with b->id NULL. */
1223 if (b->id)
1225 gcc_assert (I_TAG_BINDING (b->id) == b);
1226 I_TAG_BINDING (b->id) = b->shadowed;
1228 break;
1230 case FUNCTION_DECL:
1231 /* Propagate TREE_ADDRESSABLE from nested functions to their
1232 containing functions. */
1233 if (!TREE_ASM_WRITTEN (p)
1234 && DECL_INITIAL (p) != NULL_TREE
1235 && TREE_ADDRESSABLE (p)
1236 && DECL_ABSTRACT_ORIGIN (p) != NULL_TREE
1237 && DECL_ABSTRACT_ORIGIN (p) != p)
1238 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (p)) = 1;
1239 if (!DECL_EXTERNAL (p)
1240 && !DECL_INITIAL (p)
1241 && scope != file_scope
1242 && scope != external_scope)
1244 error ("nested function %q+D declared but never defined", p);
1245 undef_nested_function = true;
1247 else if (DECL_DECLARED_INLINE_P (p)
1248 && TREE_PUBLIC (p)
1249 && !DECL_INITIAL (p))
1251 /* C99 6.7.4p6: "a function with external linkage... declared
1252 with an inline function specifier ... shall also be defined
1253 in the same translation unit." */
1254 if (!flag_gnu89_inline
1255 && !lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (p))
1256 && scope != external_scope)
1257 pedwarn (input_location, 0,
1258 "inline function %q+D declared but never defined", p);
1259 DECL_EXTERNAL (p) = 1;
1262 goto common_symbol;
1264 case VAR_DECL:
1265 /* Warnings for unused variables. */
1266 if ((!TREE_USED (p) || !DECL_READ_P (p))
1267 && !TREE_NO_WARNING (p)
1268 && !DECL_IN_SYSTEM_HEADER (p)
1269 && DECL_NAME (p)
1270 && !DECL_ARTIFICIAL (p)
1271 && scope != file_scope
1272 && scope != external_scope)
1274 if (!TREE_USED (p))
1275 warning (OPT_Wunused_variable, "unused variable %q+D", p);
1276 else if (DECL_CONTEXT (p) == current_function_decl)
1277 warning_at (DECL_SOURCE_LOCATION (p),
1278 OPT_Wunused_but_set_variable,
1279 "variable %qD set but not used", p);
1282 if (b->inner_comp)
1284 error ("type of array %q+D completed incompatibly with"
1285 " implicit initialization", p);
1288 /* Fall through. */
1289 case TYPE_DECL:
1290 case CONST_DECL:
1291 common_symbol:
1292 /* All of these go in BLOCK_VARS, but only if this is the
1293 binding in the home scope. */
1294 if (!b->nested)
1296 DECL_CHAIN (p) = BLOCK_VARS (block);
1297 BLOCK_VARS (block) = p;
1299 else if (VAR_OR_FUNCTION_DECL_P (p) && scope != file_scope)
1301 /* For block local externs add a special
1302 DECL_EXTERNAL decl for debug info generation. */
1303 tree extp = copy_node (p);
1305 DECL_EXTERNAL (extp) = 1;
1306 TREE_STATIC (extp) = 0;
1307 TREE_PUBLIC (extp) = 1;
1308 DECL_INITIAL (extp) = NULL_TREE;
1309 DECL_LANG_SPECIFIC (extp) = NULL;
1310 DECL_CONTEXT (extp) = current_function_decl;
1311 if (TREE_CODE (p) == FUNCTION_DECL)
1313 DECL_RESULT (extp) = NULL_TREE;
1314 DECL_SAVED_TREE (extp) = NULL_TREE;
1315 DECL_STRUCT_FUNCTION (extp) = NULL;
1317 if (b->locus != UNKNOWN_LOCATION)
1318 DECL_SOURCE_LOCATION (extp) = b->locus;
1319 DECL_CHAIN (extp) = BLOCK_VARS (block);
1320 BLOCK_VARS (block) = extp;
1322 /* If this is the file scope set DECL_CONTEXT of each decl to
1323 the TRANSLATION_UNIT_DECL. This makes same_translation_unit_p
1324 work. */
1325 if (scope == file_scope)
1327 DECL_CONTEXT (p) = context;
1328 if (TREE_CODE (p) == TYPE_DECL
1329 && TREE_TYPE (p) != error_mark_node)
1330 set_type_context (TREE_TYPE (p), context);
1333 gcc_fallthrough ();
1334 /* Parameters go in DECL_ARGUMENTS, not BLOCK_VARS, and have
1335 already been put there by store_parm_decls. Unused-
1336 parameter warnings are handled by function.c.
1337 error_mark_node obviously does not go in BLOCK_VARS and
1338 does not get unused-variable warnings. */
1339 case PARM_DECL:
1340 case ERROR_MARK:
1341 /* It is possible for a decl not to have a name. We get
1342 here with b->id NULL in this case. */
1343 if (b->id)
1345 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
1346 I_SYMBOL_BINDING (b->id) = b->shadowed;
1347 if (b->shadowed && b->shadowed->u.type)
1348 TREE_TYPE (b->shadowed->decl) = b->shadowed->u.type;
1350 break;
1352 default:
1353 gcc_unreachable ();
1358 /* Dispose of the block that we just made inside some higher level. */
1359 if ((scope->function_body || scope == file_scope) && context)
1361 DECL_INITIAL (context) = block;
1362 BLOCK_SUPERCONTEXT (block) = context;
1364 else if (scope->outer)
1366 if (block)
1367 SCOPE_LIST_APPEND (scope->outer, blocks, block);
1368 /* If we did not make a block for the scope just exited, any
1369 blocks made for inner scopes must be carried forward so they
1370 will later become subblocks of something else. */
1371 else if (scope->blocks)
1372 SCOPE_LIST_CONCAT (scope->outer, blocks, scope, blocks);
1375 /* Pop the current scope, and free the structure for reuse. */
1376 current_scope = scope->outer;
1377 if (scope->function_body)
1378 current_function_scope = scope->outer_function;
1380 memset (scope, 0, sizeof (struct c_scope));
1381 scope->outer = scope_freelist;
1382 scope_freelist = scope;
1384 return block;
1387 void
1388 push_file_scope (void)
1390 tree decl;
1392 if (file_scope)
1393 return;
1395 push_scope ();
1396 file_scope = current_scope;
1398 start_fname_decls ();
1400 for (decl = visible_builtins; decl; decl = DECL_CHAIN (decl))
1401 bind (DECL_NAME (decl), decl, file_scope,
1402 /*invisible=*/false, /*nested=*/true, DECL_SOURCE_LOCATION (decl));
1405 void
1406 pop_file_scope (void)
1408 /* In case there were missing closebraces, get us back to the global
1409 binding level. */
1410 while (current_scope != file_scope)
1411 pop_scope ();
1413 /* __FUNCTION__ is defined at file scope (""). This
1414 call may not be necessary as my tests indicate it
1415 still works without it. */
1416 finish_fname_decls ();
1418 check_inline_statics ();
1420 /* This is the point to write out a PCH if we're doing that.
1421 In that case we do not want to do anything else. */
1422 if (pch_file)
1424 c_common_write_pch ();
1425 /* Ensure even the callers don't try to finalize the CU. */
1426 flag_syntax_only = 1;
1427 return;
1430 /* Pop off the file scope and close this translation unit. */
1431 pop_scope ();
1432 file_scope = 0;
1434 maybe_apply_pending_pragma_weaks ();
1437 /* Adjust the bindings for the start of a statement expression. */
1439 void
1440 c_bindings_start_stmt_expr (struct c_spot_bindings* switch_bindings)
1442 struct c_scope *scope;
1444 for (scope = current_scope; scope != NULL; scope = scope->outer)
1446 struct c_binding *b;
1448 if (!scope->has_label_bindings)
1449 continue;
1451 for (b = scope->bindings; b != NULL; b = b->prev)
1453 struct c_label_vars *label_vars;
1454 unsigned int ix;
1455 struct c_goto_bindings *g;
1457 if (TREE_CODE (b->decl) != LABEL_DECL)
1458 continue;
1459 label_vars = b->u.label;
1460 ++label_vars->label_bindings.stmt_exprs;
1461 FOR_EACH_VEC_SAFE_ELT (label_vars->gotos, ix, g)
1462 ++g->goto_bindings.stmt_exprs;
1466 if (switch_bindings != NULL)
1467 ++switch_bindings->stmt_exprs;
1470 /* Adjust the bindings for the end of a statement expression. */
1472 void
1473 c_bindings_end_stmt_expr (struct c_spot_bindings *switch_bindings)
1475 struct c_scope *scope;
1477 for (scope = current_scope; scope != NULL; scope = scope->outer)
1479 struct c_binding *b;
1481 if (!scope->has_label_bindings)
1482 continue;
1484 for (b = scope->bindings; b != NULL; b = b->prev)
1486 struct c_label_vars *label_vars;
1487 unsigned int ix;
1488 struct c_goto_bindings *g;
1490 if (TREE_CODE (b->decl) != LABEL_DECL)
1491 continue;
1492 label_vars = b->u.label;
1493 --label_vars->label_bindings.stmt_exprs;
1494 if (label_vars->label_bindings.stmt_exprs < 0)
1496 label_vars->label_bindings.left_stmt_expr = true;
1497 label_vars->label_bindings.stmt_exprs = 0;
1499 FOR_EACH_VEC_SAFE_ELT (label_vars->gotos, ix, g)
1501 --g->goto_bindings.stmt_exprs;
1502 if (g->goto_bindings.stmt_exprs < 0)
1504 g->goto_bindings.left_stmt_expr = true;
1505 g->goto_bindings.stmt_exprs = 0;
1511 if (switch_bindings != NULL)
1513 --switch_bindings->stmt_exprs;
1514 gcc_assert (switch_bindings->stmt_exprs >= 0);
1518 /* Push a definition or a declaration of struct, union or enum tag "name".
1519 "type" should be the type node.
1520 We assume that the tag "name" is not already defined, and has a location
1521 of LOC.
1523 Note that the definition may really be just a forward reference.
1524 In that case, the TYPE_SIZE will be zero. */
1526 static void
1527 pushtag (location_t loc, tree name, tree type)
1529 /* Record the identifier as the type's name if it has none. */
1530 if (name && !TYPE_NAME (type))
1531 TYPE_NAME (type) = name;
1532 bind (name, type, current_scope, /*invisible=*/false, /*nested=*/false, loc);
1534 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE will be the
1535 tagged type we just added to the current scope. This fake
1536 NULL-named TYPE_DECL node helps dwarfout.c to know when it needs
1537 to output a representation of a tagged type, and it also gives
1538 us a convenient place to record the "scope start" address for the
1539 tagged type. */
1541 TYPE_STUB_DECL (type) = pushdecl (build_decl (loc,
1542 TYPE_DECL, NULL_TREE, type));
1544 /* An approximation for now, so we can tell this is a function-scope tag.
1545 This will be updated in pop_scope. */
1546 TYPE_CONTEXT (type) = DECL_CONTEXT (TYPE_STUB_DECL (type));
1548 if (warn_cxx_compat && name != NULL_TREE)
1550 struct c_binding *b = I_SYMBOL_BINDING (name);
1552 if (b != NULL
1553 && b->decl != NULL_TREE
1554 && TREE_CODE (b->decl) == TYPE_DECL
1555 && (B_IN_CURRENT_SCOPE (b)
1556 || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
1557 && (TYPE_MAIN_VARIANT (TREE_TYPE (b->decl))
1558 != TYPE_MAIN_VARIANT (type)))
1560 warning_at (loc, OPT_Wc___compat,
1561 ("using %qD as both a typedef and a tag is "
1562 "invalid in C++"),
1563 b->decl);
1564 if (b->locus != UNKNOWN_LOCATION)
1565 inform (b->locus, "originally defined here");
1570 /* An exported interface to pushtag. This is used by the gdb plugin's
1571 binding oracle to introduce a new tag binding. */
1573 void
1574 c_pushtag (location_t loc, tree name, tree type)
1576 pushtag (loc, name, type);
1579 /* An exported interface to bind a declaration. LOC is the location
1580 to use. DECL is the declaration to bind. The decl's name is used
1581 to determine how it is bound. If DECL is a VAR_DECL, then
1582 IS_GLOBAL determines whether the decl is put into the global (file
1583 and external) scope or the current function's scope; if DECL is not
1584 a VAR_DECL then it is always put into the file scope. */
1586 void
1587 c_bind (location_t loc, tree decl, bool is_global)
1589 struct c_scope *scope;
1590 bool nested = false;
1592 if (!VAR_P (decl) || current_function_scope == NULL)
1594 /* Types and functions are always considered to be global. */
1595 scope = file_scope;
1596 DECL_EXTERNAL (decl) = 1;
1597 TREE_PUBLIC (decl) = 1;
1599 else if (is_global)
1601 /* Also bind it into the external scope. */
1602 bind (DECL_NAME (decl), decl, external_scope, true, false, loc);
1603 nested = true;
1604 scope = file_scope;
1605 DECL_EXTERNAL (decl) = 1;
1606 TREE_PUBLIC (decl) = 1;
1608 else
1610 DECL_CONTEXT (decl) = current_function_decl;
1611 TREE_PUBLIC (decl) = 0;
1612 scope = current_function_scope;
1615 bind (DECL_NAME (decl), decl, scope, false, nested, loc);
1618 /* Subroutine of compare_decls. Allow harmless mismatches in return
1619 and argument types provided that the type modes match. This function
1620 return a unified type given a suitable match, and 0 otherwise. */
1622 static tree
1623 match_builtin_function_types (tree newtype, tree oldtype)
1625 tree newrettype, oldrettype;
1626 tree newargs, oldargs;
1627 tree trytype, tryargs;
1629 /* Accept the return type of the new declaration if same modes. */
1630 oldrettype = TREE_TYPE (oldtype);
1631 newrettype = TREE_TYPE (newtype);
1633 if (TYPE_MODE (oldrettype) != TYPE_MODE (newrettype))
1634 return NULL_TREE;
1636 oldargs = TYPE_ARG_TYPES (oldtype);
1637 newargs = TYPE_ARG_TYPES (newtype);
1638 tryargs = newargs;
1640 while (oldargs || newargs)
1642 if (!oldargs
1643 || !newargs
1644 || !TREE_VALUE (oldargs)
1645 || !TREE_VALUE (newargs)
1646 || TYPE_MODE (TREE_VALUE (oldargs))
1647 != TYPE_MODE (TREE_VALUE (newargs)))
1648 return NULL_TREE;
1650 oldargs = TREE_CHAIN (oldargs);
1651 newargs = TREE_CHAIN (newargs);
1654 trytype = build_function_type (newrettype, tryargs);
1656 /* Allow declaration to change transaction_safe attribute. */
1657 tree oldattrs = TYPE_ATTRIBUTES (oldtype);
1658 tree oldtsafe = lookup_attribute ("transaction_safe", oldattrs);
1659 tree newattrs = TYPE_ATTRIBUTES (newtype);
1660 tree newtsafe = lookup_attribute ("transaction_safe", newattrs);
1661 if (oldtsafe && !newtsafe)
1662 oldattrs = remove_attribute ("transaction_safe", oldattrs);
1663 else if (newtsafe && !oldtsafe)
1664 oldattrs = tree_cons (get_identifier ("transaction_safe"),
1665 NULL_TREE, oldattrs);
1667 return build_type_attribute_variant (trytype, oldattrs);
1670 /* Subroutine of diagnose_mismatched_decls. Check for function type
1671 mismatch involving an empty arglist vs a nonempty one and give clearer
1672 diagnostics. */
1673 static void
1674 diagnose_arglist_conflict (tree newdecl, tree olddecl,
1675 tree newtype, tree oldtype)
1677 tree t;
1679 if (TREE_CODE (olddecl) != FUNCTION_DECL
1680 || !comptypes (TREE_TYPE (oldtype), TREE_TYPE (newtype))
1681 || !((!prototype_p (oldtype) && DECL_INITIAL (olddecl) == NULL_TREE)
1682 || (!prototype_p (newtype) && DECL_INITIAL (newdecl) == NULL_TREE)))
1683 return;
1685 t = TYPE_ARG_TYPES (oldtype);
1686 if (t == NULL_TREE)
1687 t = TYPE_ARG_TYPES (newtype);
1688 for (; t; t = TREE_CHAIN (t))
1690 tree type = TREE_VALUE (t);
1692 if (TREE_CHAIN (t) == NULL_TREE
1693 && TYPE_MAIN_VARIANT (type) != void_type_node)
1695 inform (input_location, "a parameter list with an ellipsis can%'t match "
1696 "an empty parameter name list declaration");
1697 break;
1700 if (c_type_promotes_to (type) != type)
1702 inform (input_location, "an argument type that has a default promotion can%'t match "
1703 "an empty parameter name list declaration");
1704 break;
1709 /* Another subroutine of diagnose_mismatched_decls. OLDDECL is an
1710 old-style function definition, NEWDECL is a prototype declaration.
1711 Diagnose inconsistencies in the argument list. Returns TRUE if
1712 the prototype is compatible, FALSE if not. */
1713 static bool
1714 validate_proto_after_old_defn (tree newdecl, tree newtype, tree oldtype)
1716 tree newargs, oldargs;
1717 int i;
1719 #define END_OF_ARGLIST(t) ((t) == void_type_node)
1721 oldargs = TYPE_ACTUAL_ARG_TYPES (oldtype);
1722 newargs = TYPE_ARG_TYPES (newtype);
1723 i = 1;
1725 for (;;)
1727 tree oldargtype = TREE_VALUE (oldargs);
1728 tree newargtype = TREE_VALUE (newargs);
1730 if (oldargtype == error_mark_node || newargtype == error_mark_node)
1731 return false;
1733 oldargtype = (TYPE_ATOMIC (oldargtype)
1734 ? c_build_qualified_type (TYPE_MAIN_VARIANT (oldargtype),
1735 TYPE_QUAL_ATOMIC)
1736 : TYPE_MAIN_VARIANT (oldargtype));
1737 newargtype = (TYPE_ATOMIC (newargtype)
1738 ? c_build_qualified_type (TYPE_MAIN_VARIANT (newargtype),
1739 TYPE_QUAL_ATOMIC)
1740 : TYPE_MAIN_VARIANT (newargtype));
1742 if (END_OF_ARGLIST (oldargtype) && END_OF_ARGLIST (newargtype))
1743 break;
1745 /* Reaching the end of just one list means the two decls don't
1746 agree on the number of arguments. */
1747 if (END_OF_ARGLIST (oldargtype))
1749 error ("prototype for %q+D declares more arguments "
1750 "than previous old-style definition", newdecl);
1751 return false;
1753 else if (END_OF_ARGLIST (newargtype))
1755 error ("prototype for %q+D declares fewer arguments "
1756 "than previous old-style definition", newdecl);
1757 return false;
1760 /* Type for passing arg must be consistent with that declared
1761 for the arg. */
1762 else if (!comptypes (oldargtype, newargtype))
1764 error ("prototype for %q+D declares argument %d"
1765 " with incompatible type",
1766 newdecl, i);
1767 return false;
1770 oldargs = TREE_CHAIN (oldargs);
1771 newargs = TREE_CHAIN (newargs);
1772 i++;
1775 /* If we get here, no errors were found, but do issue a warning
1776 for this poor-style construct. */
1777 warning (0, "prototype for %q+D follows non-prototype definition",
1778 newdecl);
1779 return true;
1780 #undef END_OF_ARGLIST
1783 /* Subroutine of diagnose_mismatched_decls. Report the location of DECL,
1784 first in a pair of mismatched declarations, using the diagnostic
1785 function DIAG. */
1786 static void
1787 locate_old_decl (tree decl)
1789 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_BUILT_IN (decl)
1790 && !C_DECL_DECLARED_BUILTIN (decl))
1792 else if (DECL_INITIAL (decl))
1793 inform (input_location, "previous definition of %q+D was here", decl);
1794 else if (C_DECL_IMPLICIT (decl))
1795 inform (input_location, "previous implicit declaration of %q+D was here", decl);
1796 else
1797 inform (input_location, "previous declaration of %q+D was here", decl);
1800 /* Subroutine of duplicate_decls. Compare NEWDECL to OLDDECL.
1801 Returns true if the caller should proceed to merge the two, false
1802 if OLDDECL should simply be discarded. As a side effect, issues
1803 all necessary diagnostics for invalid or poor-style combinations.
1804 If it returns true, writes the types of NEWDECL and OLDDECL to
1805 *NEWTYPEP and *OLDTYPEP - these may have been adjusted from
1806 TREE_TYPE (NEWDECL, OLDDECL) respectively. */
1808 static bool
1809 diagnose_mismatched_decls (tree newdecl, tree olddecl,
1810 tree *newtypep, tree *oldtypep)
1812 tree newtype, oldtype;
1813 bool pedwarned = false;
1814 bool warned = false;
1815 bool retval = true;
1817 #define DECL_EXTERN_INLINE(DECL) (DECL_DECLARED_INLINE_P (DECL) \
1818 && DECL_EXTERNAL (DECL))
1820 /* If we have error_mark_node for either decl or type, just discard
1821 the previous decl - we're in an error cascade already. */
1822 if (olddecl == error_mark_node || newdecl == error_mark_node)
1823 return false;
1824 *oldtypep = oldtype = TREE_TYPE (olddecl);
1825 *newtypep = newtype = TREE_TYPE (newdecl);
1826 if (oldtype == error_mark_node || newtype == error_mark_node)
1827 return false;
1829 /* Two different categories of symbol altogether. This is an error
1830 unless OLDDECL is a builtin. OLDDECL will be discarded in any case. */
1831 if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1833 if (!(TREE_CODE (olddecl) == FUNCTION_DECL
1834 && DECL_BUILT_IN (olddecl)
1835 && !C_DECL_DECLARED_BUILTIN (olddecl)))
1837 error ("%q+D redeclared as different kind of symbol", newdecl);
1838 locate_old_decl (olddecl);
1840 else if (TREE_PUBLIC (newdecl))
1841 warning (0, "built-in function %q+D declared as non-function",
1842 newdecl);
1843 else
1844 warning (OPT_Wshadow, "declaration of %q+D shadows "
1845 "a built-in function", newdecl);
1846 return false;
1849 /* Enumerators have no linkage, so may only be declared once in a
1850 given scope. */
1851 if (TREE_CODE (olddecl) == CONST_DECL)
1853 error ("redeclaration of enumerator %q+D", newdecl);
1854 locate_old_decl (olddecl);
1855 return false;
1858 if (!comptypes (oldtype, newtype))
1860 if (TREE_CODE (olddecl) == FUNCTION_DECL
1861 && DECL_BUILT_IN (olddecl) && !C_DECL_DECLARED_BUILTIN (olddecl))
1863 /* Accept harmless mismatch in function types.
1864 This is for the ffs and fprintf builtins. */
1865 tree trytype = match_builtin_function_types (newtype, oldtype);
1867 if (trytype && comptypes (newtype, trytype))
1868 *oldtypep = oldtype = trytype;
1869 else
1871 /* If types don't match for a built-in, throw away the
1872 built-in. No point in calling locate_old_decl here, it
1873 won't print anything. */
1874 warning (OPT_Wbuiltin_declaration_mismatch,
1875 "conflicting types for built-in function %q+D",
1876 newdecl);
1877 return false;
1880 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1881 && DECL_IS_BUILTIN (olddecl))
1883 /* A conflicting function declaration for a predeclared
1884 function that isn't actually built in. Objective C uses
1885 these. The new declaration silently overrides everything
1886 but the volatility (i.e. noreturn) indication. See also
1887 below. FIXME: Make Objective C use normal builtins. */
1888 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1889 return false;
1891 /* Permit void foo (...) to match int foo (...) if the latter is
1892 the definition and implicit int was used. See
1893 c-torture/compile/920625-2.c. */
1894 else if (TREE_CODE (newdecl) == FUNCTION_DECL && DECL_INITIAL (newdecl)
1895 && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype)) == void_type_node
1896 && TYPE_MAIN_VARIANT (TREE_TYPE (newtype)) == integer_type_node
1897 && C_FUNCTION_IMPLICIT_INT (newdecl) && !DECL_INITIAL (olddecl))
1899 pedwarned = pedwarn (input_location, 0,
1900 "conflicting types for %q+D", newdecl);
1901 /* Make sure we keep void as the return type. */
1902 TREE_TYPE (newdecl) = *newtypep = newtype = oldtype;
1903 C_FUNCTION_IMPLICIT_INT (newdecl) = 0;
1905 /* Permit void foo (...) to match an earlier call to foo (...) with
1906 no declared type (thus, implicitly int). */
1907 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1908 && TYPE_MAIN_VARIANT (TREE_TYPE (newtype)) == void_type_node
1909 && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype)) == integer_type_node
1910 && C_DECL_IMPLICIT (olddecl) && !DECL_INITIAL (olddecl))
1912 pedwarned = pedwarn (input_location, 0,
1913 "conflicting types for %q+D", newdecl);
1914 /* Make sure we keep void as the return type. */
1915 TREE_TYPE (olddecl) = *oldtypep = oldtype = newtype;
1917 else
1919 int new_quals = TYPE_QUALS (newtype);
1920 int old_quals = TYPE_QUALS (oldtype);
1922 if (new_quals != old_quals)
1924 addr_space_t new_addr = DECODE_QUAL_ADDR_SPACE (new_quals);
1925 addr_space_t old_addr = DECODE_QUAL_ADDR_SPACE (old_quals);
1926 if (new_addr != old_addr)
1928 if (ADDR_SPACE_GENERIC_P (new_addr))
1929 error ("conflicting named address spaces (generic vs %s) "
1930 "for %q+D",
1931 c_addr_space_name (old_addr), newdecl);
1932 else if (ADDR_SPACE_GENERIC_P (old_addr))
1933 error ("conflicting named address spaces (%s vs generic) "
1934 "for %q+D",
1935 c_addr_space_name (new_addr), newdecl);
1936 else
1937 error ("conflicting named address spaces (%s vs %s) "
1938 "for %q+D",
1939 c_addr_space_name (new_addr),
1940 c_addr_space_name (old_addr),
1941 newdecl);
1944 if (CLEAR_QUAL_ADDR_SPACE (new_quals)
1945 != CLEAR_QUAL_ADDR_SPACE (old_quals))
1946 error ("conflicting type qualifiers for %q+D", newdecl);
1948 else
1949 error ("conflicting types for %q+D", newdecl);
1950 diagnose_arglist_conflict (newdecl, olddecl, newtype, oldtype);
1951 locate_old_decl (olddecl);
1952 return false;
1956 /* Redeclaration of a type is a constraint violation (6.7.2.3p1),
1957 but silently ignore the redeclaration if either is in a system
1958 header. (Conflicting redeclarations were handled above.) This
1959 is allowed for C11 if the types are the same, not just
1960 compatible. */
1961 if (TREE_CODE (newdecl) == TYPE_DECL)
1963 bool types_different = false;
1964 int comptypes_result;
1966 comptypes_result
1967 = comptypes_check_different_types (oldtype, newtype, &types_different);
1969 if (comptypes_result != 1 || types_different)
1971 error ("redefinition of typedef %q+D with different type", newdecl);
1972 locate_old_decl (olddecl);
1973 return false;
1976 if (DECL_IN_SYSTEM_HEADER (newdecl)
1977 || DECL_IN_SYSTEM_HEADER (olddecl)
1978 || TREE_NO_WARNING (newdecl)
1979 || TREE_NO_WARNING (olddecl))
1980 return true; /* Allow OLDDECL to continue in use. */
1982 if (variably_modified_type_p (newtype, NULL))
1984 error ("redefinition of typedef %q+D with variably modified type",
1985 newdecl);
1986 locate_old_decl (olddecl);
1988 else if (pedwarn_c99 (input_location, OPT_Wpedantic,
1989 "redefinition of typedef %q+D", newdecl))
1990 locate_old_decl (olddecl);
1992 return true;
1995 /* Function declarations can either be 'static' or 'extern' (no
1996 qualifier is equivalent to 'extern' - C99 6.2.2p5) and therefore
1997 can never conflict with each other on account of linkage
1998 (6.2.2p4). Multiple definitions are not allowed (6.9p3,5) but
1999 gnu89 mode permits two definitions if one is 'extern inline' and
2000 one is not. The non- extern-inline definition supersedes the
2001 extern-inline definition. */
2003 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2005 /* If you declare a built-in function name as static, or
2006 define the built-in with an old-style definition (so we
2007 can't validate the argument list) the built-in definition is
2008 overridden, but optionally warn this was a bad choice of name. */
2009 if (DECL_BUILT_IN (olddecl)
2010 && !C_DECL_DECLARED_BUILTIN (olddecl)
2011 && (!TREE_PUBLIC (newdecl)
2012 || (DECL_INITIAL (newdecl)
2013 && !prototype_p (TREE_TYPE (newdecl)))))
2015 warning (OPT_Wshadow, "declaration of %q+D shadows "
2016 "a built-in function", newdecl);
2017 /* Discard the old built-in function. */
2018 return false;
2021 if (DECL_INITIAL (newdecl))
2023 if (DECL_INITIAL (olddecl))
2025 /* If both decls are in the same TU and the new declaration
2026 isn't overriding an extern inline reject the new decl.
2027 In c99, no overriding is allowed in the same translation
2028 unit. */
2029 if ((!DECL_EXTERN_INLINE (olddecl)
2030 || DECL_EXTERN_INLINE (newdecl)
2031 || (!flag_gnu89_inline
2032 && (!DECL_DECLARED_INLINE_P (olddecl)
2033 || !lookup_attribute ("gnu_inline",
2034 DECL_ATTRIBUTES (olddecl)))
2035 && (!DECL_DECLARED_INLINE_P (newdecl)
2036 || !lookup_attribute ("gnu_inline",
2037 DECL_ATTRIBUTES (newdecl))))
2039 && same_translation_unit_p (newdecl, olddecl))
2041 error ("redefinition of %q+D", newdecl);
2042 locate_old_decl (olddecl);
2043 return false;
2047 /* If we have a prototype after an old-style function definition,
2048 the argument types must be checked specially. */
2049 else if (DECL_INITIAL (olddecl)
2050 && !prototype_p (oldtype) && prototype_p (newtype)
2051 && TYPE_ACTUAL_ARG_TYPES (oldtype)
2052 && !validate_proto_after_old_defn (newdecl, newtype, oldtype))
2054 locate_old_decl (olddecl);
2055 return false;
2057 /* A non-static declaration (even an "extern") followed by a
2058 static declaration is undefined behavior per C99 6.2.2p3-5,7.
2059 The same is true for a static forward declaration at block
2060 scope followed by a non-static declaration/definition at file
2061 scope. Static followed by non-static at the same scope is
2062 not undefined behavior, and is the most convenient way to get
2063 some effects (see e.g. what unwind-dw2-fde-glibc.c does to
2064 the definition of _Unwind_Find_FDE in unwind-dw2-fde.c), but
2065 we do diagnose it if -Wtraditional. */
2066 if (TREE_PUBLIC (olddecl) && !TREE_PUBLIC (newdecl))
2068 /* Two exceptions to the rule. If olddecl is an extern
2069 inline, or a predeclared function that isn't actually
2070 built in, newdecl silently overrides olddecl. The latter
2071 occur only in Objective C; see also above. (FIXME: Make
2072 Objective C use normal builtins.) */
2073 if (!DECL_IS_BUILTIN (olddecl)
2074 && !DECL_EXTERN_INLINE (olddecl))
2076 error ("static declaration of %q+D follows "
2077 "non-static declaration", newdecl);
2078 locate_old_decl (olddecl);
2080 return false;
2082 else if (TREE_PUBLIC (newdecl) && !TREE_PUBLIC (olddecl))
2084 if (DECL_CONTEXT (olddecl))
2086 error ("non-static declaration of %q+D follows "
2087 "static declaration", newdecl);
2088 locate_old_decl (olddecl);
2089 return false;
2091 else if (warn_traditional)
2093 warned |= warning (OPT_Wtraditional,
2094 "non-static declaration of %q+D "
2095 "follows static declaration", newdecl);
2099 /* Make sure gnu_inline attribute is either not present, or
2100 present on all inline decls. */
2101 if (DECL_DECLARED_INLINE_P (olddecl)
2102 && DECL_DECLARED_INLINE_P (newdecl))
2104 bool newa = lookup_attribute ("gnu_inline",
2105 DECL_ATTRIBUTES (newdecl)) != NULL;
2106 bool olda = lookup_attribute ("gnu_inline",
2107 DECL_ATTRIBUTES (olddecl)) != NULL;
2108 if (newa != olda)
2110 error_at (input_location, "%<gnu_inline%> attribute present on %q+D",
2111 newa ? newdecl : olddecl);
2112 error_at (DECL_SOURCE_LOCATION (newa ? olddecl : newdecl),
2113 "but not here");
2117 else if (VAR_P (newdecl))
2119 /* Only variables can be thread-local, and all declarations must
2120 agree on this property. */
2121 if (C_DECL_THREADPRIVATE_P (olddecl) && !DECL_THREAD_LOCAL_P (newdecl))
2123 /* Nothing to check. Since OLDDECL is marked threadprivate
2124 and NEWDECL does not have a thread-local attribute, we
2125 will merge the threadprivate attribute into NEWDECL. */
2128 else if (DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl))
2130 if (DECL_THREAD_LOCAL_P (newdecl))
2131 error ("thread-local declaration of %q+D follows "
2132 "non-thread-local declaration", newdecl);
2133 else
2134 error ("non-thread-local declaration of %q+D follows "
2135 "thread-local declaration", newdecl);
2137 locate_old_decl (olddecl);
2138 return false;
2141 /* Multiple initialized definitions are not allowed (6.9p3,5). */
2142 if (DECL_INITIAL (newdecl) && DECL_INITIAL (olddecl))
2144 error ("redefinition of %q+D", newdecl);
2145 locate_old_decl (olddecl);
2146 return false;
2149 /* Objects declared at file scope: if the first declaration had
2150 external linkage (even if it was an external reference) the
2151 second must have external linkage as well, or the behavior is
2152 undefined. If the first declaration had internal linkage, then
2153 the second must too, or else be an external reference (in which
2154 case the composite declaration still has internal linkage).
2155 As for function declarations, we warn about the static-then-
2156 extern case only for -Wtraditional. See generally 6.2.2p3-5,7. */
2157 if (DECL_FILE_SCOPE_P (newdecl)
2158 && TREE_PUBLIC (newdecl) != TREE_PUBLIC (olddecl))
2160 if (DECL_EXTERNAL (newdecl))
2162 if (!DECL_FILE_SCOPE_P (olddecl))
2164 error ("extern declaration of %q+D follows "
2165 "declaration with no linkage", newdecl);
2166 locate_old_decl (olddecl);
2167 return false;
2169 else if (warn_traditional)
2171 warned |= warning (OPT_Wtraditional,
2172 "non-static declaration of %q+D "
2173 "follows static declaration", newdecl);
2176 else
2178 if (TREE_PUBLIC (newdecl))
2179 error ("non-static declaration of %q+D follows "
2180 "static declaration", newdecl);
2181 else
2182 error ("static declaration of %q+D follows "
2183 "non-static declaration", newdecl);
2185 locate_old_decl (olddecl);
2186 return false;
2189 /* Two objects with the same name declared at the same block
2190 scope must both be external references (6.7p3). */
2191 else if (!DECL_FILE_SCOPE_P (newdecl))
2193 if (DECL_EXTERNAL (newdecl))
2195 /* Extern with initializer at block scope, which will
2196 already have received an error. */
2198 else if (DECL_EXTERNAL (olddecl))
2200 error ("declaration of %q+D with no linkage follows "
2201 "extern declaration", newdecl);
2202 locate_old_decl (olddecl);
2204 else
2206 error ("redeclaration of %q+D with no linkage", newdecl);
2207 locate_old_decl (olddecl);
2210 return false;
2213 /* C++ does not permit a decl to appear multiple times at file
2214 scope. */
2215 if (warn_cxx_compat
2216 && DECL_FILE_SCOPE_P (newdecl)
2217 && !DECL_EXTERNAL (newdecl)
2218 && !DECL_EXTERNAL (olddecl))
2219 warned |= warning_at (DECL_SOURCE_LOCATION (newdecl),
2220 OPT_Wc___compat,
2221 ("duplicate declaration of %qD is "
2222 "invalid in C++"),
2223 newdecl);
2226 /* warnings */
2227 /* All decls must agree on a visibility. */
2228 if (CODE_CONTAINS_STRUCT (TREE_CODE (newdecl), TS_DECL_WITH_VIS)
2229 && DECL_VISIBILITY_SPECIFIED (newdecl) && DECL_VISIBILITY_SPECIFIED (olddecl)
2230 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2232 warned |= warning (0, "redeclaration of %q+D with different visibility "
2233 "(old visibility preserved)", newdecl);
2236 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2237 warned |= diagnose_mismatched_attributes (olddecl, newdecl);
2238 else /* PARM_DECL, VAR_DECL */
2240 /* Redeclaration of a parameter is a constraint violation (this is
2241 not explicitly stated, but follows from C99 6.7p3 [no more than
2242 one declaration of the same identifier with no linkage in the
2243 same scope, except type tags] and 6.2.2p6 [parameters have no
2244 linkage]). We must check for a forward parameter declaration,
2245 indicated by TREE_ASM_WRITTEN on the old declaration - this is
2246 an extension, the mandatory diagnostic for which is handled by
2247 mark_forward_parm_decls. */
2249 if (TREE_CODE (newdecl) == PARM_DECL
2250 && (!TREE_ASM_WRITTEN (olddecl) || TREE_ASM_WRITTEN (newdecl)))
2252 error ("redefinition of parameter %q+D", newdecl);
2253 locate_old_decl (olddecl);
2254 return false;
2258 /* Optional warning for completely redundant decls. */
2259 if (!warned && !pedwarned
2260 && warn_redundant_decls
2261 /* Don't warn about a function declaration followed by a
2262 definition. */
2263 && !(TREE_CODE (newdecl) == FUNCTION_DECL
2264 && DECL_INITIAL (newdecl) && !DECL_INITIAL (olddecl))
2265 /* Don't warn about redundant redeclarations of builtins. */
2266 && !(TREE_CODE (newdecl) == FUNCTION_DECL
2267 && !DECL_BUILT_IN (newdecl)
2268 && DECL_BUILT_IN (olddecl)
2269 && !C_DECL_DECLARED_BUILTIN (olddecl))
2270 /* Don't warn about an extern followed by a definition. */
2271 && !(DECL_EXTERNAL (olddecl) && !DECL_EXTERNAL (newdecl))
2272 /* Don't warn about forward parameter decls. */
2273 && !(TREE_CODE (newdecl) == PARM_DECL
2274 && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
2275 /* Don't warn about a variable definition following a declaration. */
2276 && !(VAR_P (newdecl)
2277 && DECL_INITIAL (newdecl) && !DECL_INITIAL (olddecl)))
2279 warned = warning (OPT_Wredundant_decls, "redundant redeclaration of %q+D",
2280 newdecl);
2283 /* Report location of previous decl/defn. */
2284 if (warned || pedwarned)
2285 locate_old_decl (olddecl);
2287 #undef DECL_EXTERN_INLINE
2289 return retval;
2292 /* Subroutine of duplicate_decls. NEWDECL has been found to be
2293 consistent with OLDDECL, but carries new information. Merge the
2294 new information into OLDDECL. This function issues no
2295 diagnostics. */
2297 static void
2298 merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
2300 bool new_is_definition = (TREE_CODE (newdecl) == FUNCTION_DECL
2301 && DECL_INITIAL (newdecl) != NULL_TREE);
2302 bool new_is_prototype = (TREE_CODE (newdecl) == FUNCTION_DECL
2303 && prototype_p (TREE_TYPE (newdecl)));
2304 bool old_is_prototype = (TREE_CODE (olddecl) == FUNCTION_DECL
2305 && prototype_p (TREE_TYPE (olddecl)));
2307 /* For real parm decl following a forward decl, rechain the old decl
2308 in its new location and clear TREE_ASM_WRITTEN (it's not a
2309 forward decl anymore). */
2310 if (TREE_CODE (newdecl) == PARM_DECL
2311 && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
2313 struct c_binding *b, **here;
2315 for (here = &current_scope->bindings; *here; here = &(*here)->prev)
2316 if ((*here)->decl == olddecl)
2317 goto found;
2318 gcc_unreachable ();
2320 found:
2321 b = *here;
2322 *here = b->prev;
2323 b->prev = current_scope->bindings;
2324 current_scope->bindings = b;
2326 TREE_ASM_WRITTEN (olddecl) = 0;
2329 DECL_ATTRIBUTES (newdecl)
2330 = targetm.merge_decl_attributes (olddecl, newdecl);
2332 /* For typedefs use the old type, as the new type's DECL_NAME points
2333 at newdecl, which will be ggc_freed. */
2334 if (TREE_CODE (newdecl) == TYPE_DECL)
2336 /* But NEWTYPE might have an attribute, honor that. */
2337 tree tem = newtype;
2338 newtype = oldtype;
2340 if (TYPE_USER_ALIGN (tem))
2342 if (TYPE_ALIGN (tem) > TYPE_ALIGN (newtype))
2343 SET_TYPE_ALIGN (newtype, TYPE_ALIGN (tem));
2344 TYPE_USER_ALIGN (newtype) = true;
2347 /* And remove the new type from the variants list. */
2348 if (TYPE_NAME (TREE_TYPE (newdecl)) == newdecl)
2350 tree remove = TREE_TYPE (newdecl);
2351 for (tree t = TYPE_MAIN_VARIANT (remove); ;
2352 t = TYPE_NEXT_VARIANT (t))
2353 if (TYPE_NEXT_VARIANT (t) == remove)
2355 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
2356 break;
2361 /* Merge the data types specified in the two decls. */
2362 TREE_TYPE (newdecl)
2363 = TREE_TYPE (olddecl)
2364 = composite_type (newtype, oldtype);
2366 /* Lay the type out, unless already done. */
2367 if (!comptypes (oldtype, TREE_TYPE (newdecl)))
2369 if (TREE_TYPE (newdecl) != error_mark_node)
2370 layout_type (TREE_TYPE (newdecl));
2371 if (TREE_CODE (newdecl) != FUNCTION_DECL
2372 && TREE_CODE (newdecl) != TYPE_DECL
2373 && TREE_CODE (newdecl) != CONST_DECL)
2374 layout_decl (newdecl, 0);
2376 else
2378 /* Since the type is OLDDECL's, make OLDDECL's size go with. */
2379 DECL_SIZE (newdecl) = DECL_SIZE (olddecl);
2380 DECL_SIZE_UNIT (newdecl) = DECL_SIZE_UNIT (olddecl);
2381 SET_DECL_MODE (newdecl, DECL_MODE (olddecl));
2382 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2384 SET_DECL_ALIGN (newdecl, DECL_ALIGN (olddecl));
2385 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2389 /* Keep the old rtl since we can safely use it. */
2390 if (HAS_RTL_P (olddecl))
2391 COPY_DECL_RTL (olddecl, newdecl);
2393 /* Merge the type qualifiers. */
2394 if (TREE_READONLY (newdecl))
2395 TREE_READONLY (olddecl) = 1;
2397 if (TREE_THIS_VOLATILE (newdecl))
2398 TREE_THIS_VOLATILE (olddecl) = 1;
2400 /* Merge deprecatedness. */
2401 if (TREE_DEPRECATED (newdecl))
2402 TREE_DEPRECATED (olddecl) = 1;
2404 /* If a decl is in a system header and the other isn't, keep the one on the
2405 system header. Otherwise, keep source location of definition rather than
2406 declaration and of prototype rather than non-prototype unless that
2407 prototype is built-in. */
2408 if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS)
2409 && DECL_IN_SYSTEM_HEADER (olddecl)
2410 && !DECL_IN_SYSTEM_HEADER (newdecl) )
2411 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2412 else if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS)
2413 && DECL_IN_SYSTEM_HEADER (newdecl)
2414 && !DECL_IN_SYSTEM_HEADER (olddecl))
2415 DECL_SOURCE_LOCATION (olddecl) = DECL_SOURCE_LOCATION (newdecl);
2416 else if ((DECL_INITIAL (newdecl) == NULL_TREE
2417 && DECL_INITIAL (olddecl) != NULL_TREE)
2418 || (old_is_prototype && !new_is_prototype
2419 && !C_DECL_BUILTIN_PROTOTYPE (olddecl)))
2420 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2422 /* Merge the initialization information. */
2423 if (DECL_INITIAL (newdecl) == NULL_TREE)
2424 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2426 /* Merge the threadprivate attribute. */
2427 if (VAR_P (olddecl) && C_DECL_THREADPRIVATE_P (olddecl))
2428 C_DECL_THREADPRIVATE_P (newdecl) = 1;
2430 if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS))
2432 /* Copy the assembler name.
2433 Currently, it can only be defined in the prototype. */
2434 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2436 /* Use visibility of whichever declaration had it specified */
2437 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2439 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2440 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2443 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2445 DECL_STATIC_CONSTRUCTOR(newdecl) |= DECL_STATIC_CONSTRUCTOR(olddecl);
2446 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
2447 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2448 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2449 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2450 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
2451 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
2452 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2453 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
2454 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
2455 DECL_IS_NOVOPS (newdecl) |= DECL_IS_NOVOPS (olddecl);
2458 /* Merge the storage class information. */
2459 merge_weak (newdecl, olddecl);
2461 /* For functions, static overrides non-static. */
2462 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2464 TREE_PUBLIC (newdecl) &= TREE_PUBLIC (olddecl);
2465 /* This is since we don't automatically
2466 copy the attributes of NEWDECL into OLDDECL. */
2467 TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
2468 /* If this clears `static', clear it in the identifier too. */
2469 if (!TREE_PUBLIC (olddecl))
2470 TREE_PUBLIC (DECL_NAME (olddecl)) = 0;
2474 /* In c99, 'extern' declaration before (or after) 'inline' means this
2475 function is not DECL_EXTERNAL, unless 'gnu_inline' attribute
2476 is present. */
2477 if (TREE_CODE (newdecl) == FUNCTION_DECL
2478 && !flag_gnu89_inline
2479 && (DECL_DECLARED_INLINE_P (newdecl)
2480 || DECL_DECLARED_INLINE_P (olddecl))
2481 && (!DECL_DECLARED_INLINE_P (newdecl)
2482 || !DECL_DECLARED_INLINE_P (olddecl)
2483 || !DECL_EXTERNAL (olddecl))
2484 && DECL_EXTERNAL (newdecl)
2485 && !lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (newdecl))
2486 && !current_function_decl)
2487 DECL_EXTERNAL (newdecl) = 0;
2489 /* An inline definition following a static declaration is not
2490 DECL_EXTERNAL. */
2491 if (new_is_definition
2492 && (DECL_DECLARED_INLINE_P (newdecl)
2493 || DECL_DECLARED_INLINE_P (olddecl))
2494 && !TREE_PUBLIC (olddecl))
2495 DECL_EXTERNAL (newdecl) = 0;
2497 if (DECL_EXTERNAL (newdecl))
2499 TREE_STATIC (newdecl) = TREE_STATIC (olddecl);
2500 DECL_EXTERNAL (newdecl) = DECL_EXTERNAL (olddecl);
2502 /* An extern decl does not override previous storage class. */
2503 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2504 if (!DECL_EXTERNAL (newdecl))
2506 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
2507 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2510 else
2512 TREE_STATIC (olddecl) = TREE_STATIC (newdecl);
2513 TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
2516 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2518 /* If we're redefining a function previously defined as extern
2519 inline, make sure we emit debug info for the inline before we
2520 throw it away, in case it was inlined into a function that
2521 hasn't been written out yet. */
2522 if (new_is_definition && DECL_INITIAL (olddecl))
2523 /* The new defn must not be inline. */
2524 DECL_UNINLINABLE (newdecl) = 1;
2525 else
2527 /* If either decl says `inline', this fn is inline, unless
2528 its definition was passed already. */
2529 if (DECL_DECLARED_INLINE_P (newdecl)
2530 || DECL_DECLARED_INLINE_P (olddecl))
2531 DECL_DECLARED_INLINE_P (newdecl) = 1;
2533 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2534 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2536 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2537 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2538 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2539 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2542 if (DECL_BUILT_IN (olddecl))
2544 /* If redeclaring a builtin function, it stays built in.
2545 But it gets tagged as having been declared. */
2546 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2547 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2548 C_DECL_DECLARED_BUILTIN (newdecl) = 1;
2549 if (new_is_prototype)
2551 C_DECL_BUILTIN_PROTOTYPE (newdecl) = 0;
2552 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2554 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2555 switch (fncode)
2557 /* If a compatible prototype of these builtin functions
2558 is seen, assume the runtime implements it with the
2559 expected semantics. */
2560 case BUILT_IN_STPCPY:
2561 if (builtin_decl_explicit_p (fncode))
2562 set_builtin_decl_implicit_p (fncode, true);
2563 break;
2564 default:
2565 if (builtin_decl_explicit_p (fncode))
2566 set_builtin_decl_declared_p (fncode, true);
2567 break;
2571 else
2572 C_DECL_BUILTIN_PROTOTYPE (newdecl)
2573 = C_DECL_BUILTIN_PROTOTYPE (olddecl);
2576 /* Preserve function specific target and optimization options */
2577 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2578 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2579 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2580 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2582 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2583 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2584 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2585 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2587 /* Also preserve various other info from the definition. */
2588 if (!new_is_definition)
2590 tree t;
2591 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2592 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2593 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2594 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2595 DECL_ARGUMENTS (newdecl) = copy_list (DECL_ARGUMENTS (olddecl));
2596 for (t = DECL_ARGUMENTS (newdecl); t ; t = DECL_CHAIN (t))
2597 DECL_CONTEXT (t) = newdecl;
2599 /* See if we've got a function to instantiate from. */
2600 if (DECL_SAVED_TREE (olddecl))
2601 DECL_ABSTRACT_ORIGIN (newdecl)
2602 = DECL_ABSTRACT_ORIGIN (olddecl);
2606 /* Merge the USED information. */
2607 if (TREE_USED (olddecl))
2608 TREE_USED (newdecl) = 1;
2609 else if (TREE_USED (newdecl))
2610 TREE_USED (olddecl) = 1;
2611 if (VAR_P (olddecl) || TREE_CODE (olddecl) == PARM_DECL)
2612 DECL_READ_P (newdecl) |= DECL_READ_P (olddecl);
2613 if (DECL_PRESERVE_P (olddecl))
2614 DECL_PRESERVE_P (newdecl) = 1;
2615 else if (DECL_PRESERVE_P (newdecl))
2616 DECL_PRESERVE_P (olddecl) = 1;
2618 /* Merge DECL_COMMON */
2619 if (VAR_P (olddecl) && VAR_P (newdecl)
2620 && !lookup_attribute ("common", DECL_ATTRIBUTES (newdecl))
2621 && !lookup_attribute ("nocommon", DECL_ATTRIBUTES (newdecl)))
2622 DECL_COMMON (newdecl) = DECL_COMMON (newdecl) && DECL_COMMON (olddecl);
2624 /* Copy most of the decl-specific fields of NEWDECL into OLDDECL.
2625 But preserve OLDDECL's DECL_UID, DECL_CONTEXT and
2626 DECL_ARGUMENTS (if appropriate). */
2628 unsigned olddecl_uid = DECL_UID (olddecl);
2629 tree olddecl_context = DECL_CONTEXT (olddecl);
2630 tree olddecl_arguments = NULL;
2631 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2632 olddecl_arguments = DECL_ARGUMENTS (olddecl);
2634 memcpy ((char *) olddecl + sizeof (struct tree_common),
2635 (char *) newdecl + sizeof (struct tree_common),
2636 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2637 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2638 switch (TREE_CODE (olddecl))
2640 case FUNCTION_DECL:
2641 case VAR_DECL:
2643 struct symtab_node *snode = olddecl->decl_with_vis.symtab_node;
2645 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2646 (char *) newdecl + sizeof (struct tree_decl_common),
2647 tree_code_size (TREE_CODE (olddecl)) - sizeof (struct tree_decl_common));
2648 olddecl->decl_with_vis.symtab_node = snode;
2650 if ((DECL_EXTERNAL (olddecl)
2651 || TREE_PUBLIC (olddecl)
2652 || TREE_STATIC (olddecl))
2653 && DECL_SECTION_NAME (newdecl) != NULL)
2654 set_decl_section_name (olddecl, DECL_SECTION_NAME (newdecl));
2656 /* This isn't quite correct for something like
2657 int __thread x attribute ((tls_model ("local-exec")));
2658 extern int __thread x;
2659 as we'll lose the "local-exec" model. */
2660 if (VAR_P (olddecl) && DECL_THREAD_LOCAL_P (newdecl))
2661 set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
2662 break;
2665 case FIELD_DECL:
2666 case PARM_DECL:
2667 case LABEL_DECL:
2668 case RESULT_DECL:
2669 case CONST_DECL:
2670 case TYPE_DECL:
2671 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2672 (char *) newdecl + sizeof (struct tree_decl_common),
2673 tree_code_size (TREE_CODE (olddecl)) - sizeof (struct tree_decl_common));
2674 break;
2676 default:
2678 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2679 (char *) newdecl + sizeof (struct tree_decl_common),
2680 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common));
2682 DECL_UID (olddecl) = olddecl_uid;
2683 DECL_CONTEXT (olddecl) = olddecl_context;
2684 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2685 DECL_ARGUMENTS (olddecl) = olddecl_arguments;
2688 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2689 so that encode_section_info has a chance to look at the new decl
2690 flags and attributes. */
2691 if (DECL_RTL_SET_P (olddecl)
2692 && (TREE_CODE (olddecl) == FUNCTION_DECL
2693 || (VAR_P (olddecl) && TREE_STATIC (olddecl))))
2694 make_decl_rtl (olddecl);
2697 /* Handle when a new declaration NEWDECL has the same name as an old
2698 one OLDDECL in the same binding contour. Prints an error message
2699 if appropriate.
2701 If safely possible, alter OLDDECL to look like NEWDECL, and return
2702 true. Otherwise, return false. */
2704 static bool
2705 duplicate_decls (tree newdecl, tree olddecl)
2707 tree newtype = NULL, oldtype = NULL;
2709 if (!diagnose_mismatched_decls (newdecl, olddecl, &newtype, &oldtype))
2711 /* Avoid `unused variable' and other warnings for OLDDECL. */
2712 TREE_NO_WARNING (olddecl) = 1;
2713 return false;
2716 merge_decls (newdecl, olddecl, newtype, oldtype);
2718 /* The NEWDECL will no longer be needed.
2720 Before releasing the node, be sure to remove function from symbol
2721 table that might have been inserted there to record comdat group.
2722 Be sure to however do not free DECL_STRUCT_FUNCTION because this
2723 structure is shared in between NEWDECL and OLDECL. */
2724 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2725 DECL_STRUCT_FUNCTION (newdecl) = NULL;
2726 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2728 struct symtab_node *snode = symtab_node::get (newdecl);
2729 if (snode)
2730 snode->remove ();
2732 ggc_free (newdecl);
2733 return true;
2737 /* Check whether decl-node NEW_DECL shadows an existing declaration. */
2738 static void
2739 warn_if_shadowing (tree new_decl)
2741 struct c_binding *b;
2743 /* Shadow warnings wanted? */
2744 if (!(warn_shadow
2745 || warn_shadow_local
2746 || warn_shadow_compatible_local)
2747 /* No shadow warnings for internally generated vars. */
2748 || DECL_IS_BUILTIN (new_decl)
2749 /* No shadow warnings for vars made for inlining. */
2750 || DECL_FROM_INLINE (new_decl))
2751 return;
2753 /* Is anything being shadowed? Invisible decls do not count. */
2754 for (b = I_SYMBOL_BINDING (DECL_NAME (new_decl)); b; b = b->shadowed)
2755 if (b->decl && b->decl != new_decl && !b->invisible
2756 && (b->decl == error_mark_node
2757 || diagnostic_report_warnings_p (global_dc,
2758 DECL_SOURCE_LOCATION (b->decl))))
2760 tree old_decl = b->decl;
2761 bool warned = false;
2763 if (old_decl == error_mark_node)
2765 warning (OPT_Wshadow, "declaration of %q+D shadows previous "
2766 "non-variable", new_decl);
2767 break;
2769 else if (TREE_CODE (old_decl) == PARM_DECL)
2771 enum opt_code warning_code;
2773 /* If '-Wshadow=compatible-local' is specified without other
2774 -Wshadow= flags, we will warn only when the types of the
2775 shadowing variable (i.e. new_decl) and the shadowed variable
2776 (old_decl) are compatible. */
2777 if (warn_shadow)
2778 warning_code = OPT_Wshadow;
2779 else if (comptypes (TREE_TYPE (old_decl), TREE_TYPE (new_decl)))
2780 warning_code = OPT_Wshadow_compatible_local;
2781 else
2782 warning_code = OPT_Wshadow_local;
2783 warned = warning_at (DECL_SOURCE_LOCATION (new_decl), warning_code,
2784 "declaration of %qD shadows a parameter",
2785 new_decl);
2787 else if (DECL_FILE_SCOPE_P (old_decl))
2789 /* Do not warn if a variable shadows a function, unless
2790 the variable is a function or a pointer-to-function. */
2791 if (TREE_CODE (old_decl) == FUNCTION_DECL
2792 && TREE_CODE (new_decl) != FUNCTION_DECL
2793 && !FUNCTION_POINTER_TYPE_P (TREE_TYPE (new_decl)))
2794 continue;
2796 warned = warning_at (DECL_SOURCE_LOCATION (new_decl), OPT_Wshadow,
2797 "declaration of %qD shadows a global "
2798 "declaration",
2799 new_decl);
2801 else if (TREE_CODE (old_decl) == FUNCTION_DECL
2802 && DECL_BUILT_IN (old_decl))
2804 warning (OPT_Wshadow, "declaration of %q+D shadows "
2805 "a built-in function", new_decl);
2806 break;
2808 else
2810 enum opt_code warning_code;
2812 /* If '-Wshadow=compatible-local' is specified without other
2813 -Wshadow= flags, we will warn only when the types of the
2814 shadowing variable (i.e. new_decl) and the shadowed variable
2815 (old_decl) are compatible. */
2816 if (warn_shadow)
2817 warning_code = OPT_Wshadow;
2818 else if (comptypes (TREE_TYPE (old_decl), TREE_TYPE (new_decl)))
2819 warning_code = OPT_Wshadow_compatible_local;
2820 else
2821 warning_code = OPT_Wshadow_local;
2822 warned = warning_at (DECL_SOURCE_LOCATION (new_decl), warning_code,
2823 "declaration of %qD shadows a previous local",
2824 new_decl);
2827 if (warned)
2828 inform (DECL_SOURCE_LOCATION (old_decl),
2829 "shadowed declaration is here");
2831 break;
2835 /* Record a decl-node X as belonging to the current lexical scope.
2836 Check for errors (such as an incompatible declaration for the same
2837 name already seen in the same scope).
2839 Returns either X or an old decl for the same name.
2840 If an old decl is returned, it may have been smashed
2841 to agree with what X says. */
2843 tree
2844 pushdecl (tree x)
2846 tree name = DECL_NAME (x);
2847 struct c_scope *scope = current_scope;
2848 struct c_binding *b;
2849 bool nested = false;
2850 location_t locus = DECL_SOURCE_LOCATION (x);
2852 /* Must set DECL_CONTEXT for everything not at file scope or
2853 DECL_FILE_SCOPE_P won't work. Local externs don't count
2854 unless they have initializers (which generate code). */
2855 if (current_function_decl
2856 && (!VAR_OR_FUNCTION_DECL_P (x)
2857 || DECL_INITIAL (x) || !DECL_EXTERNAL (x)))
2858 DECL_CONTEXT (x) = current_function_decl;
2860 /* Anonymous decls are just inserted in the scope. */
2861 if (!name)
2863 bind (name, x, scope, /*invisible=*/false, /*nested=*/false,
2864 locus);
2865 return x;
2868 /* First, see if there is another declaration with the same name in
2869 the current scope. If there is, duplicate_decls may do all the
2870 work for us. If duplicate_decls returns false, that indicates
2871 two incompatible decls in the same scope; we are to silently
2872 replace the old one (duplicate_decls has issued all appropriate
2873 diagnostics). In particular, we should not consider possible
2874 duplicates in the external scope, or shadowing. */
2875 b = I_SYMBOL_BINDING (name);
2876 if (b && B_IN_SCOPE (b, scope))
2878 struct c_binding *b_ext, *b_use;
2879 tree type = TREE_TYPE (x);
2880 tree visdecl = b->decl;
2881 tree vistype = TREE_TYPE (visdecl);
2882 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
2883 && COMPLETE_TYPE_P (TREE_TYPE (x)))
2884 b->inner_comp = false;
2885 b_use = b;
2886 b_ext = b;
2887 /* If this is an external linkage declaration, we should check
2888 for compatibility with the type in the external scope before
2889 setting the type at this scope based on the visible
2890 information only. */
2891 if (TREE_PUBLIC (x) && TREE_PUBLIC (visdecl))
2893 while (b_ext && !B_IN_EXTERNAL_SCOPE (b_ext))
2894 b_ext = b_ext->shadowed;
2895 if (b_ext)
2897 b_use = b_ext;
2898 if (b_use->u.type)
2899 TREE_TYPE (b_use->decl) = b_use->u.type;
2902 if (duplicate_decls (x, b_use->decl))
2904 if (b_use != b)
2906 /* Save the updated type in the external scope and
2907 restore the proper type for this scope. */
2908 tree thistype;
2909 if (comptypes (vistype, type))
2910 thistype = composite_type (vistype, type);
2911 else
2912 thistype = TREE_TYPE (b_use->decl);
2913 b_use->u.type = TREE_TYPE (b_use->decl);
2914 if (TREE_CODE (b_use->decl) == FUNCTION_DECL
2915 && DECL_BUILT_IN (b_use->decl))
2916 thistype
2917 = build_type_attribute_variant (thistype,
2918 TYPE_ATTRIBUTES
2919 (b_use->u.type));
2920 TREE_TYPE (b_use->decl) = thistype;
2922 return b_use->decl;
2924 else
2925 goto skip_external_and_shadow_checks;
2928 /* All declarations with external linkage, and all external
2929 references, go in the external scope, no matter what scope is
2930 current. However, the binding in that scope is ignored for
2931 purposes of normal name lookup. A separate binding structure is
2932 created in the requested scope; this governs the normal
2933 visibility of the symbol.
2935 The binding in the externals scope is used exclusively for
2936 detecting duplicate declarations of the same object, no matter
2937 what scope they are in; this is what we do here. (C99 6.2.7p2:
2938 All declarations that refer to the same object or function shall
2939 have compatible type; otherwise, the behavior is undefined.) */
2940 if (DECL_EXTERNAL (x) || scope == file_scope)
2942 tree type = TREE_TYPE (x);
2943 tree vistype = NULL_TREE;
2944 tree visdecl = NULL_TREE;
2945 bool type_saved = false;
2946 if (b && !B_IN_EXTERNAL_SCOPE (b)
2947 && VAR_OR_FUNCTION_DECL_P (b->decl)
2948 && DECL_FILE_SCOPE_P (b->decl))
2950 visdecl = b->decl;
2951 vistype = TREE_TYPE (visdecl);
2953 if (scope != file_scope
2954 && !DECL_IN_SYSTEM_HEADER (x))
2955 warning_at (locus, OPT_Wnested_externs,
2956 "nested extern declaration of %qD", x);
2958 while (b && !B_IN_EXTERNAL_SCOPE (b))
2960 /* If this decl might be modified, save its type. This is
2961 done here rather than when the decl is first bound
2962 because the type may change after first binding, through
2963 being completed or through attributes being added. If we
2964 encounter multiple such decls, only the first should have
2965 its type saved; the others will already have had their
2966 proper types saved and the types will not have changed as
2967 their scopes will not have been re-entered. */
2968 if (DECL_P (b->decl) && DECL_FILE_SCOPE_P (b->decl) && !type_saved)
2970 b->u.type = TREE_TYPE (b->decl);
2971 type_saved = true;
2973 if (B_IN_FILE_SCOPE (b)
2974 && VAR_P (b->decl)
2975 && TREE_STATIC (b->decl)
2976 && TREE_CODE (TREE_TYPE (b->decl)) == ARRAY_TYPE
2977 && !TYPE_DOMAIN (TREE_TYPE (b->decl))
2978 && TREE_CODE (type) == ARRAY_TYPE
2979 && TYPE_DOMAIN (type)
2980 && TYPE_MAX_VALUE (TYPE_DOMAIN (type))
2981 && !integer_zerop (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
2983 /* Array type completed in inner scope, which should be
2984 diagnosed if the completion does not have size 1 and
2985 it does not get completed in the file scope. */
2986 b->inner_comp = true;
2988 b = b->shadowed;
2991 /* If a matching external declaration has been found, set its
2992 type to the composite of all the types of that declaration.
2993 After the consistency checks, it will be reset to the
2994 composite of the visible types only. */
2995 if (b && (TREE_PUBLIC (x) || same_translation_unit_p (x, b->decl))
2996 && b->u.type)
2997 TREE_TYPE (b->decl) = b->u.type;
2999 /* The point of the same_translation_unit_p check here is,
3000 we want to detect a duplicate decl for a construct like
3001 foo() { extern bar(); } ... static bar(); but not if
3002 they are in different translation units. In any case,
3003 the static does not go in the externals scope. */
3004 if (b
3005 && (TREE_PUBLIC (x) || same_translation_unit_p (x, b->decl))
3006 && duplicate_decls (x, b->decl))
3008 tree thistype;
3009 if (vistype)
3011 if (comptypes (vistype, type))
3012 thistype = composite_type (vistype, type);
3013 else
3014 thistype = TREE_TYPE (b->decl);
3016 else
3017 thistype = type;
3018 b->u.type = TREE_TYPE (b->decl);
3019 if (TREE_CODE (b->decl) == FUNCTION_DECL && DECL_BUILT_IN (b->decl))
3020 thistype
3021 = build_type_attribute_variant (thistype,
3022 TYPE_ATTRIBUTES (b->u.type));
3023 TREE_TYPE (b->decl) = thistype;
3024 bind (name, b->decl, scope, /*invisible=*/false, /*nested=*/true,
3025 locus);
3026 return b->decl;
3028 else if (TREE_PUBLIC (x))
3030 if (visdecl && !b && duplicate_decls (x, visdecl))
3032 /* An external declaration at block scope referring to a
3033 visible entity with internal linkage. The composite
3034 type will already be correct for this scope, so we
3035 just need to fall through to make the declaration in
3036 this scope. */
3037 nested = true;
3038 x = visdecl;
3040 else
3042 bind (name, x, external_scope, /*invisible=*/true,
3043 /*nested=*/false, locus);
3044 nested = true;
3049 if (TREE_CODE (x) != PARM_DECL)
3050 warn_if_shadowing (x);
3052 skip_external_and_shadow_checks:
3053 if (TREE_CODE (x) == TYPE_DECL)
3055 /* So this is a typedef, set its underlying type. */
3056 set_underlying_type (x);
3058 /* If X is a typedef defined in the current function, record it
3059 for the purpose of implementing the -Wunused-local-typedefs
3060 warning. */
3061 record_locally_defined_typedef (x);
3064 bind (name, x, scope, /*invisible=*/false, nested, locus);
3066 /* If x's type is incomplete because it's based on a
3067 structure or union which has not yet been fully declared,
3068 attach it to that structure or union type, so we can go
3069 back and complete the variable declaration later, if the
3070 structure or union gets fully declared.
3072 If the input is erroneous, we can have error_mark in the type
3073 slot (e.g. "f(void a, ...)") - that doesn't count as an
3074 incomplete type. */
3075 if (TREE_TYPE (x) != error_mark_node
3076 && !COMPLETE_TYPE_P (TREE_TYPE (x)))
3078 tree element = TREE_TYPE (x);
3080 while (TREE_CODE (element) == ARRAY_TYPE)
3081 element = TREE_TYPE (element);
3082 element = TYPE_MAIN_VARIANT (element);
3084 if (RECORD_OR_UNION_TYPE_P (element)
3085 && (TREE_CODE (x) != TYPE_DECL
3086 || TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE)
3087 && !COMPLETE_TYPE_P (element))
3088 C_TYPE_INCOMPLETE_VARS (element)
3089 = tree_cons (NULL_TREE, x, C_TYPE_INCOMPLETE_VARS (element));
3091 return x;
3095 /* Issue a warning about implicit function declaration. ID is the function
3096 identifier, OLDDECL is a declaration of the function in a different scope,
3097 or NULL_TREE. */
3099 static void
3100 implicit_decl_warning (location_t loc, tree id, tree olddecl)
3102 if (!warn_implicit_function_declaration)
3103 return;
3105 bool warned;
3106 const char *hint = NULL;
3107 if (!olddecl)
3108 hint = lookup_name_fuzzy (id, FUZZY_LOOKUP_FUNCTION_NAME);
3110 if (flag_isoc99)
3112 if (hint)
3114 gcc_rich_location richloc (loc);
3115 richloc.add_fixit_replace (hint);
3116 warned = pedwarn_at_rich_loc
3117 (&richloc, OPT_Wimplicit_function_declaration,
3118 "implicit declaration of function %qE; did you mean %qs?",
3119 id, hint);
3121 else
3122 warned = pedwarn (loc, OPT_Wimplicit_function_declaration,
3123 "implicit declaration of function %qE", id);
3125 else if (hint)
3127 gcc_rich_location richloc (loc);
3128 richloc.add_fixit_replace (hint);
3129 warned = warning_at_rich_loc
3130 (&richloc, OPT_Wimplicit_function_declaration,
3131 G_("implicit declaration of function %qE; did you mean %qs?"),
3132 id, hint);
3134 else
3135 warned = warning_at (loc, OPT_Wimplicit_function_declaration,
3136 G_("implicit declaration of function %qE"), id);
3138 if (olddecl && warned)
3139 locate_old_decl (olddecl);
3142 /* This function represents mapping of a function code FCODE
3143 to its respective header. */
3145 static const char *
3146 header_for_builtin_fn (enum built_in_function fcode)
3148 switch (fcode)
3150 CASE_FLT_FN (BUILT_IN_ACOS):
3151 CASE_FLT_FN (BUILT_IN_ACOSH):
3152 CASE_FLT_FN (BUILT_IN_ASIN):
3153 CASE_FLT_FN (BUILT_IN_ASINH):
3154 CASE_FLT_FN (BUILT_IN_ATAN):
3155 CASE_FLT_FN (BUILT_IN_ATANH):
3156 CASE_FLT_FN (BUILT_IN_ATAN2):
3157 CASE_FLT_FN (BUILT_IN_CBRT):
3158 CASE_FLT_FN (BUILT_IN_CEIL):
3159 CASE_FLT_FN (BUILT_IN_COPYSIGN):
3160 CASE_FLT_FN (BUILT_IN_COS):
3161 CASE_FLT_FN (BUILT_IN_COSH):
3162 CASE_FLT_FN (BUILT_IN_ERF):
3163 CASE_FLT_FN (BUILT_IN_ERFC):
3164 CASE_FLT_FN (BUILT_IN_EXP):
3165 CASE_FLT_FN (BUILT_IN_EXP2):
3166 CASE_FLT_FN (BUILT_IN_EXPM1):
3167 CASE_FLT_FN (BUILT_IN_FABS):
3168 CASE_FLT_FN (BUILT_IN_FDIM):
3169 CASE_FLT_FN (BUILT_IN_FLOOR):
3170 CASE_FLT_FN (BUILT_IN_FMA):
3171 CASE_FLT_FN (BUILT_IN_FMAX):
3172 CASE_FLT_FN (BUILT_IN_FMIN):
3173 CASE_FLT_FN (BUILT_IN_FMOD):
3174 CASE_FLT_FN (BUILT_IN_FREXP):
3175 CASE_FLT_FN (BUILT_IN_HYPOT):
3176 CASE_FLT_FN (BUILT_IN_ILOGB):
3177 CASE_FLT_FN (BUILT_IN_LDEXP):
3178 CASE_FLT_FN (BUILT_IN_LGAMMA):
3179 CASE_FLT_FN (BUILT_IN_LLRINT):
3180 CASE_FLT_FN (BUILT_IN_LLROUND):
3181 CASE_FLT_FN (BUILT_IN_LOG):
3182 CASE_FLT_FN (BUILT_IN_LOG10):
3183 CASE_FLT_FN (BUILT_IN_LOG1P):
3184 CASE_FLT_FN (BUILT_IN_LOG2):
3185 CASE_FLT_FN (BUILT_IN_LOGB):
3186 CASE_FLT_FN (BUILT_IN_LRINT):
3187 CASE_FLT_FN (BUILT_IN_LROUND):
3188 CASE_FLT_FN (BUILT_IN_MODF):
3189 CASE_FLT_FN (BUILT_IN_NAN):
3190 CASE_FLT_FN (BUILT_IN_NEARBYINT):
3191 CASE_FLT_FN (BUILT_IN_NEXTAFTER):
3192 CASE_FLT_FN (BUILT_IN_NEXTTOWARD):
3193 CASE_FLT_FN (BUILT_IN_POW):
3194 CASE_FLT_FN (BUILT_IN_REMAINDER):
3195 CASE_FLT_FN (BUILT_IN_REMQUO):
3196 CASE_FLT_FN (BUILT_IN_RINT):
3197 CASE_FLT_FN (BUILT_IN_ROUND):
3198 CASE_FLT_FN (BUILT_IN_SCALBLN):
3199 CASE_FLT_FN (BUILT_IN_SCALBN):
3200 CASE_FLT_FN (BUILT_IN_SIN):
3201 CASE_FLT_FN (BUILT_IN_SINH):
3202 CASE_FLT_FN (BUILT_IN_SINCOS):
3203 CASE_FLT_FN (BUILT_IN_SQRT):
3204 CASE_FLT_FN (BUILT_IN_TAN):
3205 CASE_FLT_FN (BUILT_IN_TANH):
3206 CASE_FLT_FN (BUILT_IN_TGAMMA):
3207 CASE_FLT_FN (BUILT_IN_TRUNC):
3208 case BUILT_IN_ISINF:
3209 case BUILT_IN_ISNAN:
3210 return "<math.h>";
3211 CASE_FLT_FN (BUILT_IN_CABS):
3212 CASE_FLT_FN (BUILT_IN_CACOS):
3213 CASE_FLT_FN (BUILT_IN_CACOSH):
3214 CASE_FLT_FN (BUILT_IN_CARG):
3215 CASE_FLT_FN (BUILT_IN_CASIN):
3216 CASE_FLT_FN (BUILT_IN_CASINH):
3217 CASE_FLT_FN (BUILT_IN_CATAN):
3218 CASE_FLT_FN (BUILT_IN_CATANH):
3219 CASE_FLT_FN (BUILT_IN_CCOS):
3220 CASE_FLT_FN (BUILT_IN_CCOSH):
3221 CASE_FLT_FN (BUILT_IN_CEXP):
3222 CASE_FLT_FN (BUILT_IN_CIMAG):
3223 CASE_FLT_FN (BUILT_IN_CLOG):
3224 CASE_FLT_FN (BUILT_IN_CONJ):
3225 CASE_FLT_FN (BUILT_IN_CPOW):
3226 CASE_FLT_FN (BUILT_IN_CPROJ):
3227 CASE_FLT_FN (BUILT_IN_CREAL):
3228 CASE_FLT_FN (BUILT_IN_CSIN):
3229 CASE_FLT_FN (BUILT_IN_CSINH):
3230 CASE_FLT_FN (BUILT_IN_CSQRT):
3231 CASE_FLT_FN (BUILT_IN_CTAN):
3232 CASE_FLT_FN (BUILT_IN_CTANH):
3233 return "<complex.h>";
3234 case BUILT_IN_MEMCHR:
3235 case BUILT_IN_MEMCMP:
3236 case BUILT_IN_MEMCPY:
3237 case BUILT_IN_MEMMOVE:
3238 case BUILT_IN_MEMSET:
3239 case BUILT_IN_STRCAT:
3240 case BUILT_IN_STRCHR:
3241 case BUILT_IN_STRCMP:
3242 case BUILT_IN_STRCPY:
3243 case BUILT_IN_STRCSPN:
3244 case BUILT_IN_STRLEN:
3245 case BUILT_IN_STRNCAT:
3246 case BUILT_IN_STRNCMP:
3247 case BUILT_IN_STRNCPY:
3248 case BUILT_IN_STRPBRK:
3249 case BUILT_IN_STRRCHR:
3250 case BUILT_IN_STRSPN:
3251 case BUILT_IN_STRSTR:
3252 return "<string.h>";
3253 case BUILT_IN_FPRINTF:
3254 case BUILT_IN_PUTC:
3255 case BUILT_IN_FPUTC:
3256 case BUILT_IN_FPUTS:
3257 case BUILT_IN_FSCANF:
3258 case BUILT_IN_FWRITE:
3259 case BUILT_IN_PRINTF:
3260 case BUILT_IN_PUTCHAR:
3261 case BUILT_IN_PUTS:
3262 case BUILT_IN_SCANF:
3263 case BUILT_IN_SNPRINTF:
3264 case BUILT_IN_SPRINTF:
3265 case BUILT_IN_SSCANF:
3266 case BUILT_IN_VFPRINTF:
3267 case BUILT_IN_VFSCANF:
3268 case BUILT_IN_VPRINTF:
3269 case BUILT_IN_VSCANF:
3270 case BUILT_IN_VSNPRINTF:
3271 case BUILT_IN_VSPRINTF:
3272 case BUILT_IN_VSSCANF:
3273 return "<stdio.h>";
3274 case BUILT_IN_ISALNUM:
3275 case BUILT_IN_ISALPHA:
3276 case BUILT_IN_ISBLANK:
3277 case BUILT_IN_ISCNTRL:
3278 case BUILT_IN_ISDIGIT:
3279 case BUILT_IN_ISGRAPH:
3280 case BUILT_IN_ISLOWER:
3281 case BUILT_IN_ISPRINT:
3282 case BUILT_IN_ISPUNCT:
3283 case BUILT_IN_ISSPACE:
3284 case BUILT_IN_ISUPPER:
3285 case BUILT_IN_ISXDIGIT:
3286 case BUILT_IN_TOLOWER:
3287 case BUILT_IN_TOUPPER:
3288 return "<ctype.h>";
3289 case BUILT_IN_ISWALNUM:
3290 case BUILT_IN_ISWALPHA:
3291 case BUILT_IN_ISWBLANK:
3292 case BUILT_IN_ISWCNTRL:
3293 case BUILT_IN_ISWDIGIT:
3294 case BUILT_IN_ISWGRAPH:
3295 case BUILT_IN_ISWLOWER:
3296 case BUILT_IN_ISWPRINT:
3297 case BUILT_IN_ISWPUNCT:
3298 case BUILT_IN_ISWSPACE:
3299 case BUILT_IN_ISWUPPER:
3300 case BUILT_IN_ISWXDIGIT:
3301 case BUILT_IN_TOWLOWER:
3302 case BUILT_IN_TOWUPPER:
3303 return "<wctype.h>";
3304 case BUILT_IN_ABORT:
3305 case BUILT_IN_ABS:
3306 case BUILT_IN_CALLOC:
3307 case BUILT_IN_EXIT:
3308 case BUILT_IN_FREE:
3309 case BUILT_IN_LABS:
3310 case BUILT_IN_LLABS:
3311 case BUILT_IN_MALLOC:
3312 case BUILT_IN_REALLOC:
3313 case BUILT_IN__EXIT2:
3314 case BUILT_IN_ALIGNED_ALLOC:
3315 return "<stdlib.h>";
3316 case BUILT_IN_IMAXABS:
3317 return "<inttypes.h>";
3318 case BUILT_IN_STRFTIME:
3319 return "<time.h>";
3320 default:
3321 return NULL;
3325 /* Generate an implicit declaration for identifier FUNCTIONID at LOC as a
3326 function of type int (). */
3328 tree
3329 implicitly_declare (location_t loc, tree functionid)
3331 struct c_binding *b;
3332 tree decl = NULL_TREE;
3333 tree asmspec_tree;
3335 for (b = I_SYMBOL_BINDING (functionid); b; b = b->shadowed)
3337 if (B_IN_SCOPE (b, external_scope))
3339 decl = b->decl;
3340 break;
3344 if (decl)
3346 if (TREE_CODE (decl) != FUNCTION_DECL)
3347 return decl;
3349 /* FIXME: Objective-C has weird not-really-builtin functions
3350 which are supposed to be visible automatically. They wind up
3351 in the external scope because they're pushed before the file
3352 scope gets created. Catch this here and rebind them into the
3353 file scope. */
3354 if (!DECL_BUILT_IN (decl) && DECL_IS_BUILTIN (decl))
3356 bind (functionid, decl, file_scope,
3357 /*invisible=*/false, /*nested=*/true,
3358 DECL_SOURCE_LOCATION (decl));
3359 return decl;
3361 else
3363 tree newtype = default_function_type;
3364 if (b->u.type)
3365 TREE_TYPE (decl) = b->u.type;
3366 /* Implicit declaration of a function already declared
3367 (somehow) in a different scope, or as a built-in.
3368 If this is the first time this has happened, warn;
3369 then recycle the old declaration but with the new type. */
3370 if (!C_DECL_IMPLICIT (decl))
3372 implicit_decl_warning (loc, functionid, decl);
3373 C_DECL_IMPLICIT (decl) = 1;
3375 if (DECL_BUILT_IN (decl))
3377 newtype = build_type_attribute_variant (newtype,
3378 TYPE_ATTRIBUTES
3379 (TREE_TYPE (decl)));
3380 if (!comptypes (newtype, TREE_TYPE (decl)))
3382 bool warned = warning_at (loc, 0, "incompatible implicit "
3383 "declaration of built-in "
3384 "function %qD", decl);
3385 /* See if we can hint which header to include. */
3386 const char *header
3387 = header_for_builtin_fn (DECL_FUNCTION_CODE (decl));
3388 if (header != NULL && warned)
3389 inform (loc, "include %qs or provide a declaration of %qD",
3390 header, decl);
3391 newtype = TREE_TYPE (decl);
3394 else
3396 if (!comptypes (newtype, TREE_TYPE (decl)))
3398 error_at (loc, "incompatible implicit declaration of "
3399 "function %qD", decl);
3400 locate_old_decl (decl);
3403 b->u.type = TREE_TYPE (decl);
3404 TREE_TYPE (decl) = newtype;
3405 bind (functionid, decl, current_scope,
3406 /*invisible=*/false, /*nested=*/true,
3407 DECL_SOURCE_LOCATION (decl));
3408 return decl;
3412 /* Not seen before. */
3413 decl = build_decl (loc, FUNCTION_DECL, functionid, default_function_type);
3414 DECL_EXTERNAL (decl) = 1;
3415 TREE_PUBLIC (decl) = 1;
3416 C_DECL_IMPLICIT (decl) = 1;
3417 implicit_decl_warning (loc, functionid, 0);
3418 asmspec_tree = maybe_apply_renaming_pragma (decl, /*asmname=*/NULL);
3419 if (asmspec_tree)
3420 set_user_assembler_name (decl, TREE_STRING_POINTER (asmspec_tree));
3422 /* C89 says implicit declarations are in the innermost block.
3423 So we record the decl in the standard fashion. */
3424 decl = pushdecl (decl);
3426 /* No need to call objc_check_decl here - it's a function type. */
3427 rest_of_decl_compilation (decl, 0, 0);
3429 /* Write a record describing this implicit function declaration
3430 to the prototypes file (if requested). */
3431 gen_aux_info_record (decl, 0, 1, 0);
3433 /* Possibly apply some default attributes to this implicit declaration. */
3434 decl_attributes (&decl, NULL_TREE, 0);
3436 return decl;
3439 /* Issue an error message for a reference to an undeclared variable
3440 ID, including a reference to a builtin outside of function-call
3441 context. Establish a binding of the identifier to error_mark_node
3442 in an appropriate scope, which will suppress further errors for the
3443 same identifier. The error message should be given location LOC. */
3444 void
3445 undeclared_variable (location_t loc, tree id)
3447 static bool already = false;
3448 struct c_scope *scope;
3450 if (current_function_decl == NULL_TREE)
3452 const char *guessed_id = lookup_name_fuzzy (id, FUZZY_LOOKUP_NAME);
3453 if (guessed_id)
3455 gcc_rich_location richloc (loc);
3456 richloc.add_fixit_replace (guessed_id);
3457 error_at_rich_loc (&richloc,
3458 "%qE undeclared here (not in a function);"
3459 " did you mean %qs?",
3460 id, guessed_id);
3462 else
3463 error_at (loc, "%qE undeclared here (not in a function)", id);
3464 scope = current_scope;
3466 else
3468 if (!objc_diagnose_private_ivar (id))
3470 const char *guessed_id = lookup_name_fuzzy (id, FUZZY_LOOKUP_NAME);
3471 if (guessed_id)
3473 gcc_rich_location richloc (loc);
3474 richloc.add_fixit_replace (guessed_id);
3475 error_at_rich_loc
3476 (&richloc,
3477 "%qE undeclared (first use in this function);"
3478 " did you mean %qs?",
3479 id, guessed_id);
3481 else
3482 error_at (loc, "%qE undeclared (first use in this function)", id);
3484 if (!already)
3486 inform (loc, "each undeclared identifier is reported only"
3487 " once for each function it appears in");
3488 already = true;
3491 /* If we are parsing old-style parameter decls, current_function_decl
3492 will be nonnull but current_function_scope will be null. */
3493 scope = current_function_scope ? current_function_scope : current_scope;
3495 bind (id, error_mark_node, scope, /*invisible=*/false, /*nested=*/false,
3496 UNKNOWN_LOCATION);
3499 /* Subroutine of lookup_label, declare_label, define_label: construct a
3500 LABEL_DECL with all the proper frills. Also create a struct
3501 c_label_vars initialized for the current scope. */
3503 static tree
3504 make_label (location_t location, tree name, bool defining,
3505 struct c_label_vars **p_label_vars)
3507 tree label = build_decl (location, LABEL_DECL, name, void_type_node);
3508 DECL_CONTEXT (label) = current_function_decl;
3509 SET_DECL_MODE (label, VOIDmode);
3511 c_label_vars *label_vars = ggc_alloc<c_label_vars> ();
3512 label_vars->shadowed = NULL;
3513 set_spot_bindings (&label_vars->label_bindings, defining);
3514 label_vars->decls_in_scope = make_tree_vector ();
3515 label_vars->gotos = NULL;
3516 *p_label_vars = label_vars;
3518 return label;
3521 /* Get the LABEL_DECL corresponding to identifier NAME as a label.
3522 Create one if none exists so far for the current function.
3523 This is called when a label is used in a goto expression or
3524 has its address taken. */
3526 tree
3527 lookup_label (tree name)
3529 tree label;
3530 struct c_label_vars *label_vars;
3532 if (current_function_scope == 0)
3534 error ("label %qE referenced outside of any function", name);
3535 return NULL_TREE;
3538 /* Use a label already defined or ref'd with this name, but not if
3539 it is inherited from a containing function and wasn't declared
3540 using __label__. */
3541 label = I_LABEL_DECL (name);
3542 if (label && (DECL_CONTEXT (label) == current_function_decl
3543 || C_DECLARED_LABEL_FLAG (label)))
3545 /* If the label has only been declared, update its apparent
3546 location to point here, for better diagnostics if it
3547 turns out not to have been defined. */
3548 if (DECL_INITIAL (label) == NULL_TREE)
3549 DECL_SOURCE_LOCATION (label) = input_location;
3550 return label;
3553 /* No label binding for that identifier; make one. */
3554 label = make_label (input_location, name, false, &label_vars);
3556 /* Ordinary labels go in the current function scope. */
3557 bind_label (name, label, current_function_scope, label_vars);
3559 return label;
3562 /* Issue a warning about DECL for a goto statement at GOTO_LOC going
3563 to LABEL. */
3565 static void
3566 warn_about_goto (location_t goto_loc, tree label, tree decl)
3568 if (variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
3569 error_at (goto_loc,
3570 "jump into scope of identifier with variably modified type");
3571 else
3572 warning_at (goto_loc, OPT_Wjump_misses_init,
3573 "jump skips variable initialization");
3574 inform (DECL_SOURCE_LOCATION (label), "label %qD defined here", label);
3575 inform (DECL_SOURCE_LOCATION (decl), "%qD declared here", decl);
3578 /* Look up a label because of a goto statement. This is like
3579 lookup_label, but also issues any appropriate warnings. */
3581 tree
3582 lookup_label_for_goto (location_t loc, tree name)
3584 tree label;
3585 struct c_label_vars *label_vars;
3586 unsigned int ix;
3587 tree decl;
3589 label = lookup_label (name);
3590 if (label == NULL_TREE)
3591 return NULL_TREE;
3593 /* If we are jumping to a different function, we can't issue any
3594 useful warnings. */
3595 if (DECL_CONTEXT (label) != current_function_decl)
3597 gcc_assert (C_DECLARED_LABEL_FLAG (label));
3598 return label;
3601 label_vars = I_LABEL_BINDING (name)->u.label;
3603 /* If the label has not yet been defined, then push this goto on a
3604 list for possible later warnings. */
3605 if (label_vars->label_bindings.scope == NULL)
3607 c_goto_bindings *g = ggc_alloc<c_goto_bindings> ();
3609 g->loc = loc;
3610 set_spot_bindings (&g->goto_bindings, true);
3611 vec_safe_push (label_vars->gotos, g);
3612 return label;
3615 /* If there are any decls in label_vars->decls_in_scope, then this
3616 goto has missed the declaration of the decl. This happens for a
3617 case like
3618 int i = 1;
3619 lab:
3621 goto lab;
3622 Issue a warning or error. */
3623 FOR_EACH_VEC_SAFE_ELT (label_vars->decls_in_scope, ix, decl)
3624 warn_about_goto (loc, label, decl);
3626 if (label_vars->label_bindings.left_stmt_expr)
3628 error_at (loc, "jump into statement expression");
3629 inform (DECL_SOURCE_LOCATION (label), "label %qD defined here", label);
3632 return label;
3635 /* Make a label named NAME in the current function, shadowing silently
3636 any that may be inherited from containing functions or containing
3637 scopes. This is called for __label__ declarations. */
3639 tree
3640 declare_label (tree name)
3642 struct c_binding *b = I_LABEL_BINDING (name);
3643 tree label;
3644 struct c_label_vars *label_vars;
3646 /* Check to make sure that the label hasn't already been declared
3647 at this scope */
3648 if (b && B_IN_CURRENT_SCOPE (b))
3650 error ("duplicate label declaration %qE", name);
3651 locate_old_decl (b->decl);
3653 /* Just use the previous declaration. */
3654 return b->decl;
3657 label = make_label (input_location, name, false, &label_vars);
3658 C_DECLARED_LABEL_FLAG (label) = 1;
3660 /* Declared labels go in the current scope. */
3661 bind_label (name, label, current_scope, label_vars);
3663 return label;
3666 /* When we define a label, issue any appropriate warnings if there are
3667 any gotos earlier in the function which jump to this label. */
3669 static void
3670 check_earlier_gotos (tree label, struct c_label_vars* label_vars)
3672 unsigned int ix;
3673 struct c_goto_bindings *g;
3675 FOR_EACH_VEC_SAFE_ELT (label_vars->gotos, ix, g)
3677 struct c_binding *b;
3678 struct c_scope *scope;
3680 /* We have a goto to this label. The goto is going forward. In
3681 g->scope, the goto is going to skip any binding which was
3682 defined after g->bindings_in_scope. */
3683 if (g->goto_bindings.scope->has_jump_unsafe_decl)
3685 for (b = g->goto_bindings.scope->bindings;
3686 b != g->goto_bindings.bindings_in_scope;
3687 b = b->prev)
3689 if (decl_jump_unsafe (b->decl))
3690 warn_about_goto (g->loc, label, b->decl);
3694 /* We also need to warn about decls defined in any scopes
3695 between the scope of the label and the scope of the goto. */
3696 for (scope = label_vars->label_bindings.scope;
3697 scope != g->goto_bindings.scope;
3698 scope = scope->outer)
3700 gcc_assert (scope != NULL);
3701 if (scope->has_jump_unsafe_decl)
3703 if (scope == label_vars->label_bindings.scope)
3704 b = label_vars->label_bindings.bindings_in_scope;
3705 else
3706 b = scope->bindings;
3707 for (; b != NULL; b = b->prev)
3709 if (decl_jump_unsafe (b->decl))
3710 warn_about_goto (g->loc, label, b->decl);
3715 if (g->goto_bindings.stmt_exprs > 0)
3717 error_at (g->loc, "jump into statement expression");
3718 inform (DECL_SOURCE_LOCATION (label), "label %qD defined here",
3719 label);
3723 /* Now that the label is defined, we will issue warnings about
3724 subsequent gotos to this label when we see them. */
3725 vec_safe_truncate (label_vars->gotos, 0);
3726 label_vars->gotos = NULL;
3729 /* Define a label, specifying the location in the source file.
3730 Return the LABEL_DECL node for the label, if the definition is valid.
3731 Otherwise return NULL_TREE. */
3733 tree
3734 define_label (location_t location, tree name)
3736 /* Find any preexisting label with this name. It is an error
3737 if that label has already been defined in this function, or
3738 if there is a containing function with a declared label with
3739 the same name. */
3740 tree label = I_LABEL_DECL (name);
3742 if (label
3743 && ((DECL_CONTEXT (label) == current_function_decl
3744 && DECL_INITIAL (label) != NULL_TREE)
3745 || (DECL_CONTEXT (label) != current_function_decl
3746 && C_DECLARED_LABEL_FLAG (label))))
3748 error_at (location, "duplicate label %qD", label);
3749 locate_old_decl (label);
3750 return NULL_TREE;
3752 else if (label && DECL_CONTEXT (label) == current_function_decl)
3754 struct c_label_vars *label_vars = I_LABEL_BINDING (name)->u.label;
3756 /* The label has been used or declared already in this function,
3757 but not defined. Update its location to point to this
3758 definition. */
3759 DECL_SOURCE_LOCATION (label) = location;
3760 set_spot_bindings (&label_vars->label_bindings, true);
3762 /* Issue warnings as required about any goto statements from
3763 earlier in the function. */
3764 check_earlier_gotos (label, label_vars);
3766 else
3768 struct c_label_vars *label_vars;
3770 /* No label binding for that identifier; make one. */
3771 label = make_label (location, name, true, &label_vars);
3773 /* Ordinary labels go in the current function scope. */
3774 bind_label (name, label, current_function_scope, label_vars);
3777 if (!in_system_header_at (input_location) && lookup_name (name))
3778 warning_at (location, OPT_Wtraditional,
3779 "traditional C lacks a separate namespace "
3780 "for labels, identifier %qE conflicts", name);
3782 /* Mark label as having been defined. */
3783 DECL_INITIAL (label) = error_mark_node;
3784 return label;
3787 /* Get the bindings for a new switch statement. This is used to issue
3788 warnings as appropriate for jumps from the switch to case or
3789 default labels. */
3791 struct c_spot_bindings *
3792 c_get_switch_bindings (void)
3794 struct c_spot_bindings *switch_bindings;
3796 switch_bindings = XNEW (struct c_spot_bindings);
3797 set_spot_bindings (switch_bindings, true);
3798 return switch_bindings;
3801 void
3802 c_release_switch_bindings (struct c_spot_bindings *bindings)
3804 gcc_assert (bindings->stmt_exprs == 0 && !bindings->left_stmt_expr);
3805 XDELETE (bindings);
3808 /* This is called at the point of a case or default label to issue
3809 warnings about decls as needed. It returns true if it found an
3810 error, not just a warning. */
3812 bool
3813 c_check_switch_jump_warnings (struct c_spot_bindings *switch_bindings,
3814 location_t switch_loc, location_t case_loc)
3816 bool saw_error;
3817 struct c_scope *scope;
3819 saw_error = false;
3820 for (scope = current_scope;
3821 scope != switch_bindings->scope;
3822 scope = scope->outer)
3824 struct c_binding *b;
3826 gcc_assert (scope != NULL);
3828 if (!scope->has_jump_unsafe_decl)
3829 continue;
3831 for (b = scope->bindings; b != NULL; b = b->prev)
3833 if (decl_jump_unsafe (b->decl))
3835 if (variably_modified_type_p (TREE_TYPE (b->decl), NULL_TREE))
3837 saw_error = true;
3838 error_at (case_loc,
3839 ("switch jumps into scope of identifier with "
3840 "variably modified type"));
3842 else
3843 warning_at (case_loc, OPT_Wjump_misses_init,
3844 "switch jumps over variable initialization");
3845 inform (switch_loc, "switch starts here");
3846 inform (DECL_SOURCE_LOCATION (b->decl), "%qD declared here",
3847 b->decl);
3852 if (switch_bindings->stmt_exprs > 0)
3854 saw_error = true;
3855 error_at (case_loc, "switch jumps into statement expression");
3856 inform (switch_loc, "switch starts here");
3859 return saw_error;
3862 /* Given NAME, an IDENTIFIER_NODE,
3863 return the structure (or union or enum) definition for that name.
3864 If THISLEVEL_ONLY is nonzero, searches only the current_scope.
3865 CODE says which kind of type the caller wants;
3866 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
3867 If PLOC is not NULL and this returns non-null, it sets *PLOC to the
3868 location where the tag was defined.
3869 If the wrong kind of type is found, an error is reported. */
3871 static tree
3872 lookup_tag (enum tree_code code, tree name, bool thislevel_only,
3873 location_t *ploc)
3875 struct c_binding *b = I_TAG_BINDING (name);
3876 bool thislevel = false;
3878 if (!b || !b->decl)
3879 return NULL_TREE;
3881 /* We only care about whether it's in this level if
3882 thislevel_only was set or it might be a type clash. */
3883 if (thislevel_only || TREE_CODE (b->decl) != code)
3885 /* For our purposes, a tag in the external scope is the same as
3886 a tag in the file scope. (Primarily relevant to Objective-C
3887 and its builtin structure tags, which get pushed before the
3888 file scope is created.) */
3889 if (B_IN_CURRENT_SCOPE (b)
3890 || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
3891 thislevel = true;
3894 if (thislevel_only && !thislevel)
3895 return NULL_TREE;
3897 if (TREE_CODE (b->decl) != code)
3899 /* Definition isn't the kind we were looking for. */
3900 pending_invalid_xref = name;
3901 pending_invalid_xref_location = input_location;
3903 /* If in the same binding level as a declaration as a tag
3904 of a different type, this must not be allowed to
3905 shadow that tag, so give the error immediately.
3906 (For example, "struct foo; union foo;" is invalid.) */
3907 if (thislevel)
3908 pending_xref_error ();
3911 if (ploc != NULL)
3912 *ploc = b->locus;
3914 return b->decl;
3917 /* Return true if a definition exists for NAME with code CODE. */
3919 bool
3920 tag_exists_p (enum tree_code code, tree name)
3922 struct c_binding *b = I_TAG_BINDING (name);
3924 if (b == NULL || b->decl == NULL_TREE)
3925 return false;
3926 return TREE_CODE (b->decl) == code;
3929 /* Print an error message now
3930 for a recent invalid struct, union or enum cross reference.
3931 We don't print them immediately because they are not invalid
3932 when used in the `struct foo;' construct for shadowing. */
3934 void
3935 pending_xref_error (void)
3937 if (pending_invalid_xref != NULL_TREE)
3938 error_at (pending_invalid_xref_location, "%qE defined as wrong kind of tag",
3939 pending_invalid_xref);
3940 pending_invalid_xref = NULL_TREE;
3944 /* Look up NAME in the current scope and its superiors
3945 in the namespace of variables, functions and typedefs.
3946 Return a ..._DECL node of some kind representing its definition,
3947 or return NULL_TREE if it is undefined. */
3949 tree
3950 lookup_name (tree name)
3952 struct c_binding *b = I_SYMBOL_BINDING (name);
3953 if (b && !b->invisible)
3955 maybe_record_typedef_use (b->decl);
3956 return b->decl;
3958 return NULL_TREE;
3961 /* Similar to `lookup_name' but look only at the indicated scope. */
3963 static tree
3964 lookup_name_in_scope (tree name, struct c_scope *scope)
3966 struct c_binding *b;
3968 for (b = I_SYMBOL_BINDING (name); b; b = b->shadowed)
3969 if (B_IN_SCOPE (b, scope))
3970 return b->decl;
3971 return NULL_TREE;
3974 /* Look for the closest match for NAME within the currently valid
3975 scopes.
3977 This finds the identifier with the lowest Levenshtein distance to
3978 NAME. If there are multiple candidates with equal minimal distance,
3979 the first one found is returned. Scopes are searched from innermost
3980 outwards, and within a scope in reverse order of declaration, thus
3981 benefiting candidates "near" to the current scope.
3983 The function also looks for similar macro names to NAME, since a
3984 misspelled macro name will not be expanded, and hence looks like an
3985 identifier to the C frontend.
3987 It also looks for start_typename keywords, to detect "singed" vs "signed"
3988 typos. */
3990 const char *
3991 lookup_name_fuzzy (tree name, enum lookup_name_fuzzy_kind kind)
3993 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3995 best_match<tree, tree> bm (name);
3997 /* Look within currently valid scopes. */
3998 for (c_scope *scope = current_scope; scope; scope = scope->outer)
3999 for (c_binding *binding = scope->bindings; binding; binding = binding->prev)
4001 if (!binding->id || binding->invisible)
4002 continue;
4003 /* Don't use bindings from implicitly declared functions,
4004 as they were likely misspellings themselves. */
4005 if (TREE_CODE (binding->decl) == FUNCTION_DECL)
4006 if (C_DECL_IMPLICIT (binding->decl))
4007 continue;
4008 switch (kind)
4010 case FUZZY_LOOKUP_TYPENAME:
4011 if (TREE_CODE (binding->decl) != TYPE_DECL)
4012 continue;
4013 break;
4015 case FUZZY_LOOKUP_FUNCTION_NAME:
4016 if (TREE_CODE (binding->decl) != FUNCTION_DECL)
4018 /* Allow function pointers. */
4019 if ((VAR_P (binding->decl)
4020 || TREE_CODE (binding->decl) == PARM_DECL)
4021 && TREE_CODE (TREE_TYPE (binding->decl)) == POINTER_TYPE
4022 && (TREE_CODE (TREE_TYPE (TREE_TYPE (binding->decl)))
4023 == FUNCTION_TYPE))
4024 break;
4025 continue;
4027 break;
4029 default:
4030 break;
4032 bm.consider (binding->id);
4035 /* Consider macros: if the user misspelled a macro name e.g. "SOME_MACRO"
4037 x = SOME_OTHER_MACRO (y);
4038 then "SOME_OTHER_MACRO" will survive to the frontend and show up
4039 as a misspelled identifier.
4041 Use the best distance so far so that a candidate is only set if
4042 a macro is better than anything so far. This allows early rejection
4043 (without calculating the edit distance) of macro names that must have
4044 distance >= bm.get_best_distance (), and means that we only get a
4045 non-NULL result for best_macro_match if it's better than any of
4046 the identifiers already checked, which avoids needless creation
4047 of identifiers for macro hashnodes. */
4048 best_macro_match bmm (name, bm.get_best_distance (), parse_in);
4049 cpp_hashnode *best_macro = bmm.get_best_meaningful_candidate ();
4050 /* If a macro is the closest so far to NAME, use it, creating an
4051 identifier tree node for it. */
4052 if (best_macro)
4054 const char *id = (const char *)best_macro->ident.str;
4055 tree macro_as_identifier
4056 = get_identifier_with_length (id, best_macro->ident.len);
4057 bm.set_best_so_far (macro_as_identifier,
4058 bmm.get_best_distance (),
4059 bmm.get_best_candidate_length ());
4062 /* Try the "start_typename" keywords to detect
4063 "singed" vs "signed" typos. */
4064 if (kind == FUZZY_LOOKUP_TYPENAME)
4066 for (unsigned i = 0; i < num_c_common_reswords; i++)
4068 const c_common_resword *resword = &c_common_reswords[i];
4069 if (!c_keyword_starts_typename (resword->rid))
4070 continue;
4071 tree resword_identifier = ridpointers [resword->rid];
4072 if (!resword_identifier)
4073 continue;
4074 gcc_assert (TREE_CODE (resword_identifier) == IDENTIFIER_NODE);
4075 bm.consider (resword_identifier);
4079 tree best = bm.get_best_meaningful_candidate ();
4080 if (best)
4081 return IDENTIFIER_POINTER (best);
4082 else
4083 return NULL;
4087 /* Create the predefined scalar types of C,
4088 and some nodes representing standard constants (0, 1, (void *) 0).
4089 Initialize the global scope.
4090 Make definitions for built-in primitive functions. */
4092 void
4093 c_init_decl_processing (void)
4095 location_t save_loc = input_location;
4097 /* Initialize reserved words for parser. */
4098 c_parse_init ();
4100 current_function_decl = NULL_TREE;
4102 gcc_obstack_init (&parser_obstack);
4104 /* Make the externals scope. */
4105 push_scope ();
4106 external_scope = current_scope;
4108 /* Declarations from c_common_nodes_and_builtins must not be associated
4109 with this input file, lest we get differences between using and not
4110 using preprocessed headers. */
4111 input_location = BUILTINS_LOCATION;
4113 c_common_nodes_and_builtins ();
4115 /* In C, comparisons and TRUTH_* expressions have type int. */
4116 truthvalue_type_node = integer_type_node;
4117 truthvalue_true_node = integer_one_node;
4118 truthvalue_false_node = integer_zero_node;
4120 /* Even in C99, which has a real boolean type. */
4121 pushdecl (build_decl (UNKNOWN_LOCATION, TYPE_DECL, get_identifier ("_Bool"),
4122 boolean_type_node));
4124 input_location = save_loc;
4126 make_fname_decl = c_make_fname_decl;
4127 start_fname_decls ();
4130 /* Create the VAR_DECL at LOC for __FUNCTION__ etc. ID is the name to
4131 give the decl, NAME is the initialization string and TYPE_DEP
4132 indicates whether NAME depended on the type of the function. As we
4133 don't yet implement delayed emission of static data, we mark the
4134 decl as emitted so it is not placed in the output. Anything using
4135 it must therefore pull out the STRING_CST initializer directly.
4136 FIXME. */
4138 static tree
4139 c_make_fname_decl (location_t loc, tree id, int type_dep)
4141 const char *name = fname_as_string (type_dep);
4142 tree decl, type, init;
4143 size_t length = strlen (name);
4145 type = build_array_type (char_type_node,
4146 build_index_type (size_int (length)));
4147 type = c_build_qualified_type (type, TYPE_QUAL_CONST);
4149 decl = build_decl (loc, VAR_DECL, id, type);
4151 TREE_STATIC (decl) = 1;
4152 TREE_READONLY (decl) = 1;
4153 DECL_ARTIFICIAL (decl) = 1;
4155 init = build_string (length + 1, name);
4156 free (CONST_CAST (char *, name));
4157 TREE_TYPE (init) = type;
4158 DECL_INITIAL (decl) = init;
4160 TREE_USED (decl) = 1;
4162 if (current_function_decl
4163 /* For invalid programs like this:
4165 void foo()
4166 const char* p = __FUNCTION__;
4168 the __FUNCTION__ is believed to appear in K&R style function
4169 parameter declarator. In that case we still don't have
4170 function_scope. */
4171 && current_function_scope)
4173 DECL_CONTEXT (decl) = current_function_decl;
4174 bind (id, decl, current_function_scope,
4175 /*invisible=*/false, /*nested=*/false, UNKNOWN_LOCATION);
4178 finish_decl (decl, loc, init, NULL_TREE, NULL_TREE);
4180 return decl;
4183 tree
4184 c_builtin_function (tree decl)
4186 tree type = TREE_TYPE (decl);
4187 tree id = DECL_NAME (decl);
4189 const char *name = IDENTIFIER_POINTER (id);
4190 C_DECL_BUILTIN_PROTOTYPE (decl) = prototype_p (type);
4192 /* Should never be called on a symbol with a preexisting meaning. */
4193 gcc_assert (!I_SYMBOL_BINDING (id));
4195 bind (id, decl, external_scope, /*invisible=*/true, /*nested=*/false,
4196 UNKNOWN_LOCATION);
4198 /* Builtins in the implementation namespace are made visible without
4199 needing to be explicitly declared. See push_file_scope. */
4200 if (name[0] == '_' && (name[1] == '_' || ISUPPER (name[1])))
4202 DECL_CHAIN (decl) = visible_builtins;
4203 visible_builtins = decl;
4206 return decl;
4209 tree
4210 c_builtin_function_ext_scope (tree decl)
4212 tree type = TREE_TYPE (decl);
4213 tree id = DECL_NAME (decl);
4215 const char *name = IDENTIFIER_POINTER (id);
4216 C_DECL_BUILTIN_PROTOTYPE (decl) = prototype_p (type);
4218 if (external_scope)
4219 bind (id, decl, external_scope, /*invisible=*/false, /*nested=*/false,
4220 UNKNOWN_LOCATION);
4222 /* Builtins in the implementation namespace are made visible without
4223 needing to be explicitly declared. See push_file_scope. */
4224 if (name[0] == '_' && (name[1] == '_' || ISUPPER (name[1])))
4226 DECL_CHAIN (decl) = visible_builtins;
4227 visible_builtins = decl;
4230 return decl;
4233 /* Called when a declaration is seen that contains no names to declare.
4234 If its type is a reference to a structure, union or enum inherited
4235 from a containing scope, shadow that tag name for the current scope
4236 with a forward reference.
4237 If its type defines a new named structure or union
4238 or defines an enum, it is valid but we need not do anything here.
4239 Otherwise, it is an error. */
4241 void
4242 shadow_tag (const struct c_declspecs *declspecs)
4244 shadow_tag_warned (declspecs, 0);
4247 /* WARNED is 1 if we have done a pedwarn, 2 if we have done a warning,
4248 but no pedwarn. */
4249 void
4250 shadow_tag_warned (const struct c_declspecs *declspecs, int warned)
4252 bool found_tag = false;
4254 if (declspecs->type && !declspecs->default_int_p && !declspecs->typedef_p)
4256 tree value = declspecs->type;
4257 enum tree_code code = TREE_CODE (value);
4259 if (code == RECORD_TYPE || code == UNION_TYPE || code == ENUMERAL_TYPE)
4260 /* Used to test also that TYPE_SIZE (value) != 0.
4261 That caused warning for `struct foo;' at top level in the file. */
4263 tree name = TYPE_NAME (value);
4264 tree t;
4266 found_tag = true;
4268 if (declspecs->restrict_p)
4270 error ("invalid use of %<restrict%>");
4271 warned = 1;
4274 if (name == NULL_TREE)
4276 if (warned != 1 && code != ENUMERAL_TYPE)
4277 /* Empty unnamed enum OK */
4279 pedwarn (input_location, 0,
4280 "unnamed struct/union that defines no instances");
4281 warned = 1;
4284 else if (declspecs->typespec_kind != ctsk_tagdef
4285 && declspecs->typespec_kind != ctsk_tagfirstref
4286 && declspecs->storage_class != csc_none)
4288 if (warned != 1)
4289 pedwarn (input_location, 0,
4290 "empty declaration with storage class specifier "
4291 "does not redeclare tag");
4292 warned = 1;
4293 pending_xref_error ();
4295 else if (declspecs->typespec_kind != ctsk_tagdef
4296 && declspecs->typespec_kind != ctsk_tagfirstref
4297 && (declspecs->const_p
4298 || declspecs->volatile_p
4299 || declspecs->atomic_p
4300 || declspecs->restrict_p
4301 || declspecs->address_space))
4303 if (warned != 1)
4304 pedwarn (input_location, 0,
4305 "empty declaration with type qualifier "
4306 "does not redeclare tag");
4307 warned = 1;
4308 pending_xref_error ();
4310 else if (declspecs->typespec_kind != ctsk_tagdef
4311 && declspecs->typespec_kind != ctsk_tagfirstref
4312 && declspecs->alignas_p)
4314 if (warned != 1)
4315 pedwarn (input_location, 0,
4316 "empty declaration with %<_Alignas%> "
4317 "does not redeclare tag");
4318 warned = 1;
4319 pending_xref_error ();
4321 else
4323 pending_invalid_xref = NULL_TREE;
4324 t = lookup_tag (code, name, true, NULL);
4326 if (t == NULL_TREE)
4328 t = make_node (code);
4329 pushtag (input_location, name, t);
4333 else
4335 if (warned != 1 && !in_system_header_at (input_location))
4337 pedwarn (input_location, 0,
4338 "useless type name in empty declaration");
4339 warned = 1;
4343 else if (warned != 1 && !in_system_header_at (input_location)
4344 && declspecs->typedef_p)
4346 pedwarn (input_location, 0, "useless type name in empty declaration");
4347 warned = 1;
4350 pending_invalid_xref = NULL_TREE;
4352 if (declspecs->inline_p)
4354 error ("%<inline%> in empty declaration");
4355 warned = 1;
4358 if (declspecs->noreturn_p)
4360 error ("%<_Noreturn%> in empty declaration");
4361 warned = 1;
4364 if (current_scope == file_scope && declspecs->storage_class == csc_auto)
4366 error ("%<auto%> in file-scope empty declaration");
4367 warned = 1;
4370 if (current_scope == file_scope && declspecs->storage_class == csc_register)
4372 error ("%<register%> in file-scope empty declaration");
4373 warned = 1;
4376 if (!warned && !in_system_header_at (input_location)
4377 && declspecs->storage_class != csc_none)
4379 warning (0, "useless storage class specifier in empty declaration");
4380 warned = 2;
4383 if (!warned && !in_system_header_at (input_location) && declspecs->thread_p)
4385 warning (0, "useless %qs in empty declaration",
4386 declspecs->thread_gnu_p ? "__thread" : "_Thread_local");
4387 warned = 2;
4390 if (!warned
4391 && !in_system_header_at (input_location)
4392 && (declspecs->const_p
4393 || declspecs->volatile_p
4394 || declspecs->atomic_p
4395 || declspecs->restrict_p
4396 || declspecs->address_space))
4398 warning (0, "useless type qualifier in empty declaration");
4399 warned = 2;
4402 if (!warned && !in_system_header_at (input_location)
4403 && declspecs->alignas_p)
4405 warning (0, "useless %<_Alignas%> in empty declaration");
4406 warned = 2;
4409 if (warned != 1)
4411 if (!found_tag)
4412 pedwarn (input_location, 0, "empty declaration");
4417 /* Return the qualifiers from SPECS as a bitwise OR of TYPE_QUAL_*
4418 bits. SPECS represents declaration specifiers that the grammar
4419 only permits to contain type qualifiers and attributes. */
4422 quals_from_declspecs (const struct c_declspecs *specs)
4424 int quals = ((specs->const_p ? TYPE_QUAL_CONST : 0)
4425 | (specs->volatile_p ? TYPE_QUAL_VOLATILE : 0)
4426 | (specs->restrict_p ? TYPE_QUAL_RESTRICT : 0)
4427 | (specs->atomic_p ? TYPE_QUAL_ATOMIC : 0)
4428 | (ENCODE_QUAL_ADDR_SPACE (specs->address_space)));
4429 gcc_assert (!specs->type
4430 && !specs->decl_attr
4431 && specs->typespec_word == cts_none
4432 && specs->storage_class == csc_none
4433 && !specs->typedef_p
4434 && !specs->explicit_signed_p
4435 && !specs->deprecated_p
4436 && !specs->long_p
4437 && !specs->long_long_p
4438 && !specs->short_p
4439 && !specs->signed_p
4440 && !specs->unsigned_p
4441 && !specs->complex_p
4442 && !specs->inline_p
4443 && !specs->noreturn_p
4444 && !specs->thread_p);
4445 return quals;
4448 /* Construct an array declarator. LOC is the location of the
4449 beginning of the array (usually the opening brace). EXPR is the
4450 expression inside [], or NULL_TREE. QUALS are the type qualifiers
4451 inside the [] (to be applied to the pointer to which a parameter
4452 array is converted). STATIC_P is true if "static" is inside the
4453 [], false otherwise. VLA_UNSPEC_P is true if the array is [*], a
4454 VLA of unspecified length which is nevertheless a complete type,
4455 false otherwise. The field for the contained declarator is left to
4456 be filled in by set_array_declarator_inner. */
4458 struct c_declarator *
4459 build_array_declarator (location_t loc,
4460 tree expr, struct c_declspecs *quals, bool static_p,
4461 bool vla_unspec_p)
4463 struct c_declarator *declarator = XOBNEW (&parser_obstack,
4464 struct c_declarator);
4465 declarator->id_loc = loc;
4466 declarator->kind = cdk_array;
4467 declarator->declarator = 0;
4468 declarator->u.array.dimen = expr;
4469 if (quals)
4471 declarator->u.array.attrs = quals->attrs;
4472 declarator->u.array.quals = quals_from_declspecs (quals);
4474 else
4476 declarator->u.array.attrs = NULL_TREE;
4477 declarator->u.array.quals = 0;
4479 declarator->u.array.static_p = static_p;
4480 declarator->u.array.vla_unspec_p = vla_unspec_p;
4481 if (static_p || quals != NULL)
4482 pedwarn_c90 (loc, OPT_Wpedantic,
4483 "ISO C90 does not support %<static%> or type "
4484 "qualifiers in parameter array declarators");
4485 if (vla_unspec_p)
4486 pedwarn_c90 (loc, OPT_Wpedantic,
4487 "ISO C90 does not support %<[*]%> array declarators");
4488 if (vla_unspec_p)
4490 if (!current_scope->parm_flag)
4492 /* C99 6.7.5.2p4 */
4493 error_at (loc, "%<[*]%> not allowed in other than "
4494 "function prototype scope");
4495 declarator->u.array.vla_unspec_p = false;
4496 return NULL;
4498 current_scope->had_vla_unspec = true;
4500 return declarator;
4503 /* Set the contained declarator of an array declarator. DECL is the
4504 declarator, as constructed by build_array_declarator; INNER is what
4505 appears on the left of the []. */
4507 struct c_declarator *
4508 set_array_declarator_inner (struct c_declarator *decl,
4509 struct c_declarator *inner)
4511 decl->declarator = inner;
4512 return decl;
4515 /* INIT is a constructor that forms DECL's initializer. If the final
4516 element initializes a flexible array field, add the size of that
4517 initializer to DECL's size. */
4519 static void
4520 add_flexible_array_elts_to_size (tree decl, tree init)
4522 tree elt, type;
4524 if (vec_safe_is_empty (CONSTRUCTOR_ELTS (init)))
4525 return;
4527 elt = CONSTRUCTOR_ELTS (init)->last ().value;
4528 type = TREE_TYPE (elt);
4529 if (TREE_CODE (type) == ARRAY_TYPE
4530 && TYPE_SIZE (type) == NULL_TREE
4531 && TYPE_DOMAIN (type) != NULL_TREE
4532 && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL_TREE)
4534 complete_array_type (&type, elt, false);
4535 DECL_SIZE (decl)
4536 = size_binop (PLUS_EXPR, DECL_SIZE (decl), TYPE_SIZE (type));
4537 DECL_SIZE_UNIT (decl)
4538 = size_binop (PLUS_EXPR, DECL_SIZE_UNIT (decl), TYPE_SIZE_UNIT (type));
4542 /* Decode a "typename", such as "int **", returning a ..._TYPE node.
4543 Set *EXPR, if EXPR not NULL, to any expression to be evaluated
4544 before the type name, and set *EXPR_CONST_OPERANDS, if
4545 EXPR_CONST_OPERANDS not NULL, to indicate whether the type name may
4546 appear in a constant expression. */
4548 tree
4549 groktypename (struct c_type_name *type_name, tree *expr,
4550 bool *expr_const_operands)
4552 tree type;
4553 tree attrs = type_name->specs->attrs;
4555 type_name->specs->attrs = NULL_TREE;
4557 type = grokdeclarator (type_name->declarator, type_name->specs, TYPENAME,
4558 false, NULL, &attrs, expr, expr_const_operands,
4559 DEPRECATED_NORMAL);
4561 /* Apply attributes. */
4562 decl_attributes (&type, attrs, 0);
4564 return type;
4567 /* Wrapper for decl_attributes that adds some implicit attributes
4568 to VAR_DECLs or FUNCTION_DECLs. */
4570 static tree
4571 c_decl_attributes (tree *node, tree attributes, int flags)
4573 /* Add implicit "omp declare target" attribute if requested. */
4574 if (current_omp_declare_target_attribute
4575 && ((VAR_P (*node) && is_global_var (*node))
4576 || TREE_CODE (*node) == FUNCTION_DECL))
4578 if (VAR_P (*node)
4579 && !lang_hooks.types.omp_mappable_type (TREE_TYPE (*node)))
4580 error ("%q+D in declare target directive does not have mappable type",
4581 *node);
4582 else
4583 attributes = tree_cons (get_identifier ("omp declare target"),
4584 NULL_TREE, attributes);
4586 return decl_attributes (node, attributes, flags);
4590 /* Decode a declarator in an ordinary declaration or data definition.
4591 This is called as soon as the type information and variable name
4592 have been parsed, before parsing the initializer if any.
4593 Here we create the ..._DECL node, fill in its type,
4594 and put it on the list of decls for the current context.
4595 The ..._DECL node is returned as the value.
4597 Exception: for arrays where the length is not specified,
4598 the type is left null, to be filled in by `finish_decl'.
4600 Function definitions do not come here; they go to start_function
4601 instead. However, external and forward declarations of functions
4602 do go through here. Structure field declarations are done by
4603 grokfield and not through here. */
4605 tree
4606 start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs,
4607 bool initialized, tree attributes)
4609 tree decl;
4610 tree tem;
4611 tree expr = NULL_TREE;
4612 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
4614 /* An object declared as __attribute__((deprecated)) suppresses
4615 warnings of uses of other deprecated items. */
4616 if (lookup_attribute ("deprecated", attributes))
4617 deprecated_state = DEPRECATED_SUPPRESS;
4619 decl = grokdeclarator (declarator, declspecs,
4620 NORMAL, initialized, NULL, &attributes, &expr, NULL,
4621 deprecated_state);
4622 if (!decl || decl == error_mark_node)
4623 return NULL_TREE;
4625 if (expr)
4626 add_stmt (fold_convert (void_type_node, expr));
4628 if (TREE_CODE (decl) != FUNCTION_DECL && MAIN_NAME_P (DECL_NAME (decl)))
4629 warning (OPT_Wmain, "%q+D is usually a function", decl);
4631 if (initialized)
4632 /* Is it valid for this decl to have an initializer at all?
4633 If not, set INITIALIZED to zero, which will indirectly
4634 tell 'finish_decl' to ignore the initializer once it is parsed. */
4635 switch (TREE_CODE (decl))
4637 case TYPE_DECL:
4638 error ("typedef %qD is initialized (use __typeof__ instead)", decl);
4639 initialized = false;
4640 break;
4642 case FUNCTION_DECL:
4643 error ("function %qD is initialized like a variable", decl);
4644 initialized = false;
4645 break;
4647 case PARM_DECL:
4648 /* DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. */
4649 error ("parameter %qD is initialized", decl);
4650 initialized = false;
4651 break;
4653 default:
4654 /* Don't allow initializations for incomplete types except for
4655 arrays which might be completed by the initialization. */
4657 /* This can happen if the array size is an undefined macro.
4658 We already gave a warning, so we don't need another one. */
4659 if (TREE_TYPE (decl) == error_mark_node)
4660 initialized = false;
4661 else if (COMPLETE_TYPE_P (TREE_TYPE (decl)))
4663 /* A complete type is ok if size is fixed. */
4665 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (decl))) != INTEGER_CST
4666 || C_DECL_VARIABLE_SIZE (decl))
4668 error ("variable-sized object may not be initialized");
4669 initialized = false;
4672 else if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE)
4674 error ("variable %qD has initializer but incomplete type", decl);
4675 initialized = false;
4677 else if (C_DECL_VARIABLE_SIZE (decl))
4679 /* Although C99 is unclear about whether incomplete arrays
4680 of VLAs themselves count as VLAs, it does not make
4681 sense to permit them to be initialized given that
4682 ordinary VLAs may not be initialized. */
4683 error ("variable-sized object may not be initialized");
4684 initialized = false;
4688 if (initialized)
4690 if (current_scope == file_scope)
4691 TREE_STATIC (decl) = 1;
4693 /* Tell 'pushdecl' this is an initialized decl
4694 even though we don't yet have the initializer expression.
4695 Also tell 'finish_decl' it may store the real initializer. */
4696 DECL_INITIAL (decl) = error_mark_node;
4699 /* If this is a function declaration, write a record describing it to the
4700 prototypes file (if requested). */
4702 if (TREE_CODE (decl) == FUNCTION_DECL)
4703 gen_aux_info_record (decl, 0, 0, prototype_p (TREE_TYPE (decl)));
4705 /* ANSI specifies that a tentative definition which is not merged with
4706 a non-tentative definition behaves exactly like a definition with an
4707 initializer equal to zero. (Section 3.7.2)
4709 -fno-common gives strict ANSI behavior, though this tends to break
4710 a large body of code that grew up without this rule.
4712 Thread-local variables are never common, since there's no entrenched
4713 body of code to break, and it allows more efficient variable references
4714 in the presence of dynamic linking. */
4716 if (VAR_P (decl)
4717 && !initialized
4718 && TREE_PUBLIC (decl)
4719 && !DECL_THREAD_LOCAL_P (decl)
4720 && !flag_no_common)
4721 DECL_COMMON (decl) = 1;
4723 /* Set attributes here so if duplicate decl, will have proper attributes. */
4724 c_decl_attributes (&decl, attributes, 0);
4726 /* Handle gnu_inline attribute. */
4727 if (declspecs->inline_p
4728 && !flag_gnu89_inline
4729 && TREE_CODE (decl) == FUNCTION_DECL
4730 && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl))
4731 || current_function_decl))
4733 if (declspecs->storage_class == csc_auto && current_scope != file_scope)
4735 else if (declspecs->storage_class != csc_static)
4736 DECL_EXTERNAL (decl) = !DECL_EXTERNAL (decl);
4739 if (TREE_CODE (decl) == FUNCTION_DECL
4740 && targetm.calls.promote_prototypes (TREE_TYPE (decl)))
4742 struct c_declarator *ce = declarator;
4744 if (ce->kind == cdk_pointer)
4745 ce = declarator->declarator;
4746 if (ce->kind == cdk_function)
4748 tree args = ce->u.arg_info->parms;
4749 for (; args; args = DECL_CHAIN (args))
4751 tree type = TREE_TYPE (args);
4752 if (type && INTEGRAL_TYPE_P (type)
4753 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
4754 DECL_ARG_TYPE (args) = c_type_promotes_to (type);
4759 if (TREE_CODE (decl) == FUNCTION_DECL
4760 && DECL_DECLARED_INLINE_P (decl)
4761 && DECL_UNINLINABLE (decl)
4762 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4763 warning (OPT_Wattributes, "inline function %q+D given attribute noinline",
4764 decl);
4766 /* C99 6.7.4p3: An inline definition of a function with external
4767 linkage shall not contain a definition of a modifiable object
4768 with static storage duration... */
4769 if (VAR_P (decl)
4770 && current_scope != file_scope
4771 && TREE_STATIC (decl)
4772 && !TREE_READONLY (decl)
4773 && DECL_DECLARED_INLINE_P (current_function_decl)
4774 && DECL_EXTERNAL (current_function_decl))
4775 record_inline_static (input_location, current_function_decl,
4776 decl, csi_modifiable);
4778 if (c_dialect_objc ()
4779 && VAR_OR_FUNCTION_DECL_P (decl))
4780 objc_check_global_decl (decl);
4782 /* Add this decl to the current scope.
4783 TEM may equal DECL or it may be a previous decl of the same name. */
4784 tem = pushdecl (decl);
4786 if (initialized && DECL_EXTERNAL (tem))
4788 DECL_EXTERNAL (tem) = 0;
4789 TREE_STATIC (tem) = 1;
4792 return tem;
4795 /* Subroutine of finish_decl. TYPE is the type of an uninitialized object
4796 DECL or the non-array element type if DECL is an uninitialized array.
4797 If that type has a const member, diagnose this. */
4799 static void
4800 diagnose_uninitialized_cst_member (tree decl, tree type)
4802 tree field;
4803 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
4805 tree field_type;
4806 if (TREE_CODE (field) != FIELD_DECL)
4807 continue;
4808 field_type = strip_array_types (TREE_TYPE (field));
4810 if (TYPE_QUALS (field_type) & TYPE_QUAL_CONST)
4812 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wc___compat,
4813 "uninitialized const member in %qT is invalid in C++",
4814 strip_array_types (TREE_TYPE (decl)));
4815 inform (DECL_SOURCE_LOCATION (field), "%qD should be initialized", field);
4818 if (RECORD_OR_UNION_TYPE_P (field_type))
4819 diagnose_uninitialized_cst_member (decl, field_type);
4823 /* Finish processing of a declaration;
4824 install its initial value.
4825 If ORIGTYPE is not NULL_TREE, it is the original type of INIT.
4826 If the length of an array type is not known before,
4827 it must be determined now, from the initial value, or it is an error.
4829 INIT_LOC is the location of the initial value. */
4831 void
4832 finish_decl (tree decl, location_t init_loc, tree init,
4833 tree origtype, tree asmspec_tree)
4835 tree type;
4836 bool was_incomplete = (DECL_SIZE (decl) == NULL_TREE);
4837 const char *asmspec = 0;
4839 /* If a name was specified, get the string. */
4840 if (VAR_OR_FUNCTION_DECL_P (decl)
4841 && DECL_FILE_SCOPE_P (decl))
4842 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
4843 if (asmspec_tree)
4844 asmspec = TREE_STRING_POINTER (asmspec_tree);
4846 if (VAR_P (decl)
4847 && TREE_STATIC (decl)
4848 && global_bindings_p ())
4849 /* So decl is a global variable. Record the types it uses
4850 so that we can decide later to emit debug info for them. */
4851 record_types_used_by_current_var_decl (decl);
4853 /* If `start_decl' didn't like having an initialization, ignore it now. */
4854 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
4855 init = NULL_TREE;
4857 /* Don't crash if parm is initialized. */
4858 if (TREE_CODE (decl) == PARM_DECL)
4859 init = NULL_TREE;
4861 if (init)
4862 store_init_value (init_loc, decl, init, origtype);
4864 if (c_dialect_objc () && (VAR_OR_FUNCTION_DECL_P (decl)
4865 || TREE_CODE (decl) == FIELD_DECL))
4866 objc_check_decl (decl);
4868 type = TREE_TYPE (decl);
4870 /* Deduce size of array from initialization, if not already known. */
4871 if (TREE_CODE (type) == ARRAY_TYPE
4872 && TYPE_DOMAIN (type) == NULL_TREE
4873 && TREE_CODE (decl) != TYPE_DECL)
4875 bool do_default
4876 = (TREE_STATIC (decl)
4877 /* Even if pedantic, an external linkage array
4878 may have incomplete type at first. */
4879 ? pedantic && !TREE_PUBLIC (decl)
4880 : !DECL_EXTERNAL (decl));
4881 int failure
4882 = complete_array_type (&TREE_TYPE (decl), DECL_INITIAL (decl),
4883 do_default);
4885 /* Get the completed type made by complete_array_type. */
4886 type = TREE_TYPE (decl);
4888 switch (failure)
4890 case 1:
4891 error ("initializer fails to determine size of %q+D", decl);
4892 break;
4894 case 2:
4895 if (do_default)
4896 error ("array size missing in %q+D", decl);
4897 /* If a `static' var's size isn't known,
4898 make it extern as well as static, so it does not get
4899 allocated.
4900 If it is not `static', then do not mark extern;
4901 finish_incomplete_decl will give it a default size
4902 and it will get allocated. */
4903 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4904 DECL_EXTERNAL (decl) = 1;
4905 break;
4907 case 3:
4908 error ("zero or negative size array %q+D", decl);
4909 break;
4911 case 0:
4912 /* For global variables, update the copy of the type that
4913 exists in the binding. */
4914 if (TREE_PUBLIC (decl))
4916 struct c_binding *b_ext = I_SYMBOL_BINDING (DECL_NAME (decl));
4917 while (b_ext && !B_IN_EXTERNAL_SCOPE (b_ext))
4918 b_ext = b_ext->shadowed;
4919 if (b_ext && TREE_CODE (decl) == TREE_CODE (b_ext->decl))
4921 if (b_ext->u.type && comptypes (b_ext->u.type, type))
4922 b_ext->u.type = composite_type (b_ext->u.type, type);
4923 else
4924 b_ext->u.type = type;
4927 break;
4929 default:
4930 gcc_unreachable ();
4933 if (DECL_INITIAL (decl))
4934 TREE_TYPE (DECL_INITIAL (decl)) = type;
4936 relayout_decl (decl);
4939 if (VAR_P (decl))
4941 if (init && TREE_CODE (init) == CONSTRUCTOR)
4942 add_flexible_array_elts_to_size (decl, init);
4944 if (DECL_SIZE (decl) == NULL_TREE && TREE_TYPE (decl) != error_mark_node
4945 && COMPLETE_TYPE_P (TREE_TYPE (decl)))
4946 layout_decl (decl, 0);
4948 if (DECL_SIZE (decl) == NULL_TREE
4949 /* Don't give an error if we already gave one earlier. */
4950 && TREE_TYPE (decl) != error_mark_node
4951 && (TREE_STATIC (decl)
4952 /* A static variable with an incomplete type
4953 is an error if it is initialized.
4954 Also if it is not file scope.
4955 Otherwise, let it through, but if it is not `extern'
4956 then it may cause an error message later. */
4957 ? (DECL_INITIAL (decl) != NULL_TREE
4958 || !DECL_FILE_SCOPE_P (decl))
4959 /* An automatic variable with an incomplete type
4960 is an error. */
4961 : !DECL_EXTERNAL (decl)))
4963 error ("storage size of %q+D isn%'t known", decl);
4964 TREE_TYPE (decl) = error_mark_node;
4967 if ((RECORD_OR_UNION_TYPE_P (TREE_TYPE (decl))
4968 || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
4969 && DECL_SIZE (decl) == NULL_TREE
4970 && TREE_STATIC (decl))
4971 incomplete_record_decls.safe_push (decl);
4973 if (is_global_var (decl) && DECL_SIZE (decl) != NULL_TREE)
4975 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4976 constant_expression_warning (DECL_SIZE (decl));
4977 else
4979 error ("storage size of %q+D isn%'t constant", decl);
4980 TREE_TYPE (decl) = error_mark_node;
4984 if (TREE_USED (type))
4986 TREE_USED (decl) = 1;
4987 DECL_READ_P (decl) = 1;
4991 /* If this is a function and an assembler name is specified, reset DECL_RTL
4992 so we can give it its new name. Also, update builtin_decl if it
4993 was a normal built-in. */
4994 if (TREE_CODE (decl) == FUNCTION_DECL && asmspec)
4996 if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
4997 set_builtin_user_assembler_name (decl, asmspec);
4998 set_user_assembler_name (decl, asmspec);
5001 /* If #pragma weak was used, mark the decl weak now. */
5002 maybe_apply_pragma_weak (decl);
5004 /* Output the assembler code and/or RTL code for variables and functions,
5005 unless the type is an undefined structure or union.
5006 If not, it will get done when the type is completed. */
5008 if (VAR_OR_FUNCTION_DECL_P (decl))
5010 /* Determine the ELF visibility. */
5011 if (TREE_PUBLIC (decl))
5012 c_determine_visibility (decl);
5014 /* This is a no-op in c-lang.c or something real in objc-act.c. */
5015 if (c_dialect_objc ())
5016 objc_check_decl (decl);
5018 if (asmspec)
5020 /* If this is not a static variable, issue a warning.
5021 It doesn't make any sense to give an ASMSPEC for an
5022 ordinary, non-register local variable. Historically,
5023 GCC has accepted -- but ignored -- the ASMSPEC in
5024 this case. */
5025 if (!DECL_FILE_SCOPE_P (decl)
5026 && VAR_P (decl)
5027 && !C_DECL_REGISTER (decl)
5028 && !TREE_STATIC (decl))
5029 warning (0, "ignoring asm-specifier for non-static local "
5030 "variable %q+D", decl);
5031 else
5032 set_user_assembler_name (decl, asmspec);
5035 if (DECL_FILE_SCOPE_P (decl))
5037 if (DECL_INITIAL (decl) == NULL_TREE
5038 || DECL_INITIAL (decl) == error_mark_node)
5039 /* Don't output anything
5040 when a tentative file-scope definition is seen.
5041 But at end of compilation, do output code for them. */
5042 DECL_DEFER_OUTPUT (decl) = 1;
5043 if (asmspec && VAR_P (decl) && C_DECL_REGISTER (decl))
5044 DECL_HARD_REGISTER (decl) = 1;
5045 rest_of_decl_compilation (decl, true, 0);
5047 else
5049 /* In conjunction with an ASMSPEC, the `register'
5050 keyword indicates that we should place the variable
5051 in a particular register. */
5052 if (asmspec && C_DECL_REGISTER (decl))
5054 DECL_HARD_REGISTER (decl) = 1;
5055 /* This cannot be done for a structure with volatile
5056 fields, on which DECL_REGISTER will have been
5057 reset. */
5058 if (!DECL_REGISTER (decl))
5059 error ("cannot put object with volatile field into register");
5062 if (TREE_CODE (decl) != FUNCTION_DECL)
5064 /* If we're building a variable sized type, and we might be
5065 reachable other than via the top of the current binding
5066 level, then create a new BIND_EXPR so that we deallocate
5067 the object at the right time. */
5068 /* Note that DECL_SIZE can be null due to errors. */
5069 if (DECL_SIZE (decl)
5070 && !TREE_CONSTANT (DECL_SIZE (decl))
5071 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
5073 tree bind;
5074 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
5075 TREE_SIDE_EFFECTS (bind) = 1;
5076 add_stmt (bind);
5077 BIND_EXPR_BODY (bind) = push_stmt_list ();
5079 add_stmt (build_stmt (DECL_SOURCE_LOCATION (decl),
5080 DECL_EXPR, decl));
5085 if (!DECL_FILE_SCOPE_P (decl))
5087 /* Recompute the RTL of a local array now
5088 if it used to be an incomplete type. */
5089 if (was_incomplete && !is_global_var (decl))
5091 /* If we used it already as memory, it must stay in memory. */
5092 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
5093 /* If it's still incomplete now, no init will save it. */
5094 if (DECL_SIZE (decl) == NULL_TREE)
5095 DECL_INITIAL (decl) = NULL_TREE;
5100 if (TREE_CODE (decl) == TYPE_DECL)
5102 if (!DECL_FILE_SCOPE_P (decl)
5103 && variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
5104 add_stmt (build_stmt (DECL_SOURCE_LOCATION (decl), DECL_EXPR, decl));
5106 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl), 0);
5109 /* Install a cleanup (aka destructor) if one was given. */
5110 if (VAR_P (decl) && !TREE_STATIC (decl))
5112 tree attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
5113 if (attr)
5115 tree cleanup_id = TREE_VALUE (TREE_VALUE (attr));
5116 tree cleanup_decl = lookup_name (cleanup_id);
5117 tree cleanup;
5118 vec<tree, va_gc> *v;
5120 /* Build "cleanup(&decl)" for the destructor. */
5121 cleanup = build_unary_op (input_location, ADDR_EXPR, decl, false);
5122 vec_alloc (v, 1);
5123 v->quick_push (cleanup);
5124 cleanup = c_build_function_call_vec (DECL_SOURCE_LOCATION (decl),
5125 vNULL, cleanup_decl, v, NULL);
5126 vec_free (v);
5128 /* Don't warn about decl unused; the cleanup uses it. */
5129 TREE_USED (decl) = 1;
5130 TREE_USED (cleanup_decl) = 1;
5131 DECL_READ_P (decl) = 1;
5133 push_cleanup (decl, cleanup, false);
5137 if (warn_cxx_compat
5138 && VAR_P (decl)
5139 && !DECL_EXTERNAL (decl)
5140 && DECL_INITIAL (decl) == NULL_TREE)
5142 type = strip_array_types (type);
5143 if (TREE_READONLY (decl))
5144 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wc___compat,
5145 "uninitialized const %qD is invalid in C++", decl);
5146 else if (RECORD_OR_UNION_TYPE_P (type)
5147 && C_TYPE_FIELDS_READONLY (type))
5148 diagnose_uninitialized_cst_member (decl, type);
5151 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
5154 /* Given a parsed parameter declaration, decode it into a PARM_DECL.
5155 EXPR is NULL or a pointer to an expression that needs to be
5156 evaluated for the side effects of array size expressions in the
5157 parameters. */
5159 tree
5160 grokparm (const struct c_parm *parm, tree *expr)
5162 tree attrs = parm->attrs;
5163 tree decl = grokdeclarator (parm->declarator, parm->specs, PARM, false,
5164 NULL, &attrs, expr, NULL, DEPRECATED_NORMAL);
5166 decl_attributes (&decl, attrs, 0);
5168 return decl;
5171 /* Given a parsed parameter declaration, decode it into a PARM_DECL
5172 and push that on the current scope. EXPR is a pointer to an
5173 expression that needs to be evaluated for the side effects of array
5174 size expressions in the parameters. */
5176 void
5177 push_parm_decl (const struct c_parm *parm, tree *expr)
5179 tree attrs = parm->attrs;
5180 tree decl;
5182 decl = grokdeclarator (parm->declarator, parm->specs, PARM, false, NULL,
5183 &attrs, expr, NULL, DEPRECATED_NORMAL);
5184 decl_attributes (&decl, attrs, 0);
5186 decl = pushdecl (decl);
5188 finish_decl (decl, input_location, NULL_TREE, NULL_TREE, NULL_TREE);
5191 /* Mark all the parameter declarations to date as forward decls.
5192 Also diagnose use of this extension. */
5194 void
5195 mark_forward_parm_decls (void)
5197 struct c_binding *b;
5199 if (pedantic && !current_scope->warned_forward_parm_decls)
5201 pedwarn (input_location, OPT_Wpedantic,
5202 "ISO C forbids forward parameter declarations");
5203 current_scope->warned_forward_parm_decls = true;
5206 for (b = current_scope->bindings; b; b = b->prev)
5207 if (TREE_CODE (b->decl) == PARM_DECL)
5208 TREE_ASM_WRITTEN (b->decl) = 1;
5211 /* Build a COMPOUND_LITERAL_EXPR. TYPE is the type given in the compound
5212 literal, which may be an incomplete array type completed by the
5213 initializer; INIT is a CONSTRUCTOR at LOC that initializes the compound
5214 literal. NON_CONST is true if the initializers contain something
5215 that cannot occur in a constant expression. */
5217 tree
5218 build_compound_literal (location_t loc, tree type, tree init, bool non_const)
5220 /* We do not use start_decl here because we have a type, not a declarator;
5221 and do not use finish_decl because the decl should be stored inside
5222 the COMPOUND_LITERAL_EXPR rather than added elsewhere as a DECL_EXPR. */
5223 tree decl;
5224 tree complit;
5225 tree stmt;
5227 if (type == error_mark_node
5228 || init == error_mark_node)
5229 return error_mark_node;
5231 decl = build_decl (loc, VAR_DECL, NULL_TREE, type);
5232 DECL_EXTERNAL (decl) = 0;
5233 TREE_PUBLIC (decl) = 0;
5234 TREE_STATIC (decl) = (current_scope == file_scope);
5235 DECL_CONTEXT (decl) = current_function_decl;
5236 TREE_USED (decl) = 1;
5237 DECL_READ_P (decl) = 1;
5238 DECL_ARTIFICIAL (decl) = 1;
5239 DECL_IGNORED_P (decl) = 1;
5240 TREE_TYPE (decl) = type;
5241 TREE_READONLY (decl) = (TYPE_READONLY (type)
5242 || (TREE_CODE (type) == ARRAY_TYPE
5243 && TYPE_READONLY (TREE_TYPE (type))));
5244 store_init_value (loc, decl, init, NULL_TREE);
5246 if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
5248 int failure = complete_array_type (&TREE_TYPE (decl),
5249 DECL_INITIAL (decl), true);
5250 /* If complete_array_type returns 3, it means that the
5251 initial value of the compound literal is empty. Allow it. */
5252 gcc_assert (failure == 0 || failure == 3);
5254 type = TREE_TYPE (decl);
5255 TREE_TYPE (DECL_INITIAL (decl)) = type;
5258 if (type == error_mark_node || !COMPLETE_TYPE_P (type))
5260 c_incomplete_type_error (loc, NULL_TREE, type);
5261 return error_mark_node;
5264 stmt = build_stmt (DECL_SOURCE_LOCATION (decl), DECL_EXPR, decl);
5265 complit = build1 (COMPOUND_LITERAL_EXPR, type, stmt);
5266 TREE_SIDE_EFFECTS (complit) = 1;
5268 layout_decl (decl, 0);
5270 if (TREE_STATIC (decl))
5272 /* This decl needs a name for the assembler output. */
5273 set_compound_literal_name (decl);
5274 DECL_DEFER_OUTPUT (decl) = 1;
5275 DECL_COMDAT (decl) = 1;
5276 pushdecl (decl);
5277 rest_of_decl_compilation (decl, 1, 0);
5280 if (non_const)
5282 complit = build2 (C_MAYBE_CONST_EXPR, type, NULL, complit);
5283 C_MAYBE_CONST_EXPR_NON_CONST (complit) = 1;
5286 return complit;
5289 /* Check the type of a compound literal. Here we just check that it
5290 is valid for C++. */
5292 void
5293 check_compound_literal_type (location_t loc, struct c_type_name *type_name)
5295 if (warn_cxx_compat
5296 && (type_name->specs->typespec_kind == ctsk_tagdef
5297 || type_name->specs->typespec_kind == ctsk_tagfirstref))
5298 warning_at (loc, OPT_Wc___compat,
5299 "defining a type in a compound literal is invalid in C++");
5302 /* Determine whether TYPE is a structure with a flexible array member,
5303 or a union containing such a structure (possibly recursively). */
5305 static bool
5306 flexible_array_type_p (tree type)
5308 tree x;
5309 switch (TREE_CODE (type))
5311 case RECORD_TYPE:
5312 x = TYPE_FIELDS (type);
5313 if (x == NULL_TREE)
5314 return false;
5315 while (DECL_CHAIN (x) != NULL_TREE)
5316 x = DECL_CHAIN (x);
5317 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
5318 && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
5319 && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
5320 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
5321 return true;
5322 return false;
5323 case UNION_TYPE:
5324 for (x = TYPE_FIELDS (type); x != NULL_TREE; x = DECL_CHAIN (x))
5326 if (flexible_array_type_p (TREE_TYPE (x)))
5327 return true;
5329 return false;
5330 default:
5331 return false;
5335 /* Performs sanity checks on the TYPE and WIDTH of the bit-field NAME,
5336 replacing with appropriate values if they are invalid. */
5338 static void
5339 check_bitfield_type_and_width (location_t loc, tree *type, tree *width,
5340 tree orig_name)
5342 tree type_mv;
5343 unsigned int max_width;
5344 unsigned HOST_WIDE_INT w;
5345 const char *name = (orig_name
5346 ? identifier_to_locale (IDENTIFIER_POINTER (orig_name))
5347 : _("<anonymous>"));
5349 /* Detect and ignore out of range field width and process valid
5350 field widths. */
5351 if (!INTEGRAL_TYPE_P (TREE_TYPE (*width)))
5353 error_at (loc, "bit-field %qs width not an integer constant", name);
5354 *width = integer_one_node;
5356 else
5358 if (TREE_CODE (*width) != INTEGER_CST)
5360 *width = c_fully_fold (*width, false, NULL);
5361 if (TREE_CODE (*width) == INTEGER_CST)
5362 pedwarn (loc, OPT_Wpedantic,
5363 "bit-field %qs width not an integer constant expression",
5364 name);
5366 if (TREE_CODE (*width) != INTEGER_CST)
5368 error_at (loc, "bit-field %qs width not an integer constant", name);
5369 *width = integer_one_node;
5371 constant_expression_warning (*width);
5372 if (tree_int_cst_sgn (*width) < 0)
5374 error_at (loc, "negative width in bit-field %qs", name);
5375 *width = integer_one_node;
5377 else if (integer_zerop (*width) && orig_name)
5379 error_at (loc, "zero width for bit-field %qs", name);
5380 *width = integer_one_node;
5384 /* Detect invalid bit-field type. */
5385 if (TREE_CODE (*type) != INTEGER_TYPE
5386 && TREE_CODE (*type) != BOOLEAN_TYPE
5387 && TREE_CODE (*type) != ENUMERAL_TYPE)
5389 error_at (loc, "bit-field %qs has invalid type", name);
5390 *type = unsigned_type_node;
5393 type_mv = TYPE_MAIN_VARIANT (*type);
5394 if (!in_system_header_at (input_location)
5395 && type_mv != integer_type_node
5396 && type_mv != unsigned_type_node
5397 && type_mv != boolean_type_node)
5398 pedwarn_c90 (loc, OPT_Wpedantic,
5399 "type of bit-field %qs is a GCC extension", name);
5401 max_width = TYPE_PRECISION (*type);
5403 if (0 < compare_tree_int (*width, max_width))
5405 error_at (loc, "width of %qs exceeds its type", name);
5406 w = max_width;
5407 *width = build_int_cst (integer_type_node, w);
5409 else
5410 w = tree_to_uhwi (*width);
5412 if (TREE_CODE (*type) == ENUMERAL_TYPE)
5414 struct lang_type *lt = TYPE_LANG_SPECIFIC (*type);
5415 if (!lt
5416 || w < tree_int_cst_min_precision (lt->enum_min, TYPE_SIGN (*type))
5417 || w < tree_int_cst_min_precision (lt->enum_max, TYPE_SIGN (*type)))
5418 warning_at (loc, 0, "%qs is narrower than values of its type", name);
5424 /* Print warning about variable length array if necessary. */
5426 static void
5427 warn_variable_length_array (tree name, tree size)
5429 if (TREE_CONSTANT (size))
5431 if (name)
5432 pedwarn_c90 (input_location, OPT_Wvla,
5433 "ISO C90 forbids array %qE whose size "
5434 "can%'t be evaluated", name);
5435 else
5436 pedwarn_c90 (input_location, OPT_Wvla, "ISO C90 forbids array "
5437 "whose size can%'t be evaluated");
5439 else
5441 if (name)
5442 pedwarn_c90 (input_location, OPT_Wvla,
5443 "ISO C90 forbids variable length array %qE", name);
5444 else
5445 pedwarn_c90 (input_location, OPT_Wvla, "ISO C90 forbids variable "
5446 "length array");
5450 /* Print warning about defaulting to int if necessary. */
5452 static void
5453 warn_defaults_to (location_t location, int opt, const char *gmsgid, ...)
5455 diagnostic_info diagnostic;
5456 va_list ap;
5457 rich_location richloc (line_table, location);
5459 va_start (ap, gmsgid);
5460 diagnostic_set_info (&diagnostic, gmsgid, &ap, &richloc,
5461 flag_isoc99 ? DK_PEDWARN : DK_WARNING);
5462 diagnostic.option_index = opt;
5463 diagnostic_report_diagnostic (global_dc, &diagnostic);
5464 va_end (ap);
5467 /* Returns the smallest location != UNKNOWN_LOCATION in LOCATIONS,
5468 considering only those c_declspec_words found in LIST, which
5469 must be terminated by cdw_number_of_elements. */
5471 static location_t
5472 smallest_type_quals_location (const location_t *locations,
5473 const c_declspec_word *list)
5475 location_t loc = UNKNOWN_LOCATION;
5476 while (*list != cdw_number_of_elements)
5478 location_t newloc = locations[*list];
5479 if (loc == UNKNOWN_LOCATION
5480 || (newloc != UNKNOWN_LOCATION && newloc < loc))
5481 loc = newloc;
5482 list++;
5485 return loc;
5488 /* Given declspecs and a declarator,
5489 determine the name and type of the object declared
5490 and construct a ..._DECL node for it.
5491 (In one case we can return a ..._TYPE node instead.
5492 For invalid input we sometimes return NULL_TREE.)
5494 DECLSPECS is a c_declspecs structure for the declaration specifiers.
5496 DECL_CONTEXT says which syntactic context this declaration is in:
5497 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
5498 FUNCDEF for a function definition. Like NORMAL but a few different
5499 error messages in each case. Return value may be zero meaning
5500 this definition is too screwy to try to parse.
5501 PARM for a parameter declaration (either within a function prototype
5502 or before a function body). Make a PARM_DECL, or return void_type_node.
5503 TYPENAME if for a typename (in a cast or sizeof).
5504 Don't make a DECL node; just return the ..._TYPE node.
5505 FIELD for a struct or union field; make a FIELD_DECL.
5506 INITIALIZED is true if the decl has an initializer.
5507 WIDTH is non-NULL for bit-fields, and is a pointer to an INTEGER_CST node
5508 representing the width of the bit-field.
5509 DECL_ATTRS points to the list of attributes that should be added to this
5510 decl. Any nested attributes that belong on the decl itself will be
5511 added to this list.
5512 If EXPR is not NULL, any expressions that need to be evaluated as
5513 part of evaluating variably modified types will be stored in *EXPR.
5514 If EXPR_CONST_OPERANDS is not NULL, *EXPR_CONST_OPERANDS will be
5515 set to indicate whether operands in *EXPR can be used in constant
5516 expressions.
5517 DEPRECATED_STATE is a deprecated_states value indicating whether
5518 deprecation warnings should be suppressed.
5520 In the TYPENAME case, DECLARATOR is really an absolute declarator.
5521 It may also be so in the PARM case, for a prototype where the
5522 argument type is specified but not the name.
5524 This function is where the complicated C meanings of `static'
5525 and `extern' are interpreted. */
5527 static tree
5528 grokdeclarator (const struct c_declarator *declarator,
5529 struct c_declspecs *declspecs,
5530 enum decl_context decl_context, bool initialized, tree *width,
5531 tree *decl_attrs, tree *expr, bool *expr_const_operands,
5532 enum deprecated_states deprecated_state)
5534 tree type = declspecs->type;
5535 bool threadp = declspecs->thread_p;
5536 enum c_storage_class storage_class = declspecs->storage_class;
5537 int constp;
5538 int restrictp;
5539 int volatilep;
5540 int atomicp;
5541 int type_quals = TYPE_UNQUALIFIED;
5542 tree name = NULL_TREE;
5543 bool funcdef_flag = false;
5544 bool funcdef_syntax = false;
5545 bool size_varies = false;
5546 tree decl_attr = declspecs->decl_attr;
5547 int array_ptr_quals = TYPE_UNQUALIFIED;
5548 tree array_ptr_attrs = NULL_TREE;
5549 bool array_parm_static = false;
5550 bool array_parm_vla_unspec_p = false;
5551 tree returned_attrs = NULL_TREE;
5552 bool bitfield = width != NULL;
5553 tree element_type;
5554 tree orig_qual_type = NULL;
5555 size_t orig_qual_indirect = 0;
5556 struct c_arg_info *arg_info = 0;
5557 addr_space_t as1, as2, address_space;
5558 location_t loc = UNKNOWN_LOCATION;
5559 tree expr_dummy;
5560 bool expr_const_operands_dummy;
5561 enum c_declarator_kind first_non_attr_kind;
5562 unsigned int alignas_align = 0;
5564 if (TREE_CODE (type) == ERROR_MARK)
5565 return error_mark_node;
5566 if (expr == NULL)
5568 expr = &expr_dummy;
5569 expr_dummy = NULL_TREE;
5571 if (expr_const_operands == NULL)
5572 expr_const_operands = &expr_const_operands_dummy;
5574 if (declspecs->expr)
5576 if (*expr)
5577 *expr = build2 (COMPOUND_EXPR, TREE_TYPE (declspecs->expr), *expr,
5578 declspecs->expr);
5579 else
5580 *expr = declspecs->expr;
5582 *expr_const_operands = declspecs->expr_const_operands;
5584 if (decl_context == FUNCDEF)
5585 funcdef_flag = true, decl_context = NORMAL;
5587 /* Look inside a declarator for the name being declared
5588 and get it as an IDENTIFIER_NODE, for an error message. */
5590 const struct c_declarator *decl = declarator;
5592 first_non_attr_kind = cdk_attrs;
5593 while (decl)
5594 switch (decl->kind)
5596 case cdk_array:
5597 loc = decl->id_loc;
5598 /* FALL THRU. */
5600 case cdk_function:
5601 case cdk_pointer:
5602 funcdef_syntax = (decl->kind == cdk_function);
5603 if (first_non_attr_kind == cdk_attrs)
5604 first_non_attr_kind = decl->kind;
5605 decl = decl->declarator;
5606 break;
5608 case cdk_attrs:
5609 decl = decl->declarator;
5610 break;
5612 case cdk_id:
5613 loc = decl->id_loc;
5614 if (decl->u.id)
5615 name = decl->u.id;
5616 if (first_non_attr_kind == cdk_attrs)
5617 first_non_attr_kind = decl->kind;
5618 decl = 0;
5619 break;
5621 default:
5622 gcc_unreachable ();
5624 if (name == NULL_TREE)
5626 gcc_assert (decl_context == PARM
5627 || decl_context == TYPENAME
5628 || (decl_context == FIELD
5629 && declarator->kind == cdk_id));
5630 gcc_assert (!initialized);
5634 /* A function definition's declarator must have the form of
5635 a function declarator. */
5637 if (funcdef_flag && !funcdef_syntax)
5638 return NULL_TREE;
5640 /* If this looks like a function definition, make it one,
5641 even if it occurs where parms are expected.
5642 Then store_parm_decls will reject it and not use it as a parm. */
5643 if (decl_context == NORMAL && !funcdef_flag && current_scope->parm_flag)
5644 decl_context = PARM;
5646 if (declspecs->deprecated_p && deprecated_state != DEPRECATED_SUPPRESS)
5647 warn_deprecated_use (declspecs->type, declspecs->decl_attr);
5649 if ((decl_context == NORMAL || decl_context == FIELD)
5650 && current_scope == file_scope
5651 && variably_modified_type_p (type, NULL_TREE))
5653 if (name)
5654 error_at (loc, "variably modified %qE at file scope", name);
5655 else
5656 error_at (loc, "variably modified field at file scope");
5657 type = integer_type_node;
5660 size_varies = C_TYPE_VARIABLE_SIZE (type) != 0;
5662 /* Diagnose defaulting to "int". */
5664 if (declspecs->default_int_p && !in_system_header_at (input_location))
5666 /* Issue a warning if this is an ISO C 99 program or if
5667 -Wreturn-type and this is a function, or if -Wimplicit;
5668 prefer the former warning since it is more explicit. */
5669 if ((warn_implicit_int || warn_return_type || flag_isoc99)
5670 && funcdef_flag)
5671 warn_about_return_type = 1;
5672 else
5674 if (name)
5675 warn_defaults_to (loc, OPT_Wimplicit_int,
5676 "type defaults to %<int%> in declaration "
5677 "of %qE", name);
5678 else
5679 warn_defaults_to (loc, OPT_Wimplicit_int,
5680 "type defaults to %<int%> in type name");
5684 /* Adjust the type if a bit-field is being declared,
5685 -funsigned-bitfields applied and the type is not explicitly
5686 "signed". */
5687 if (bitfield && !flag_signed_bitfields && !declspecs->explicit_signed_p
5688 && TREE_CODE (type) == INTEGER_TYPE)
5689 type = unsigned_type_for (type);
5691 /* Figure out the type qualifiers for the declaration. There are
5692 two ways a declaration can become qualified. One is something
5693 like `const int i' where the `const' is explicit. Another is
5694 something like `typedef const int CI; CI i' where the type of the
5695 declaration contains the `const'. A third possibility is that
5696 there is a type qualifier on the element type of a typedefed
5697 array type, in which case we should extract that qualifier so
5698 that c_apply_type_quals_to_decl receives the full list of
5699 qualifiers to work with (C90 is not entirely clear about whether
5700 duplicate qualifiers should be diagnosed in this case, but it
5701 seems most appropriate to do so). */
5702 element_type = strip_array_types (type);
5703 constp = declspecs->const_p + TYPE_READONLY (element_type);
5704 restrictp = declspecs->restrict_p + TYPE_RESTRICT (element_type);
5705 volatilep = declspecs->volatile_p + TYPE_VOLATILE (element_type);
5706 atomicp = declspecs->atomic_p + TYPE_ATOMIC (element_type);
5707 as1 = declspecs->address_space;
5708 as2 = TYPE_ADDR_SPACE (element_type);
5709 address_space = ADDR_SPACE_GENERIC_P (as1)? as2 : as1;
5711 if (constp > 1)
5712 pedwarn_c90 (loc, OPT_Wpedantic, "duplicate %<const%>");
5713 if (restrictp > 1)
5714 pedwarn_c90 (loc, OPT_Wpedantic, "duplicate %<restrict%>");
5715 if (volatilep > 1)
5716 pedwarn_c90 (loc, OPT_Wpedantic, "duplicate %<volatile%>");
5717 if (atomicp > 1)
5718 pedwarn_c90 (loc, OPT_Wpedantic, "duplicate %<_Atomic%>");
5720 if (!ADDR_SPACE_GENERIC_P (as1) && !ADDR_SPACE_GENERIC_P (as2) && as1 != as2)
5721 error_at (loc, "conflicting named address spaces (%s vs %s)",
5722 c_addr_space_name (as1), c_addr_space_name (as2));
5724 if ((TREE_CODE (type) == ARRAY_TYPE
5725 || first_non_attr_kind == cdk_array)
5726 && TYPE_QUALS (element_type))
5728 orig_qual_type = type;
5729 type = TYPE_MAIN_VARIANT (type);
5731 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
5732 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
5733 | (volatilep ? TYPE_QUAL_VOLATILE : 0)
5734 | (atomicp ? TYPE_QUAL_ATOMIC : 0)
5735 | ENCODE_QUAL_ADDR_SPACE (address_space));
5736 if (type_quals != TYPE_QUALS (element_type))
5737 orig_qual_type = NULL_TREE;
5739 /* Applying the _Atomic qualifier to an array type (through the use
5740 of typedefs or typeof) must be detected here. If the qualifier
5741 is introduced later, any appearance of applying it to an array is
5742 actually applying it to an element of that array. */
5743 if (atomicp && TREE_CODE (type) == ARRAY_TYPE)
5744 error_at (loc, "%<_Atomic%>-qualified array type");
5746 /* Warn about storage classes that are invalid for certain
5747 kinds of declarations (parameters, typenames, etc.). */
5749 if (funcdef_flag
5750 && (threadp
5751 || storage_class == csc_auto
5752 || storage_class == csc_register
5753 || storage_class == csc_typedef))
5755 if (storage_class == csc_auto)
5756 pedwarn (loc,
5757 (current_scope == file_scope) ? 0 : OPT_Wpedantic,
5758 "function definition declared %<auto%>");
5759 if (storage_class == csc_register)
5760 error_at (loc, "function definition declared %<register%>");
5761 if (storage_class == csc_typedef)
5762 error_at (loc, "function definition declared %<typedef%>");
5763 if (threadp)
5764 error_at (loc, "function definition declared %qs",
5765 declspecs->thread_gnu_p ? "__thread" : "_Thread_local");
5766 threadp = false;
5767 if (storage_class == csc_auto
5768 || storage_class == csc_register
5769 || storage_class == csc_typedef)
5770 storage_class = csc_none;
5772 else if (decl_context != NORMAL && (storage_class != csc_none || threadp))
5774 if (decl_context == PARM && storage_class == csc_register)
5776 else
5778 switch (decl_context)
5780 case FIELD:
5781 if (name)
5782 error_at (loc, "storage class specified for structure "
5783 "field %qE", name);
5784 else
5785 error_at (loc, "storage class specified for structure field");
5786 break;
5787 case PARM:
5788 if (name)
5789 error_at (loc, "storage class specified for parameter %qE",
5790 name);
5791 else
5792 error_at (loc, "storage class specified for unnamed parameter");
5793 break;
5794 default:
5795 error_at (loc, "storage class specified for typename");
5796 break;
5798 storage_class = csc_none;
5799 threadp = false;
5802 else if (storage_class == csc_extern
5803 && initialized
5804 && !funcdef_flag)
5806 /* 'extern' with initialization is invalid if not at file scope. */
5807 if (current_scope == file_scope)
5809 /* It is fine to have 'extern const' when compiling at C
5810 and C++ intersection. */
5811 if (!(warn_cxx_compat && constp))
5812 warning_at (loc, 0, "%qE initialized and declared %<extern%>",
5813 name);
5815 else
5816 error_at (loc, "%qE has both %<extern%> and initializer", name);
5818 else if (current_scope == file_scope)
5820 if (storage_class == csc_auto)
5821 error_at (loc, "file-scope declaration of %qE specifies %<auto%>",
5822 name);
5823 if (pedantic && storage_class == csc_register)
5824 pedwarn (input_location, OPT_Wpedantic,
5825 "file-scope declaration of %qE specifies %<register%>", name);
5827 else
5829 if (storage_class == csc_extern && funcdef_flag)
5830 error_at (loc, "nested function %qE declared %<extern%>", name);
5831 else if (threadp && storage_class == csc_none)
5833 error_at (loc, "function-scope %qE implicitly auto and declared "
5834 "%qs", name,
5835 declspecs->thread_gnu_p ? "__thread" : "_Thread_local");
5836 threadp = false;
5840 /* Now figure out the structure of the declarator proper.
5841 Descend through it, creating more complex types, until we reach
5842 the declared identifier (or NULL_TREE, in an absolute declarator).
5843 At each stage we maintain an unqualified version of the type
5844 together with any qualifiers that should be applied to it with
5845 c_build_qualified_type; this way, array types including
5846 multidimensional array types are first built up in unqualified
5847 form and then the qualified form is created with
5848 TYPE_MAIN_VARIANT pointing to the unqualified form. */
5850 while (declarator && declarator->kind != cdk_id)
5852 if (type == error_mark_node)
5854 declarator = declarator->declarator;
5855 continue;
5858 /* Each level of DECLARATOR is either a cdk_array (for ...[..]),
5859 a cdk_pointer (for *...),
5860 a cdk_function (for ...(...)),
5861 a cdk_attrs (for nested attributes),
5862 or a cdk_id (for the name being declared
5863 or the place in an absolute declarator
5864 where the name was omitted).
5865 For the last case, we have just exited the loop.
5867 At this point, TYPE is the type of elements of an array,
5868 or for a function to return, or for a pointer to point to.
5869 After this sequence of ifs, TYPE is the type of the
5870 array or function or pointer, and DECLARATOR has had its
5871 outermost layer removed. */
5873 if (array_ptr_quals != TYPE_UNQUALIFIED
5874 || array_ptr_attrs != NULL_TREE
5875 || array_parm_static)
5877 /* Only the innermost declarator (making a parameter be of
5878 array type which is converted to pointer type)
5879 may have static or type qualifiers. */
5880 error_at (loc, "static or type qualifiers in non-parameter array declarator");
5881 array_ptr_quals = TYPE_UNQUALIFIED;
5882 array_ptr_attrs = NULL_TREE;
5883 array_parm_static = false;
5886 switch (declarator->kind)
5888 case cdk_attrs:
5890 /* A declarator with embedded attributes. */
5891 tree attrs = declarator->u.attrs;
5892 const struct c_declarator *inner_decl;
5893 int attr_flags = 0;
5894 declarator = declarator->declarator;
5895 inner_decl = declarator;
5896 while (inner_decl->kind == cdk_attrs)
5897 inner_decl = inner_decl->declarator;
5898 if (inner_decl->kind == cdk_id)
5899 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
5900 else if (inner_decl->kind == cdk_function)
5901 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
5902 else if (inner_decl->kind == cdk_array)
5903 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
5904 returned_attrs = decl_attributes (&type,
5905 chainon (returned_attrs, attrs),
5906 attr_flags);
5907 break;
5909 case cdk_array:
5911 tree itype = NULL_TREE;
5912 tree size = declarator->u.array.dimen;
5913 /* The index is a signed object `sizetype' bits wide. */
5914 tree index_type = c_common_signed_type (sizetype);
5916 array_ptr_quals = declarator->u.array.quals;
5917 array_ptr_attrs = declarator->u.array.attrs;
5918 array_parm_static = declarator->u.array.static_p;
5919 array_parm_vla_unspec_p = declarator->u.array.vla_unspec_p;
5921 declarator = declarator->declarator;
5923 /* Check for some types that there cannot be arrays of. */
5925 if (VOID_TYPE_P (type))
5927 if (name)
5928 error_at (loc, "declaration of %qE as array of voids", name);
5929 else
5930 error_at (loc, "declaration of type name as array of voids");
5931 type = error_mark_node;
5934 if (TREE_CODE (type) == FUNCTION_TYPE)
5936 if (name)
5937 error_at (loc, "declaration of %qE as array of functions",
5938 name);
5939 else
5940 error_at (loc, "declaration of type name as array of "
5941 "functions");
5942 type = error_mark_node;
5945 if (pedantic && !in_system_header_at (input_location)
5946 && flexible_array_type_p (type))
5947 pedwarn (loc, OPT_Wpedantic,
5948 "invalid use of structure with flexible array member");
5950 if (size == error_mark_node)
5951 type = error_mark_node;
5953 if (type == error_mark_node)
5954 continue;
5956 /* If size was specified, set ITYPE to a range-type for
5957 that size. Otherwise, ITYPE remains null. finish_decl
5958 may figure it out from an initial value. */
5960 if (size)
5962 bool size_maybe_const = true;
5963 bool size_int_const = (TREE_CODE (size) == INTEGER_CST
5964 && !TREE_OVERFLOW (size));
5965 bool this_size_varies = false;
5967 /* Strip NON_LVALUE_EXPRs since we aren't using as an
5968 lvalue. */
5969 STRIP_TYPE_NOPS (size);
5971 if (!INTEGRAL_TYPE_P (TREE_TYPE (size)))
5973 if (name)
5974 error_at (loc, "size of array %qE has non-integer type",
5975 name);
5976 else
5977 error_at (loc,
5978 "size of unnamed array has non-integer type");
5979 size = integer_one_node;
5981 /* This can happen with enum forward declaration. */
5982 else if (!COMPLETE_TYPE_P (TREE_TYPE (size)))
5984 if (name)
5985 error_at (loc, "size of array %qE has incomplete type",
5986 name);
5987 else
5988 error_at (loc, "size of unnamed array has incomplete "
5989 "type");
5990 size = integer_one_node;
5993 size = c_fully_fold (size, false, &size_maybe_const);
5995 if (pedantic && size_maybe_const && integer_zerop (size))
5997 if (name)
5998 pedwarn (loc, OPT_Wpedantic,
5999 "ISO C forbids zero-size array %qE", name);
6000 else
6001 pedwarn (loc, OPT_Wpedantic,
6002 "ISO C forbids zero-size array");
6005 if (TREE_CODE (size) == INTEGER_CST && size_maybe_const)
6007 constant_expression_warning (size);
6008 if (tree_int_cst_sgn (size) < 0)
6010 if (name)
6011 error_at (loc, "size of array %qE is negative", name);
6012 else
6013 error_at (loc, "size of unnamed array is negative");
6014 size = integer_one_node;
6016 /* Handle a size folded to an integer constant but
6017 not an integer constant expression. */
6018 if (!size_int_const)
6020 /* If this is a file scope declaration of an
6021 ordinary identifier, this is invalid code;
6022 diagnosing it here and not subsequently
6023 treating the type as variable-length avoids
6024 more confusing diagnostics later. */
6025 if ((decl_context == NORMAL || decl_context == FIELD)
6026 && current_scope == file_scope)
6027 pedwarn (input_location, 0,
6028 "variably modified %qE at file scope",
6029 name);
6030 else
6031 this_size_varies = size_varies = true;
6032 warn_variable_length_array (name, size);
6035 else if ((decl_context == NORMAL || decl_context == FIELD)
6036 && current_scope == file_scope)
6038 error_at (loc, "variably modified %qE at file scope", name);
6039 size = integer_one_node;
6041 else
6043 /* Make sure the array size remains visibly
6044 nonconstant even if it is (eg) a const variable
6045 with known value. */
6046 this_size_varies = size_varies = true;
6047 warn_variable_length_array (name, size);
6048 if (sanitize_flags_p (SANITIZE_VLA)
6049 && decl_context == NORMAL)
6051 /* Evaluate the array size only once. */
6052 size = save_expr (size);
6053 size = c_fully_fold (size, false, NULL);
6054 size = fold_build2 (COMPOUND_EXPR, TREE_TYPE (size),
6055 ubsan_instrument_vla (loc, size),
6056 size);
6060 if (integer_zerop (size) && !this_size_varies)
6062 /* A zero-length array cannot be represented with
6063 an unsigned index type, which is what we'll
6064 get with build_index_type. Create an
6065 open-ended range instead. */
6066 itype = build_range_type (sizetype, size, NULL_TREE);
6068 else
6070 /* Arrange for the SAVE_EXPR on the inside of the
6071 MINUS_EXPR, which allows the -1 to get folded
6072 with the +1 that happens when building TYPE_SIZE. */
6073 if (size_varies)
6074 size = save_expr (size);
6075 if (this_size_varies && TREE_CODE (size) == INTEGER_CST)
6076 size = build2 (COMPOUND_EXPR, TREE_TYPE (size),
6077 integer_zero_node, size);
6079 /* Compute the maximum valid index, that is, size
6080 - 1. Do the calculation in index_type, so that
6081 if it is a variable the computations will be
6082 done in the proper mode. */
6083 itype = fold_build2_loc (loc, MINUS_EXPR, index_type,
6084 convert (index_type, size),
6085 convert (index_type,
6086 size_one_node));
6088 /* The above overflows when size does not fit
6089 in index_type.
6090 ??? While a size of INT_MAX+1 technically shouldn't
6091 cause an overflow (because we subtract 1), handling
6092 this case seems like an unnecessary complication. */
6093 if (TREE_CODE (size) == INTEGER_CST
6094 && !int_fits_type_p (size, index_type))
6096 if (name)
6097 error_at (loc, "size of array %qE is too large",
6098 name);
6099 else
6100 error_at (loc, "size of unnamed array is too large");
6101 type = error_mark_node;
6102 continue;
6105 itype = build_index_type (itype);
6107 if (this_size_varies)
6109 if (*expr)
6110 *expr = build2 (COMPOUND_EXPR, TREE_TYPE (size),
6111 *expr, size);
6112 else
6113 *expr = size;
6114 *expr_const_operands &= size_maybe_const;
6117 else if (decl_context == FIELD)
6119 bool flexible_array_member = false;
6120 if (array_parm_vla_unspec_p)
6121 /* Field names can in fact have function prototype
6122 scope so [*] is disallowed here through making
6123 the field variably modified, not through being
6124 something other than a declaration with function
6125 prototype scope. */
6126 size_varies = true;
6127 else
6129 const struct c_declarator *t = declarator;
6130 while (t->kind == cdk_attrs)
6131 t = t->declarator;
6132 flexible_array_member = (t->kind == cdk_id);
6134 if (flexible_array_member
6135 && !in_system_header_at (input_location))
6136 pedwarn_c90 (loc, OPT_Wpedantic, "ISO C90 does not "
6137 "support flexible array members");
6139 /* ISO C99 Flexible array members are effectively
6140 identical to GCC's zero-length array extension. */
6141 if (flexible_array_member || array_parm_vla_unspec_p)
6142 itype = build_range_type (sizetype, size_zero_node,
6143 NULL_TREE);
6145 else if (decl_context == PARM)
6147 if (array_parm_vla_unspec_p)
6149 itype = build_range_type (sizetype, size_zero_node, NULL_TREE);
6150 size_varies = true;
6153 else if (decl_context == TYPENAME)
6155 if (array_parm_vla_unspec_p)
6157 /* C99 6.7.5.2p4 */
6158 warning (0, "%<[*]%> not in a declaration");
6159 /* We use this to avoid messing up with incomplete
6160 array types of the same type, that would
6161 otherwise be modified below. */
6162 itype = build_range_type (sizetype, size_zero_node,
6163 NULL_TREE);
6164 size_varies = true;
6168 /* Complain about arrays of incomplete types. */
6169 if (!COMPLETE_TYPE_P (type))
6171 error_at (loc, "array type has incomplete element type %qT",
6172 type);
6173 /* See if we can be more helpful. */
6174 if (TREE_CODE (type) == ARRAY_TYPE)
6176 if (name)
6177 inform (loc, "declaration of %qE as multidimensional "
6178 "array must have bounds for all dimensions "
6179 "except the first", name);
6180 else
6181 inform (loc, "declaration of multidimensional array "
6182 "must have bounds for all dimensions except "
6183 "the first");
6185 type = error_mark_node;
6187 else
6188 /* When itype is NULL, a shared incomplete array type is
6189 returned for all array of a given type. Elsewhere we
6190 make sure we don't complete that type before copying
6191 it, but here we want to make sure we don't ever
6192 modify the shared type, so we gcc_assert (itype)
6193 below. */
6195 addr_space_t as = DECODE_QUAL_ADDR_SPACE (type_quals);
6196 if (!ADDR_SPACE_GENERIC_P (as) && as != TYPE_ADDR_SPACE (type))
6197 type = build_qualified_type (type,
6198 ENCODE_QUAL_ADDR_SPACE (as));
6200 type = build_array_type (type, itype);
6203 if (type != error_mark_node)
6205 if (size_varies)
6207 /* It is ok to modify type here even if itype is
6208 NULL: if size_varies, we're in a
6209 multi-dimensional array and the inner type has
6210 variable size, so the enclosing shared array type
6211 must too. */
6212 if (size && TREE_CODE (size) == INTEGER_CST)
6213 type
6214 = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
6215 C_TYPE_VARIABLE_SIZE (type) = 1;
6218 /* The GCC extension for zero-length arrays differs from
6219 ISO flexible array members in that sizeof yields
6220 zero. */
6221 if (size && integer_zerop (size))
6223 gcc_assert (itype);
6224 type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
6225 TYPE_SIZE (type) = bitsize_zero_node;
6226 TYPE_SIZE_UNIT (type) = size_zero_node;
6227 SET_TYPE_STRUCTURAL_EQUALITY (type);
6229 if (array_parm_vla_unspec_p)
6231 gcc_assert (itype);
6232 /* The type is complete. C99 6.7.5.2p4 */
6233 type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
6234 TYPE_SIZE (type) = bitsize_zero_node;
6235 TYPE_SIZE_UNIT (type) = size_zero_node;
6236 SET_TYPE_STRUCTURAL_EQUALITY (type);
6239 if (!valid_array_size_p (loc, type, name))
6240 type = error_mark_node;
6243 if (decl_context != PARM
6244 && (array_ptr_quals != TYPE_UNQUALIFIED
6245 || array_ptr_attrs != NULL_TREE
6246 || array_parm_static))
6248 error_at (loc, "static or type qualifiers in non-parameter "
6249 "array declarator");
6250 array_ptr_quals = TYPE_UNQUALIFIED;
6251 array_ptr_attrs = NULL_TREE;
6252 array_parm_static = false;
6254 orig_qual_indirect++;
6255 break;
6257 case cdk_function:
6259 /* Say it's a definition only for the declarator closest
6260 to the identifier, apart possibly from some
6261 attributes. */
6262 bool really_funcdef = false;
6263 tree arg_types;
6264 orig_qual_type = NULL_TREE;
6265 if (funcdef_flag)
6267 const struct c_declarator *t = declarator->declarator;
6268 while (t->kind == cdk_attrs)
6269 t = t->declarator;
6270 really_funcdef = (t->kind == cdk_id);
6273 /* Declaring a function type. Make sure we have a valid
6274 type for the function to return. */
6275 if (type == error_mark_node)
6276 continue;
6278 size_varies = false;
6280 /* Warn about some types functions can't return. */
6281 if (TREE_CODE (type) == FUNCTION_TYPE)
6283 if (name)
6284 error_at (loc, "%qE declared as function returning a "
6285 "function", name);
6286 else
6287 error_at (loc, "type name declared as function "
6288 "returning a function");
6289 type = integer_type_node;
6291 if (TREE_CODE (type) == ARRAY_TYPE)
6293 if (name)
6294 error_at (loc, "%qE declared as function returning an array",
6295 name);
6296 else
6297 error_at (loc, "type name declared as function returning "
6298 "an array");
6299 type = integer_type_node;
6302 /* Construct the function type and go to the next
6303 inner layer of declarator. */
6304 arg_info = declarator->u.arg_info;
6305 arg_types = grokparms (arg_info, really_funcdef);
6307 /* Type qualifiers before the return type of the function
6308 qualify the return type, not the function type. */
6309 if (type_quals)
6311 const enum c_declspec_word ignored_quals_list[] =
6313 cdw_const, cdw_volatile, cdw_restrict, cdw_address_space,
6314 cdw_atomic, cdw_number_of_elements
6316 location_t specs_loc
6317 = smallest_type_quals_location (declspecs->locations,
6318 ignored_quals_list);
6319 if (specs_loc == UNKNOWN_LOCATION)
6320 specs_loc = declspecs->locations[cdw_typedef];
6321 if (specs_loc == UNKNOWN_LOCATION)
6322 specs_loc = loc;
6324 /* Type qualifiers on a function return type are
6325 normally permitted by the standard but have no
6326 effect, so give a warning at -Wreturn-type.
6327 Qualifiers on a void return type are banned on
6328 function definitions in ISO C; GCC used to used
6329 them for noreturn functions. The resolution of C11
6330 DR#423 means qualifiers (other than _Atomic) are
6331 actually removed from the return type when
6332 determining the function type. */
6333 int quals_used = type_quals;
6334 if (flag_isoc11)
6335 quals_used &= TYPE_QUAL_ATOMIC;
6336 if (quals_used && VOID_TYPE_P (type) && really_funcdef)
6337 pedwarn (specs_loc, 0,
6338 "function definition has qualified void return type");
6339 else
6340 warning_at (specs_loc, OPT_Wignored_qualifiers,
6341 "type qualifiers ignored on function return type");
6343 /* Ensure an error for restrict on invalid types; the
6344 DR#423 resolution is not entirely clear about
6345 this. */
6346 if (flag_isoc11
6347 && (type_quals & TYPE_QUAL_RESTRICT)
6348 && (!POINTER_TYPE_P (type)
6349 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
6350 error_at (loc, "invalid use of %<restrict%>");
6351 if (quals_used)
6352 type = c_build_qualified_type (type, quals_used);
6354 type_quals = TYPE_UNQUALIFIED;
6356 type = build_function_type (type, arg_types);
6357 declarator = declarator->declarator;
6359 /* Set the TYPE_CONTEXTs for each tagged type which is local to
6360 the formal parameter list of this FUNCTION_TYPE to point to
6361 the FUNCTION_TYPE node itself. */
6363 c_arg_tag *tag;
6364 unsigned ix;
6366 FOR_EACH_VEC_SAFE_ELT_REVERSE (arg_info->tags, ix, tag)
6367 TYPE_CONTEXT (tag->type) = type;
6369 break;
6371 case cdk_pointer:
6373 /* Merge any constancy or volatility into the target type
6374 for the pointer. */
6375 if ((type_quals & TYPE_QUAL_ATOMIC)
6376 && TREE_CODE (type) == FUNCTION_TYPE)
6378 error_at (loc,
6379 "%<_Atomic%>-qualified function type");
6380 type_quals &= ~TYPE_QUAL_ATOMIC;
6382 else if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
6383 && type_quals)
6384 pedwarn (loc, OPT_Wpedantic,
6385 "ISO C forbids qualified function types");
6386 if (type_quals)
6387 type = c_build_qualified_type (type, type_quals, orig_qual_type,
6388 orig_qual_indirect);
6389 orig_qual_type = NULL_TREE;
6390 size_varies = false;
6392 /* When the pointed-to type involves components of variable size,
6393 care must be taken to ensure that the size evaluation code is
6394 emitted early enough to dominate all the possible later uses
6395 and late enough for the variables on which it depends to have
6396 been assigned.
6398 This is expected to happen automatically when the pointed-to
6399 type has a name/declaration of it's own, but special attention
6400 is required if the type is anonymous.
6402 We handle the NORMAL and FIELD contexts here by attaching an
6403 artificial TYPE_DECL to such pointed-to type. This forces the
6404 sizes evaluation at a safe point and ensures it is not deferred
6405 until e.g. within a deeper conditional context.
6407 We expect nothing to be needed here for PARM or TYPENAME.
6408 Pushing a TYPE_DECL at this point for TYPENAME would actually
6409 be incorrect, as we might be in the middle of an expression
6410 with side effects on the pointed-to type size "arguments" prior
6411 to the pointer declaration point and the fake TYPE_DECL in the
6412 enclosing context would force the size evaluation prior to the
6413 side effects. */
6415 if (!TYPE_NAME (type)
6416 && (decl_context == NORMAL || decl_context == FIELD)
6417 && variably_modified_type_p (type, NULL_TREE))
6419 tree decl = build_decl (loc, TYPE_DECL, NULL_TREE, type);
6420 DECL_ARTIFICIAL (decl) = 1;
6421 pushdecl (decl);
6422 finish_decl (decl, loc, NULL_TREE, NULL_TREE, NULL_TREE);
6423 TYPE_NAME (type) = decl;
6426 type = c_build_pointer_type (type);
6428 /* Process type qualifiers (such as const or volatile)
6429 that were given inside the `*'. */
6430 type_quals = declarator->u.pointer_quals;
6432 declarator = declarator->declarator;
6433 break;
6435 default:
6436 gcc_unreachable ();
6439 *decl_attrs = chainon (returned_attrs, *decl_attrs);
6441 /* Now TYPE has the actual type, apart from any qualifiers in
6442 TYPE_QUALS. */
6444 /* Warn about address space used for things other than static memory or
6445 pointers. */
6446 address_space = DECODE_QUAL_ADDR_SPACE (type_quals);
6447 if (!ADDR_SPACE_GENERIC_P (address_space))
6449 if (decl_context == NORMAL)
6451 switch (storage_class)
6453 case csc_auto:
6454 error ("%qs combined with %<auto%> qualifier for %qE",
6455 c_addr_space_name (address_space), name);
6456 break;
6457 case csc_register:
6458 error ("%qs combined with %<register%> qualifier for %qE",
6459 c_addr_space_name (address_space), name);
6460 break;
6461 case csc_none:
6462 if (current_function_scope)
6464 error ("%qs specified for auto variable %qE",
6465 c_addr_space_name (address_space), name);
6466 break;
6468 break;
6469 case csc_static:
6470 case csc_extern:
6471 case csc_typedef:
6472 break;
6473 default:
6474 gcc_unreachable ();
6477 else if (decl_context == PARM && TREE_CODE (type) != ARRAY_TYPE)
6479 if (name)
6480 error ("%qs specified for parameter %qE",
6481 c_addr_space_name (address_space), name);
6482 else
6483 error ("%qs specified for unnamed parameter",
6484 c_addr_space_name (address_space));
6486 else if (decl_context == FIELD)
6488 if (name)
6489 error ("%qs specified for structure field %qE",
6490 c_addr_space_name (address_space), name);
6491 else
6492 error ("%qs specified for structure field",
6493 c_addr_space_name (address_space));
6497 /* Check the type and width of a bit-field. */
6498 if (bitfield)
6500 check_bitfield_type_and_width (loc, &type, width, name);
6501 /* C11 makes it implementation-defined (6.7.2.1#5) whether
6502 atomic types are permitted for bit-fields; we have no code to
6503 make bit-field accesses atomic, so disallow them. */
6504 if (type_quals & TYPE_QUAL_ATOMIC)
6506 if (name)
6507 error_at (loc, "bit-field %qE has atomic type", name);
6508 else
6509 error_at (loc, "bit-field has atomic type");
6510 type_quals &= ~TYPE_QUAL_ATOMIC;
6514 /* Reject invalid uses of _Alignas. */
6515 if (declspecs->alignas_p)
6517 if (storage_class == csc_typedef)
6518 error_at (loc, "alignment specified for typedef %qE", name);
6519 else if (storage_class == csc_register)
6520 error_at (loc, "alignment specified for %<register%> object %qE",
6521 name);
6522 else if (decl_context == PARM)
6524 if (name)
6525 error_at (loc, "alignment specified for parameter %qE", name);
6526 else
6527 error_at (loc, "alignment specified for unnamed parameter");
6529 else if (bitfield)
6531 if (name)
6532 error_at (loc, "alignment specified for bit-field %qE", name);
6533 else
6534 error_at (loc, "alignment specified for unnamed bit-field");
6536 else if (TREE_CODE (type) == FUNCTION_TYPE)
6537 error_at (loc, "alignment specified for function %qE", name);
6538 else if (declspecs->align_log != -1 && TYPE_P (type))
6540 alignas_align = 1U << declspecs->align_log;
6541 if (alignas_align < min_align_of_type (type))
6543 if (name)
6544 error_at (loc, "%<_Alignas%> specifiers cannot reduce "
6545 "alignment of %qE", name);
6546 else
6547 error_at (loc, "%<_Alignas%> specifiers cannot reduce "
6548 "alignment of unnamed field");
6549 alignas_align = 0;
6554 /* If this is declaring a typedef name, return a TYPE_DECL. */
6556 if (storage_class == csc_typedef)
6558 tree decl;
6559 if ((type_quals & TYPE_QUAL_ATOMIC)
6560 && TREE_CODE (type) == FUNCTION_TYPE)
6562 error_at (loc,
6563 "%<_Atomic%>-qualified function type");
6564 type_quals &= ~TYPE_QUAL_ATOMIC;
6566 else if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
6567 && type_quals)
6568 pedwarn (loc, OPT_Wpedantic,
6569 "ISO C forbids qualified function types");
6570 if (type_quals)
6571 type = c_build_qualified_type (type, type_quals, orig_qual_type,
6572 orig_qual_indirect);
6573 decl = build_decl (declarator->id_loc,
6574 TYPE_DECL, declarator->u.id, type);
6575 if (declspecs->explicit_signed_p)
6576 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
6577 if (declspecs->inline_p)
6578 pedwarn (loc, 0,"typedef %q+D declared %<inline%>", decl);
6579 if (declspecs->noreturn_p)
6580 pedwarn (loc, 0,"typedef %q+D declared %<_Noreturn%>", decl);
6582 if (warn_cxx_compat && declarator->u.id != NULL_TREE)
6584 struct c_binding *b = I_TAG_BINDING (declarator->u.id);
6586 if (b != NULL
6587 && b->decl != NULL_TREE
6588 && (B_IN_CURRENT_SCOPE (b)
6589 || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
6590 && TYPE_MAIN_VARIANT (b->decl) != TYPE_MAIN_VARIANT (type))
6592 warning_at (declarator->id_loc, OPT_Wc___compat,
6593 ("using %qD as both a typedef and a tag is "
6594 "invalid in C++"),
6595 decl);
6596 if (b->locus != UNKNOWN_LOCATION)
6597 inform (b->locus, "originally defined here");
6601 return decl;
6604 /* If this is a type name (such as, in a cast or sizeof),
6605 compute the type and return it now. */
6607 if (decl_context == TYPENAME)
6609 /* Note that the grammar rejects storage classes in typenames
6610 and fields. */
6611 gcc_assert (storage_class == csc_none && !threadp
6612 && !declspecs->inline_p && !declspecs->noreturn_p);
6613 if ((type_quals & TYPE_QUAL_ATOMIC)
6614 && TREE_CODE (type) == FUNCTION_TYPE)
6616 error_at (loc,
6617 "%<_Atomic%>-qualified function type");
6618 type_quals &= ~TYPE_QUAL_ATOMIC;
6620 else if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
6621 && type_quals)
6622 pedwarn (loc, OPT_Wpedantic,
6623 "ISO C forbids const or volatile function types");
6624 if (type_quals)
6625 type = c_build_qualified_type (type, type_quals, orig_qual_type,
6626 orig_qual_indirect);
6627 return type;
6630 if (pedantic && decl_context == FIELD
6631 && variably_modified_type_p (type, NULL_TREE))
6633 /* C99 6.7.2.1p8 */
6634 pedwarn (loc, OPT_Wpedantic, "a member of a structure or union cannot "
6635 "have a variably modified type");
6638 /* Aside from typedefs and type names (handle above),
6639 `void' at top level (not within pointer)
6640 is allowed only in public variables.
6641 We don't complain about parms either, but that is because
6642 a better error message can be made later. */
6644 if (VOID_TYPE_P (type) && decl_context != PARM
6645 && !((decl_context != FIELD && TREE_CODE (type) != FUNCTION_TYPE)
6646 && (storage_class == csc_extern
6647 || (current_scope == file_scope
6648 && !(storage_class == csc_static
6649 || storage_class == csc_register)))))
6651 error_at (loc, "variable or field %qE declared void", name);
6652 type = integer_type_node;
6655 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
6656 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
6659 tree decl;
6661 if (decl_context == PARM)
6663 tree promoted_type;
6664 bool array_parameter_p = false;
6666 /* A parameter declared as an array of T is really a pointer to T.
6667 One declared as a function is really a pointer to a function. */
6669 if (TREE_CODE (type) == ARRAY_TYPE)
6671 /* Transfer const-ness of array into that of type pointed to. */
6672 type = TREE_TYPE (type);
6673 if (orig_qual_type != NULL_TREE)
6675 if (orig_qual_indirect == 0)
6676 orig_qual_type = TREE_TYPE (orig_qual_type);
6677 else
6678 orig_qual_indirect--;
6680 if (type_quals)
6681 type = c_build_qualified_type (type, type_quals, orig_qual_type,
6682 orig_qual_indirect);
6683 type = c_build_pointer_type (type);
6684 type_quals = array_ptr_quals;
6685 if (type_quals)
6686 type = c_build_qualified_type (type, type_quals);
6688 /* We don't yet implement attributes in this context. */
6689 if (array_ptr_attrs != NULL_TREE)
6690 warning_at (loc, OPT_Wattributes,
6691 "attributes in parameter array declarator ignored");
6693 size_varies = false;
6694 array_parameter_p = true;
6696 else if (TREE_CODE (type) == FUNCTION_TYPE)
6698 if (type_quals & TYPE_QUAL_ATOMIC)
6700 error_at (loc,
6701 "%<_Atomic%>-qualified function type");
6702 type_quals &= ~TYPE_QUAL_ATOMIC;
6704 else if (type_quals)
6705 pedwarn (loc, OPT_Wpedantic,
6706 "ISO C forbids qualified function types");
6707 if (type_quals)
6708 type = c_build_qualified_type (type, type_quals);
6709 type = c_build_pointer_type (type);
6710 type_quals = TYPE_UNQUALIFIED;
6712 else if (type_quals)
6713 type = c_build_qualified_type (type, type_quals);
6715 decl = build_decl (declarator->id_loc,
6716 PARM_DECL, declarator->u.id, type);
6717 if (size_varies)
6718 C_DECL_VARIABLE_SIZE (decl) = 1;
6719 C_ARRAY_PARAMETER (decl) = array_parameter_p;
6721 /* Compute the type actually passed in the parmlist,
6722 for the case where there is no prototype.
6723 (For example, shorts and chars are passed as ints.)
6724 When there is a prototype, this is overridden later. */
6726 if (type == error_mark_node)
6727 promoted_type = type;
6728 else
6729 promoted_type = c_type_promotes_to (type);
6731 DECL_ARG_TYPE (decl) = promoted_type;
6732 if (declspecs->inline_p)
6733 pedwarn (loc, 0, "parameter %q+D declared %<inline%>", decl);
6734 if (declspecs->noreturn_p)
6735 pedwarn (loc, 0, "parameter %q+D declared %<_Noreturn%>", decl);
6737 else if (decl_context == FIELD)
6739 /* Note that the grammar rejects storage classes in typenames
6740 and fields. */
6741 gcc_assert (storage_class == csc_none && !threadp
6742 && !declspecs->inline_p && !declspecs->noreturn_p);
6744 /* Structure field. It may not be a function. */
6746 if (TREE_CODE (type) == FUNCTION_TYPE)
6748 error_at (loc, "field %qE declared as a function", name);
6749 type = build_pointer_type (type);
6751 else if (TREE_CODE (type) != ERROR_MARK
6752 && !COMPLETE_OR_UNBOUND_ARRAY_TYPE_P (type))
6754 if (name)
6755 error_at (loc, "field %qE has incomplete type", name);
6756 else
6757 error_at (loc, "unnamed field has incomplete type");
6758 type = error_mark_node;
6760 else if (TREE_CODE (type) == ARRAY_TYPE
6761 && TYPE_DOMAIN (type) == NULL_TREE)
6763 /* We have a flexible array member through a typedef.
6764 Set suitable range. Whether this is a correct position
6765 for a flexible array member will be determined elsewhere. */
6766 if (!in_system_header_at (input_location))
6767 pedwarn_c90 (loc, OPT_Wpedantic, "ISO C90 does not "
6768 "support flexible array members");
6769 type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
6770 TYPE_DOMAIN (type) = build_range_type (sizetype, size_zero_node,
6771 NULL_TREE);
6772 if (orig_qual_indirect == 0)
6773 orig_qual_type = NULL_TREE;
6775 type = c_build_qualified_type (type, type_quals, orig_qual_type,
6776 orig_qual_indirect);
6777 decl = build_decl (declarator->id_loc,
6778 FIELD_DECL, declarator->u.id, type);
6779 DECL_NONADDRESSABLE_P (decl) = bitfield;
6780 if (bitfield && !declarator->u.id)
6781 TREE_NO_WARNING (decl) = 1;
6783 if (size_varies)
6784 C_DECL_VARIABLE_SIZE (decl) = 1;
6786 else if (TREE_CODE (type) == FUNCTION_TYPE)
6788 if (storage_class == csc_register || threadp)
6790 error_at (loc, "invalid storage class for function %qE", name);
6792 else if (current_scope != file_scope)
6794 /* Function declaration not at file scope. Storage
6795 classes other than `extern' are not allowed, C99
6796 6.7.1p5, and `extern' makes no difference. However,
6797 GCC allows 'auto', perhaps with 'inline', to support
6798 nested functions. */
6799 if (storage_class == csc_auto)
6800 pedwarn (loc, OPT_Wpedantic,
6801 "invalid storage class for function %qE", name);
6802 else if (storage_class == csc_static)
6804 error_at (loc, "invalid storage class for function %qE", name);
6805 if (funcdef_flag)
6806 storage_class = declspecs->storage_class = csc_none;
6807 else
6808 return NULL_TREE;
6812 decl = build_decl (declarator->id_loc,
6813 FUNCTION_DECL, declarator->u.id, type);
6814 decl = build_decl_attribute_variant (decl, decl_attr);
6816 if (type_quals & TYPE_QUAL_ATOMIC)
6818 error_at (loc,
6819 "%<_Atomic%>-qualified function type");
6820 type_quals &= ~TYPE_QUAL_ATOMIC;
6822 else if (pedantic && type_quals && !DECL_IN_SYSTEM_HEADER (decl))
6823 pedwarn (loc, OPT_Wpedantic,
6824 "ISO C forbids qualified function types");
6826 /* Every function declaration is an external reference
6827 (DECL_EXTERNAL) except for those which are not at file
6828 scope and are explicitly declared "auto". This is
6829 forbidden by standard C (C99 6.7.1p5) and is interpreted by
6830 GCC to signify a forward declaration of a nested function. */
6831 if (storage_class == csc_auto && current_scope != file_scope)
6832 DECL_EXTERNAL (decl) = 0;
6833 /* In C99, a function which is declared 'inline' with 'extern'
6834 is not an external reference (which is confusing). It
6835 means that the later definition of the function must be output
6836 in this file, C99 6.7.4p6. In GNU C89, a function declared
6837 'extern inline' is an external reference. */
6838 else if (declspecs->inline_p && storage_class != csc_static)
6839 DECL_EXTERNAL (decl) = ((storage_class == csc_extern)
6840 == flag_gnu89_inline);
6841 else
6842 DECL_EXTERNAL (decl) = !initialized;
6844 /* Record absence of global scope for `static' or `auto'. */
6845 TREE_PUBLIC (decl)
6846 = !(storage_class == csc_static || storage_class == csc_auto);
6848 /* For a function definition, record the argument information
6849 block where store_parm_decls will look for it. */
6850 if (funcdef_flag)
6851 current_function_arg_info = arg_info;
6853 if (declspecs->default_int_p)
6854 C_FUNCTION_IMPLICIT_INT (decl) = 1;
6856 /* Record presence of `inline' and `_Noreturn', if it is
6857 reasonable. */
6858 if (flag_hosted && MAIN_NAME_P (declarator->u.id))
6860 if (declspecs->inline_p)
6861 pedwarn (loc, 0, "cannot inline function %<main%>");
6862 if (declspecs->noreturn_p)
6863 pedwarn (loc, 0, "%<main%> declared %<_Noreturn%>");
6865 else
6867 if (declspecs->inline_p)
6868 /* Record that the function is declared `inline'. */
6869 DECL_DECLARED_INLINE_P (decl) = 1;
6870 if (declspecs->noreturn_p)
6872 if (flag_isoc99)
6873 pedwarn_c99 (loc, OPT_Wpedantic,
6874 "ISO C99 does not support %<_Noreturn%>");
6875 else
6876 pedwarn_c99 (loc, OPT_Wpedantic,
6877 "ISO C90 does not support %<_Noreturn%>");
6878 TREE_THIS_VOLATILE (decl) = 1;
6882 else
6884 /* It's a variable. */
6885 /* An uninitialized decl with `extern' is a reference. */
6886 int extern_ref = !initialized && storage_class == csc_extern;
6888 type = c_build_qualified_type (type, type_quals, orig_qual_type,
6889 orig_qual_indirect);
6891 /* C99 6.2.2p7: It is invalid (compile-time undefined
6892 behavior) to create an 'extern' declaration for a
6893 variable if there is a global declaration that is
6894 'static' and the global declaration is not visible.
6895 (If the static declaration _is_ currently visible,
6896 the 'extern' declaration is taken to refer to that decl.) */
6897 if (extern_ref && current_scope != file_scope)
6899 tree global_decl = identifier_global_value (declarator->u.id);
6900 tree visible_decl = lookup_name (declarator->u.id);
6902 if (global_decl
6903 && global_decl != visible_decl
6904 && VAR_P (global_decl)
6905 && !TREE_PUBLIC (global_decl))
6906 error_at (loc, "variable previously declared %<static%> "
6907 "redeclared %<extern%>");
6910 decl = build_decl (declarator->id_loc,
6911 VAR_DECL, declarator->u.id, type);
6912 if (size_varies)
6913 C_DECL_VARIABLE_SIZE (decl) = 1;
6915 if (declspecs->inline_p)
6916 pedwarn (loc, 0, "variable %q+D declared %<inline%>", decl);
6917 if (declspecs->noreturn_p)
6918 pedwarn (loc, 0, "variable %q+D declared %<_Noreturn%>", decl);
6920 /* At file scope, an initialized extern declaration may follow
6921 a static declaration. In that case, DECL_EXTERNAL will be
6922 reset later in start_decl. */
6923 DECL_EXTERNAL (decl) = (storage_class == csc_extern);
6925 /* At file scope, the presence of a `static' or `register' storage
6926 class specifier, or the absence of all storage class specifiers
6927 makes this declaration a definition (perhaps tentative). Also,
6928 the absence of `static' makes it public. */
6929 if (current_scope == file_scope)
6931 TREE_PUBLIC (decl) = storage_class != csc_static;
6932 TREE_STATIC (decl) = !extern_ref;
6934 /* Not at file scope, only `static' makes a static definition. */
6935 else
6937 TREE_STATIC (decl) = (storage_class == csc_static);
6938 TREE_PUBLIC (decl) = extern_ref;
6941 if (threadp)
6942 set_decl_tls_model (decl, decl_default_tls_model (decl));
6945 if ((storage_class == csc_extern
6946 || (storage_class == csc_none
6947 && TREE_CODE (type) == FUNCTION_TYPE
6948 && !funcdef_flag))
6949 && variably_modified_type_p (type, NULL_TREE))
6951 /* C99 6.7.5.2p2 */
6952 if (TREE_CODE (type) == FUNCTION_TYPE)
6953 error_at (loc, "non-nested function with variably modified type");
6954 else
6955 error_at (loc, "object with variably modified type must have "
6956 "no linkage");
6959 /* Record `register' declaration for warnings on &
6960 and in case doing stupid register allocation. */
6962 if (storage_class == csc_register)
6964 C_DECL_REGISTER (decl) = 1;
6965 DECL_REGISTER (decl) = 1;
6968 /* Record constancy and volatility. */
6969 c_apply_type_quals_to_decl (type_quals, decl);
6971 /* Apply _Alignas specifiers. */
6972 if (alignas_align)
6974 SET_DECL_ALIGN (decl, alignas_align * BITS_PER_UNIT);
6975 DECL_USER_ALIGN (decl) = 1;
6978 /* If a type has volatile components, it should be stored in memory.
6979 Otherwise, the fact that those components are volatile
6980 will be ignored, and would even crash the compiler.
6981 Of course, this only makes sense on VAR,PARM, and RESULT decl's. */
6982 if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl))
6983 && (VAR_P (decl) || TREE_CODE (decl) == PARM_DECL
6984 || TREE_CODE (decl) == RESULT_DECL))
6986 /* It is not an error for a structure with volatile fields to
6987 be declared register, but reset DECL_REGISTER since it
6988 cannot actually go in a register. */
6989 int was_reg = C_DECL_REGISTER (decl);
6990 C_DECL_REGISTER (decl) = 0;
6991 DECL_REGISTER (decl) = 0;
6992 c_mark_addressable (decl);
6993 C_DECL_REGISTER (decl) = was_reg;
6996 /* This is the earliest point at which we might know the assembler
6997 name of a variable. Thus, if it's known before this, die horribly. */
6998 gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl));
7000 if (warn_cxx_compat
7001 && VAR_P (decl)
7002 && TREE_PUBLIC (decl)
7003 && TREE_STATIC (decl)
7004 && (RECORD_OR_UNION_TYPE_P (TREE_TYPE (decl))
7005 || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
7006 && TYPE_NAME (TREE_TYPE (decl)) == NULL_TREE)
7007 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wc___compat,
7008 ("non-local variable %qD with anonymous type is "
7009 "questionable in C++"),
7010 decl);
7012 return decl;
7016 /* Decode the parameter-list info for a function type or function definition.
7017 The argument is the value returned by `get_parm_info' (or made in c-parse.c
7018 if there is an identifier list instead of a parameter decl list).
7019 These two functions are separate because when a function returns
7020 or receives functions then each is called multiple times but the order
7021 of calls is different. The last call to `grokparms' is always the one
7022 that contains the formal parameter names of a function definition.
7024 Return a list of arg types to use in the FUNCTION_TYPE for this function.
7026 FUNCDEF_FLAG is true for a function definition, false for
7027 a mere declaration. A nonempty identifier-list gets an error message
7028 when FUNCDEF_FLAG is false. */
7030 static tree
7031 grokparms (struct c_arg_info *arg_info, bool funcdef_flag)
7033 tree arg_types = arg_info->types;
7035 if (funcdef_flag && arg_info->had_vla_unspec)
7037 /* A function definition isn't function prototype scope C99 6.2.1p4. */
7038 /* C99 6.7.5.2p4 */
7039 error ("%<[*]%> not allowed in other than function prototype scope");
7042 if (arg_types == NULL_TREE && !funcdef_flag
7043 && !in_system_header_at (input_location))
7044 warning (OPT_Wstrict_prototypes,
7045 "function declaration isn%'t a prototype");
7047 if (arg_types == error_mark_node)
7048 /* Don't set TYPE_ARG_TYPES in this case. */
7049 return NULL_TREE;
7051 else if (arg_types && TREE_CODE (TREE_VALUE (arg_types)) == IDENTIFIER_NODE)
7053 if (!funcdef_flag)
7055 pedwarn (input_location, 0, "parameter names (without types) in "
7056 "function declaration");
7057 arg_info->parms = NULL_TREE;
7059 else
7060 arg_info->parms = arg_info->types;
7062 arg_info->types = NULL_TREE;
7063 return NULL_TREE;
7065 else
7067 tree parm, type, typelt;
7068 unsigned int parmno;
7070 /* If there is a parameter of incomplete type in a definition,
7071 this is an error. In a declaration this is valid, and a
7072 struct or union type may be completed later, before any calls
7073 or definition of the function. In the case where the tag was
7074 first declared within the parameter list, a warning has
7075 already been given. If a parameter has void type, then
7076 however the function cannot be defined or called, so
7077 warn. */
7079 for (parm = arg_info->parms, typelt = arg_types, parmno = 1;
7080 parm;
7081 parm = DECL_CHAIN (parm), typelt = TREE_CHAIN (typelt), parmno++)
7083 type = TREE_VALUE (typelt);
7084 if (type == error_mark_node)
7085 continue;
7087 if (!COMPLETE_TYPE_P (type))
7089 if (funcdef_flag)
7091 if (DECL_NAME (parm))
7092 error_at (input_location,
7093 "parameter %u (%q+D) has incomplete type",
7094 parmno, parm);
7095 else
7096 error_at (DECL_SOURCE_LOCATION (parm),
7097 "parameter %u has incomplete type",
7098 parmno);
7100 TREE_VALUE (typelt) = error_mark_node;
7101 TREE_TYPE (parm) = error_mark_node;
7102 arg_types = NULL_TREE;
7104 else if (VOID_TYPE_P (type))
7106 if (DECL_NAME (parm))
7107 warning_at (input_location, 0,
7108 "parameter %u (%q+D) has void type",
7109 parmno, parm);
7110 else
7111 warning_at (DECL_SOURCE_LOCATION (parm), 0,
7112 "parameter %u has void type",
7113 parmno);
7117 if (DECL_NAME (parm) && TREE_USED (parm))
7118 warn_if_shadowing (parm);
7120 return arg_types;
7124 /* Allocate and initialize a c_arg_info structure from the parser's
7125 obstack. */
7127 struct c_arg_info *
7128 build_arg_info (void)
7130 struct c_arg_info *ret = XOBNEW (&parser_obstack, struct c_arg_info);
7131 ret->parms = NULL_TREE;
7132 ret->tags = NULL;
7133 ret->types = NULL_TREE;
7134 ret->others = NULL_TREE;
7135 ret->pending_sizes = NULL;
7136 ret->had_vla_unspec = 0;
7137 return ret;
7140 /* Take apart the current scope and return a c_arg_info structure with
7141 info on a parameter list just parsed.
7143 This structure is later fed to 'grokparms' and 'store_parm_decls'.
7145 ELLIPSIS being true means the argument list ended in '...' so don't
7146 append a sentinel (void_list_node) to the end of the type-list.
7148 EXPR is NULL or an expression that needs to be evaluated for the
7149 side effects of array size expressions in the parameters. */
7151 struct c_arg_info *
7152 get_parm_info (bool ellipsis, tree expr)
7154 struct c_binding *b = current_scope->bindings;
7155 struct c_arg_info *arg_info = build_arg_info ();
7157 tree parms = NULL_TREE;
7158 vec<c_arg_tag, va_gc> *tags = NULL;
7159 tree types = NULL_TREE;
7160 tree others = NULL_TREE;
7162 bool gave_void_only_once_err = false;
7164 arg_info->had_vla_unspec = current_scope->had_vla_unspec;
7166 /* The bindings in this scope must not get put into a block.
7167 We will take care of deleting the binding nodes. */
7168 current_scope->bindings = 0;
7170 /* This function is only called if there was *something* on the
7171 parameter list. */
7172 gcc_assert (b);
7174 /* A parameter list consisting solely of 'void' indicates that the
7175 function takes no arguments. But if the 'void' is qualified
7176 (by 'const' or 'volatile'), or has a storage class specifier
7177 ('register'), then the behavior is undefined; issue an error.
7178 Typedefs for 'void' are OK (see DR#157). */
7179 if (b->prev == 0 /* one binding */
7180 && TREE_CODE (b->decl) == PARM_DECL /* which is a parameter */
7181 && !DECL_NAME (b->decl) /* anonymous */
7182 && VOID_TYPE_P (TREE_TYPE (b->decl))) /* of void type */
7184 if (TYPE_QUALS (TREE_TYPE (b->decl)) != TYPE_UNQUALIFIED
7185 || C_DECL_REGISTER (b->decl))
7186 error_at (b->locus, "%<void%> as only parameter may not be qualified");
7188 /* There cannot be an ellipsis. */
7189 if (ellipsis)
7190 error_at (b->locus, "%<void%> must be the only parameter");
7192 arg_info->types = void_list_node;
7193 return arg_info;
7196 if (!ellipsis)
7197 types = void_list_node;
7199 /* Break up the bindings list into parms, tags, types, and others;
7200 apply sanity checks; purge the name-to-decl bindings. */
7201 while (b)
7203 tree decl = b->decl;
7204 tree type = TREE_TYPE (decl);
7205 c_arg_tag tag;
7206 const char *keyword;
7208 switch (TREE_CODE (decl))
7210 case PARM_DECL:
7211 if (b->id)
7213 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
7214 I_SYMBOL_BINDING (b->id) = b->shadowed;
7217 /* Check for forward decls that never got their actual decl. */
7218 if (TREE_ASM_WRITTEN (decl))
7219 error_at (b->locus,
7220 "parameter %q+D has just a forward declaration", decl);
7221 /* Check for (..., void, ...) and issue an error. */
7222 else if (VOID_TYPE_P (type) && !DECL_NAME (decl))
7224 if (!gave_void_only_once_err)
7226 error_at (b->locus, "%<void%> must be the only parameter");
7227 gave_void_only_once_err = true;
7230 else
7232 /* Valid parameter, add it to the list. */
7233 DECL_CHAIN (decl) = parms;
7234 parms = decl;
7236 /* Since there is a prototype, args are passed in their
7237 declared types. The back end may override this later. */
7238 DECL_ARG_TYPE (decl) = type;
7239 types = tree_cons (0, type, types);
7241 break;
7243 case ENUMERAL_TYPE: keyword = "enum"; goto tag;
7244 case UNION_TYPE: keyword = "union"; goto tag;
7245 case RECORD_TYPE: keyword = "struct"; goto tag;
7246 tag:
7247 /* Types may not have tag-names, in which case the type
7248 appears in the bindings list with b->id NULL. */
7249 if (b->id)
7251 gcc_assert (I_TAG_BINDING (b->id) == b);
7252 I_TAG_BINDING (b->id) = b->shadowed;
7255 /* Warn about any struct, union or enum tags defined in a
7256 parameter list. The scope of such types is limited to
7257 the parameter list, which is rarely if ever desirable
7258 (it's impossible to call such a function with type-
7259 correct arguments). An anonymous union parm type is
7260 meaningful as a GNU extension, so don't warn for that. */
7261 if (TREE_CODE (decl) != UNION_TYPE || b->id != NULL_TREE)
7263 if (b->id)
7264 /* The %s will be one of 'struct', 'union', or 'enum'. */
7265 warning_at (b->locus, 0,
7266 "%<%s %E%> declared inside parameter list"
7267 " will not be visible outside of this definition or"
7268 " declaration", keyword, b->id);
7269 else
7270 /* The %s will be one of 'struct', 'union', or 'enum'. */
7271 warning_at (b->locus, 0,
7272 "anonymous %s declared inside parameter list"
7273 " will not be visible outside of this definition or"
7274 " declaration", keyword);
7277 tag.id = b->id;
7278 tag.type = decl;
7279 vec_safe_push (tags, tag);
7280 break;
7282 case FUNCTION_DECL:
7283 /* FUNCTION_DECLs appear when there is an implicit function
7284 declaration in the parameter list. */
7285 gcc_assert (b->nested || seen_error ());
7286 goto set_shadowed;
7288 case CONST_DECL:
7289 case TYPE_DECL:
7290 /* CONST_DECLs appear here when we have an embedded enum,
7291 and TYPE_DECLs appear here when we have an embedded struct
7292 or union. No warnings for this - we already warned about the
7293 type itself. */
7295 /* When we reinsert this decl in the function body, we need
7296 to reconstruct whether it was marked as nested. */
7297 gcc_assert (!b->nested);
7298 DECL_CHAIN (decl) = others;
7299 others = decl;
7300 /* fall through */
7302 case ERROR_MARK:
7303 set_shadowed:
7304 /* error_mark_node appears here when we have an undeclared
7305 variable. Just throw it away. */
7306 if (b->id)
7308 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
7309 I_SYMBOL_BINDING (b->id) = b->shadowed;
7311 break;
7313 /* Other things that might be encountered. */
7314 case LABEL_DECL:
7315 case VAR_DECL:
7316 default:
7317 gcc_unreachable ();
7320 b = free_binding_and_advance (b);
7323 arg_info->parms = parms;
7324 arg_info->tags = tags;
7325 arg_info->types = types;
7326 arg_info->others = others;
7327 arg_info->pending_sizes = expr;
7328 return arg_info;
7331 /* Get the struct, enum or union (CODE says which) with tag NAME.
7332 Define the tag as a forward-reference with location LOC if it is
7333 not defined. Return a c_typespec structure for the type
7334 specifier. */
7336 struct c_typespec
7337 parser_xref_tag (location_t loc, enum tree_code code, tree name)
7339 struct c_typespec ret;
7340 tree ref;
7341 location_t refloc;
7343 ret.expr = NULL_TREE;
7344 ret.expr_const_operands = true;
7346 /* If a cross reference is requested, look up the type
7347 already defined for this tag and return it. */
7349 ref = lookup_tag (code, name, false, &refloc);
7350 /* If this is the right type of tag, return what we found.
7351 (This reference will be shadowed by shadow_tag later if appropriate.)
7352 If this is the wrong type of tag, do not return it. If it was the
7353 wrong type in the same scope, we will have had an error
7354 message already; if in a different scope and declaring
7355 a name, pending_xref_error will give an error message; but if in a
7356 different scope and not declaring a name, this tag should
7357 shadow the previous declaration of a different type of tag, and
7358 this would not work properly if we return the reference found.
7359 (For example, with "struct foo" in an outer scope, "union foo;"
7360 must shadow that tag with a new one of union type.) */
7361 ret.kind = (ref ? ctsk_tagref : ctsk_tagfirstref);
7362 if (ref && TREE_CODE (ref) == code)
7364 if (C_TYPE_DEFINED_IN_STRUCT (ref)
7365 && loc != UNKNOWN_LOCATION
7366 && warn_cxx_compat)
7368 switch (code)
7370 case ENUMERAL_TYPE:
7371 warning_at (loc, OPT_Wc___compat,
7372 ("enum type defined in struct or union "
7373 "is not visible in C++"));
7374 inform (refloc, "enum type defined here");
7375 break;
7376 case RECORD_TYPE:
7377 warning_at (loc, OPT_Wc___compat,
7378 ("struct defined in struct or union "
7379 "is not visible in C++"));
7380 inform (refloc, "struct defined here");
7381 break;
7382 case UNION_TYPE:
7383 warning_at (loc, OPT_Wc___compat,
7384 ("union defined in struct or union "
7385 "is not visible in C++"));
7386 inform (refloc, "union defined here");
7387 break;
7388 default:
7389 gcc_unreachable();
7393 ret.spec = ref;
7394 return ret;
7397 /* If no such tag is yet defined, create a forward-reference node
7398 and record it as the "definition".
7399 When a real declaration of this type is found,
7400 the forward-reference will be altered into a real type. */
7402 ref = make_node (code);
7403 if (code == ENUMERAL_TYPE)
7405 /* Give the type a default layout like unsigned int
7406 to avoid crashing if it does not get defined. */
7407 SET_TYPE_MODE (ref, TYPE_MODE (unsigned_type_node));
7408 SET_TYPE_ALIGN (ref, TYPE_ALIGN (unsigned_type_node));
7409 TYPE_USER_ALIGN (ref) = 0;
7410 TYPE_UNSIGNED (ref) = 1;
7411 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
7412 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
7413 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
7416 pushtag (loc, name, ref);
7418 ret.spec = ref;
7419 return ret;
7422 /* Get the struct, enum or union (CODE says which) with tag NAME.
7423 Define the tag as a forward-reference if it is not defined.
7424 Return a tree for the type. */
7426 tree
7427 xref_tag (enum tree_code code, tree name)
7429 return parser_xref_tag (input_location, code, name).spec;
7432 /* Make sure that the tag NAME is defined *in the current scope*
7433 at least as a forward reference.
7434 LOC is the location of the struct's definition.
7435 CODE says which kind of tag NAME ought to be.
7437 This stores the current value of the file static STRUCT_PARSE_INFO
7438 in *ENCLOSING_STRUCT_PARSE_INFO, and points STRUCT_PARSE_INFO at a
7439 new c_struct_parse_info structure. The old value of
7440 STRUCT_PARSE_INFO is restored in finish_struct. */
7442 tree
7443 start_struct (location_t loc, enum tree_code code, tree name,
7444 struct c_struct_parse_info **enclosing_struct_parse_info)
7446 /* If there is already a tag defined at this scope
7447 (as a forward reference), just return it. */
7449 tree ref = NULL_TREE;
7450 location_t refloc = UNKNOWN_LOCATION;
7452 if (name != NULL_TREE)
7453 ref = lookup_tag (code, name, true, &refloc);
7454 if (ref && TREE_CODE (ref) == code)
7456 if (TYPE_STUB_DECL (ref))
7457 refloc = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (ref));
7459 if (TYPE_SIZE (ref))
7461 if (code == UNION_TYPE)
7462 error_at (loc, "redefinition of %<union %E%>", name);
7463 else
7464 error_at (loc, "redefinition of %<struct %E%>", name);
7465 if (refloc != UNKNOWN_LOCATION)
7466 inform (refloc, "originally defined here");
7467 /* Don't create structures using a name already in use. */
7468 ref = NULL_TREE;
7470 else if (C_TYPE_BEING_DEFINED (ref))
7472 if (code == UNION_TYPE)
7473 error_at (loc, "nested redefinition of %<union %E%>", name);
7474 else
7475 error_at (loc, "nested redefinition of %<struct %E%>", name);
7476 /* Don't bother to report "originally defined here" for a
7477 nested redefinition; the original definition should be
7478 obvious. */
7479 /* Don't create structures that contain themselves. */
7480 ref = NULL_TREE;
7484 /* Otherwise create a forward-reference just so the tag is in scope. */
7486 if (ref == NULL_TREE || TREE_CODE (ref) != code)
7488 ref = make_node (code);
7489 pushtag (loc, name, ref);
7492 C_TYPE_BEING_DEFINED (ref) = 1;
7493 for (tree v = TYPE_MAIN_VARIANT (ref); v; v = TYPE_NEXT_VARIANT (v))
7494 TYPE_PACKED (v) = flag_pack_struct;
7496 *enclosing_struct_parse_info = struct_parse_info;
7497 struct_parse_info = new c_struct_parse_info ();
7499 /* FIXME: This will issue a warning for a use of a type defined
7500 within a statement expr used within sizeof, et. al. This is not
7501 terribly serious as C++ doesn't permit statement exprs within
7502 sizeof anyhow. */
7503 if (warn_cxx_compat && (in_sizeof || in_typeof || in_alignof))
7504 warning_at (loc, OPT_Wc___compat,
7505 "defining type in %qs expression is invalid in C++",
7506 (in_sizeof
7507 ? "sizeof"
7508 : (in_typeof ? "typeof" : "alignof")));
7510 return ref;
7513 /* Process the specs, declarator and width (NULL if omitted)
7514 of a structure component, returning a FIELD_DECL node.
7515 WIDTH is non-NULL for bit-fields only, and is an INTEGER_CST node.
7516 DECL_ATTRS is as for grokdeclarator.
7518 LOC is the location of the structure component.
7520 This is done during the parsing of the struct declaration.
7521 The FIELD_DECL nodes are chained together and the lot of them
7522 are ultimately passed to `build_struct' to make the RECORD_TYPE node. */
7524 tree
7525 grokfield (location_t loc,
7526 struct c_declarator *declarator, struct c_declspecs *declspecs,
7527 tree width, tree *decl_attrs)
7529 tree value;
7531 if (declarator->kind == cdk_id && declarator->u.id == NULL_TREE
7532 && width == NULL_TREE)
7534 /* This is an unnamed decl.
7536 If we have something of the form "union { list } ;" then this
7537 is the anonymous union extension. Similarly for struct.
7539 If this is something of the form "struct foo;", then
7540 If MS or Plan 9 extensions are enabled, this is handled as
7541 an anonymous struct.
7542 Otherwise this is a forward declaration of a structure tag.
7544 If this is something of the form "foo;" and foo is a TYPE_DECL, then
7545 If foo names a structure or union without a tag, then this
7546 is an anonymous struct (this is permitted by C11).
7547 If MS or Plan 9 extensions are enabled and foo names a
7548 structure, then again this is an anonymous struct.
7549 Otherwise this is an error.
7551 Oh what a horrid tangled web we weave. I wonder if MS consciously
7552 took this from Plan 9 or if it was an accident of implementation
7553 that took root before someone noticed the bug... */
7555 tree type = declspecs->type;
7556 bool type_ok = RECORD_OR_UNION_TYPE_P (type);
7557 bool ok = false;
7559 if (type_ok
7560 && (flag_ms_extensions
7561 || flag_plan9_extensions
7562 || !declspecs->typedef_p))
7564 if (flag_ms_extensions || flag_plan9_extensions)
7565 ok = true;
7566 else if (TYPE_NAME (type) == NULL)
7567 ok = true;
7568 else
7569 ok = false;
7571 if (!ok)
7573 pedwarn (loc, 0, "declaration does not declare anything");
7574 return NULL_TREE;
7576 if (flag_isoc99)
7577 pedwarn_c99 (loc, OPT_Wpedantic,
7578 "ISO C99 doesn%'t support unnamed structs/unions");
7579 else
7580 pedwarn_c99 (loc, OPT_Wpedantic,
7581 "ISO C90 doesn%'t support unnamed structs/unions");
7584 value = grokdeclarator (declarator, declspecs, FIELD, false,
7585 width ? &width : NULL, decl_attrs, NULL, NULL,
7586 DEPRECATED_NORMAL);
7588 finish_decl (value, loc, NULL_TREE, NULL_TREE, NULL_TREE);
7589 DECL_INITIAL (value) = width;
7591 if (warn_cxx_compat && DECL_NAME (value) != NULL_TREE)
7593 /* If we currently have a binding for this field, set the
7594 in_struct field in the binding, so that we warn about lookups
7595 which find it. */
7596 struct c_binding *b = I_SYMBOL_BINDING (DECL_NAME (value));
7597 if (b != NULL)
7599 /* If the in_struct field is not yet set, push it on a list
7600 to be cleared when this struct is finished. */
7601 if (!b->in_struct)
7603 struct_parse_info->fields.safe_push (b);
7604 b->in_struct = 1;
7609 return value;
7612 /* Subroutine of detect_field_duplicates: return whether X and Y,
7613 which are both fields in the same struct, have duplicate field
7614 names. */
7616 static bool
7617 is_duplicate_field (tree x, tree y)
7619 if (DECL_NAME (x) != NULL_TREE && DECL_NAME (x) == DECL_NAME (y))
7620 return true;
7622 /* When using -fplan9-extensions, an anonymous field whose name is a
7623 typedef can duplicate a field name. */
7624 if (flag_plan9_extensions
7625 && (DECL_NAME (x) == NULL_TREE || DECL_NAME (y) == NULL_TREE))
7627 tree xt, xn, yt, yn;
7629 xt = TREE_TYPE (x);
7630 if (DECL_NAME (x) != NULL_TREE)
7631 xn = DECL_NAME (x);
7632 else if (RECORD_OR_UNION_TYPE_P (xt)
7633 && TYPE_NAME (xt) != NULL_TREE
7634 && TREE_CODE (TYPE_NAME (xt)) == TYPE_DECL)
7635 xn = DECL_NAME (TYPE_NAME (xt));
7636 else
7637 xn = NULL_TREE;
7639 yt = TREE_TYPE (y);
7640 if (DECL_NAME (y) != NULL_TREE)
7641 yn = DECL_NAME (y);
7642 else if (RECORD_OR_UNION_TYPE_P (yt)
7643 && TYPE_NAME (yt) != NULL_TREE
7644 && TREE_CODE (TYPE_NAME (yt)) == TYPE_DECL)
7645 yn = DECL_NAME (TYPE_NAME (yt));
7646 else
7647 yn = NULL_TREE;
7649 if (xn != NULL_TREE && xn == yn)
7650 return true;
7653 return false;
7656 /* Subroutine of detect_field_duplicates: add the fields of FIELDLIST
7657 to HTAB, giving errors for any duplicates. */
7659 static void
7660 detect_field_duplicates_hash (tree fieldlist,
7661 hash_table<nofree_ptr_hash <tree_node> > *htab)
7663 tree x, y;
7664 tree_node **slot;
7666 for (x = fieldlist; x ; x = DECL_CHAIN (x))
7667 if ((y = DECL_NAME (x)) != NULL_TREE)
7669 slot = htab->find_slot (y, INSERT);
7670 if (*slot)
7672 error ("duplicate member %q+D", x);
7673 DECL_NAME (x) = NULL_TREE;
7675 *slot = y;
7677 else if (RECORD_OR_UNION_TYPE_P (TREE_TYPE (x)))
7679 detect_field_duplicates_hash (TYPE_FIELDS (TREE_TYPE (x)), htab);
7681 /* When using -fplan9-extensions, an anonymous field whose
7682 name is a typedef can duplicate a field name. */
7683 if (flag_plan9_extensions
7684 && TYPE_NAME (TREE_TYPE (x)) != NULL_TREE
7685 && TREE_CODE (TYPE_NAME (TREE_TYPE (x))) == TYPE_DECL)
7687 tree xn = DECL_NAME (TYPE_NAME (TREE_TYPE (x)));
7688 slot = htab->find_slot (xn, INSERT);
7689 if (*slot)
7690 error ("duplicate member %q+D", TYPE_NAME (TREE_TYPE (x)));
7691 *slot = xn;
7696 /* Generate an error for any duplicate field names in FIELDLIST. Munge
7697 the list such that this does not present a problem later. */
7699 static void
7700 detect_field_duplicates (tree fieldlist)
7702 tree x, y;
7703 int timeout = 10;
7705 /* If the struct is the list of instance variables of an Objective-C
7706 class, then we need to check all the instance variables of
7707 superclasses when checking for duplicates (since you can't have
7708 an instance variable in a subclass with the same name as an
7709 instance variable in a superclass). We pass on this job to the
7710 Objective-C compiler. objc_detect_field_duplicates() will return
7711 false if we are not checking the list of instance variables and
7712 the C frontend should proceed with the standard field duplicate
7713 checks. If we are checking the list of instance variables, the
7714 ObjC frontend will do the check, emit the errors if needed, and
7715 then return true. */
7716 if (c_dialect_objc ())
7717 if (objc_detect_field_duplicates (false))
7718 return;
7720 /* First, see if there are more than "a few" fields.
7721 This is trivially true if there are zero or one fields. */
7722 if (!fieldlist || !DECL_CHAIN (fieldlist))
7723 return;
7724 x = fieldlist;
7725 do {
7726 timeout--;
7727 if (DECL_NAME (x) == NULL_TREE
7728 && RECORD_OR_UNION_TYPE_P (TREE_TYPE (x)))
7729 timeout = 0;
7730 x = DECL_CHAIN (x);
7731 } while (timeout > 0 && x);
7733 /* If there were "few" fields and no anonymous structures or unions,
7734 avoid the overhead of allocating a hash table. Instead just do
7735 the nested traversal thing. */
7736 if (timeout > 0)
7738 for (x = DECL_CHAIN (fieldlist); x; x = DECL_CHAIN (x))
7739 /* When using -fplan9-extensions, we can have duplicates
7740 between typedef names and fields. */
7741 if (DECL_NAME (x)
7742 || (flag_plan9_extensions
7743 && DECL_NAME (x) == NULL_TREE
7744 && RECORD_OR_UNION_TYPE_P (TREE_TYPE (x))
7745 && TYPE_NAME (TREE_TYPE (x)) != NULL_TREE
7746 && TREE_CODE (TYPE_NAME (TREE_TYPE (x))) == TYPE_DECL))
7748 for (y = fieldlist; y != x; y = TREE_CHAIN (y))
7749 if (is_duplicate_field (y, x))
7751 error ("duplicate member %q+D", x);
7752 DECL_NAME (x) = NULL_TREE;
7756 else
7758 hash_table<nofree_ptr_hash <tree_node> > htab (37);
7759 detect_field_duplicates_hash (fieldlist, &htab);
7763 /* Finish up struct info used by -Wc++-compat. */
7765 static void
7766 warn_cxx_compat_finish_struct (tree fieldlist, enum tree_code code,
7767 location_t record_loc)
7769 unsigned int ix;
7770 tree x;
7771 struct c_binding *b;
7773 if (fieldlist == NULL_TREE)
7775 if (code == RECORD_TYPE)
7776 warning_at (record_loc, OPT_Wc___compat,
7777 "empty struct has size 0 in C, size 1 in C++");
7778 else
7779 warning_at (record_loc, OPT_Wc___compat,
7780 "empty union has size 0 in C, size 1 in C++");
7783 /* Set the C_TYPE_DEFINED_IN_STRUCT flag for each type defined in
7784 the current struct. We do this now at the end of the struct
7785 because the flag is used to issue visibility warnings, and we
7786 only want to issue those warnings if the type is referenced
7787 outside of the struct declaration. */
7788 FOR_EACH_VEC_ELT (struct_parse_info->struct_types, ix, x)
7789 C_TYPE_DEFINED_IN_STRUCT (x) = 1;
7791 /* The TYPEDEFS_SEEN field of STRUCT_PARSE_INFO is a list of
7792 typedefs used when declaring fields in this struct. If the name
7793 of any of the fields is also a typedef name then the struct would
7794 not parse in C++, because the C++ lookup rules say that the
7795 typedef name would be looked up in the context of the struct, and
7796 would thus be the field rather than the typedef. */
7797 if (!struct_parse_info->typedefs_seen.is_empty ()
7798 && fieldlist != NULL_TREE)
7800 /* Use a hash_set<tree> using the name of the typedef. We can use
7801 a hash_set<tree> because identifiers are interned. */
7802 hash_set<tree> tset;
7804 FOR_EACH_VEC_ELT (struct_parse_info->typedefs_seen, ix, x)
7805 tset.add (DECL_NAME (x));
7807 for (x = fieldlist; x != NULL_TREE; x = DECL_CHAIN (x))
7809 if (DECL_NAME (x) != NULL_TREE
7810 && tset.contains (DECL_NAME (x)))
7812 warning_at (DECL_SOURCE_LOCATION (x), OPT_Wc___compat,
7813 ("using %qD as both field and typedef name is "
7814 "invalid in C++"),
7816 /* FIXME: It would be nice to report the location where
7817 the typedef name is used. */
7822 /* For each field which has a binding and which was not defined in
7823 an enclosing struct, clear the in_struct field. */
7824 FOR_EACH_VEC_ELT (struct_parse_info->fields, ix, b)
7825 b->in_struct = 0;
7828 /* Fill in the fields of a RECORD_TYPE or UNION_TYPE node, T.
7829 LOC is the location of the RECORD_TYPE or UNION_TYPE's definition.
7830 FIELDLIST is a chain of FIELD_DECL nodes for the fields.
7831 ATTRIBUTES are attributes to be applied to the structure.
7833 ENCLOSING_STRUCT_PARSE_INFO is the value of STRUCT_PARSE_INFO when
7834 the struct was started. */
7836 tree
7837 finish_struct (location_t loc, tree t, tree fieldlist, tree attributes,
7838 struct c_struct_parse_info *enclosing_struct_parse_info)
7840 tree x;
7841 bool toplevel = file_scope == current_scope;
7843 /* If this type was previously laid out as a forward reference,
7844 make sure we lay it out again. */
7846 TYPE_SIZE (t) = NULL_TREE;
7848 decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
7850 if (pedantic)
7852 for (x = fieldlist; x; x = DECL_CHAIN (x))
7854 if (DECL_NAME (x) != NULL_TREE)
7855 break;
7856 if (flag_isoc11 && RECORD_OR_UNION_TYPE_P (TREE_TYPE (x)))
7857 break;
7860 if (x == NULL_TREE)
7862 if (TREE_CODE (t) == UNION_TYPE)
7864 if (fieldlist)
7865 pedwarn (loc, OPT_Wpedantic, "union has no named members");
7866 else
7867 pedwarn (loc, OPT_Wpedantic, "union has no members");
7869 else
7871 if (fieldlist)
7872 pedwarn (loc, OPT_Wpedantic, "struct has no named members");
7873 else
7874 pedwarn (loc, OPT_Wpedantic, "struct has no members");
7879 /* Install struct as DECL_CONTEXT of each field decl.
7880 Also process specified field sizes, found in the DECL_INITIAL,
7881 storing 0 there after the type has been changed to precision equal
7882 to its width, rather than the precision of the specified standard
7883 type. (Correct layout requires the original type to have been preserved
7884 until now.) */
7886 bool saw_named_field = false;
7887 for (x = fieldlist; x; x = DECL_CHAIN (x))
7889 if (TREE_TYPE (x) == error_mark_node)
7890 continue;
7892 DECL_CONTEXT (x) = t;
7894 /* If any field is const, the structure type is pseudo-const. */
7895 if (TREE_READONLY (x))
7896 C_TYPE_FIELDS_READONLY (t) = 1;
7897 else
7899 /* A field that is pseudo-const makes the structure likewise. */
7900 tree t1 = strip_array_types (TREE_TYPE (x));
7901 if (RECORD_OR_UNION_TYPE_P (t1) && C_TYPE_FIELDS_READONLY (t1))
7902 C_TYPE_FIELDS_READONLY (t) = 1;
7905 /* Any field that is volatile means variables of this type must be
7906 treated in some ways as volatile. */
7907 if (TREE_THIS_VOLATILE (x))
7908 C_TYPE_FIELDS_VOLATILE (t) = 1;
7910 /* Any field of nominal variable size implies structure is too. */
7911 if (C_DECL_VARIABLE_SIZE (x))
7912 C_TYPE_VARIABLE_SIZE (t) = 1;
7914 if (DECL_INITIAL (x))
7916 unsigned HOST_WIDE_INT width = tree_to_uhwi (DECL_INITIAL (x));
7917 DECL_SIZE (x) = bitsize_int (width);
7918 DECL_BIT_FIELD (x) = 1;
7919 SET_DECL_C_BIT_FIELD (x);
7922 if (TYPE_PACKED (t)
7923 && (DECL_BIT_FIELD (x)
7924 || TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT))
7925 DECL_PACKED (x) = 1;
7927 /* Detect flexible array member in an invalid context. */
7928 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
7929 && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
7930 && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
7931 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
7933 if (TREE_CODE (t) == UNION_TYPE)
7935 error_at (DECL_SOURCE_LOCATION (x),
7936 "flexible array member in union");
7937 TREE_TYPE (x) = error_mark_node;
7939 else if (DECL_CHAIN (x) != NULL_TREE)
7941 error_at (DECL_SOURCE_LOCATION (x),
7942 "flexible array member not at end of struct");
7943 TREE_TYPE (x) = error_mark_node;
7945 else if (!saw_named_field)
7947 error_at (DECL_SOURCE_LOCATION (x),
7948 "flexible array member in a struct with no named "
7949 "members");
7950 TREE_TYPE (x) = error_mark_node;
7954 if (pedantic && TREE_CODE (t) == RECORD_TYPE
7955 && flexible_array_type_p (TREE_TYPE (x)))
7956 pedwarn (DECL_SOURCE_LOCATION (x), OPT_Wpedantic,
7957 "invalid use of structure with flexible array member");
7959 if (DECL_NAME (x)
7960 || RECORD_OR_UNION_TYPE_P (TREE_TYPE (x)))
7961 saw_named_field = true;
7964 detect_field_duplicates (fieldlist);
7966 /* Now we have the nearly final fieldlist. Record it,
7967 then lay out the structure or union (including the fields). */
7969 TYPE_FIELDS (t) = fieldlist;
7971 maybe_apply_pragma_scalar_storage_order (t);
7973 layout_type (t);
7975 if (TYPE_SIZE_UNIT (t)
7976 && TREE_CODE (TYPE_SIZE_UNIT (t)) == INTEGER_CST
7977 && !TREE_OVERFLOW (TYPE_SIZE_UNIT (t))
7978 && !valid_constant_size_p (TYPE_SIZE_UNIT (t)))
7979 error ("type %qT is too large", t);
7981 /* Give bit-fields their proper types and rewrite the type of array fields
7982 with scalar component if the enclosing type has reverse storage order. */
7983 for (tree field = fieldlist; field; field = DECL_CHAIN (field))
7985 if (TREE_CODE (field) == FIELD_DECL
7986 && DECL_INITIAL (field)
7987 && TREE_TYPE (field) != error_mark_node)
7989 unsigned HOST_WIDE_INT width
7990 = tree_to_uhwi (DECL_INITIAL (field));
7991 tree type = TREE_TYPE (field);
7992 if (width != TYPE_PRECISION (type))
7994 TREE_TYPE (field)
7995 = c_build_bitfield_integer_type (width, TYPE_UNSIGNED (type));
7996 SET_DECL_MODE (field, TYPE_MODE (TREE_TYPE (field)));
7998 DECL_INITIAL (field) = NULL_TREE;
8000 else if (TYPE_REVERSE_STORAGE_ORDER (t)
8001 && TREE_CODE (field) == FIELD_DECL
8002 && TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE)
8004 tree ftype = TREE_TYPE (field);
8005 tree ctype = strip_array_types (ftype);
8006 if (!RECORD_OR_UNION_TYPE_P (ctype) && TYPE_MODE (ctype) != QImode)
8008 tree fmain_type = TYPE_MAIN_VARIANT (ftype);
8009 tree *typep = &fmain_type;
8010 do {
8011 *typep = build_distinct_type_copy (*typep);
8012 TYPE_REVERSE_STORAGE_ORDER (*typep) = 1;
8013 typep = &TREE_TYPE (*typep);
8014 } while (TREE_CODE (*typep) == ARRAY_TYPE);
8015 TREE_TYPE (field)
8016 = c_build_qualified_type (fmain_type, TYPE_QUALS (ftype));
8021 /* Now we have the truly final field list.
8022 Store it in this type and in the variants. */
8024 TYPE_FIELDS (t) = fieldlist;
8026 /* If there are lots of fields, sort so we can look through them fast.
8027 We arbitrarily consider 16 or more elts to be "a lot". */
8030 int len = 0;
8032 for (x = fieldlist; x; x = DECL_CHAIN (x))
8034 if (len > 15 || DECL_NAME (x) == NULL)
8035 break;
8036 len += 1;
8039 if (len > 15)
8041 tree *field_array;
8042 struct lang_type *space;
8043 struct sorted_fields_type *space2;
8045 len += list_length (x);
8047 /* Use the same allocation policy here that make_node uses, to
8048 ensure that this lives as long as the rest of the struct decl.
8049 All decls in an inline function need to be saved. */
8051 space = ggc_cleared_alloc<struct lang_type> ();
8052 space2 = (sorted_fields_type *) ggc_internal_alloc
8053 (sizeof (struct sorted_fields_type) + len * sizeof (tree));
8055 len = 0;
8056 space->s = space2;
8057 field_array = &space2->elts[0];
8058 for (x = fieldlist; x; x = DECL_CHAIN (x))
8060 field_array[len++] = x;
8062 /* If there is anonymous struct or union, break out of the loop. */
8063 if (DECL_NAME (x) == NULL)
8064 break;
8066 /* Found no anonymous struct/union. Add the TYPE_LANG_SPECIFIC. */
8067 if (x == NULL)
8069 TYPE_LANG_SPECIFIC (t) = space;
8070 TYPE_LANG_SPECIFIC (t)->s->len = len;
8071 field_array = TYPE_LANG_SPECIFIC (t)->s->elts;
8072 qsort (field_array, len, sizeof (tree), field_decl_cmp);
8077 /* Note: C_TYPE_INCOMPLETE_VARS overloads TYPE_VFIELD which is used
8078 in dwarf2out via rest_of_decl_compilation below and means
8079 something totally different. Since we will be clearing
8080 C_TYPE_INCOMPLETE_VARS shortly after we iterate through them,
8081 clear it ahead of time and avoid problems in dwarf2out. Ideally,
8082 C_TYPE_INCOMPLETE_VARS should use some language specific
8083 node. */
8084 tree incomplete_vars = C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t));
8085 for (x = TYPE_MAIN_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
8087 TYPE_FIELDS (x) = TYPE_FIELDS (t);
8088 TYPE_LANG_SPECIFIC (x) = TYPE_LANG_SPECIFIC (t);
8089 C_TYPE_FIELDS_READONLY (x) = C_TYPE_FIELDS_READONLY (t);
8090 C_TYPE_FIELDS_VOLATILE (x) = C_TYPE_FIELDS_VOLATILE (t);
8091 C_TYPE_VARIABLE_SIZE (x) = C_TYPE_VARIABLE_SIZE (t);
8092 C_TYPE_INCOMPLETE_VARS (x) = NULL_TREE;
8095 /* If this was supposed to be a transparent union, but we can't
8096 make it one, warn and turn off the flag. */
8097 if (TREE_CODE (t) == UNION_TYPE
8098 && TYPE_TRANSPARENT_AGGR (t)
8099 && (!TYPE_FIELDS (t) || TYPE_MODE (t) != DECL_MODE (TYPE_FIELDS (t))))
8101 TYPE_TRANSPARENT_AGGR (t) = 0;
8102 warning_at (loc, 0, "union cannot be made transparent");
8105 /* If this structure or union completes the type of any previous
8106 variable declaration, lay it out and output its rtl. */
8107 for (x = incomplete_vars; x; x = TREE_CHAIN (x))
8109 tree decl = TREE_VALUE (x);
8110 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
8111 layout_array_type (TREE_TYPE (decl));
8112 if (TREE_CODE (decl) != TYPE_DECL)
8114 layout_decl (decl, 0);
8115 if (c_dialect_objc ())
8116 objc_check_decl (decl);
8117 rest_of_decl_compilation (decl, toplevel, 0);
8121 /* Update type location to the one of the definition, instead of e.g.
8122 a forward declaration. */
8123 if (TYPE_STUB_DECL (t))
8124 DECL_SOURCE_LOCATION (TYPE_STUB_DECL (t)) = loc;
8126 /* Finish debugging output for this type. */
8127 rest_of_type_compilation (t, toplevel);
8129 /* If we're inside a function proper, i.e. not file-scope and not still
8130 parsing parameters, then arrange for the size of a variable sized type
8131 to be bound now. */
8132 if (building_stmt_list_p () && variably_modified_type_p (t, NULL_TREE))
8133 add_stmt (build_stmt (loc,
8134 DECL_EXPR, build_decl (loc, TYPE_DECL, NULL, t)));
8136 if (warn_cxx_compat)
8137 warn_cxx_compat_finish_struct (fieldlist, TREE_CODE (t), loc);
8139 delete struct_parse_info;
8141 struct_parse_info = enclosing_struct_parse_info;
8143 /* If this struct is defined inside a struct, add it to
8144 struct_types. */
8145 if (warn_cxx_compat
8146 && struct_parse_info != NULL
8147 && !in_sizeof && !in_typeof && !in_alignof)
8148 struct_parse_info->struct_types.safe_push (t);
8150 return t;
8153 /* Lay out the type T, and its element type, and so on. */
8155 static void
8156 layout_array_type (tree t)
8158 if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
8159 layout_array_type (TREE_TYPE (t));
8160 layout_type (t);
8163 /* Begin compiling the definition of an enumeration type.
8164 NAME is its name (or null if anonymous).
8165 LOC is the enum's location.
8166 Returns the type object, as yet incomplete.
8167 Also records info about it so that build_enumerator
8168 may be used to declare the individual values as they are read. */
8170 tree
8171 start_enum (location_t loc, struct c_enum_contents *the_enum, tree name)
8173 tree enumtype = NULL_TREE;
8174 location_t enumloc = UNKNOWN_LOCATION;
8176 /* If this is the real definition for a previous forward reference,
8177 fill in the contents in the same object that used to be the
8178 forward reference. */
8180 if (name != NULL_TREE)
8181 enumtype = lookup_tag (ENUMERAL_TYPE, name, true, &enumloc);
8183 if (enumtype == NULL_TREE || TREE_CODE (enumtype) != ENUMERAL_TYPE)
8185 enumtype = make_node (ENUMERAL_TYPE);
8186 pushtag (loc, name, enumtype);
8188 /* Update type location to the one of the definition, instead of e.g.
8189 a forward declaration. */
8190 else if (TYPE_STUB_DECL (enumtype))
8192 enumloc = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (enumtype));
8193 DECL_SOURCE_LOCATION (TYPE_STUB_DECL (enumtype)) = loc;
8196 if (C_TYPE_BEING_DEFINED (enumtype))
8197 error_at (loc, "nested redefinition of %<enum %E%>", name);
8199 C_TYPE_BEING_DEFINED (enumtype) = 1;
8201 if (TYPE_VALUES (enumtype) != NULL_TREE)
8203 /* This enum is a named one that has been declared already. */
8204 error_at (loc, "redeclaration of %<enum %E%>", name);
8205 if (enumloc != UNKNOWN_LOCATION)
8206 inform (enumloc, "originally defined here");
8208 /* Completely replace its old definition.
8209 The old enumerators remain defined, however. */
8210 TYPE_VALUES (enumtype) = NULL_TREE;
8213 the_enum->enum_next_value = integer_zero_node;
8214 the_enum->enum_overflow = 0;
8216 if (flag_short_enums)
8217 for (tree v = TYPE_MAIN_VARIANT (enumtype); v; v = TYPE_NEXT_VARIANT (v))
8218 TYPE_PACKED (v) = 1;
8220 /* FIXME: This will issue a warning for a use of a type defined
8221 within sizeof in a statement expr. This is not terribly serious
8222 as C++ doesn't permit statement exprs within sizeof anyhow. */
8223 if (warn_cxx_compat && (in_sizeof || in_typeof || in_alignof))
8224 warning_at (loc, OPT_Wc___compat,
8225 "defining type in %qs expression is invalid in C++",
8226 (in_sizeof
8227 ? "sizeof"
8228 : (in_typeof ? "typeof" : "alignof")));
8230 return enumtype;
8233 /* After processing and defining all the values of an enumeration type,
8234 install their decls in the enumeration type and finish it off.
8235 ENUMTYPE is the type object, VALUES a list of decl-value pairs,
8236 and ATTRIBUTES are the specified attributes.
8237 Returns ENUMTYPE. */
8239 tree
8240 finish_enum (tree enumtype, tree values, tree attributes)
8242 tree pair, tem;
8243 tree minnode = NULL_TREE, maxnode = NULL_TREE;
8244 int precision;
8245 signop sign;
8246 bool toplevel = (file_scope == current_scope);
8247 struct lang_type *lt;
8249 decl_attributes (&enumtype, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
8251 /* Calculate the maximum value of any enumerator in this type. */
8253 if (values == error_mark_node)
8254 minnode = maxnode = integer_zero_node;
8255 else
8257 minnode = maxnode = TREE_VALUE (values);
8258 for (pair = TREE_CHAIN (values); pair; pair = TREE_CHAIN (pair))
8260 tree value = TREE_VALUE (pair);
8261 if (tree_int_cst_lt (maxnode, value))
8262 maxnode = value;
8263 if (tree_int_cst_lt (value, minnode))
8264 minnode = value;
8268 /* Construct the final type of this enumeration. It is the same
8269 as one of the integral types - the narrowest one that fits, except
8270 that normally we only go as narrow as int - and signed iff any of
8271 the values are negative. */
8272 sign = (tree_int_cst_sgn (minnode) >= 0) ? UNSIGNED : SIGNED;
8273 precision = MAX (tree_int_cst_min_precision (minnode, sign),
8274 tree_int_cst_min_precision (maxnode, sign));
8276 /* If the precision of the type was specified with an attribute and it
8277 was too small, give an error. Otherwise, use it. */
8278 if (TYPE_PRECISION (enumtype) && lookup_attribute ("mode", attributes))
8280 if (precision > TYPE_PRECISION (enumtype))
8282 TYPE_PRECISION (enumtype) = 0;
8283 error ("specified mode too small for enumeral values");
8285 else
8286 precision = TYPE_PRECISION (enumtype);
8288 else
8289 TYPE_PRECISION (enumtype) = 0;
8291 if (TYPE_PACKED (enumtype)
8292 || precision > TYPE_PRECISION (integer_type_node)
8293 || TYPE_PRECISION (enumtype))
8295 tem = c_common_type_for_size (precision, sign == UNSIGNED ? 1 : 0);
8296 if (tem == NULL)
8298 warning (0, "enumeration values exceed range of largest integer");
8299 tem = long_long_integer_type_node;
8302 else
8303 tem = sign == UNSIGNED ? unsigned_type_node : integer_type_node;
8305 TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (tem);
8306 TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (tem);
8307 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (tem);
8308 SET_TYPE_ALIGN (enumtype, TYPE_ALIGN (tem));
8309 TYPE_SIZE (enumtype) = NULL_TREE;
8310 TYPE_PRECISION (enumtype) = TYPE_PRECISION (tem);
8312 layout_type (enumtype);
8314 if (values != error_mark_node)
8316 /* Change the type of the enumerators to be the enum type. We
8317 need to do this irrespective of the size of the enum, for
8318 proper type checking. Replace the DECL_INITIALs of the
8319 enumerators, and the value slots of the list, with copies
8320 that have the enum type; they cannot be modified in place
8321 because they may be shared (e.g. integer_zero_node) Finally,
8322 change the purpose slots to point to the names of the decls. */
8323 for (pair = values; pair; pair = TREE_CHAIN (pair))
8325 tree enu = TREE_PURPOSE (pair);
8326 tree ini = DECL_INITIAL (enu);
8328 TREE_TYPE (enu) = enumtype;
8330 /* The ISO C Standard mandates enumerators to have type int,
8331 even though the underlying type of an enum type is
8332 unspecified. However, GCC allows enumerators of any
8333 integer type as an extensions. build_enumerator()
8334 converts any enumerators that fit in an int to type int,
8335 to avoid promotions to unsigned types when comparing
8336 integers with enumerators that fit in the int range.
8337 When -pedantic is given, build_enumerator() would have
8338 already warned about those that don't fit. Here we
8339 convert the rest to the enumerator type. */
8340 if (TREE_TYPE (ini) != integer_type_node)
8341 ini = convert (enumtype, ini);
8343 DECL_INITIAL (enu) = ini;
8344 TREE_PURPOSE (pair) = DECL_NAME (enu);
8345 TREE_VALUE (pair) = ini;
8348 TYPE_VALUES (enumtype) = values;
8351 /* Record the min/max values so that we can warn about bit-field
8352 enumerations that are too small for the values. */
8353 lt = ggc_cleared_alloc<struct lang_type> ();
8354 lt->enum_min = minnode;
8355 lt->enum_max = maxnode;
8356 TYPE_LANG_SPECIFIC (enumtype) = lt;
8358 /* Fix up all variant types of this enum type. */
8359 for (tem = TYPE_MAIN_VARIANT (enumtype); tem; tem = TYPE_NEXT_VARIANT (tem))
8361 if (tem == enumtype)
8362 continue;
8363 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
8364 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
8365 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
8366 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
8367 TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
8368 SET_TYPE_MODE (tem, TYPE_MODE (enumtype));
8369 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
8370 SET_TYPE_ALIGN (tem, TYPE_ALIGN (enumtype));
8371 TYPE_USER_ALIGN (tem) = TYPE_USER_ALIGN (enumtype);
8372 TYPE_UNSIGNED (tem) = TYPE_UNSIGNED (enumtype);
8373 TYPE_LANG_SPECIFIC (tem) = TYPE_LANG_SPECIFIC (enumtype);
8376 /* Finish debugging output for this type. */
8377 rest_of_type_compilation (enumtype, toplevel);
8379 /* If this enum is defined inside a struct, add it to
8380 struct_types. */
8381 if (warn_cxx_compat
8382 && struct_parse_info != NULL
8383 && !in_sizeof && !in_typeof && !in_alignof)
8384 struct_parse_info->struct_types.safe_push (enumtype);
8386 return enumtype;
8389 /* Build and install a CONST_DECL for one value of the
8390 current enumeration type (one that was begun with start_enum).
8391 DECL_LOC is the location of the enumerator.
8392 LOC is the location of the '=' operator if any, DECL_LOC otherwise.
8393 Return a tree-list containing the CONST_DECL and its value.
8394 Assignment of sequential values by default is handled here. */
8396 tree
8397 build_enumerator (location_t decl_loc, location_t loc,
8398 struct c_enum_contents *the_enum, tree name, tree value)
8400 tree decl, type;
8402 /* Validate and default VALUE. */
8404 if (value != NULL_TREE)
8406 /* Don't issue more errors for error_mark_node (i.e. an
8407 undeclared identifier) - just ignore the value expression. */
8408 if (value == error_mark_node)
8409 value = NULL_TREE;
8410 else if (!INTEGRAL_TYPE_P (TREE_TYPE (value)))
8412 error_at (loc, "enumerator value for %qE is not an integer constant",
8413 name);
8414 value = NULL_TREE;
8416 else
8418 if (TREE_CODE (value) != INTEGER_CST)
8420 value = c_fully_fold (value, false, NULL);
8421 if (TREE_CODE (value) == INTEGER_CST)
8422 pedwarn (loc, OPT_Wpedantic,
8423 "enumerator value for %qE is not an integer "
8424 "constant expression", name);
8426 if (TREE_CODE (value) != INTEGER_CST)
8428 error ("enumerator value for %qE is not an integer constant",
8429 name);
8430 value = NULL_TREE;
8432 else
8434 value = default_conversion (value);
8435 constant_expression_warning (value);
8440 /* Default based on previous value. */
8441 /* It should no longer be possible to have NON_LVALUE_EXPR
8442 in the default. */
8443 if (value == NULL_TREE)
8445 value = the_enum->enum_next_value;
8446 if (the_enum->enum_overflow)
8447 error_at (loc, "overflow in enumeration values");
8449 /* Even though the underlying type of an enum is unspecified, the
8450 type of enumeration constants is explicitly defined as int
8451 (6.4.4.3/2 in the C99 Standard). GCC allows any integer type as
8452 an extension. */
8453 else if (!int_fits_type_p (value, integer_type_node))
8454 pedwarn (loc, OPT_Wpedantic,
8455 "ISO C restricts enumerator values to range of %<int%>");
8457 /* The ISO C Standard mandates enumerators to have type int, even
8458 though the underlying type of an enum type is unspecified.
8459 However, GCC allows enumerators of any integer type as an
8460 extensions. Here we convert any enumerators that fit in an int
8461 to type int, to avoid promotions to unsigned types when comparing
8462 integers with enumerators that fit in the int range. When
8463 -pedantic is given, we would have already warned about those that
8464 don't fit. We have to do this here rather than in finish_enum
8465 because this value may be used to define more enumerators. */
8466 if (int_fits_type_p (value, integer_type_node))
8467 value = convert (integer_type_node, value);
8469 /* Set basis for default for next value. */
8470 the_enum->enum_next_value
8471 = build_binary_op (EXPR_LOC_OR_LOC (value, input_location),
8472 PLUS_EXPR, value, integer_one_node, 0);
8473 the_enum->enum_overflow = tree_int_cst_lt (the_enum->enum_next_value, value);
8475 /* Now create a declaration for the enum value name. */
8477 type = TREE_TYPE (value);
8478 type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
8479 TYPE_PRECISION (integer_type_node)),
8480 (TYPE_PRECISION (type)
8481 >= TYPE_PRECISION (integer_type_node)
8482 && TYPE_UNSIGNED (type)));
8484 decl = build_decl (decl_loc, CONST_DECL, name, type);
8485 DECL_INITIAL (decl) = convert (type, value);
8486 pushdecl (decl);
8488 return tree_cons (decl, value, NULL_TREE);
8492 /* Create the FUNCTION_DECL for a function definition.
8493 DECLSPECS, DECLARATOR and ATTRIBUTES are the parts of
8494 the declaration; they describe the function's name and the type it returns,
8495 but twisted together in a fashion that parallels the syntax of C.
8497 This function creates a binding context for the function body
8498 as well as setting up the FUNCTION_DECL in current_function_decl.
8500 Returns true on success. If the DECLARATOR is not suitable for a function
8501 (it defines a datum instead), we return false to report a parse error. */
8503 bool
8504 start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
8505 tree attributes)
8507 tree decl1, old_decl;
8508 tree restype, resdecl;
8509 location_t loc;
8511 current_function_returns_value = 0; /* Assume, until we see it does. */
8512 current_function_returns_null = 0;
8513 current_function_returns_abnormally = 0;
8514 warn_about_return_type = 0;
8515 c_switch_stack = NULL;
8517 /* Indicate no valid break/continue context by setting these variables
8518 to some non-null, non-label value. We'll notice and emit the proper
8519 error message in c_finish_bc_stmt. */
8520 c_break_label = c_cont_label = size_zero_node;
8522 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, true, NULL,
8523 &attributes, NULL, NULL, DEPRECATED_NORMAL);
8524 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
8526 /* If the declarator is not suitable for a function definition,
8527 cause a syntax error. */
8528 if (decl1 == NULL_TREE
8529 || TREE_CODE (decl1) != FUNCTION_DECL)
8530 return false;
8532 loc = DECL_SOURCE_LOCATION (decl1);
8534 c_decl_attributes (&decl1, attributes, 0);
8536 if (DECL_DECLARED_INLINE_P (decl1)
8537 && DECL_UNINLINABLE (decl1)
8538 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl1)))
8539 warning_at (loc, OPT_Wattributes,
8540 "inline function %qD given attribute noinline",
8541 decl1);
8543 /* Handle gnu_inline attribute. */
8544 if (declspecs->inline_p
8545 && !flag_gnu89_inline
8546 && TREE_CODE (decl1) == FUNCTION_DECL
8547 && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl1))
8548 || current_function_decl))
8550 if (declspecs->storage_class != csc_static)
8551 DECL_EXTERNAL (decl1) = !DECL_EXTERNAL (decl1);
8554 announce_function (decl1);
8556 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl1))))
8558 error_at (loc, "return type is an incomplete type");
8559 /* Make it return void instead. */
8560 TREE_TYPE (decl1)
8561 = build_function_type (void_type_node,
8562 TYPE_ARG_TYPES (TREE_TYPE (decl1)));
8565 if (warn_about_return_type)
8566 warn_defaults_to (loc, flag_isoc99 ? OPT_Wimplicit_int
8567 : (warn_return_type ? OPT_Wreturn_type
8568 : OPT_Wimplicit_int),
8569 "return type defaults to %<int%>");
8571 /* Make the init_value nonzero so pushdecl knows this is not tentative.
8572 error_mark_node is replaced below (in pop_scope) with the BLOCK. */
8573 DECL_INITIAL (decl1) = error_mark_node;
8575 /* A nested function is not global. */
8576 if (current_function_decl != NULL_TREE)
8577 TREE_PUBLIC (decl1) = 0;
8579 /* If this definition isn't a prototype and we had a prototype declaration
8580 before, copy the arg type info from that prototype. */
8581 old_decl = lookup_name_in_scope (DECL_NAME (decl1), current_scope);
8582 if (old_decl && TREE_CODE (old_decl) != FUNCTION_DECL)
8583 old_decl = NULL_TREE;
8584 current_function_prototype_locus = UNKNOWN_LOCATION;
8585 current_function_prototype_built_in = false;
8586 current_function_prototype_arg_types = NULL_TREE;
8587 if (!prototype_p (TREE_TYPE (decl1)))
8589 if (old_decl != NULL_TREE
8590 && TREE_CODE (TREE_TYPE (old_decl)) == FUNCTION_TYPE
8591 && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
8592 TREE_TYPE (TREE_TYPE (old_decl))))
8594 if (stdarg_p (TREE_TYPE (old_decl)))
8596 warning_at (loc, 0, "%q+D defined as variadic function "
8597 "without prototype", decl1);
8598 locate_old_decl (old_decl);
8600 TREE_TYPE (decl1) = composite_type (TREE_TYPE (old_decl),
8601 TREE_TYPE (decl1));
8602 current_function_prototype_locus = DECL_SOURCE_LOCATION (old_decl);
8603 current_function_prototype_built_in
8604 = C_DECL_BUILTIN_PROTOTYPE (old_decl);
8605 current_function_prototype_arg_types
8606 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
8608 if (TREE_PUBLIC (decl1))
8610 /* If there is an external prototype declaration of this
8611 function, record its location but do not copy information
8612 to this decl. This may be an invisible declaration
8613 (built-in or in a scope which has finished) or simply
8614 have more refined argument types than any declaration
8615 found above. */
8616 struct c_binding *b;
8617 for (b = I_SYMBOL_BINDING (DECL_NAME (decl1)); b; b = b->shadowed)
8618 if (B_IN_SCOPE (b, external_scope))
8619 break;
8620 if (b)
8622 tree ext_decl, ext_type;
8623 ext_decl = b->decl;
8624 ext_type = b->u.type ? b->u.type : TREE_TYPE (ext_decl);
8625 if (TREE_CODE (ext_type) == FUNCTION_TYPE
8626 && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
8627 TREE_TYPE (ext_type)))
8629 current_function_prototype_locus
8630 = DECL_SOURCE_LOCATION (ext_decl);
8631 current_function_prototype_built_in
8632 = C_DECL_BUILTIN_PROTOTYPE (ext_decl);
8633 current_function_prototype_arg_types
8634 = TYPE_ARG_TYPES (ext_type);
8640 /* Optionally warn of old-fashioned def with no previous prototype. */
8641 if (warn_strict_prototypes
8642 && old_decl != error_mark_node
8643 && !prototype_p (TREE_TYPE (decl1))
8644 && C_DECL_ISNT_PROTOTYPE (old_decl))
8645 warning_at (loc, OPT_Wstrict_prototypes,
8646 "function declaration isn%'t a prototype");
8647 /* Optionally warn of any global def with no previous prototype. */
8648 else if (warn_missing_prototypes
8649 && old_decl != error_mark_node
8650 && TREE_PUBLIC (decl1)
8651 && !MAIN_NAME_P (DECL_NAME (decl1))
8652 && C_DECL_ISNT_PROTOTYPE (old_decl)
8653 && !DECL_DECLARED_INLINE_P (decl1))
8654 warning_at (loc, OPT_Wmissing_prototypes,
8655 "no previous prototype for %qD", decl1);
8656 /* Optionally warn of any def with no previous prototype
8657 if the function has already been used. */
8658 else if (warn_missing_prototypes
8659 && old_decl != NULL_TREE
8660 && old_decl != error_mark_node
8661 && TREE_USED (old_decl)
8662 && !prototype_p (TREE_TYPE (old_decl)))
8663 warning_at (loc, OPT_Wmissing_prototypes,
8664 "%qD was used with no prototype before its definition", decl1);
8665 /* Optionally warn of any global def with no previous declaration. */
8666 else if (warn_missing_declarations
8667 && TREE_PUBLIC (decl1)
8668 && old_decl == NULL_TREE
8669 && !MAIN_NAME_P (DECL_NAME (decl1))
8670 && !DECL_DECLARED_INLINE_P (decl1))
8671 warning_at (loc, OPT_Wmissing_declarations,
8672 "no previous declaration for %qD",
8673 decl1);
8674 /* Optionally warn of any def with no previous declaration
8675 if the function has already been used. */
8676 else if (warn_missing_declarations
8677 && old_decl != NULL_TREE
8678 && old_decl != error_mark_node
8679 && TREE_USED (old_decl)
8680 && C_DECL_IMPLICIT (old_decl))
8681 warning_at (loc, OPT_Wmissing_declarations,
8682 "%qD was used with no declaration before its definition", decl1);
8684 /* This function exists in static storage.
8685 (This does not mean `static' in the C sense!) */
8686 TREE_STATIC (decl1) = 1;
8688 /* This is the earliest point at which we might know the assembler
8689 name of the function. Thus, if it's set before this, die horribly. */
8690 gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl1));
8692 /* If #pragma weak was used, mark the decl weak now. */
8693 if (current_scope == file_scope)
8694 maybe_apply_pragma_weak (decl1);
8696 /* Warn for unlikely, improbable, or stupid declarations of `main'. */
8697 if (warn_main && MAIN_NAME_P (DECL_NAME (decl1)))
8699 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1)))
8700 != integer_type_node)
8701 pedwarn (loc, OPT_Wmain, "return type of %qD is not %<int%>", decl1);
8702 else if (TYPE_ATOMIC (TREE_TYPE (TREE_TYPE (decl1))))
8703 pedwarn (loc, OPT_Wmain, "%<_Atomic%>-qualified return type of %qD",
8704 decl1);
8706 check_main_parameter_types (decl1);
8708 if (!TREE_PUBLIC (decl1))
8709 pedwarn (loc, OPT_Wmain,
8710 "%qD is normally a non-static function", decl1);
8713 /* Record the decl so that the function name is defined.
8714 If we already have a decl for this name, and it is a FUNCTION_DECL,
8715 use the old decl. */
8717 current_function_decl = pushdecl (decl1);
8719 push_scope ();
8720 declare_parm_level ();
8722 restype = TREE_TYPE (TREE_TYPE (current_function_decl));
8723 resdecl = build_decl (loc, RESULT_DECL, NULL_TREE, restype);
8724 DECL_ARTIFICIAL (resdecl) = 1;
8725 DECL_IGNORED_P (resdecl) = 1;
8726 DECL_RESULT (current_function_decl) = resdecl;
8728 start_fname_decls ();
8730 return true;
8733 /* Subroutine of store_parm_decls which handles new-style function
8734 definitions (prototype format). The parms already have decls, so we
8735 need only record them as in effect and complain if any redundant
8736 old-style parm decls were written. */
8737 static void
8738 store_parm_decls_newstyle (tree fndecl, const struct c_arg_info *arg_info)
8740 tree decl;
8741 c_arg_tag *tag;
8742 unsigned ix;
8744 if (current_scope->bindings)
8746 error_at (DECL_SOURCE_LOCATION (fndecl),
8747 "old-style parameter declarations in prototyped "
8748 "function definition");
8750 /* Get rid of the old-style declarations. */
8751 pop_scope ();
8752 push_scope ();
8754 /* Don't issue this warning for nested functions, and don't issue this
8755 warning if we got here because ARG_INFO_TYPES was error_mark_node
8756 (this happens when a function definition has just an ellipsis in
8757 its parameter list). */
8758 else if (!in_system_header_at (input_location)
8759 && !current_function_scope
8760 && arg_info->types != error_mark_node)
8761 warning_at (DECL_SOURCE_LOCATION (fndecl), OPT_Wtraditional,
8762 "traditional C rejects ISO C style function definitions");
8764 /* Now make all the parameter declarations visible in the function body.
8765 We can bypass most of the grunt work of pushdecl. */
8766 for (decl = arg_info->parms; decl; decl = DECL_CHAIN (decl))
8768 DECL_CONTEXT (decl) = current_function_decl;
8769 if (DECL_NAME (decl))
8771 bind (DECL_NAME (decl), decl, current_scope,
8772 /*invisible=*/false, /*nested=*/false,
8773 UNKNOWN_LOCATION);
8774 if (!TREE_USED (decl))
8775 warn_if_shadowing (decl);
8777 else
8778 error_at (DECL_SOURCE_LOCATION (decl), "parameter name omitted");
8781 /* Record the parameter list in the function declaration. */
8782 DECL_ARGUMENTS (fndecl) = arg_info->parms;
8784 /* Now make all the ancillary declarations visible, likewise. */
8785 for (decl = arg_info->others; decl; decl = DECL_CHAIN (decl))
8787 DECL_CONTEXT (decl) = current_function_decl;
8788 if (DECL_NAME (decl))
8789 bind (DECL_NAME (decl), decl, current_scope,
8790 /*invisible=*/false,
8791 /*nested=*/(TREE_CODE (decl) == FUNCTION_DECL),
8792 UNKNOWN_LOCATION);
8795 /* And all the tag declarations. */
8796 FOR_EACH_VEC_SAFE_ELT_REVERSE (arg_info->tags, ix, tag)
8797 if (tag->id)
8798 bind (tag->id, tag->type, current_scope,
8799 /*invisible=*/false, /*nested=*/false, UNKNOWN_LOCATION);
8802 /* Subroutine of store_parm_decls which handles old-style function
8803 definitions (separate parameter list and declarations). */
8805 static void
8806 store_parm_decls_oldstyle (tree fndecl, const struct c_arg_info *arg_info)
8808 struct c_binding *b;
8809 tree parm, decl, last;
8810 tree parmids = arg_info->parms;
8811 hash_set<tree> seen_args;
8813 if (!in_system_header_at (input_location))
8814 warning_at (DECL_SOURCE_LOCATION (fndecl),
8815 OPT_Wold_style_definition, "old-style function definition");
8817 /* Match each formal parameter name with its declaration. Save each
8818 decl in the appropriate TREE_PURPOSE slot of the parmids chain. */
8819 for (parm = parmids; parm; parm = TREE_CHAIN (parm))
8821 if (TREE_VALUE (parm) == NULL_TREE)
8823 error_at (DECL_SOURCE_LOCATION (fndecl),
8824 "parameter name missing from parameter list");
8825 TREE_PURPOSE (parm) = NULL_TREE;
8826 continue;
8829 b = I_SYMBOL_BINDING (TREE_VALUE (parm));
8830 if (b && B_IN_CURRENT_SCOPE (b))
8832 decl = b->decl;
8833 /* Skip erroneous parameters. */
8834 if (decl == error_mark_node)
8835 continue;
8836 /* If we got something other than a PARM_DECL it is an error. */
8837 if (TREE_CODE (decl) != PARM_DECL)
8839 error_at (DECL_SOURCE_LOCATION (decl),
8840 "%qD declared as a non-parameter", decl);
8841 continue;
8843 /* If the declaration is already marked, we have a duplicate
8844 name. Complain and ignore the duplicate. */
8845 else if (seen_args.contains (decl))
8847 error_at (DECL_SOURCE_LOCATION (decl),
8848 "multiple parameters named %qD", decl);
8849 TREE_PURPOSE (parm) = NULL_TREE;
8850 continue;
8852 /* If the declaration says "void", complain and turn it into
8853 an int. */
8854 else if (VOID_TYPE_P (TREE_TYPE (decl)))
8856 error_at (DECL_SOURCE_LOCATION (decl),
8857 "parameter %qD declared with void type", decl);
8858 TREE_TYPE (decl) = integer_type_node;
8859 DECL_ARG_TYPE (decl) = integer_type_node;
8860 layout_decl (decl, 0);
8862 warn_if_shadowing (decl);
8864 /* If no declaration found, default to int. */
8865 else
8867 /* FIXME diagnostics: This should be the location of the argument,
8868 not the FNDECL. E.g., for an old-style declaration
8870 int f10(v) { blah; }
8872 We should use the location of the V, not the F10.
8873 Unfortunately, the V is an IDENTIFIER_NODE which has no
8874 location. In the future we need locations for c_arg_info
8875 entries.
8877 See gcc.dg/Wshadow-3.c for an example of this problem. */
8878 decl = build_decl (DECL_SOURCE_LOCATION (fndecl),
8879 PARM_DECL, TREE_VALUE (parm), integer_type_node);
8880 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
8881 pushdecl (decl);
8882 warn_if_shadowing (decl);
8884 if (flag_isoc99)
8885 pedwarn (DECL_SOURCE_LOCATION (decl),
8886 OPT_Wimplicit_int, "type of %qD defaults to %<int%>",
8887 decl);
8888 else
8889 warning_at (DECL_SOURCE_LOCATION (decl),
8890 OPT_Wmissing_parameter_type,
8891 "type of %qD defaults to %<int%>", decl);
8894 TREE_PURPOSE (parm) = decl;
8895 seen_args.add (decl);
8898 /* Now examine the parms chain for incomplete declarations
8899 and declarations with no corresponding names. */
8901 for (b = current_scope->bindings; b; b = b->prev)
8903 parm = b->decl;
8904 if (TREE_CODE (parm) != PARM_DECL)
8905 continue;
8907 if (TREE_TYPE (parm) != error_mark_node
8908 && !COMPLETE_TYPE_P (TREE_TYPE (parm)))
8910 error_at (DECL_SOURCE_LOCATION (parm),
8911 "parameter %qD has incomplete type", parm);
8912 TREE_TYPE (parm) = error_mark_node;
8915 if (!seen_args.contains (parm))
8917 error_at (DECL_SOURCE_LOCATION (parm),
8918 "declaration for parameter %qD but no such parameter",
8919 parm);
8921 /* Pretend the parameter was not missing.
8922 This gets us to a standard state and minimizes
8923 further error messages. */
8924 parmids = chainon (parmids, tree_cons (parm, 0, 0));
8928 /* Chain the declarations together in the order of the list of
8929 names. Store that chain in the function decl, replacing the
8930 list of names. Update the current scope to match. */
8931 DECL_ARGUMENTS (fndecl) = NULL_TREE;
8933 for (parm = parmids; parm; parm = TREE_CHAIN (parm))
8934 if (TREE_PURPOSE (parm))
8935 break;
8936 if (parm && TREE_PURPOSE (parm))
8938 last = TREE_PURPOSE (parm);
8939 DECL_ARGUMENTS (fndecl) = last;
8941 for (parm = TREE_CHAIN (parm); parm; parm = TREE_CHAIN (parm))
8942 if (TREE_PURPOSE (parm))
8944 DECL_CHAIN (last) = TREE_PURPOSE (parm);
8945 last = TREE_PURPOSE (parm);
8947 DECL_CHAIN (last) = NULL_TREE;
8950 /* If there was a previous prototype,
8951 set the DECL_ARG_TYPE of each argument according to
8952 the type previously specified, and report any mismatches. */
8954 if (current_function_prototype_arg_types)
8956 tree type;
8957 for (parm = DECL_ARGUMENTS (fndecl),
8958 type = current_function_prototype_arg_types;
8959 parm || (type != NULL_TREE
8960 && TREE_VALUE (type) != error_mark_node
8961 && TYPE_MAIN_VARIANT (TREE_VALUE (type)) != void_type_node);
8962 parm = DECL_CHAIN (parm), type = TREE_CHAIN (type))
8964 if (parm == NULL_TREE
8965 || type == NULL_TREE
8966 || (TREE_VALUE (type) != error_mark_node
8967 && TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node))
8969 if (current_function_prototype_built_in)
8970 warning_at (DECL_SOURCE_LOCATION (fndecl),
8971 0, "number of arguments doesn%'t match "
8972 "built-in prototype");
8973 else
8975 /* FIXME diagnostics: This should be the location of
8976 FNDECL, but there is bug when a prototype is
8977 declared inside function context, but defined
8978 outside of it (e.g., gcc.dg/pr15698-2.c). In
8979 which case FNDECL gets the location of the
8980 prototype, not the definition. */
8981 error_at (input_location,
8982 "number of arguments doesn%'t match prototype");
8984 error_at (current_function_prototype_locus,
8985 "prototype declaration");
8987 break;
8989 /* Type for passing arg must be consistent with that
8990 declared for the arg. ISO C says we take the unqualified
8991 type for parameters declared with qualified type. */
8992 if (TREE_TYPE (parm) != error_mark_node
8993 && TREE_VALUE (type) != error_mark_node
8994 && ((TYPE_ATOMIC (DECL_ARG_TYPE (parm))
8995 != TYPE_ATOMIC (TREE_VALUE (type)))
8996 || !comptypes (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (parm)),
8997 TYPE_MAIN_VARIANT (TREE_VALUE (type)))))
8999 if ((TYPE_ATOMIC (DECL_ARG_TYPE (parm))
9000 == TYPE_ATOMIC (TREE_VALUE (type)))
9001 && (TYPE_MAIN_VARIANT (TREE_TYPE (parm))
9002 == TYPE_MAIN_VARIANT (TREE_VALUE (type))))
9004 /* Adjust argument to match prototype. E.g. a previous
9005 `int foo(float);' prototype causes
9006 `int foo(x) float x; {...}' to be treated like
9007 `int foo(float x) {...}'. This is particularly
9008 useful for argument types like uid_t. */
9009 DECL_ARG_TYPE (parm) = TREE_TYPE (parm);
9011 if (targetm.calls.promote_prototypes (TREE_TYPE (current_function_decl))
9012 && INTEGRAL_TYPE_P (TREE_TYPE (parm))
9013 && (TYPE_PRECISION (TREE_TYPE (parm))
9014 < TYPE_PRECISION (integer_type_node)))
9015 DECL_ARG_TYPE (parm)
9016 = c_type_promotes_to (TREE_TYPE (parm));
9018 /* ??? Is it possible to get here with a
9019 built-in prototype or will it always have
9020 been diagnosed as conflicting with an
9021 old-style definition and discarded? */
9022 if (current_function_prototype_built_in)
9023 warning_at (DECL_SOURCE_LOCATION (parm),
9024 OPT_Wpedantic, "promoted argument %qD "
9025 "doesn%'t match built-in prototype", parm);
9026 else
9028 pedwarn (DECL_SOURCE_LOCATION (parm),
9029 OPT_Wpedantic, "promoted argument %qD "
9030 "doesn%'t match prototype", parm);
9031 pedwarn (current_function_prototype_locus, OPT_Wpedantic,
9032 "prototype declaration");
9035 else
9037 if (current_function_prototype_built_in)
9038 warning_at (DECL_SOURCE_LOCATION (parm),
9039 0, "argument %qD doesn%'t match "
9040 "built-in prototype", parm);
9041 else
9043 error_at (DECL_SOURCE_LOCATION (parm),
9044 "argument %qD doesn%'t match prototype", parm);
9045 error_at (current_function_prototype_locus,
9046 "prototype declaration");
9051 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = NULL_TREE;
9054 /* Otherwise, create a prototype that would match. */
9056 else
9058 tree actual = NULL_TREE, last = NULL_TREE, type;
9060 for (parm = DECL_ARGUMENTS (fndecl); parm; parm = DECL_CHAIN (parm))
9062 type = tree_cons (NULL_TREE, DECL_ARG_TYPE (parm), NULL_TREE);
9063 if (last)
9064 TREE_CHAIN (last) = type;
9065 else
9066 actual = type;
9067 last = type;
9069 type = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
9070 if (last)
9071 TREE_CHAIN (last) = type;
9072 else
9073 actual = type;
9075 /* We are going to assign a new value for the TYPE_ACTUAL_ARG_TYPES
9076 of the type of this function, but we need to avoid having this
9077 affect the types of other similarly-typed functions, so we must
9078 first force the generation of an identical (but separate) type
9079 node for the relevant function type. The new node we create
9080 will be a variant of the main variant of the original function
9081 type. */
9083 TREE_TYPE (fndecl) = build_variant_type_copy (TREE_TYPE (fndecl));
9085 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = actual;
9089 /* Store parameter declarations passed in ARG_INFO into the current
9090 function declaration. */
9092 void
9093 store_parm_decls_from (struct c_arg_info *arg_info)
9095 current_function_arg_info = arg_info;
9096 store_parm_decls ();
9099 /* Called by walk_tree to look for and update context-less labels. */
9101 static tree
9102 set_labels_context_r (tree *tp, int *walk_subtrees, void *data)
9104 if (TREE_CODE (*tp) == LABEL_EXPR
9105 && DECL_CONTEXT (LABEL_EXPR_LABEL (*tp)) == NULL_TREE)
9107 DECL_CONTEXT (LABEL_EXPR_LABEL (*tp)) = static_cast<tree>(data);
9108 *walk_subtrees = 0;
9111 return NULL_TREE;
9114 /* Store the parameter declarations into the current function declaration.
9115 This is called after parsing the parameter declarations, before
9116 digesting the body of the function.
9118 For an old-style definition, construct a prototype out of the old-style
9119 parameter declarations and inject it into the function's type. */
9121 void
9122 store_parm_decls (void)
9124 tree fndecl = current_function_decl;
9125 bool proto;
9127 /* The argument information block for FNDECL. */
9128 struct c_arg_info *arg_info = current_function_arg_info;
9129 current_function_arg_info = 0;
9131 /* True if this definition is written with a prototype. Note:
9132 despite C99 6.7.5.3p14, we can *not* treat an empty argument
9133 list in a function definition as equivalent to (void) -- an
9134 empty argument list specifies the function has no parameters,
9135 but only (void) sets up a prototype for future calls. */
9136 proto = arg_info->types != 0;
9138 if (proto)
9139 store_parm_decls_newstyle (fndecl, arg_info);
9140 else
9141 store_parm_decls_oldstyle (fndecl, arg_info);
9143 /* The next call to push_scope will be a function body. */
9145 next_is_function_body = true;
9147 /* Write a record describing this function definition to the prototypes
9148 file (if requested). */
9150 gen_aux_info_record (fndecl, 1, 0, proto);
9152 /* Initialize the RTL code for the function. */
9153 allocate_struct_function (fndecl, false);
9155 if (warn_unused_local_typedefs)
9156 cfun->language = ggc_cleared_alloc<language_function> ();
9158 /* Begin the statement tree for this function. */
9159 DECL_SAVED_TREE (fndecl) = push_stmt_list ();
9161 /* ??? Insert the contents of the pending sizes list into the function
9162 to be evaluated. The only reason left to have this is
9163 void foo(int n, int array[n++])
9164 because we throw away the array type in favor of a pointer type, and
9165 thus won't naturally see the SAVE_EXPR containing the increment. All
9166 other pending sizes would be handled by gimplify_parameters. */
9167 if (arg_info->pending_sizes)
9169 /* In very special circumstances, e.g. for code like
9170 _Atomic int i = 5;
9171 void f (int a[i += 2]) {}
9172 we need to execute the atomic assignment on function entry.
9173 But in this case, it is not just a straight store, it has the
9174 op= form, which means that build_atomic_assign has generated
9175 gotos, labels, etc. Because at that time the function decl
9176 for F has not been created yet, those labels do not have any
9177 function context. But we have the fndecl now, so update the
9178 labels accordingly. gimplify_expr would crash otherwise. */
9179 walk_tree_without_duplicates (&arg_info->pending_sizes,
9180 set_labels_context_r, fndecl);
9181 add_stmt (arg_info->pending_sizes);
9185 /* Store PARM_DECLs in PARMS into scope temporarily. Used for
9186 c_finish_omp_declare_simd for function prototypes. No diagnostics
9187 should be done. */
9189 void
9190 temp_store_parm_decls (tree fndecl, tree parms)
9192 push_scope ();
9193 for (tree p = parms; p; p = DECL_CHAIN (p))
9195 DECL_CONTEXT (p) = fndecl;
9196 if (DECL_NAME (p))
9197 bind (DECL_NAME (p), p, current_scope,
9198 /*invisible=*/false, /*nested=*/false,
9199 UNKNOWN_LOCATION);
9203 /* Undo what temp_store_parm_decls did. */
9205 void
9206 temp_pop_parm_decls (void)
9208 /* Clear all bindings in this temporary scope, so that
9209 pop_scope doesn't create a BLOCK. */
9210 struct c_binding *b = current_scope->bindings;
9211 current_scope->bindings = NULL;
9212 for (; b; b = free_binding_and_advance (b))
9214 gcc_assert (TREE_CODE (b->decl) == PARM_DECL
9215 || b->decl == error_mark_node);
9216 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
9217 I_SYMBOL_BINDING (b->id) = b->shadowed;
9218 if (b->shadowed && b->shadowed->u.type)
9219 TREE_TYPE (b->shadowed->decl) = b->shadowed->u.type;
9221 pop_scope ();
9225 /* Finish up a function declaration and compile that function
9226 all the way to assembler language output. Then free the storage
9227 for the function definition.
9229 This is called after parsing the body of the function definition. */
9231 void
9232 finish_function (void)
9234 tree fndecl = current_function_decl;
9236 if (c_dialect_objc ())
9237 objc_finish_function ();
9239 if (TREE_CODE (fndecl) == FUNCTION_DECL
9240 && targetm.calls.promote_prototypes (TREE_TYPE (fndecl)))
9242 tree args = DECL_ARGUMENTS (fndecl);
9243 for (; args; args = DECL_CHAIN (args))
9245 tree type = TREE_TYPE (args);
9246 if (INTEGRAL_TYPE_P (type)
9247 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
9248 DECL_ARG_TYPE (args) = c_type_promotes_to (type);
9252 if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node)
9253 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
9255 /* Must mark the RESULT_DECL as being in this function. */
9257 if (DECL_RESULT (fndecl) && DECL_RESULT (fndecl) != error_mark_node)
9258 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
9260 if (MAIN_NAME_P (DECL_NAME (fndecl)) && flag_hosted
9261 && TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (fndecl)))
9262 == integer_type_node && flag_isoc99)
9264 /* Hack. We don't want the middle-end to warn that this return
9265 is unreachable, so we mark its location as special. Using
9266 UNKNOWN_LOCATION has the problem that it gets clobbered in
9267 annotate_one_with_locus. A cleaner solution might be to
9268 ensure ! should_carry_locus_p (stmt), but that needs a flag.
9270 c_finish_return (BUILTINS_LOCATION, integer_zero_node, NULL_TREE);
9273 /* Tie off the statement tree for this function. */
9274 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
9276 /* If the function has _Cilk_spawn in front of a function call inside it
9277 i.e. it is a spawning function, then add the appropriate Cilk plus
9278 functions inside. */
9279 if (fn_contains_cilk_spawn_p (cfun))
9280 cfun->cilk_frame_decl = insert_cilk_frame (fndecl);
9282 finish_fname_decls ();
9284 /* Complain if there's just no return statement. */
9285 if (warn_return_type
9286 && TREE_CODE (TREE_TYPE (TREE_TYPE (fndecl))) != VOID_TYPE
9287 && !current_function_returns_value && !current_function_returns_null
9288 /* Don't complain if we are no-return. */
9289 && !current_function_returns_abnormally
9290 /* Don't complain if we are declared noreturn. */
9291 && !TREE_THIS_VOLATILE (fndecl)
9292 /* Don't warn for main(). */
9293 && !MAIN_NAME_P (DECL_NAME (fndecl))
9294 /* Or if they didn't actually specify a return type. */
9295 && !C_FUNCTION_IMPLICIT_INT (fndecl)
9296 /* Normally, with -Wreturn-type, flow will complain, but we might
9297 optimize out static functions. */
9298 && !TREE_PUBLIC (fndecl))
9300 warning (OPT_Wreturn_type,
9301 "no return statement in function returning non-void");
9302 TREE_NO_WARNING (fndecl) = 1;
9305 /* Complain about parameters that are only set, but never otherwise used. */
9306 if (warn_unused_but_set_parameter)
9308 tree decl;
9310 for (decl = DECL_ARGUMENTS (fndecl);
9311 decl;
9312 decl = DECL_CHAIN (decl))
9313 if (TREE_USED (decl)
9314 && TREE_CODE (decl) == PARM_DECL
9315 && !DECL_READ_P (decl)
9316 && DECL_NAME (decl)
9317 && !DECL_ARTIFICIAL (decl)
9318 && !TREE_NO_WARNING (decl))
9319 warning_at (DECL_SOURCE_LOCATION (decl),
9320 OPT_Wunused_but_set_parameter,
9321 "parameter %qD set but not used", decl);
9324 /* Complain about locally defined typedefs that are not used in this
9325 function. */
9326 maybe_warn_unused_local_typedefs ();
9328 /* Possibly warn about unused parameters. */
9329 if (warn_unused_parameter)
9330 do_warn_unused_parameter (fndecl);
9332 /* Store the end of the function, so that we get good line number
9333 info for the epilogue. */
9334 cfun->function_end_locus = input_location;
9336 /* Finalize the ELF visibility for the function. */
9337 c_determine_visibility (fndecl);
9339 /* For GNU C extern inline functions disregard inline limits. */
9340 if (DECL_EXTERNAL (fndecl)
9341 && DECL_DECLARED_INLINE_P (fndecl)
9342 && (flag_gnu89_inline
9343 || lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (fndecl))))
9344 DECL_DISREGARD_INLINE_LIMITS (fndecl) = 1;
9346 /* Genericize before inlining. Delay genericizing nested functions
9347 until their parent function is genericized. Since finalizing
9348 requires GENERIC, delay that as well. */
9350 if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node
9351 && !undef_nested_function)
9353 if (!decl_function_context (fndecl))
9355 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
9356 c_genericize (fndecl);
9358 /* ??? Objc emits functions after finalizing the compilation unit.
9359 This should be cleaned up later and this conditional removed. */
9360 if (symtab->global_info_ready)
9362 cgraph_node::add_new_function (fndecl, false);
9363 return;
9365 cgraph_node::finalize_function (fndecl, false);
9367 else
9369 /* Register this function with cgraph just far enough to get it
9370 added to our parent's nested function list. Handy, since the
9371 C front end doesn't have such a list. */
9372 (void) cgraph_node::get_create (fndecl);
9376 if (!decl_function_context (fndecl))
9377 undef_nested_function = false;
9379 if (cfun->language != NULL)
9381 ggc_free (cfun->language);
9382 cfun->language = NULL;
9385 /* We're leaving the context of this function, so zap cfun.
9386 It's still in DECL_STRUCT_FUNCTION, and we'll restore it in
9387 tree_rest_of_compilation. */
9388 set_cfun (NULL);
9389 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, current_function_decl);
9390 current_function_decl = NULL;
9393 /* Check the declarations given in a for-loop for satisfying the C99
9394 constraints. If exactly one such decl is found, return it. LOC is
9395 the location of the opening parenthesis of the for loop. The last
9396 parameter allows you to control the "for loop initial declarations
9397 are only allowed in C99 mode". Normally, you should pass
9398 flag_isoc99 as that parameter. But in some cases (Objective-C
9399 foreach loop, for example) we want to run the checks in this
9400 function even if not in C99 mode, so we allow the caller to turn
9401 off the error about not being in C99 mode.
9404 tree
9405 check_for_loop_decls (location_t loc, bool turn_off_iso_c99_error)
9407 struct c_binding *b;
9408 tree one_decl = NULL_TREE;
9409 int n_decls = 0;
9411 if (!turn_off_iso_c99_error)
9413 static bool hint = true;
9414 /* If we get here, declarations have been used in a for loop without
9415 the C99 for loop scope. This doesn't make much sense, so don't
9416 allow it. */
9417 error_at (loc, "%<for%> loop initial declarations "
9418 "are only allowed in C99 or C11 mode");
9419 if (hint)
9421 inform (loc,
9422 "use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 "
9423 "to compile your code");
9424 hint = false;
9426 return NULL_TREE;
9428 /* C99 subclause 6.8.5 paragraph 3:
9430 [#3] The declaration part of a for statement shall only
9431 declare identifiers for objects having storage class auto or
9432 register.
9434 It isn't clear whether, in this sentence, "identifiers" binds to
9435 "shall only declare" or to "objects" - that is, whether all identifiers
9436 declared must be identifiers for objects, or whether the restriction
9437 only applies to those that are. (A question on this in comp.std.c
9438 in November 2000 received no answer.) We implement the strictest
9439 interpretation, to avoid creating an extension which later causes
9440 problems. */
9442 for (b = current_scope->bindings; b; b = b->prev)
9444 tree id = b->id;
9445 tree decl = b->decl;
9447 if (!id)
9448 continue;
9450 switch (TREE_CODE (decl))
9452 case VAR_DECL:
9454 location_t decl_loc = DECL_SOURCE_LOCATION (decl);
9455 if (TREE_STATIC (decl))
9456 error_at (decl_loc,
9457 "declaration of static variable %qD in %<for%> loop "
9458 "initial declaration", decl);
9459 else if (DECL_EXTERNAL (decl))
9460 error_at (decl_loc,
9461 "declaration of %<extern%> variable %qD in %<for%> loop "
9462 "initial declaration", decl);
9464 break;
9466 case RECORD_TYPE:
9467 error_at (loc,
9468 "%<struct %E%> declared in %<for%> loop initial "
9469 "declaration", id);
9470 break;
9471 case UNION_TYPE:
9472 error_at (loc,
9473 "%<union %E%> declared in %<for%> loop initial declaration",
9474 id);
9475 break;
9476 case ENUMERAL_TYPE:
9477 error_at (loc, "%<enum %E%> declared in %<for%> loop "
9478 "initial declaration", id);
9479 break;
9480 default:
9481 error_at (loc, "declaration of non-variable "
9482 "%qD in %<for%> loop initial declaration", decl);
9485 n_decls++;
9486 one_decl = decl;
9489 return n_decls == 1 ? one_decl : NULL_TREE;
9492 /* Save and reinitialize the variables
9493 used during compilation of a C function. */
9495 void
9496 c_push_function_context (void)
9498 struct language_function *p = cfun->language;
9499 /* cfun->language might have been already allocated by the use of
9500 -Wunused-local-typedefs. In that case, just re-use it. */
9501 if (p == NULL)
9502 cfun->language = p = ggc_cleared_alloc<language_function> ();
9504 p->base.x_stmt_tree = c_stmt_tree;
9505 c_stmt_tree.x_cur_stmt_list = vec_safe_copy (c_stmt_tree.x_cur_stmt_list);
9506 p->x_break_label = c_break_label;
9507 p->x_cont_label = c_cont_label;
9508 p->x_switch_stack = c_switch_stack;
9509 p->arg_info = current_function_arg_info;
9510 p->returns_value = current_function_returns_value;
9511 p->returns_null = current_function_returns_null;
9512 p->returns_abnormally = current_function_returns_abnormally;
9513 p->warn_about_return_type = warn_about_return_type;
9515 push_function_context ();
9518 /* Restore the variables used during compilation of a C function. */
9520 void
9521 c_pop_function_context (void)
9523 struct language_function *p;
9525 pop_function_context ();
9526 p = cfun->language;
9528 /* When -Wunused-local-typedefs is in effect, cfun->languages is
9529 used to store data throughout the life time of the current cfun,
9530 So don't deallocate it. */
9531 if (!warn_unused_local_typedefs)
9532 cfun->language = NULL;
9534 if (DECL_STRUCT_FUNCTION (current_function_decl) == 0
9535 && DECL_SAVED_TREE (current_function_decl) == NULL_TREE)
9537 /* Stop pointing to the local nodes about to be freed. */
9538 /* But DECL_INITIAL must remain nonzero so we know this
9539 was an actual function definition. */
9540 DECL_INITIAL (current_function_decl) = error_mark_node;
9541 DECL_ARGUMENTS (current_function_decl) = NULL_TREE;
9544 c_stmt_tree = p->base.x_stmt_tree;
9545 p->base.x_stmt_tree.x_cur_stmt_list = NULL;
9546 c_break_label = p->x_break_label;
9547 c_cont_label = p->x_cont_label;
9548 c_switch_stack = p->x_switch_stack;
9549 current_function_arg_info = p->arg_info;
9550 current_function_returns_value = p->returns_value;
9551 current_function_returns_null = p->returns_null;
9552 current_function_returns_abnormally = p->returns_abnormally;
9553 warn_about_return_type = p->warn_about_return_type;
9556 /* The functions below are required for functionality of doing
9557 function at once processing in the C front end. Currently these
9558 functions are not called from anywhere in the C front end, but as
9559 these changes continue, that will change. */
9561 /* Returns the stmt_tree (if any) to which statements are currently
9562 being added. If there is no active statement-tree, NULL is
9563 returned. */
9565 stmt_tree
9566 current_stmt_tree (void)
9568 return &c_stmt_tree;
9571 /* Return the global value of T as a symbol. */
9573 tree
9574 identifier_global_value (tree t)
9576 struct c_binding *b;
9578 for (b = I_SYMBOL_BINDING (t); b; b = b->shadowed)
9579 if (B_IN_FILE_SCOPE (b) || B_IN_EXTERNAL_SCOPE (b))
9580 return b->decl;
9582 return NULL_TREE;
9585 /* In C, the only C-linkage public declaration is at file scope. */
9587 tree
9588 c_linkage_bindings (tree name)
9590 return identifier_global_value (name);
9593 /* Record a builtin type for C. If NAME is non-NULL, it is the name used;
9594 otherwise the name is found in ridpointers from RID_INDEX. */
9596 void
9597 record_builtin_type (enum rid rid_index, const char *name, tree type)
9599 tree id, decl;
9600 if (name == 0)
9601 id = ridpointers[(int) rid_index];
9602 else
9603 id = get_identifier (name);
9604 decl = build_decl (UNKNOWN_LOCATION, TYPE_DECL, id, type);
9605 pushdecl (decl);
9606 if (debug_hooks->type_decl)
9607 debug_hooks->type_decl (decl, false);
9610 /* Build the void_list_node (void_type_node having been created). */
9611 tree
9612 build_void_list_node (void)
9614 tree t = build_tree_list (NULL_TREE, void_type_node);
9615 return t;
9618 /* Return a c_parm structure with the given SPECS, ATTRS and DECLARATOR. */
9620 struct c_parm *
9621 build_c_parm (struct c_declspecs *specs, tree attrs,
9622 struct c_declarator *declarator)
9624 struct c_parm *ret = XOBNEW (&parser_obstack, struct c_parm);
9625 ret->specs = specs;
9626 ret->attrs = attrs;
9627 ret->declarator = declarator;
9628 return ret;
9631 /* Return a declarator with nested attributes. TARGET is the inner
9632 declarator to which these attributes apply. ATTRS are the
9633 attributes. */
9635 struct c_declarator *
9636 build_attrs_declarator (tree attrs, struct c_declarator *target)
9638 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
9639 ret->kind = cdk_attrs;
9640 ret->declarator = target;
9641 ret->u.attrs = attrs;
9642 return ret;
9645 /* Return a declarator for a function with arguments specified by ARGS
9646 and return type specified by TARGET. */
9648 struct c_declarator *
9649 build_function_declarator (struct c_arg_info *args,
9650 struct c_declarator *target)
9652 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
9653 ret->kind = cdk_function;
9654 ret->declarator = target;
9655 ret->u.arg_info = args;
9656 return ret;
9659 /* Return a declarator for the identifier IDENT (which may be
9660 NULL_TREE for an abstract declarator). */
9662 struct c_declarator *
9663 build_id_declarator (tree ident)
9665 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
9666 ret->kind = cdk_id;
9667 ret->declarator = 0;
9668 ret->u.id = ident;
9669 /* Default value - may get reset to a more precise location. */
9670 ret->id_loc = input_location;
9671 return ret;
9674 /* Return something to represent absolute declarators containing a *.
9675 TARGET is the absolute declarator that the * contains.
9676 TYPE_QUALS_ATTRS is a structure for type qualifiers and attributes
9677 to apply to the pointer type. */
9679 struct c_declarator *
9680 make_pointer_declarator (struct c_declspecs *type_quals_attrs,
9681 struct c_declarator *target)
9683 tree attrs;
9684 int quals = 0;
9685 struct c_declarator *itarget = target;
9686 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
9687 if (type_quals_attrs)
9689 attrs = type_quals_attrs->attrs;
9690 quals = quals_from_declspecs (type_quals_attrs);
9691 if (attrs != NULL_TREE)
9692 itarget = build_attrs_declarator (attrs, target);
9694 ret->kind = cdk_pointer;
9695 ret->declarator = itarget;
9696 ret->u.pointer_quals = quals;
9697 return ret;
9700 /* Return a pointer to a structure for an empty list of declaration
9701 specifiers. */
9703 struct c_declspecs *
9704 build_null_declspecs (void)
9706 struct c_declspecs *ret = XOBNEW (&parser_obstack, struct c_declspecs);
9707 memset (ret, 0, sizeof *ret);
9708 ret->align_log = -1;
9709 ret->typespec_word = cts_none;
9710 ret->storage_class = csc_none;
9711 ret->expr_const_operands = true;
9712 ret->typespec_kind = ctsk_none;
9713 ret->address_space = ADDR_SPACE_GENERIC;
9714 return ret;
9717 /* Add the address space ADDRSPACE to the declaration specifiers
9718 SPECS, returning SPECS. */
9720 struct c_declspecs *
9721 declspecs_add_addrspace (source_location location,
9722 struct c_declspecs *specs, addr_space_t as)
9724 specs->non_sc_seen_p = true;
9725 specs->declspecs_seen_p = true;
9727 if (!ADDR_SPACE_GENERIC_P (specs->address_space)
9728 && specs->address_space != as)
9729 error ("incompatible address space qualifiers %qs and %qs",
9730 c_addr_space_name (as),
9731 c_addr_space_name (specs->address_space));
9732 else
9734 specs->address_space = as;
9735 specs->locations[cdw_address_space] = location;
9737 return specs;
9740 /* Add the type qualifier QUAL to the declaration specifiers SPECS,
9741 returning SPECS. */
9743 struct c_declspecs *
9744 declspecs_add_qual (source_location loc,
9745 struct c_declspecs *specs, tree qual)
9747 enum rid i;
9748 bool dupe = false;
9749 specs->non_sc_seen_p = true;
9750 specs->declspecs_seen_p = true;
9751 gcc_assert (TREE_CODE (qual) == IDENTIFIER_NODE
9752 && C_IS_RESERVED_WORD (qual));
9753 i = C_RID_CODE (qual);
9754 location_t prev_loc = UNKNOWN_LOCATION;
9755 switch (i)
9757 case RID_CONST:
9758 dupe = specs->const_p;
9759 specs->const_p = true;
9760 prev_loc = specs->locations[cdw_const];
9761 specs->locations[cdw_const] = loc;
9762 break;
9763 case RID_VOLATILE:
9764 dupe = specs->volatile_p;
9765 specs->volatile_p = true;
9766 prev_loc = specs->locations[cdw_volatile];
9767 specs->locations[cdw_volatile] = loc;
9768 break;
9769 case RID_RESTRICT:
9770 dupe = specs->restrict_p;
9771 specs->restrict_p = true;
9772 prev_loc = specs->locations[cdw_restrict];
9773 specs->locations[cdw_restrict] = loc;
9774 break;
9775 case RID_ATOMIC:
9776 dupe = specs->atomic_p;
9777 specs->atomic_p = true;
9778 prev_loc = specs->locations[cdw_atomic];
9779 specs->locations[cdw_atomic] = loc;
9780 break;
9781 default:
9782 gcc_unreachable ();
9784 if (dupe)
9786 bool warned = pedwarn_c90 (loc, OPT_Wpedantic,
9787 "duplicate %qE declaration specifier", qual);
9788 if (!warned
9789 && warn_duplicate_decl_specifier
9790 && prev_loc >= RESERVED_LOCATION_COUNT
9791 && !from_macro_expansion_at (prev_loc)
9792 && !from_macro_expansion_at (loc))
9793 warning_at (loc, OPT_Wduplicate_decl_specifier,
9794 "duplicate %qE declaration specifier", qual);
9796 return specs;
9799 /* Add the type specifier TYPE to the declaration specifiers SPECS,
9800 returning SPECS. */
9802 struct c_declspecs *
9803 declspecs_add_type (location_t loc, struct c_declspecs *specs,
9804 struct c_typespec spec)
9806 tree type = spec.spec;
9807 specs->non_sc_seen_p = true;
9808 specs->declspecs_seen_p = true;
9809 specs->typespec_kind = spec.kind;
9810 if (TREE_DEPRECATED (type))
9811 specs->deprecated_p = true;
9813 /* Handle type specifier keywords. */
9814 if (TREE_CODE (type) == IDENTIFIER_NODE
9815 && C_IS_RESERVED_WORD (type)
9816 && C_RID_CODE (type) != RID_CXX_COMPAT_WARN)
9818 enum rid i = C_RID_CODE (type);
9819 if (specs->type)
9821 error_at (loc, "two or more data types in declaration specifiers");
9822 return specs;
9824 if ((int) i <= (int) RID_LAST_MODIFIER)
9826 /* "long", "short", "signed", "unsigned", "_Complex" or "_Sat". */
9827 bool dupe = false;
9828 switch (i)
9830 case RID_LONG:
9831 if (specs->long_long_p)
9833 error_at (loc, "%<long long long%> is too long for GCC");
9834 break;
9836 if (specs->long_p)
9838 if (specs->typespec_word == cts_double)
9840 error_at (loc,
9841 ("both %<long long%> and %<double%> in "
9842 "declaration specifiers"));
9843 break;
9845 pedwarn_c90 (loc, OPT_Wlong_long,
9846 "ISO C90 does not support %<long long%>");
9847 specs->long_long_p = 1;
9848 specs->locations[cdw_long_long] = loc;
9849 break;
9851 if (specs->short_p)
9852 error_at (loc,
9853 ("both %<long%> and %<short%> in "
9854 "declaration specifiers"));
9855 else if (specs->typespec_word == cts_auto_type)
9856 error_at (loc,
9857 ("both %<long%> and %<__auto_type%> in "
9858 "declaration specifiers"));
9859 else if (specs->typespec_word == cts_void)
9860 error_at (loc,
9861 ("both %<long%> and %<void%> in "
9862 "declaration specifiers"));
9863 else if (specs->typespec_word == cts_int_n)
9864 error_at (loc,
9865 ("both %<long%> and %<__int%d%> in "
9866 "declaration specifiers"),
9867 int_n_data[specs->int_n_idx].bitsize);
9868 else if (specs->typespec_word == cts_bool)
9869 error_at (loc,
9870 ("both %<long%> and %<_Bool%> in "
9871 "declaration specifiers"));
9872 else if (specs->typespec_word == cts_char)
9873 error_at (loc,
9874 ("both %<long%> and %<char%> in "
9875 "declaration specifiers"));
9876 else if (specs->typespec_word == cts_float)
9877 error_at (loc,
9878 ("both %<long%> and %<float%> in "
9879 "declaration specifiers"));
9880 else if (specs->typespec_word == cts_floatn_nx)
9881 error_at (loc,
9882 ("both %<long%> and %<_Float%d%s%> in "
9883 "declaration specifiers"),
9884 floatn_nx_types[specs->floatn_nx_idx].n,
9885 (floatn_nx_types[specs->floatn_nx_idx].extended
9886 ? "x"
9887 : ""));
9888 else if (specs->typespec_word == cts_dfloat32)
9889 error_at (loc,
9890 ("both %<long%> and %<_Decimal32%> in "
9891 "declaration specifiers"));
9892 else if (specs->typespec_word == cts_dfloat64)
9893 error_at (loc,
9894 ("both %<long%> and %<_Decimal64%> in "
9895 "declaration specifiers"));
9896 else if (specs->typespec_word == cts_dfloat128)
9897 error_at (loc,
9898 ("both %<long%> and %<_Decimal128%> in "
9899 "declaration specifiers"));
9900 else
9902 specs->long_p = true;
9903 specs->locations[cdw_long] = loc;
9905 break;
9906 case RID_SHORT:
9907 dupe = specs->short_p;
9908 if (specs->long_p)
9909 error_at (loc,
9910 ("both %<long%> and %<short%> in "
9911 "declaration specifiers"));
9912 else if (specs->typespec_word == cts_auto_type)
9913 error_at (loc,
9914 ("both %<short%> and %<__auto_type%> in "
9915 "declaration specifiers"));
9916 else if (specs->typespec_word == cts_void)
9917 error_at (loc,
9918 ("both %<short%> and %<void%> in "
9919 "declaration specifiers"));
9920 else if (specs->typespec_word == cts_int_n)
9921 error_at (loc,
9922 ("both %<short%> and %<__int%d%> in "
9923 "declaration specifiers"),
9924 int_n_data[specs->int_n_idx].bitsize);
9925 else if (specs->typespec_word == cts_bool)
9926 error_at (loc,
9927 ("both %<short%> and %<_Bool%> in "
9928 "declaration specifiers"));
9929 else if (specs->typespec_word == cts_char)
9930 error_at (loc,
9931 ("both %<short%> and %<char%> in "
9932 "declaration specifiers"));
9933 else if (specs->typespec_word == cts_float)
9934 error_at (loc,
9935 ("both %<short%> and %<float%> in "
9936 "declaration specifiers"));
9937 else if (specs->typespec_word == cts_double)
9938 error_at (loc,
9939 ("both %<short%> and %<double%> in "
9940 "declaration specifiers"));
9941 else if (specs->typespec_word == cts_floatn_nx)
9942 error_at (loc,
9943 ("both %<short%> and %<_Float%d%s%> in "
9944 "declaration specifiers"),
9945 floatn_nx_types[specs->floatn_nx_idx].n,
9946 (floatn_nx_types[specs->floatn_nx_idx].extended
9947 ? "x"
9948 : ""));
9949 else if (specs->typespec_word == cts_dfloat32)
9950 error_at (loc,
9951 ("both %<short%> and %<_Decimal32%> in "
9952 "declaration specifiers"));
9953 else if (specs->typespec_word == cts_dfloat64)
9954 error_at (loc,
9955 ("both %<short%> and %<_Decimal64%> in "
9956 "declaration specifiers"));
9957 else if (specs->typespec_word == cts_dfloat128)
9958 error_at (loc,
9959 ("both %<short%> and %<_Decimal128%> in "
9960 "declaration specifiers"));
9961 else
9963 specs->short_p = true;
9964 specs->locations[cdw_short] = loc;
9966 break;
9967 case RID_SIGNED:
9968 dupe = specs->signed_p;
9969 if (specs->unsigned_p)
9970 error_at (loc,
9971 ("both %<signed%> and %<unsigned%> in "
9972 "declaration specifiers"));
9973 else if (specs->typespec_word == cts_auto_type)
9974 error_at (loc,
9975 ("both %<signed%> and %<__auto_type%> in "
9976 "declaration specifiers"));
9977 else if (specs->typespec_word == cts_void)
9978 error_at (loc,
9979 ("both %<signed%> and %<void%> in "
9980 "declaration specifiers"));
9981 else if (specs->typespec_word == cts_bool)
9982 error_at (loc,
9983 ("both %<signed%> and %<_Bool%> in "
9984 "declaration specifiers"));
9985 else if (specs->typespec_word == cts_float)
9986 error_at (loc,
9987 ("both %<signed%> and %<float%> in "
9988 "declaration specifiers"));
9989 else if (specs->typespec_word == cts_double)
9990 error_at (loc,
9991 ("both %<signed%> and %<double%> in "
9992 "declaration specifiers"));
9993 else if (specs->typespec_word == cts_floatn_nx)
9994 error_at (loc,
9995 ("both %<signed%> and %<_Float%d%s%> in "
9996 "declaration specifiers"),
9997 floatn_nx_types[specs->floatn_nx_idx].n,
9998 (floatn_nx_types[specs->floatn_nx_idx].extended
9999 ? "x"
10000 : ""));
10001 else if (specs->typespec_word == cts_dfloat32)
10002 error_at (loc,
10003 ("both %<signed%> and %<_Decimal32%> in "
10004 "declaration specifiers"));
10005 else if (specs->typespec_word == cts_dfloat64)
10006 error_at (loc,
10007 ("both %<signed%> and %<_Decimal64%> in "
10008 "declaration specifiers"));
10009 else if (specs->typespec_word == cts_dfloat128)
10010 error_at (loc,
10011 ("both %<signed%> and %<_Decimal128%> in "
10012 "declaration specifiers"));
10013 else
10015 specs->signed_p = true;
10016 specs->locations[cdw_signed] = loc;
10018 break;
10019 case RID_UNSIGNED:
10020 dupe = specs->unsigned_p;
10021 if (specs->signed_p)
10022 error_at (loc,
10023 ("both %<signed%> and %<unsigned%> in "
10024 "declaration specifiers"));
10025 else if (specs->typespec_word == cts_auto_type)
10026 error_at (loc,
10027 ("both %<unsigned%> and %<__auto_type%> in "
10028 "declaration specifiers"));
10029 else if (specs->typespec_word == cts_void)
10030 error_at (loc,
10031 ("both %<unsigned%> and %<void%> in "
10032 "declaration specifiers"));
10033 else if (specs->typespec_word == cts_bool)
10034 error_at (loc,
10035 ("both %<unsigned%> and %<_Bool%> in "
10036 "declaration specifiers"));
10037 else if (specs->typespec_word == cts_float)
10038 error_at (loc,
10039 ("both %<unsigned%> and %<float%> in "
10040 "declaration specifiers"));
10041 else if (specs->typespec_word == cts_double)
10042 error_at (loc,
10043 ("both %<unsigned%> and %<double%> in "
10044 "declaration specifiers"));
10045 else if (specs->typespec_word == cts_floatn_nx)
10046 error_at (loc,
10047 ("both %<unsigned%> and %<_Float%d%s%> in "
10048 "declaration specifiers"),
10049 floatn_nx_types[specs->floatn_nx_idx].n,
10050 (floatn_nx_types[specs->floatn_nx_idx].extended
10051 ? "x"
10052 : ""));
10053 else if (specs->typespec_word == cts_dfloat32)
10054 error_at (loc,
10055 ("both %<unsigned%> and %<_Decimal32%> in "
10056 "declaration specifiers"));
10057 else if (specs->typespec_word == cts_dfloat64)
10058 error_at (loc,
10059 ("both %<unsigned%> and %<_Decimal64%> in "
10060 "declaration specifiers"));
10061 else if (specs->typespec_word == cts_dfloat128)
10062 error_at (loc,
10063 ("both %<unsigned%> and %<_Decimal128%> in "
10064 "declaration specifiers"));
10065 else
10067 specs->unsigned_p = true;
10068 specs->locations[cdw_unsigned] = loc;
10070 break;
10071 case RID_COMPLEX:
10072 dupe = specs->complex_p;
10073 if (!in_system_header_at (loc))
10074 pedwarn_c90 (loc, OPT_Wpedantic,
10075 "ISO C90 does not support complex types");
10076 if (specs->typespec_word == cts_auto_type)
10077 error_at (loc,
10078 ("both %<complex%> and %<__auto_type%> in "
10079 "declaration specifiers"));
10080 else if (specs->typespec_word == cts_void)
10081 error_at (loc,
10082 ("both %<complex%> and %<void%> in "
10083 "declaration specifiers"));
10084 else if (specs->typespec_word == cts_bool)
10085 error_at (loc,
10086 ("both %<complex%> and %<_Bool%> in "
10087 "declaration specifiers"));
10088 else if (specs->typespec_word == cts_dfloat32)
10089 error_at (loc,
10090 ("both %<complex%> and %<_Decimal32%> in "
10091 "declaration specifiers"));
10092 else if (specs->typespec_word == cts_dfloat64)
10093 error_at (loc,
10094 ("both %<complex%> and %<_Decimal64%> in "
10095 "declaration specifiers"));
10096 else if (specs->typespec_word == cts_dfloat128)
10097 error_at (loc,
10098 ("both %<complex%> and %<_Decimal128%> in "
10099 "declaration specifiers"));
10100 else if (specs->typespec_word == cts_fract)
10101 error_at (loc,
10102 ("both %<complex%> and %<_Fract%> in "
10103 "declaration specifiers"));
10104 else if (specs->typespec_word == cts_accum)
10105 error_at (loc,
10106 ("both %<complex%> and %<_Accum%> in "
10107 "declaration specifiers"));
10108 else if (specs->saturating_p)
10109 error_at (loc,
10110 ("both %<complex%> and %<_Sat%> in "
10111 "declaration specifiers"));
10112 else
10114 specs->complex_p = true;
10115 specs->locations[cdw_complex] = loc;
10117 break;
10118 case RID_SAT:
10119 dupe = specs->saturating_p;
10120 pedwarn (loc, OPT_Wpedantic,
10121 "ISO C does not support saturating types");
10122 if (specs->typespec_word == cts_int_n)
10124 error_at (loc,
10125 ("both %<_Sat%> and %<__int%d%> in "
10126 "declaration specifiers"),
10127 int_n_data[specs->int_n_idx].bitsize);
10129 else if (specs->typespec_word == cts_auto_type)
10130 error_at (loc,
10131 ("both %<_Sat%> and %<__auto_type%> in "
10132 "declaration specifiers"));
10133 else if (specs->typespec_word == cts_void)
10134 error_at (loc,
10135 ("both %<_Sat%> and %<void%> in "
10136 "declaration specifiers"));
10137 else if (specs->typespec_word == cts_bool)
10138 error_at (loc,
10139 ("both %<_Sat%> and %<_Bool%> in "
10140 "declaration specifiers"));
10141 else if (specs->typespec_word == cts_char)
10142 error_at (loc,
10143 ("both %<_Sat%> and %<char%> in "
10144 "declaration specifiers"));
10145 else if (specs->typespec_word == cts_int)
10146 error_at (loc,
10147 ("both %<_Sat%> and %<int%> in "
10148 "declaration specifiers"));
10149 else if (specs->typespec_word == cts_float)
10150 error_at (loc,
10151 ("both %<_Sat%> and %<float%> in "
10152 "declaration specifiers"));
10153 else if (specs->typespec_word == cts_double)
10154 error_at (loc,
10155 ("both %<_Sat%> and %<double%> in "
10156 "declaration specifiers"));
10157 else if (specs->typespec_word == cts_floatn_nx)
10158 error_at (loc,
10159 ("both %<_Sat%> and %<_Float%d%s%> in "
10160 "declaration specifiers"),
10161 floatn_nx_types[specs->floatn_nx_idx].n,
10162 (floatn_nx_types[specs->floatn_nx_idx].extended
10163 ? "x"
10164 : ""));
10165 else if (specs->typespec_word == cts_dfloat32)
10166 error_at (loc,
10167 ("both %<_Sat%> and %<_Decimal32%> in "
10168 "declaration specifiers"));
10169 else if (specs->typespec_word == cts_dfloat64)
10170 error_at (loc,
10171 ("both %<_Sat%> and %<_Decimal64%> in "
10172 "declaration specifiers"));
10173 else if (specs->typespec_word == cts_dfloat128)
10174 error_at (loc,
10175 ("both %<_Sat%> and %<_Decimal128%> in "
10176 "declaration specifiers"));
10177 else if (specs->complex_p)
10178 error_at (loc,
10179 ("both %<_Sat%> and %<complex%> in "
10180 "declaration specifiers"));
10181 else
10183 specs->saturating_p = true;
10184 specs->locations[cdw_saturating] = loc;
10186 break;
10187 default:
10188 gcc_unreachable ();
10191 if (dupe)
10192 error_at (loc, "duplicate %qE", type);
10194 return specs;
10196 else
10198 /* "void", "_Bool", "char", "int", "float", "double",
10199 "_FloatN", "_FloatNx", "_Decimal32", "__intN",
10200 "_Decimal64", "_Decimal128", "_Fract", "_Accum" or
10201 "__auto_type". */
10202 if (specs->typespec_word != cts_none)
10204 error_at (loc,
10205 "two or more data types in declaration specifiers");
10206 return specs;
10208 switch (i)
10210 case RID_AUTO_TYPE:
10211 if (specs->long_p)
10212 error_at (loc,
10213 ("both %<long%> and %<__auto_type%> in "
10214 "declaration specifiers"));
10215 else if (specs->short_p)
10216 error_at (loc,
10217 ("both %<short%> and %<__auto_type%> in "
10218 "declaration specifiers"));
10219 else if (specs->signed_p)
10220 error_at (loc,
10221 ("both %<signed%> and %<__auto_type%> in "
10222 "declaration specifiers"));
10223 else if (specs->unsigned_p)
10224 error_at (loc,
10225 ("both %<unsigned%> and %<__auto_type%> in "
10226 "declaration specifiers"));
10227 else if (specs->complex_p)
10228 error_at (loc,
10229 ("both %<complex%> and %<__auto_type%> in "
10230 "declaration specifiers"));
10231 else if (specs->saturating_p)
10232 error_at (loc,
10233 ("both %<_Sat%> and %<__auto_type%> in "
10234 "declaration specifiers"));
10235 else
10237 specs->typespec_word = cts_auto_type;
10238 specs->locations[cdw_typespec] = loc;
10240 return specs;
10241 case RID_INT_N_0:
10242 case RID_INT_N_1:
10243 case RID_INT_N_2:
10244 case RID_INT_N_3:
10245 specs->int_n_idx = i - RID_INT_N_0;
10246 if (!in_system_header_at (input_location))
10247 pedwarn (loc, OPT_Wpedantic,
10248 "ISO C does not support %<__int%d%> types",
10249 int_n_data[specs->int_n_idx].bitsize);
10251 if (specs->long_p)
10252 error_at (loc,
10253 ("both %<__int%d%> and %<long%> in "
10254 "declaration specifiers"),
10255 int_n_data[specs->int_n_idx].bitsize);
10256 else if (specs->saturating_p)
10257 error_at (loc,
10258 ("both %<_Sat%> and %<__int%d%> in "
10259 "declaration specifiers"),
10260 int_n_data[specs->int_n_idx].bitsize);
10261 else if (specs->short_p)
10262 error_at (loc,
10263 ("both %<__int%d%> and %<short%> in "
10264 "declaration specifiers"),
10265 int_n_data[specs->int_n_idx].bitsize);
10266 else if (! int_n_enabled_p[specs->int_n_idx])
10268 specs->typespec_word = cts_int_n;
10269 error_at (loc,
10270 "%<__int%d%> is not supported on this target",
10271 int_n_data[specs->int_n_idx].bitsize);
10273 else
10275 specs->typespec_word = cts_int_n;
10276 specs->locations[cdw_typespec] = loc;
10278 return specs;
10279 case RID_VOID:
10280 if (specs->long_p)
10281 error_at (loc,
10282 ("both %<long%> and %<void%> in "
10283 "declaration specifiers"));
10284 else if (specs->short_p)
10285 error_at (loc,
10286 ("both %<short%> and %<void%> in "
10287 "declaration specifiers"));
10288 else if (specs->signed_p)
10289 error_at (loc,
10290 ("both %<signed%> and %<void%> in "
10291 "declaration specifiers"));
10292 else if (specs->unsigned_p)
10293 error_at (loc,
10294 ("both %<unsigned%> and %<void%> in "
10295 "declaration specifiers"));
10296 else if (specs->complex_p)
10297 error_at (loc,
10298 ("both %<complex%> and %<void%> in "
10299 "declaration specifiers"));
10300 else if (specs->saturating_p)
10301 error_at (loc,
10302 ("both %<_Sat%> and %<void%> in "
10303 "declaration specifiers"));
10304 else
10306 specs->typespec_word = cts_void;
10307 specs->locations[cdw_typespec] = loc;
10309 return specs;
10310 case RID_BOOL:
10311 if (!in_system_header_at (loc))
10312 pedwarn_c90 (loc, OPT_Wpedantic,
10313 "ISO C90 does not support boolean types");
10314 if (specs->long_p)
10315 error_at (loc,
10316 ("both %<long%> and %<_Bool%> in "
10317 "declaration specifiers"));
10318 else if (specs->short_p)
10319 error_at (loc,
10320 ("both %<short%> and %<_Bool%> in "
10321 "declaration specifiers"));
10322 else if (specs->signed_p)
10323 error_at (loc,
10324 ("both %<signed%> and %<_Bool%> in "
10325 "declaration specifiers"));
10326 else if (specs->unsigned_p)
10327 error_at (loc,
10328 ("both %<unsigned%> and %<_Bool%> in "
10329 "declaration specifiers"));
10330 else if (specs->complex_p)
10331 error_at (loc,
10332 ("both %<complex%> and %<_Bool%> in "
10333 "declaration specifiers"));
10334 else if (specs->saturating_p)
10335 error_at (loc,
10336 ("both %<_Sat%> and %<_Bool%> in "
10337 "declaration specifiers"));
10338 else
10340 specs->typespec_word = cts_bool;
10341 specs->locations[cdw_typespec] = loc;
10343 return specs;
10344 case RID_CHAR:
10345 if (specs->long_p)
10346 error_at (loc,
10347 ("both %<long%> and %<char%> in "
10348 "declaration specifiers"));
10349 else if (specs->short_p)
10350 error_at (loc,
10351 ("both %<short%> and %<char%> in "
10352 "declaration specifiers"));
10353 else if (specs->saturating_p)
10354 error_at (loc,
10355 ("both %<_Sat%> and %<char%> in "
10356 "declaration specifiers"));
10357 else
10359 specs->typespec_word = cts_char;
10360 specs->locations[cdw_typespec] = loc;
10362 return specs;
10363 case RID_INT:
10364 if (specs->saturating_p)
10365 error_at (loc,
10366 ("both %<_Sat%> and %<int%> in "
10367 "declaration specifiers"));
10368 else
10370 specs->typespec_word = cts_int;
10371 specs->locations[cdw_typespec] = loc;
10373 return specs;
10374 case RID_FLOAT:
10375 if (specs->long_p)
10376 error_at (loc,
10377 ("both %<long%> and %<float%> in "
10378 "declaration specifiers"));
10379 else if (specs->short_p)
10380 error_at (loc,
10381 ("both %<short%> and %<float%> in "
10382 "declaration specifiers"));
10383 else if (specs->signed_p)
10384 error_at (loc,
10385 ("both %<signed%> and %<float%> in "
10386 "declaration specifiers"));
10387 else if (specs->unsigned_p)
10388 error_at (loc,
10389 ("both %<unsigned%> and %<float%> in "
10390 "declaration specifiers"));
10391 else if (specs->saturating_p)
10392 error_at (loc,
10393 ("both %<_Sat%> and %<float%> in "
10394 "declaration specifiers"));
10395 else
10397 specs->typespec_word = cts_float;
10398 specs->locations[cdw_typespec] = loc;
10400 return specs;
10401 case RID_DOUBLE:
10402 if (specs->long_long_p)
10403 error_at (loc,
10404 ("both %<long long%> and %<double%> in "
10405 "declaration specifiers"));
10406 else if (specs->short_p)
10407 error_at (loc,
10408 ("both %<short%> and %<double%> in "
10409 "declaration specifiers"));
10410 else if (specs->signed_p)
10411 error_at (loc,
10412 ("both %<signed%> and %<double%> in "
10413 "declaration specifiers"));
10414 else if (specs->unsigned_p)
10415 error_at (loc,
10416 ("both %<unsigned%> and %<double%> in "
10417 "declaration specifiers"));
10418 else if (specs->saturating_p)
10419 error_at (loc,
10420 ("both %<_Sat%> and %<double%> in "
10421 "declaration specifiers"));
10422 else
10424 specs->typespec_word = cts_double;
10425 specs->locations[cdw_typespec] = loc;
10427 return specs;
10428 CASE_RID_FLOATN_NX:
10429 specs->floatn_nx_idx = i - RID_FLOATN_NX_FIRST;
10430 if (!in_system_header_at (input_location))
10431 pedwarn (loc, OPT_Wpedantic,
10432 "ISO C does not support the %<_Float%d%s%> type",
10433 floatn_nx_types[specs->floatn_nx_idx].n,
10434 (floatn_nx_types[specs->floatn_nx_idx].extended
10435 ? "x"
10436 : ""));
10438 if (specs->long_p)
10439 error_at (loc,
10440 ("both %<long%> and %<_Float%d%s%> in "
10441 "declaration specifiers"),
10442 floatn_nx_types[specs->floatn_nx_idx].n,
10443 (floatn_nx_types[specs->floatn_nx_idx].extended
10444 ? "x"
10445 : ""));
10446 else if (specs->short_p)
10447 error_at (loc,
10448 ("both %<short%> and %<_Float%d%s%> in "
10449 "declaration specifiers"),
10450 floatn_nx_types[specs->floatn_nx_idx].n,
10451 (floatn_nx_types[specs->floatn_nx_idx].extended
10452 ? "x"
10453 : ""));
10454 else if (specs->signed_p)
10455 error_at (loc,
10456 ("both %<signed%> and %<_Float%d%s%> in "
10457 "declaration specifiers"),
10458 floatn_nx_types[specs->floatn_nx_idx].n,
10459 (floatn_nx_types[specs->floatn_nx_idx].extended
10460 ? "x"
10461 : ""));
10462 else if (specs->unsigned_p)
10463 error_at (loc,
10464 ("both %<unsigned%> and %<_Float%d%s%> in "
10465 "declaration specifiers"),
10466 floatn_nx_types[specs->floatn_nx_idx].n,
10467 (floatn_nx_types[specs->floatn_nx_idx].extended
10468 ? "x"
10469 : ""));
10470 else if (specs->saturating_p)
10471 error_at (loc,
10472 ("both %<_Sat%> and %<_Float%d%s%> in "
10473 "declaration specifiers"),
10474 floatn_nx_types[specs->floatn_nx_idx].n,
10475 (floatn_nx_types[specs->floatn_nx_idx].extended
10476 ? "x"
10477 : ""));
10478 else if (FLOATN_NX_TYPE_NODE (specs->floatn_nx_idx) == NULL_TREE)
10480 specs->typespec_word = cts_floatn_nx;
10481 error_at (loc,
10482 "%<_Float%d%s%> is not supported on this target",
10483 floatn_nx_types[specs->floatn_nx_idx].n,
10484 (floatn_nx_types[specs->floatn_nx_idx].extended
10485 ? "x"
10486 : ""));
10488 else
10490 specs->typespec_word = cts_floatn_nx;
10491 specs->locations[cdw_typespec] = loc;
10493 return specs;
10494 case RID_DFLOAT32:
10495 case RID_DFLOAT64:
10496 case RID_DFLOAT128:
10498 const char *str;
10499 if (i == RID_DFLOAT32)
10500 str = "_Decimal32";
10501 else if (i == RID_DFLOAT64)
10502 str = "_Decimal64";
10503 else
10504 str = "_Decimal128";
10505 if (specs->long_long_p)
10506 error_at (loc,
10507 ("both %<long long%> and %qs in "
10508 "declaration specifiers"),
10509 str);
10510 if (specs->long_p)
10511 error_at (loc,
10512 ("both %<long%> and %qs in "
10513 "declaration specifiers"),
10514 str);
10515 else if (specs->short_p)
10516 error_at (loc,
10517 ("both %<short%> and %qs in "
10518 "declaration specifiers"),
10519 str);
10520 else if (specs->signed_p)
10521 error_at (loc,
10522 ("both %<signed%> and %qs in "
10523 "declaration specifiers"),
10524 str);
10525 else if (specs->unsigned_p)
10526 error_at (loc,
10527 ("both %<unsigned%> and %qs in "
10528 "declaration specifiers"),
10529 str);
10530 else if (specs->complex_p)
10531 error_at (loc,
10532 ("both %<complex%> and %qs in "
10533 "declaration specifiers"),
10534 str);
10535 else if (specs->saturating_p)
10536 error_at (loc,
10537 ("both %<_Sat%> and %qs in "
10538 "declaration specifiers"),
10539 str);
10540 else if (i == RID_DFLOAT32)
10541 specs->typespec_word = cts_dfloat32;
10542 else if (i == RID_DFLOAT64)
10543 specs->typespec_word = cts_dfloat64;
10544 else
10545 specs->typespec_word = cts_dfloat128;
10546 specs->locations[cdw_typespec] = loc;
10548 if (!targetm.decimal_float_supported_p ())
10549 error_at (loc,
10550 ("decimal floating point not supported "
10551 "for this target"));
10552 pedwarn (loc, OPT_Wpedantic,
10553 "ISO C does not support decimal floating point");
10554 return specs;
10555 case RID_FRACT:
10556 case RID_ACCUM:
10558 const char *str;
10559 if (i == RID_FRACT)
10560 str = "_Fract";
10561 else
10562 str = "_Accum";
10563 if (specs->complex_p)
10564 error_at (loc,
10565 ("both %<complex%> and %qs in "
10566 "declaration specifiers"),
10567 str);
10568 else if (i == RID_FRACT)
10569 specs->typespec_word = cts_fract;
10570 else
10571 specs->typespec_word = cts_accum;
10572 specs->locations[cdw_typespec] = loc;
10574 if (!targetm.fixed_point_supported_p ())
10575 error_at (loc,
10576 "fixed-point types not supported for this target");
10577 pedwarn (loc, OPT_Wpedantic,
10578 "ISO C does not support fixed-point types");
10579 return specs;
10580 default:
10581 /* ObjC reserved word "id", handled below. */
10582 break;
10587 /* Now we have a typedef (a TYPE_DECL node), an identifier (some
10588 form of ObjC type, cases such as "int" and "long" being handled
10589 above), a TYPE (struct, union, enum and typeof specifiers) or an
10590 ERROR_MARK. In none of these cases may there have previously
10591 been any type specifiers. */
10592 if (specs->type || specs->typespec_word != cts_none
10593 || specs->long_p || specs->short_p || specs->signed_p
10594 || specs->unsigned_p || specs->complex_p)
10595 error_at (loc, "two or more data types in declaration specifiers");
10596 else if (TREE_CODE (type) == TYPE_DECL)
10598 if (TREE_TYPE (type) == error_mark_node)
10599 ; /* Allow the type to default to int to avoid cascading errors. */
10600 else
10602 specs->type = TREE_TYPE (type);
10603 specs->decl_attr = DECL_ATTRIBUTES (type);
10604 specs->typedef_p = true;
10605 specs->explicit_signed_p = C_TYPEDEF_EXPLICITLY_SIGNED (type);
10606 specs->locations[cdw_typedef] = loc;
10608 /* If this typedef name is defined in a struct, then a C++
10609 lookup would return a different value. */
10610 if (warn_cxx_compat
10611 && I_SYMBOL_BINDING (DECL_NAME (type))->in_struct)
10612 warning_at (loc, OPT_Wc___compat,
10613 "C++ lookup of %qD would return a field, not a type",
10614 type);
10616 /* If we are parsing a struct, record that a struct field
10617 used a typedef. */
10618 if (warn_cxx_compat && struct_parse_info != NULL)
10619 struct_parse_info->typedefs_seen.safe_push (type);
10622 else if (TREE_CODE (type) == IDENTIFIER_NODE)
10624 tree t = lookup_name (type);
10625 if (!t || TREE_CODE (t) != TYPE_DECL)
10626 error_at (loc, "%qE fails to be a typedef or built in type", type);
10627 else if (TREE_TYPE (t) == error_mark_node)
10629 else
10631 specs->type = TREE_TYPE (t);
10632 specs->locations[cdw_typespec] = loc;
10635 else
10637 if (TREE_CODE (type) != ERROR_MARK && spec.kind == ctsk_typeof)
10639 specs->typedef_p = true;
10640 specs->locations[cdw_typedef] = loc;
10641 if (spec.expr)
10643 if (specs->expr)
10644 specs->expr = build2 (COMPOUND_EXPR, TREE_TYPE (spec.expr),
10645 specs->expr, spec.expr);
10646 else
10647 specs->expr = spec.expr;
10648 specs->expr_const_operands &= spec.expr_const_operands;
10651 specs->type = type;
10654 return specs;
10657 /* Add the storage class specifier or function specifier SCSPEC to the
10658 declaration specifiers SPECS, returning SPECS. */
10660 struct c_declspecs *
10661 declspecs_add_scspec (source_location loc,
10662 struct c_declspecs *specs,
10663 tree scspec)
10665 enum rid i;
10666 enum c_storage_class n = csc_none;
10667 bool dupe = false;
10668 specs->declspecs_seen_p = true;
10669 gcc_assert (TREE_CODE (scspec) == IDENTIFIER_NODE
10670 && C_IS_RESERVED_WORD (scspec));
10671 i = C_RID_CODE (scspec);
10672 if (specs->non_sc_seen_p)
10673 warning (OPT_Wold_style_declaration,
10674 "%qE is not at beginning of declaration", scspec);
10675 switch (i)
10677 case RID_INLINE:
10678 /* C99 permits duplicate inline. Although of doubtful utility,
10679 it seems simplest to permit it in gnu89 mode as well, as
10680 there is also little utility in maintaining this as a
10681 difference between gnu89 and C99 inline. */
10682 dupe = false;
10683 specs->inline_p = true;
10684 specs->locations[cdw_inline] = loc;
10685 break;
10686 case RID_NORETURN:
10687 /* Duplicate _Noreturn is permitted. */
10688 dupe = false;
10689 specs->noreturn_p = true;
10690 specs->locations[cdw_noreturn] = loc;
10691 break;
10692 case RID_THREAD:
10693 dupe = specs->thread_p;
10694 if (specs->storage_class == csc_auto)
10695 error ("%qE used with %<auto%>", scspec);
10696 else if (specs->storage_class == csc_register)
10697 error ("%qE used with %<register%>", scspec);
10698 else if (specs->storage_class == csc_typedef)
10699 error ("%qE used with %<typedef%>", scspec);
10700 else
10702 specs->thread_p = true;
10703 specs->thread_gnu_p = (strcmp (IDENTIFIER_POINTER (scspec),
10704 "__thread") == 0);
10705 /* A diagnostic is not required for the use of this
10706 identifier in the implementation namespace; only diagnose
10707 it for the C11 spelling because of existing code using
10708 the other spelling. */
10709 if (!specs->thread_gnu_p)
10711 if (flag_isoc99)
10712 pedwarn_c99 (loc, OPT_Wpedantic,
10713 "ISO C99 does not support %qE", scspec);
10714 else
10715 pedwarn_c99 (loc, OPT_Wpedantic,
10716 "ISO C90 does not support %qE", scspec);
10718 specs->locations[cdw_thread] = loc;
10720 break;
10721 case RID_AUTO:
10722 n = csc_auto;
10723 break;
10724 case RID_EXTERN:
10725 n = csc_extern;
10726 /* Diagnose "__thread extern". */
10727 if (specs->thread_p && specs->thread_gnu_p)
10728 error ("%<__thread%> before %<extern%>");
10729 break;
10730 case RID_REGISTER:
10731 n = csc_register;
10732 break;
10733 case RID_STATIC:
10734 n = csc_static;
10735 /* Diagnose "__thread static". */
10736 if (specs->thread_p && specs->thread_gnu_p)
10737 error ("%<__thread%> before %<static%>");
10738 break;
10739 case RID_TYPEDEF:
10740 n = csc_typedef;
10741 break;
10742 default:
10743 gcc_unreachable ();
10745 if (n != csc_none && n == specs->storage_class)
10746 dupe = true;
10747 if (dupe)
10749 if (i == RID_THREAD)
10750 error ("duplicate %<_Thread_local%> or %<__thread%>");
10751 else
10752 error ("duplicate %qE", scspec);
10754 if (n != csc_none)
10756 if (specs->storage_class != csc_none && n != specs->storage_class)
10758 error ("multiple storage classes in declaration specifiers");
10760 else
10762 specs->storage_class = n;
10763 specs->locations[cdw_storage_class] = loc;
10764 if (n != csc_extern && n != csc_static && specs->thread_p)
10766 error ("%qs used with %qE",
10767 specs->thread_gnu_p ? "__thread" : "_Thread_local",
10768 scspec);
10769 specs->thread_p = false;
10773 return specs;
10776 /* Add the attributes ATTRS to the declaration specifiers SPECS,
10777 returning SPECS. */
10779 struct c_declspecs *
10780 declspecs_add_attrs (source_location loc, struct c_declspecs *specs, tree attrs)
10782 specs->attrs = chainon (attrs, specs->attrs);
10783 specs->locations[cdw_attributes] = loc;
10784 specs->declspecs_seen_p = true;
10785 return specs;
10788 /* Add an _Alignas specifier (expression ALIGN, or type whose
10789 alignment is ALIGN) to the declaration specifiers SPECS, returning
10790 SPECS. */
10791 struct c_declspecs *
10792 declspecs_add_alignas (source_location loc,
10793 struct c_declspecs *specs, tree align)
10795 int align_log;
10796 specs->alignas_p = true;
10797 specs->locations[cdw_alignas] = loc;
10798 if (align == error_mark_node)
10799 return specs;
10800 align_log = check_user_alignment (align, true);
10801 if (align_log > specs->align_log)
10802 specs->align_log = align_log;
10803 return specs;
10806 /* Combine "long", "short", "signed", "unsigned" and "_Complex" type
10807 specifiers with any other type specifier to determine the resulting
10808 type. This is where ISO C checks on complex types are made, since
10809 "_Complex long" is a prefix of the valid ISO C type "_Complex long
10810 double". */
10812 struct c_declspecs *
10813 finish_declspecs (struct c_declspecs *specs)
10815 /* If a type was specified as a whole, we have no modifiers and are
10816 done. */
10817 if (specs->type != NULL_TREE)
10819 gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
10820 && !specs->signed_p && !specs->unsigned_p
10821 && !specs->complex_p);
10823 /* Set a dummy type. */
10824 if (TREE_CODE (specs->type) == ERROR_MARK)
10825 specs->type = integer_type_node;
10826 return specs;
10829 /* If none of "void", "_Bool", "char", "int", "float" or "double"
10830 has been specified, treat it as "int" unless "_Complex" is
10831 present and there are no other specifiers. If we just have
10832 "_Complex", it is equivalent to "_Complex double", but e.g.
10833 "_Complex short" is equivalent to "_Complex short int". */
10834 if (specs->typespec_word == cts_none)
10836 if (specs->saturating_p)
10838 error_at (specs->locations[cdw_saturating],
10839 "%<_Sat%> is used without %<_Fract%> or %<_Accum%>");
10840 if (!targetm.fixed_point_supported_p ())
10841 error_at (specs->locations[cdw_saturating],
10842 "fixed-point types not supported for this target");
10843 specs->typespec_word = cts_fract;
10845 else if (specs->long_p || specs->short_p
10846 || specs->signed_p || specs->unsigned_p)
10848 specs->typespec_word = cts_int;
10850 else if (specs->complex_p)
10852 specs->typespec_word = cts_double;
10853 pedwarn (specs->locations[cdw_complex], OPT_Wpedantic,
10854 "ISO C does not support plain %<complex%> meaning "
10855 "%<double complex%>");
10857 else
10859 specs->typespec_word = cts_int;
10860 specs->default_int_p = true;
10861 /* We don't diagnose this here because grokdeclarator will
10862 give more specific diagnostics according to whether it is
10863 a function definition. */
10867 /* If "signed" was specified, record this to distinguish "int" and
10868 "signed int" in the case of a bit-field with
10869 -funsigned-bitfields. */
10870 specs->explicit_signed_p = specs->signed_p;
10872 /* Now compute the actual type. */
10873 switch (specs->typespec_word)
10875 case cts_auto_type:
10876 gcc_assert (!specs->long_p && !specs->short_p
10877 && !specs->signed_p && !specs->unsigned_p
10878 && !specs->complex_p);
10879 /* Type to be filled in later. */
10880 break;
10881 case cts_void:
10882 gcc_assert (!specs->long_p && !specs->short_p
10883 && !specs->signed_p && !specs->unsigned_p
10884 && !specs->complex_p);
10885 specs->type = void_type_node;
10886 break;
10887 case cts_bool:
10888 gcc_assert (!specs->long_p && !specs->short_p
10889 && !specs->signed_p && !specs->unsigned_p
10890 && !specs->complex_p);
10891 specs->type = boolean_type_node;
10892 break;
10893 case cts_char:
10894 gcc_assert (!specs->long_p && !specs->short_p);
10895 gcc_assert (!(specs->signed_p && specs->unsigned_p));
10896 if (specs->signed_p)
10897 specs->type = signed_char_type_node;
10898 else if (specs->unsigned_p)
10899 specs->type = unsigned_char_type_node;
10900 else
10901 specs->type = char_type_node;
10902 if (specs->complex_p)
10904 pedwarn (specs->locations[cdw_complex], OPT_Wpedantic,
10905 "ISO C does not support complex integer types");
10906 specs->type = build_complex_type (specs->type);
10908 break;
10909 case cts_int_n:
10910 gcc_assert (!specs->long_p && !specs->short_p && !specs->long_long_p);
10911 gcc_assert (!(specs->signed_p && specs->unsigned_p));
10912 if (! int_n_enabled_p[specs->int_n_idx])
10913 specs->type = integer_type_node;
10914 else
10915 specs->type = (specs->unsigned_p
10916 ? int_n_trees[specs->int_n_idx].unsigned_type
10917 : int_n_trees[specs->int_n_idx].signed_type);
10918 if (specs->complex_p)
10920 pedwarn (specs->locations[cdw_complex], OPT_Wpedantic,
10921 "ISO C does not support complex integer types");
10922 specs->type = build_complex_type (specs->type);
10924 break;
10925 case cts_int:
10926 gcc_assert (!(specs->long_p && specs->short_p));
10927 gcc_assert (!(specs->signed_p && specs->unsigned_p));
10928 if (specs->long_long_p)
10929 specs->type = (specs->unsigned_p
10930 ? long_long_unsigned_type_node
10931 : long_long_integer_type_node);
10932 else if (specs->long_p)
10933 specs->type = (specs->unsigned_p
10934 ? long_unsigned_type_node
10935 : long_integer_type_node);
10936 else if (specs->short_p)
10937 specs->type = (specs->unsigned_p
10938 ? short_unsigned_type_node
10939 : short_integer_type_node);
10940 else
10941 specs->type = (specs->unsigned_p
10942 ? unsigned_type_node
10943 : integer_type_node);
10944 if (specs->complex_p)
10946 pedwarn (specs->locations[cdw_complex], OPT_Wpedantic,
10947 "ISO C does not support complex integer types");
10948 specs->type = build_complex_type (specs->type);
10950 break;
10951 case cts_float:
10952 gcc_assert (!specs->long_p && !specs->short_p
10953 && !specs->signed_p && !specs->unsigned_p);
10954 specs->type = (specs->complex_p
10955 ? complex_float_type_node
10956 : float_type_node);
10957 break;
10958 case cts_double:
10959 gcc_assert (!specs->long_long_p && !specs->short_p
10960 && !specs->signed_p && !specs->unsigned_p);
10961 if (specs->long_p)
10963 specs->type = (specs->complex_p
10964 ? complex_long_double_type_node
10965 : long_double_type_node);
10967 else
10969 specs->type = (specs->complex_p
10970 ? complex_double_type_node
10971 : double_type_node);
10973 break;
10974 case cts_floatn_nx:
10975 gcc_assert (!specs->long_p && !specs->short_p
10976 && !specs->signed_p && !specs->unsigned_p);
10977 if (FLOATN_NX_TYPE_NODE (specs->floatn_nx_idx) == NULL_TREE)
10978 specs->type = integer_type_node;
10979 else if (specs->complex_p)
10980 specs->type = COMPLEX_FLOATN_NX_TYPE_NODE (specs->floatn_nx_idx);
10981 else
10982 specs->type = FLOATN_NX_TYPE_NODE (specs->floatn_nx_idx);
10983 break;
10984 case cts_dfloat32:
10985 case cts_dfloat64:
10986 case cts_dfloat128:
10987 gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
10988 && !specs->signed_p && !specs->unsigned_p && !specs->complex_p);
10989 if (specs->typespec_word == cts_dfloat32)
10990 specs->type = dfloat32_type_node;
10991 else if (specs->typespec_word == cts_dfloat64)
10992 specs->type = dfloat64_type_node;
10993 else
10994 specs->type = dfloat128_type_node;
10995 break;
10996 case cts_fract:
10997 gcc_assert (!specs->complex_p);
10998 if (!targetm.fixed_point_supported_p ())
10999 specs->type = integer_type_node;
11000 else if (specs->saturating_p)
11002 if (specs->long_long_p)
11003 specs->type = specs->unsigned_p
11004 ? sat_unsigned_long_long_fract_type_node
11005 : sat_long_long_fract_type_node;
11006 else if (specs->long_p)
11007 specs->type = specs->unsigned_p
11008 ? sat_unsigned_long_fract_type_node
11009 : sat_long_fract_type_node;
11010 else if (specs->short_p)
11011 specs->type = specs->unsigned_p
11012 ? sat_unsigned_short_fract_type_node
11013 : sat_short_fract_type_node;
11014 else
11015 specs->type = specs->unsigned_p
11016 ? sat_unsigned_fract_type_node
11017 : sat_fract_type_node;
11019 else
11021 if (specs->long_long_p)
11022 specs->type = specs->unsigned_p
11023 ? unsigned_long_long_fract_type_node
11024 : long_long_fract_type_node;
11025 else if (specs->long_p)
11026 specs->type = specs->unsigned_p
11027 ? unsigned_long_fract_type_node
11028 : long_fract_type_node;
11029 else if (specs->short_p)
11030 specs->type = specs->unsigned_p
11031 ? unsigned_short_fract_type_node
11032 : short_fract_type_node;
11033 else
11034 specs->type = specs->unsigned_p
11035 ? unsigned_fract_type_node
11036 : fract_type_node;
11038 break;
11039 case cts_accum:
11040 gcc_assert (!specs->complex_p);
11041 if (!targetm.fixed_point_supported_p ())
11042 specs->type = integer_type_node;
11043 else if (specs->saturating_p)
11045 if (specs->long_long_p)
11046 specs->type = specs->unsigned_p
11047 ? sat_unsigned_long_long_accum_type_node
11048 : sat_long_long_accum_type_node;
11049 else if (specs->long_p)
11050 specs->type = specs->unsigned_p
11051 ? sat_unsigned_long_accum_type_node
11052 : sat_long_accum_type_node;
11053 else if (specs->short_p)
11054 specs->type = specs->unsigned_p
11055 ? sat_unsigned_short_accum_type_node
11056 : sat_short_accum_type_node;
11057 else
11058 specs->type = specs->unsigned_p
11059 ? sat_unsigned_accum_type_node
11060 : sat_accum_type_node;
11062 else
11064 if (specs->long_long_p)
11065 specs->type = specs->unsigned_p
11066 ? unsigned_long_long_accum_type_node
11067 : long_long_accum_type_node;
11068 else if (specs->long_p)
11069 specs->type = specs->unsigned_p
11070 ? unsigned_long_accum_type_node
11071 : long_accum_type_node;
11072 else if (specs->short_p)
11073 specs->type = specs->unsigned_p
11074 ? unsigned_short_accum_type_node
11075 : short_accum_type_node;
11076 else
11077 specs->type = specs->unsigned_p
11078 ? unsigned_accum_type_node
11079 : accum_type_node;
11081 break;
11082 default:
11083 gcc_unreachable ();
11086 return specs;
11089 /* Perform final processing on one file scope's declarations (or the
11090 external scope's declarations), GLOBALS. */
11092 static void
11093 c_write_global_declarations_1 (tree globals)
11095 tree decl;
11096 bool reconsider;
11098 /* Process the decls in the order they were written. */
11099 for (decl = globals; decl; decl = DECL_CHAIN (decl))
11101 /* Check for used but undefined static functions using the C
11102 standard's definition of "used", and set TREE_NO_WARNING so
11103 that check_global_declaration doesn't repeat the check. */
11104 if (TREE_CODE (decl) == FUNCTION_DECL
11105 && DECL_INITIAL (decl) == NULL_TREE
11106 && DECL_EXTERNAL (decl)
11107 && !TREE_PUBLIC (decl))
11109 if (C_DECL_USED (decl))
11111 pedwarn (input_location, 0, "%q+F used but never defined", decl);
11112 TREE_NO_WARNING (decl) = 1;
11114 /* For -Wunused-function warn about unused static prototypes. */
11115 else if (warn_unused_function
11116 && ! DECL_ARTIFICIAL (decl)
11117 && ! TREE_NO_WARNING (decl))
11119 warning (OPT_Wunused_function,
11120 "%q+F declared %<static%> but never defined", decl);
11121 TREE_NO_WARNING (decl) = 1;
11125 wrapup_global_declaration_1 (decl);
11130 reconsider = false;
11131 for (decl = globals; decl; decl = DECL_CHAIN (decl))
11132 reconsider |= wrapup_global_declaration_2 (decl);
11134 while (reconsider);
11137 /* Callback to collect a source_ref from a DECL. */
11139 static void
11140 collect_source_ref_cb (tree decl)
11142 if (!DECL_IS_BUILTIN (decl))
11143 collect_source_ref (LOCATION_FILE (decl_sloc (decl, false)));
11146 /* Preserve the external declarations scope across a garbage collect. */
11147 static GTY(()) tree ext_block;
11149 /* Collect all references relevant to SOURCE_FILE. */
11151 static void
11152 collect_all_refs (const char *source_file)
11154 tree t;
11155 unsigned i;
11157 FOR_EACH_VEC_ELT (*all_translation_units, i, t)
11158 collect_ada_nodes (BLOCK_VARS (DECL_INITIAL (t)), source_file);
11160 collect_ada_nodes (BLOCK_VARS (ext_block), source_file);
11163 /* Iterate over all global declarations and call CALLBACK. */
11165 static void
11166 for_each_global_decl (void (*callback) (tree decl))
11168 tree t;
11169 tree decls;
11170 tree decl;
11171 unsigned i;
11173 FOR_EACH_VEC_ELT (*all_translation_units, i, t)
11175 decls = DECL_INITIAL (t);
11176 for (decl = BLOCK_VARS (decls); decl; decl = TREE_CHAIN (decl))
11177 callback (decl);
11180 for (decl = BLOCK_VARS (ext_block); decl; decl = TREE_CHAIN (decl))
11181 callback (decl);
11184 /* Perform any final parser cleanups and generate initial debugging
11185 information. */
11187 void
11188 c_parse_final_cleanups (void)
11190 tree t;
11191 unsigned i;
11193 /* We don't want to do this if generating a PCH. */
11194 if (pch_file)
11195 return;
11197 timevar_stop (TV_PHASE_PARSING);
11198 timevar_start (TV_PHASE_DEFERRED);
11200 /* Do the Objective-C stuff. This is where all the Objective-C
11201 module stuff gets generated (symtab, class/protocol/selector
11202 lists etc). */
11203 if (c_dialect_objc ())
11204 objc_write_global_declarations ();
11206 /* Close the external scope. */
11207 ext_block = pop_scope ();
11208 external_scope = 0;
11209 gcc_assert (!current_scope);
11211 /* Handle -fdump-ada-spec[-slim]. */
11212 if (flag_dump_ada_spec || flag_dump_ada_spec_slim)
11214 /* Build a table of files to generate specs for */
11215 if (flag_dump_ada_spec_slim)
11216 collect_source_ref (main_input_filename);
11217 else
11218 for_each_global_decl (collect_source_ref_cb);
11220 dump_ada_specs (collect_all_refs, NULL);
11223 /* Process all file scopes in this compilation, and the external_scope,
11224 through wrapup_global_declarations. */
11225 FOR_EACH_VEC_ELT (*all_translation_units, i, t)
11226 c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t)));
11227 c_write_global_declarations_1 (BLOCK_VARS (ext_block));
11229 timevar_stop (TV_PHASE_DEFERRED);
11230 timevar_start (TV_PHASE_PARSING);
11232 ext_block = NULL;
11235 /* Register reserved keyword WORD as qualifier for address space AS. */
11237 void
11238 c_register_addr_space (const char *word, addr_space_t as)
11240 int rid = RID_FIRST_ADDR_SPACE + as;
11241 tree id;
11243 /* Address space qualifiers are only supported
11244 in C with GNU extensions enabled. */
11245 if (c_dialect_objc () || flag_no_asm)
11246 return;
11248 id = get_identifier (word);
11249 C_SET_RID_CODE (id, rid);
11250 C_IS_RESERVED_WORD (id) = 1;
11251 ridpointers [rid] = id;
11254 /* Return identifier to look up for omp declare reduction. */
11256 tree
11257 c_omp_reduction_id (enum tree_code reduction_code, tree reduction_id)
11259 const char *p = NULL;
11260 switch (reduction_code)
11262 case PLUS_EXPR: p = "+"; break;
11263 case MULT_EXPR: p = "*"; break;
11264 case MINUS_EXPR: p = "-"; break;
11265 case BIT_AND_EXPR: p = "&"; break;
11266 case BIT_XOR_EXPR: p = "^"; break;
11267 case BIT_IOR_EXPR: p = "|"; break;
11268 case TRUTH_ANDIF_EXPR: p = "&&"; break;
11269 case TRUTH_ORIF_EXPR: p = "||"; break;
11270 case MIN_EXPR: p = "min"; break;
11271 case MAX_EXPR: p = "max"; break;
11272 default:
11273 break;
11276 if (p == NULL)
11278 if (TREE_CODE (reduction_id) != IDENTIFIER_NODE)
11279 return error_mark_node;
11280 p = IDENTIFIER_POINTER (reduction_id);
11283 const char prefix[] = "omp declare reduction ";
11284 size_t lenp = sizeof (prefix);
11285 size_t len = strlen (p);
11286 char *name = XALLOCAVEC (char, lenp + len);
11287 memcpy (name, prefix, lenp - 1);
11288 memcpy (name + lenp - 1, p, len + 1);
11289 return get_identifier (name);
11292 /* Lookup REDUCTION_ID in the current scope, or create an artificial
11293 VAR_DECL, bind it into the current scope and return it. */
11295 tree
11296 c_omp_reduction_decl (tree reduction_id)
11298 struct c_binding *b = I_SYMBOL_BINDING (reduction_id);
11299 if (b != NULL && B_IN_CURRENT_SCOPE (b))
11300 return b->decl;
11302 tree decl = build_decl (BUILTINS_LOCATION, VAR_DECL,
11303 reduction_id, integer_type_node);
11304 DECL_ARTIFICIAL (decl) = 1;
11305 DECL_EXTERNAL (decl) = 1;
11306 TREE_STATIC (decl) = 1;
11307 TREE_PUBLIC (decl) = 0;
11308 bind (reduction_id, decl, current_scope, true, false, BUILTINS_LOCATION);
11309 return decl;
11312 /* Lookup REDUCTION_ID in the first scope where it has entry for TYPE. */
11314 tree
11315 c_omp_reduction_lookup (tree reduction_id, tree type)
11317 struct c_binding *b = I_SYMBOL_BINDING (reduction_id);
11318 while (b)
11320 tree t;
11321 for (t = DECL_INITIAL (b->decl); t; t = TREE_CHAIN (t))
11322 if (comptypes (TREE_PURPOSE (t), type))
11323 return TREE_VALUE (t);
11324 b = b->shadowed;
11326 return error_mark_node;
11329 /* Helper function called via walk_tree, to diagnose invalid
11330 #pragma omp declare reduction combiners or initializers. */
11332 tree
11333 c_check_omp_declare_reduction_r (tree *tp, int *, void *data)
11335 tree *vars = (tree *) data;
11336 if (SSA_VAR_P (*tp)
11337 && !DECL_ARTIFICIAL (*tp)
11338 && *tp != vars[0]
11339 && *tp != vars[1])
11341 location_t loc = DECL_SOURCE_LOCATION (vars[0]);
11342 if (strcmp (IDENTIFIER_POINTER (DECL_NAME (vars[0])), "omp_out") == 0)
11343 error_at (loc, "%<#pragma omp declare reduction%> combiner refers to "
11344 "variable %qD which is not %<omp_out%> nor %<omp_in%>",
11345 *tp);
11346 else
11347 error_at (loc, "%<#pragma omp declare reduction%> initializer refers "
11348 "to variable %qD which is not %<omp_priv%> nor "
11349 "%<omp_orig%>",
11350 *tp);
11351 return *tp;
11353 return NULL_TREE;
11356 #include "gt-c-c-decl.h"