Merge aosp-toolchain/gcc/gcc-4_9 changes.
[official-gcc.git] / gcc-4_9-mobile / gcc / c / c-decl.c
blobac3819823b1b234ed6c713364da92dd610909dbb
1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988-2014 Free Software Foundation, Inc.
4 This file is part of GCC.
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
9 version.
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 for more details.
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
20 /* Process declarations and symbol lookup for C front end.
21 Also constructs types; the standard scalar types at initialization,
22 and structure, union, array and enum types when they are declared. */
24 /* ??? not all decl nodes are given the most useful possible
25 line numbers. For example, the CONST_DECLs for enum values. */
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "input.h"
31 #include "tm.h"
32 #include "intl.h"
33 #include "tree.h"
34 #include "print-tree.h"
35 #include "stor-layout.h"
36 #include "varasm.h"
37 #include "attribs.h"
38 #include "stringpool.h"
39 #include "tree-inline.h"
40 #include "flags.h"
41 #include "function.h"
42 #include "c-tree.h"
43 #include "toplev.h"
44 #include "tm_p.h"
45 #include "cpplib.h"
46 #include "target.h"
47 #include "debug.h"
48 #include "opts.h"
49 #include "timevar.h"
50 #include "c-family/c-common.h"
51 #include "c-family/c-objc.h"
52 #include "c-family/c-pragma.h"
53 #include "c-family/c-ubsan.h"
54 #include "c-lang.h"
55 #include "langhooks.h"
56 #include "tree-iterator.h"
57 #include "diagnostic-core.h"
58 #include "dumpfile.h"
59 #include "cgraph.h"
60 #include "hash-table.h"
61 #include "langhooks-def.h"
62 #include "pointer-set.h"
63 #include "l-ipo.h"
64 #include "plugin.h"
65 #include "c-family/c-ada-spec.h"
66 #include "cilk.h"
68 /* In grokdeclarator, distinguish syntactic contexts of declarators. */
69 enum decl_context
70 { NORMAL, /* Ordinary declaration */
71 FUNCDEF, /* Function definition */
72 PARM, /* Declaration of parm before function body */
73 FIELD, /* Declaration inside struct or union */
74 TYPENAME}; /* Typename (inside cast or sizeof) */
76 /* States indicating how grokdeclarator() should handle declspecs marked
77 with __attribute__((deprecated)). An object declared as
78 __attribute__((deprecated)) suppresses warnings of uses of other
79 deprecated items. */
81 enum deprecated_states {
82 DEPRECATED_NORMAL,
83 DEPRECATED_SUPPRESS
87 /* Nonzero if we have seen an invalid cross reference
88 to a struct, union, or enum, but not yet printed the message. */
89 tree pending_invalid_xref;
91 /* File and line to appear in the eventual error message. */
92 location_t pending_invalid_xref_location;
94 /* The file and line that the prototype came from if this is an
95 old-style definition; used for diagnostics in
96 store_parm_decls_oldstyle. */
98 static location_t current_function_prototype_locus;
100 /* Whether this prototype was built-in. */
102 static bool current_function_prototype_built_in;
104 /* The argument type information of this prototype. */
106 static tree current_function_prototype_arg_types;
108 /* The argument information structure for the function currently being
109 defined. */
111 static struct c_arg_info *current_function_arg_info;
113 /* The obstack on which parser and related data structures, which are
114 not live beyond their top-level declaration or definition, are
115 allocated. */
116 struct obstack parser_obstack;
118 /* The current statement tree. */
120 static GTY(()) struct stmt_tree_s c_stmt_tree;
122 /* State saving variables. */
123 tree c_break_label;
124 tree c_cont_label;
126 /* A list of decls to be made automatically visible in each file scope. */
127 static GTY(()) tree visible_builtins;
129 /* Set to 0 at beginning of a function definition, set to 1 if
130 a return statement that specifies a return value is seen. */
132 int current_function_returns_value;
134 /* Set to 0 at beginning of a function definition, set to 1 if
135 a return statement with no argument is seen. */
137 int current_function_returns_null;
139 /* Set to 0 at beginning of a function definition, set to 1 if
140 a call to a noreturn function is seen. */
142 int current_function_returns_abnormally;
144 /* Set to nonzero by `grokdeclarator' for a function
145 whose return type is defaulted, if warnings for this are desired. */
147 static int warn_about_return_type;
149 /* Nonzero when the current toplevel function contains a declaration
150 of a nested function which is never defined. */
152 static bool undef_nested_function;
154 /* Mode used to build pointers (VOIDmode means ptr_mode). */
156 enum machine_mode c_default_pointer_mode = VOIDmode;
158 /* If non-zero, implicit "omp declare target" attribute is added into the
159 attribute lists. */
160 int current_omp_declare_target_attribute;
162 /* Each c_binding structure describes one binding of an identifier to
163 a decl. All the decls in a scope - irrespective of namespace - are
164 chained together by the ->prev field, which (as the name implies)
165 runs in reverse order. All the decls in a given namespace bound to
166 a given identifier are chained by the ->shadowed field, which runs
167 from inner to outer scopes.
169 The ->decl field usually points to a DECL node, but there are two
170 exceptions. In the namespace of type tags, the bound entity is a
171 RECORD_TYPE, UNION_TYPE, or ENUMERAL_TYPE node. If an undeclared
172 identifier is encountered, it is bound to error_mark_node to
173 suppress further errors about that identifier in the current
174 function.
176 The ->u.type field stores the type of the declaration in this scope;
177 if NULL, the type is the type of the ->decl field. This is only of
178 relevance for objects with external or internal linkage which may
179 be redeclared in inner scopes, forming composite types that only
180 persist for the duration of those scopes. In the external scope,
181 this stores the composite of all the types declared for this
182 object, visible or not. The ->inner_comp field (used only at file
183 scope) stores whether an incomplete array type at file scope was
184 completed at an inner scope to an array size other than 1.
186 The ->u.label field is used for labels. It points to a structure
187 which stores additional information used for warnings.
189 The depth field is copied from the scope structure that holds this
190 decl. It is used to preserve the proper ordering of the ->shadowed
191 field (see bind()) and also for a handful of special-case checks.
192 Finally, the invisible bit is true for a decl which should be
193 ignored for purposes of normal name lookup, and the nested bit is
194 true for a decl that's been bound a second time in an inner scope;
195 in all such cases, the binding in the outer scope will have its
196 invisible bit true. */
198 struct GTY((chain_next ("%h.prev"))) c_binding {
199 union GTY(()) { /* first so GTY desc can use decl */
200 tree GTY((tag ("0"))) type; /* the type in this scope */
201 struct c_label_vars * GTY((tag ("1"))) label; /* for warnings */
202 } GTY((desc ("TREE_CODE (%0.decl) == LABEL_DECL"))) u;
203 tree decl; /* the decl bound */
204 tree id; /* the identifier it's bound to */
205 struct c_binding *prev; /* the previous decl in this scope */
206 struct c_binding *shadowed; /* the innermost decl shadowed by this one */
207 unsigned int depth : 28; /* depth of this scope */
208 BOOL_BITFIELD invisible : 1; /* normal lookup should ignore this binding */
209 BOOL_BITFIELD nested : 1; /* do not set DECL_CONTEXT when popping */
210 BOOL_BITFIELD inner_comp : 1; /* incomplete array completed in inner scope */
211 BOOL_BITFIELD in_struct : 1; /* currently defined as struct field */
212 location_t locus; /* location for nested bindings */
214 #define B_IN_SCOPE(b1, b2) ((b1)->depth == (b2)->depth)
215 #define B_IN_CURRENT_SCOPE(b) ((b)->depth == current_scope->depth)
216 #define B_IN_FILE_SCOPE(b) ((b)->depth == 1 /*file_scope->depth*/)
217 #define B_IN_EXTERNAL_SCOPE(b) ((b)->depth == 0 /*external_scope->depth*/)
219 #define I_SYMBOL_BINDING(node) \
220 (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->symbol_binding)
221 #define I_SYMBOL_DECL(node) \
222 (I_SYMBOL_BINDING(node) ? I_SYMBOL_BINDING(node)->decl : 0)
224 #define I_TAG_BINDING(node) \
225 (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->tag_binding)
226 #define I_TAG_DECL(node) \
227 (I_TAG_BINDING(node) ? I_TAG_BINDING(node)->decl : 0)
229 #define I_LABEL_BINDING(node) \
230 (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->label_binding)
231 #define I_LABEL_DECL(node) \
232 (I_LABEL_BINDING(node) ? I_LABEL_BINDING(node)->decl : 0)
234 /* Each C symbol points to three linked lists of c_binding structures.
235 These describe the values of the identifier in the three different
236 namespaces defined by the language. */
238 struct GTY(()) lang_identifier {
239 struct c_common_identifier common_id;
240 struct c_binding *symbol_binding; /* vars, funcs, constants, typedefs */
241 struct c_binding *tag_binding; /* struct/union/enum tags */
242 struct c_binding *label_binding; /* labels */
245 /* Validate c-lang.c's assumptions. */
246 extern char C_SIZEOF_STRUCT_LANG_IDENTIFIER_isnt_accurate
247 [(sizeof(struct lang_identifier) == C_SIZEOF_STRUCT_LANG_IDENTIFIER) ? 1 : -1];
249 /* The resulting tree type. */
251 union GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"),
252 chain_next ("(union lang_tree_node *) c_tree_chain_next (&%h.generic)"))) lang_tree_node
254 union tree_node GTY ((tag ("0"),
255 desc ("tree_node_structure (&%h)")))
256 generic;
257 struct lang_identifier GTY ((tag ("1"))) identifier;
260 /* Track bindings and other things that matter for goto warnings. For
261 efficiency, we do not gather all the decls at the point of
262 definition. Instead, we point into the bindings structure. As
263 scopes are popped, we update these structures and gather the decls
264 that matter at that time. */
266 struct GTY(()) c_spot_bindings {
267 /* The currently open scope which holds bindings defined when the
268 label was defined or the goto statement was found. */
269 struct c_scope *scope;
270 /* The bindings in the scope field which were defined at the point
271 of the label or goto. This lets us look at older or newer
272 bindings in the scope, as appropriate. */
273 struct c_binding *bindings_in_scope;
274 /* The number of statement expressions that have started since this
275 label or goto statement was defined. This is zero if we are at
276 the same statement expression level. It is positive if we are in
277 a statement expression started since this spot. It is negative
278 if this spot was in a statement expression and we have left
279 it. */
280 int stmt_exprs;
281 /* Whether we started in a statement expression but are no longer in
282 it. This is set to true if stmt_exprs ever goes negative. */
283 bool left_stmt_expr;
286 /* This structure is used to keep track of bindings seen when a goto
287 statement is defined. This is only used if we see the goto
288 statement before we see the label. */
290 struct GTY(()) c_goto_bindings {
291 /* The location of the goto statement. */
292 location_t loc;
293 /* The bindings of the goto statement. */
294 struct c_spot_bindings goto_bindings;
297 typedef struct c_goto_bindings *c_goto_bindings_p;
299 /* The additional information we keep track of for a label binding.
300 These fields are updated as scopes are popped. */
302 struct GTY(()) c_label_vars {
303 /* The shadowed c_label_vars, when one label shadows another (which
304 can only happen using a __label__ declaration). */
305 struct c_label_vars *shadowed;
306 /* The bindings when the label was defined. */
307 struct c_spot_bindings label_bindings;
308 /* A list of decls that we care about: decls about which we should
309 warn if a goto branches to this label from later in the function.
310 Decls are added to this list as scopes are popped. We only add
311 the decls that matter. */
312 vec<tree, va_gc> *decls_in_scope;
313 /* A list of goto statements to this label. This is only used for
314 goto statements seen before the label was defined, so that we can
315 issue appropriate warnings for them. */
316 vec<c_goto_bindings_p, va_gc> *gotos;
319 /* Each c_scope structure describes the complete contents of one
320 scope. Four scopes are distinguished specially: the innermost or
321 current scope, the innermost function scope, the file scope (always
322 the second to outermost) and the outermost or external scope.
324 Most declarations are recorded in the current scope.
326 All normal label declarations are recorded in the innermost
327 function scope, as are bindings of undeclared identifiers to
328 error_mark_node. (GCC permits nested functions as an extension,
329 hence the 'innermost' qualifier.) Explicitly declared labels
330 (using the __label__ extension) appear in the current scope.
332 Being in the file scope (current_scope == file_scope) causes
333 special behavior in several places below. Also, under some
334 conditions the Objective-C front end records declarations in the
335 file scope even though that isn't the current scope.
337 All declarations with external linkage are recorded in the external
338 scope, even if they aren't visible there; this models the fact that
339 such declarations are visible to the entire program, and (with a
340 bit of cleverness, see pushdecl) allows diagnosis of some violations
341 of C99 6.2.2p7 and 6.2.7p2:
343 If, within the same translation unit, the same identifier appears
344 with both internal and external linkage, the behavior is
345 undefined.
347 All declarations that refer to the same object or function shall
348 have compatible type; otherwise, the behavior is undefined.
350 Initially only the built-in declarations, which describe compiler
351 intrinsic functions plus a subset of the standard library, are in
352 this scope.
354 The order of the blocks list matters, and it is frequently appended
355 to. To avoid having to walk all the way to the end of the list on
356 each insertion, or reverse the list later, we maintain a pointer to
357 the last list entry. (FIXME: It should be feasible to use a reversed
358 list here.)
360 The bindings list is strictly in reverse order of declarations;
361 pop_scope relies on this. */
364 struct GTY((chain_next ("%h.outer"))) c_scope {
365 /* The scope containing this one. */
366 struct c_scope *outer;
368 /* The next outermost function scope. */
369 struct c_scope *outer_function;
371 /* All bindings in this scope. */
372 struct c_binding *bindings;
374 /* For each scope (except the global one), a chain of BLOCK nodes
375 for all the scopes that were entered and exited one level down. */
376 tree blocks;
377 tree blocks_last;
379 /* The depth of this scope. Used to keep the ->shadowed chain of
380 bindings sorted innermost to outermost. */
381 unsigned int depth : 28;
383 /* True if we are currently filling this scope with parameter
384 declarations. */
385 BOOL_BITFIELD parm_flag : 1;
387 /* True if we saw [*] in this scope. Used to give an error messages
388 if these appears in a function definition. */
389 BOOL_BITFIELD had_vla_unspec : 1;
391 /* True if we already complained about forward parameter decls
392 in this scope. This prevents double warnings on
393 foo (int a; int b; ...) */
394 BOOL_BITFIELD warned_forward_parm_decls : 1;
396 /* True if this is the outermost block scope of a function body.
397 This scope contains the parameters, the local variables declared
398 in the outermost block, and all the labels (except those in
399 nested functions, or declared at block scope with __label__). */
400 BOOL_BITFIELD function_body : 1;
402 /* True means make a BLOCK for this scope no matter what. */
403 BOOL_BITFIELD keep : 1;
405 /* True means that an unsuffixed float constant is _Decimal64. */
406 BOOL_BITFIELD float_const_decimal64 : 1;
408 /* True if this scope has any label bindings. This is used to speed
409 up searching for labels when popping scopes, particularly since
410 labels are normally only found at function scope. */
411 BOOL_BITFIELD has_label_bindings : 1;
413 /* True if we should issue a warning if a goto statement crosses any
414 of the bindings. We still need to check the list of bindings to
415 find the specific ones we need to warn about. This is true if
416 decl_jump_unsafe would return true for any of the bindings. This
417 is used to avoid looping over all the bindings unnecessarily. */
418 BOOL_BITFIELD has_jump_unsafe_decl : 1;
421 /* The scope currently in effect. */
423 static GTY(()) struct c_scope *current_scope;
425 /* The innermost function scope. Ordinary (not explicitly declared)
426 labels, bindings to error_mark_node, and the lazily-created
427 bindings of __func__ and its friends get this scope. */
429 static GTY(()) struct c_scope *current_function_scope;
431 /* The C file scope. This is reset for each input translation unit. */
433 static GTY(()) struct c_scope *file_scope;
435 /* The outermost scope. This is used for all declarations with
436 external linkage, and only these, hence the name. */
438 static GTY(()) struct c_scope *external_scope;
440 /* A chain of c_scope structures awaiting reuse. */
442 static GTY((deletable)) struct c_scope *scope_freelist;
444 /* A chain of c_binding structures awaiting reuse. */
446 static GTY((deletable)) struct c_binding *binding_freelist;
448 /* Append VAR to LIST in scope SCOPE. */
449 #define SCOPE_LIST_APPEND(scope, list, decl) do { \
450 struct c_scope *s_ = (scope); \
451 tree d_ = (decl); \
452 if (s_->list##_last) \
453 BLOCK_CHAIN (s_->list##_last) = d_; \
454 else \
455 s_->list = d_; \
456 s_->list##_last = d_; \
457 } while (0)
459 /* Concatenate FROM in scope FSCOPE onto TO in scope TSCOPE. */
460 #define SCOPE_LIST_CONCAT(tscope, to, fscope, from) do { \
461 struct c_scope *t_ = (tscope); \
462 struct c_scope *f_ = (fscope); \
463 if (t_->to##_last) \
464 BLOCK_CHAIN (t_->to##_last) = f_->from; \
465 else \
466 t_->to = f_->from; \
467 t_->to##_last = f_->from##_last; \
468 } while (0)
470 /* A c_inline_static structure stores details of a static identifier
471 referenced in a definition of a function that may be an inline
472 definition if no subsequent declaration of that function uses
473 "extern" or does not use "inline". */
475 struct GTY((chain_next ("%h.next"))) c_inline_static {
476 /* The location for a diagnostic. */
477 location_t location;
479 /* The function that may be an inline definition. */
480 tree function;
482 /* The object or function referenced. */
483 tree static_decl;
485 /* What sort of reference this is. */
486 enum c_inline_static_type type;
488 /* The next such structure or NULL. */
489 struct c_inline_static *next;
492 /* List of static identifiers used or referenced in functions that may
493 be inline definitions. */
494 static GTY(()) struct c_inline_static *c_inline_statics;
496 /* True means unconditionally make a BLOCK for the next scope pushed. */
498 static bool keep_next_level_flag;
500 /* True means the next call to push_scope will be the outermost scope
501 of a function body, so do not push a new scope, merely cease
502 expecting parameter decls. */
504 static bool next_is_function_body;
506 /* A vector of pointers to c_binding structures. */
508 typedef struct c_binding *c_binding_ptr;
510 /* Information that we keep for a struct or union while it is being
511 parsed. */
513 struct c_struct_parse_info
515 /* If warn_cxx_compat, a list of types defined within this
516 struct. */
517 vec<tree> struct_types;
518 /* If warn_cxx_compat, a list of field names which have bindings,
519 and which are defined in this struct, but which are not defined
520 in any enclosing struct. This is used to clear the in_struct
521 field of the c_bindings structure. */
522 vec<c_binding_ptr> fields;
523 /* If warn_cxx_compat, a list of typedef names used when defining
524 fields in this struct. */
525 vec<tree> typedefs_seen;
528 /* Information for the struct or union currently being parsed, or
529 NULL if not parsing a struct or union. */
530 static struct c_struct_parse_info *struct_parse_info;
532 /* Forward declarations. */
533 static tree lookup_name_in_scope (tree, struct c_scope *);
534 static tree c_make_fname_decl (location_t, tree, int);
535 static tree grokdeclarator (const struct c_declarator *,
536 struct c_declspecs *,
537 enum decl_context, bool, tree *, tree *, tree *,
538 bool *, enum deprecated_states);
539 static tree grokparms (struct c_arg_info *, bool);
540 static void layout_array_type (tree);
541 static void pop_ext_scope (void);
543 /* LIPO support */
544 /* The list of block nodes. A member node is created
545 when an external scope is popped. */
546 static GTY (()) vec<tree, va_gc> *ext_blocks = NULL;
547 static inline void
548 apply_for_each_ext_block (void (*func) (tree))
550 if (L_IPO_COMP_MODE)
552 size_t i;
553 tree eb;
555 for (i = 0;
556 ext_blocks->iterate (i, &eb);
557 ++i)
558 func (BLOCK_VARS (eb));
563 /* T is a statement. Add it to the statement-tree. This is the
564 C/ObjC version--C++ has a slightly different version of this
565 function. */
567 tree
568 add_stmt (tree t)
570 enum tree_code code = TREE_CODE (t);
572 if (CAN_HAVE_LOCATION_P (t) && code != LABEL_EXPR)
574 if (!EXPR_HAS_LOCATION (t))
575 SET_EXPR_LOCATION (t, input_location);
578 if (code == LABEL_EXPR || code == CASE_LABEL_EXPR)
579 STATEMENT_LIST_HAS_LABEL (cur_stmt_list) = 1;
581 /* Add T to the statement-tree. Non-side-effect statements need to be
582 recorded during statement expressions. */
583 if (!building_stmt_list_p ())
584 push_stmt_list ();
585 append_to_statement_list_force (t, &cur_stmt_list);
587 return t;
590 /* Build a pointer type using the default pointer mode. */
592 static tree
593 c_build_pointer_type (tree to_type)
595 addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
596 : TYPE_ADDR_SPACE (to_type);
597 enum machine_mode pointer_mode;
599 if (as != ADDR_SPACE_GENERIC || c_default_pointer_mode == VOIDmode)
600 pointer_mode = targetm.addr_space.pointer_mode (as);
601 else
602 pointer_mode = c_default_pointer_mode;
603 return build_pointer_type_for_mode (to_type, pointer_mode, false);
607 /* Return true if we will want to say something if a goto statement
608 crosses DECL. */
610 static bool
611 decl_jump_unsafe (tree decl)
613 if (error_operand_p (decl))
614 return false;
616 /* Always warn about crossing variably modified types. */
617 if ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == TYPE_DECL)
618 && variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
619 return true;
621 /* Otherwise, only warn if -Wgoto-misses-init and this is an
622 initialized automatic decl. */
623 if (warn_jump_misses_init
624 && TREE_CODE (decl) == VAR_DECL
625 && !TREE_STATIC (decl)
626 && DECL_INITIAL (decl) != NULL_TREE)
627 return true;
629 return false;
633 void
634 c_print_identifier (FILE *file, tree node, int indent)
636 print_node (file, "symbol", I_SYMBOL_DECL (node), indent + 4);
637 print_node (file, "tag", I_TAG_DECL (node), indent + 4);
638 print_node (file, "label", I_LABEL_DECL (node), indent + 4);
639 if (C_IS_RESERVED_WORD (node) && C_RID_CODE (node) != RID_CXX_COMPAT_WARN)
641 tree rid = ridpointers[C_RID_CODE (node)];
642 indent_to (file, indent + 4);
643 fprintf (file, "rid " HOST_PTR_PRINTF " \"%s\"",
644 (void *) rid, IDENTIFIER_POINTER (rid));
648 /* Establish a binding between NAME, an IDENTIFIER_NODE, and DECL,
649 which may be any of several kinds of DECL or TYPE or error_mark_node,
650 in the scope SCOPE. */
651 static void
652 bind (tree name, tree decl, struct c_scope *scope, bool invisible,
653 bool nested, location_t locus)
655 struct c_binding *b, **here;
657 if (binding_freelist)
659 b = binding_freelist;
660 binding_freelist = b->prev;
662 else
663 b = ggc_alloc_c_binding ();
665 b->shadowed = 0;
666 b->decl = decl;
667 b->id = name;
668 b->depth = scope->depth;
669 b->invisible = invisible;
670 b->nested = nested;
671 b->inner_comp = 0;
672 b->in_struct = 0;
673 b->locus = locus;
675 b->u.type = NULL;
677 b->prev = scope->bindings;
678 scope->bindings = b;
680 if (decl_jump_unsafe (decl))
681 scope->has_jump_unsafe_decl = 1;
683 if (!name)
684 return;
686 switch (TREE_CODE (decl))
688 case LABEL_DECL: here = &I_LABEL_BINDING (name); break;
689 case ENUMERAL_TYPE:
690 case UNION_TYPE:
691 case RECORD_TYPE: here = &I_TAG_BINDING (name); break;
692 case VAR_DECL:
693 case FUNCTION_DECL:
694 case TYPE_DECL:
695 case CONST_DECL:
696 case PARM_DECL:
697 case ERROR_MARK: here = &I_SYMBOL_BINDING (name); break;
699 default:
700 gcc_unreachable ();
703 /* Locate the appropriate place in the chain of shadowed decls
704 to insert this binding. Normally, scope == current_scope and
705 this does nothing. */
706 while (*here && (*here)->depth > scope->depth)
707 here = &(*here)->shadowed;
709 b->shadowed = *here;
710 *here = b;
712 add_decl_to_current_module_scope (decl, scope);
715 /* Clear the binding structure B, stick it on the binding_freelist,
716 and return the former value of b->prev. This is used by pop_scope
717 and get_parm_info to iterate destructively over all the bindings
718 from a given scope. */
719 static struct c_binding *
720 free_binding_and_advance (struct c_binding *b)
722 struct c_binding *prev = b->prev;
724 memset (b, 0, sizeof (struct c_binding));
725 b->prev = binding_freelist;
726 binding_freelist = b;
728 return prev;
731 /* Bind a label. Like bind, but skip fields which aren't used for
732 labels, and add the LABEL_VARS value. */
733 static void
734 bind_label (tree name, tree label, struct c_scope *scope,
735 struct c_label_vars *label_vars)
737 struct c_binding *b;
739 bind (name, label, scope, /*invisible=*/false, /*nested=*/false,
740 UNKNOWN_LOCATION);
742 scope->has_label_bindings = true;
744 b = scope->bindings;
745 gcc_assert (b->decl == label);
746 label_vars->shadowed = b->u.label;
747 b->u.label = label_vars;
750 /* Hook called at end of compilation to assume 1 elt
751 for a file-scope tentative array defn that wasn't complete before. */
753 void
754 c_finish_incomplete_decl (tree decl)
756 if (TREE_CODE (decl) == VAR_DECL)
758 tree type = TREE_TYPE (decl);
759 if (type != error_mark_node
760 && TREE_CODE (type) == ARRAY_TYPE
761 && !DECL_EXTERNAL (decl)
762 && TYPE_DOMAIN (type) == 0)
764 warning_at (DECL_SOURCE_LOCATION (decl),
765 0, "array %q+D assumed to have one element", decl);
767 complete_array_type (&TREE_TYPE (decl), NULL_TREE, true);
769 relayout_decl (decl);
774 /* Record that inline function FUNC contains a reference (location
775 LOC) to static DECL (file-scope or function-local according to
776 TYPE). */
778 void
779 record_inline_static (location_t loc, tree func, tree decl,
780 enum c_inline_static_type type)
782 struct c_inline_static *csi = ggc_alloc_c_inline_static ();
783 csi->location = loc;
784 csi->function = func;
785 csi->static_decl = decl;
786 csi->type = type;
787 csi->next = c_inline_statics;
788 c_inline_statics = csi;
791 /* Check for references to static declarations in inline functions at
792 the end of the translation unit and diagnose them if the functions
793 are still inline definitions. */
795 static void
796 check_inline_statics (void)
798 struct c_inline_static *csi;
799 for (csi = c_inline_statics; csi; csi = csi->next)
801 if (DECL_EXTERNAL (csi->function))
802 switch (csi->type)
804 case csi_internal:
805 pedwarn (csi->location, 0,
806 "%qD is static but used in inline function %qD "
807 "which is not static", csi->static_decl, csi->function);
808 break;
809 case csi_modifiable:
810 pedwarn (csi->location, 0,
811 "%q+D is static but declared in inline function %qD "
812 "which is not static", csi->static_decl, csi->function);
813 break;
814 default:
815 gcc_unreachable ();
818 c_inline_statics = NULL;
821 /* Fill in a c_spot_bindings structure. If DEFINING is true, set it
822 for the current state, otherwise set it to uninitialized. */
824 static void
825 set_spot_bindings (struct c_spot_bindings *p, bool defining)
827 if (defining)
829 p->scope = current_scope;
830 p->bindings_in_scope = current_scope->bindings;
832 else
834 p->scope = NULL;
835 p->bindings_in_scope = NULL;
837 p->stmt_exprs = 0;
838 p->left_stmt_expr = false;
841 /* Update spot bindings P as we pop out of SCOPE. Return true if we
842 should push decls for a label. */
844 static bool
845 update_spot_bindings (struct c_scope *scope, struct c_spot_bindings *p)
847 if (p->scope != scope)
849 /* This label or goto is defined in some other scope, or it is a
850 label which is not yet defined. There is nothing to
851 update. */
852 return false;
855 /* Adjust the spot bindings to refer to the bindings already defined
856 in the enclosing scope. */
857 p->scope = scope->outer;
858 p->bindings_in_scope = p->scope->bindings;
860 return true;
863 /* The Objective-C front-end often needs to determine the current scope. */
865 void *
866 objc_get_current_scope (void)
868 return current_scope;
871 /* The following function is used only by Objective-C. It needs to live here
872 because it accesses the innards of c_scope. */
874 void
875 objc_mark_locals_volatile (void *enclosing_blk)
877 struct c_scope *scope;
878 struct c_binding *b;
880 for (scope = current_scope;
881 scope && scope != enclosing_blk;
882 scope = scope->outer)
884 for (b = scope->bindings; b; b = b->prev)
885 objc_volatilize_decl (b->decl);
887 /* Do not climb up past the current function. */
888 if (scope->function_body)
889 break;
893 /* Return true if we are in the global binding level. */
895 bool
896 global_bindings_p (void)
898 return current_scope == file_scope;
901 void
902 keep_next_level (void)
904 keep_next_level_flag = true;
907 /* Set the flag for the FLOAT_CONST_DECIMAL64 pragma being ON. */
909 void
910 set_float_const_decimal64 (void)
912 current_scope->float_const_decimal64 = true;
915 /* Clear the flag for the FLOAT_CONST_DECIMAL64 pragma. */
917 void
918 clear_float_const_decimal64 (void)
920 current_scope->float_const_decimal64 = false;
923 /* Return nonzero if an unsuffixed float constant is _Decimal64. */
925 bool
926 float_const_decimal64_p (void)
928 return current_scope->float_const_decimal64;
931 /* Identify this scope as currently being filled with parameters. */
933 void
934 declare_parm_level (void)
936 current_scope->parm_flag = true;
939 void
940 push_scope (void)
942 if (next_is_function_body)
944 /* This is the transition from the parameters to the top level
945 of the function body. These are the same scope
946 (C99 6.2.1p4,6) so we do not push another scope structure.
947 next_is_function_body is set only by store_parm_decls, which
948 in turn is called when and only when we are about to
949 encounter the opening curly brace for the function body.
951 The outermost block of a function always gets a BLOCK node,
952 because the debugging output routines expect that each
953 function has at least one BLOCK. */
954 current_scope->parm_flag = false;
955 current_scope->function_body = true;
956 current_scope->keep = true;
957 current_scope->outer_function = current_function_scope;
958 current_function_scope = current_scope;
960 keep_next_level_flag = false;
961 next_is_function_body = false;
963 /* The FLOAT_CONST_DECIMAL64 pragma applies to nested scopes. */
964 if (current_scope->outer)
965 current_scope->float_const_decimal64
966 = current_scope->outer->float_const_decimal64;
967 else
968 current_scope->float_const_decimal64 = false;
970 else
972 struct c_scope *scope;
973 if (scope_freelist)
975 scope = scope_freelist;
976 scope_freelist = scope->outer;
978 else
979 scope = ggc_alloc_cleared_c_scope ();
981 /* The FLOAT_CONST_DECIMAL64 pragma applies to nested scopes. */
982 if (current_scope)
983 scope->float_const_decimal64 = current_scope->float_const_decimal64;
984 else
985 scope->float_const_decimal64 = false;
987 scope->keep = keep_next_level_flag;
988 scope->outer = current_scope;
989 scope->depth = current_scope ? (current_scope->depth + 1) : 0;
991 /* Check for scope depth overflow. Unlikely (2^28 == 268,435,456) but
992 possible. */
993 if (current_scope && scope->depth == 0)
995 scope->depth--;
996 sorry ("GCC supports only %u nested scopes", scope->depth);
999 current_scope = scope;
1000 keep_next_level_flag = false;
1004 /* This is called when we are leaving SCOPE. For each label defined
1005 in SCOPE, add any appropriate decls to its decls_in_scope fields.
1006 These are the decls whose initialization will be skipped by a goto
1007 later in the function. */
1009 static void
1010 update_label_decls (struct c_scope *scope)
1012 struct c_scope *s;
1014 s = scope;
1015 while (s != NULL)
1017 if (s->has_label_bindings)
1019 struct c_binding *b;
1021 for (b = s->bindings; b != NULL; b = b->prev)
1023 struct c_label_vars *label_vars;
1024 struct c_binding *b1;
1025 bool hjud;
1026 unsigned int ix;
1027 struct c_goto_bindings *g;
1029 if (TREE_CODE (b->decl) != LABEL_DECL)
1030 continue;
1031 label_vars = b->u.label;
1033 b1 = label_vars->label_bindings.bindings_in_scope;
1034 if (label_vars->label_bindings.scope == NULL)
1035 hjud = false;
1036 else
1037 hjud = label_vars->label_bindings.scope->has_jump_unsafe_decl;
1038 if (update_spot_bindings (scope, &label_vars->label_bindings))
1040 /* This label is defined in this scope. */
1041 if (hjud)
1043 for (; b1 != NULL; b1 = b1->prev)
1045 /* A goto from later in the function to this
1046 label will never see the initialization
1047 of B1, if any. Save it to issue a
1048 warning if needed. */
1049 if (decl_jump_unsafe (b1->decl))
1050 vec_safe_push(label_vars->decls_in_scope, b1->decl);
1055 /* Update the bindings of any goto statements associated
1056 with this label. */
1057 FOR_EACH_VEC_SAFE_ELT (label_vars->gotos, ix, g)
1058 update_spot_bindings (scope, &g->goto_bindings);
1062 /* Don't search beyond the current function. */
1063 if (s == current_function_scope)
1064 break;
1066 s = s->outer;
1070 /* Set the TYPE_CONTEXT of all of TYPE's variants to CONTEXT. */
1072 static void
1073 set_type_context (tree type, tree context)
1075 for (type = TYPE_MAIN_VARIANT (type); type;
1076 type = TYPE_NEXT_VARIANT (type))
1077 TYPE_CONTEXT (type) = context;
1080 /* Exit a scope. Restore the state of the identifier-decl mappings
1081 that were in effect when this scope was entered. Return a BLOCK
1082 node containing all the DECLs in this scope that are of interest
1083 to debug info generation. */
1085 tree
1086 pop_scope (void)
1088 struct c_scope *scope = current_scope;
1089 tree block, context, p;
1090 struct c_binding *b;
1092 bool functionbody = scope->function_body;
1093 bool keep = functionbody || scope->keep || scope->bindings;
1095 update_label_decls (scope);
1097 /* If appropriate, create a BLOCK to record the decls for the life
1098 of this function. */
1099 block = 0;
1100 if (keep)
1102 block = make_node (BLOCK);
1103 BLOCK_SUBBLOCKS (block) = scope->blocks;
1104 TREE_USED (block) = 1;
1106 /* In each subblock, record that this is its superior. */
1107 for (p = scope->blocks; p; p = BLOCK_CHAIN (p))
1108 BLOCK_SUPERCONTEXT (p) = block;
1110 BLOCK_VARS (block) = 0;
1113 /* The TYPE_CONTEXTs for all of the tagged types belonging to this
1114 scope must be set so that they point to the appropriate
1115 construct, i.e. either to the current FUNCTION_DECL node, or
1116 else to the BLOCK node we just constructed.
1118 Note that for tagged types whose scope is just the formal
1119 parameter list for some function type specification, we can't
1120 properly set their TYPE_CONTEXTs here, because we don't have a
1121 pointer to the appropriate FUNCTION_TYPE node readily available
1122 to us. For those cases, the TYPE_CONTEXTs of the relevant tagged
1123 type nodes get set in `grokdeclarator' as soon as we have created
1124 the FUNCTION_TYPE node which will represent the "scope" for these
1125 "parameter list local" tagged types. */
1126 if (scope->function_body)
1127 context = current_function_decl;
1128 else if (scope == file_scope)
1130 tree file_decl = build_translation_unit_decl (NULL_TREE);
1131 context = file_decl;
1133 else
1134 context = block;
1136 /* Clear all bindings in this scope. */
1137 for (b = scope->bindings; b; b = free_binding_and_advance (b))
1139 p = b->decl;
1140 switch (TREE_CODE (p))
1142 case LABEL_DECL:
1143 /* Warnings for unused labels, errors for undefined labels. */
1144 if (TREE_USED (p) && !DECL_INITIAL (p))
1146 error ("label %q+D used but not defined", p);
1147 DECL_INITIAL (p) = error_mark_node;
1149 else
1150 warn_for_unused_label (p);
1152 /* Labels go in BLOCK_VARS. */
1153 DECL_CHAIN (p) = BLOCK_VARS (block);
1154 BLOCK_VARS (block) = p;
1155 gcc_assert (I_LABEL_BINDING (b->id) == b);
1156 I_LABEL_BINDING (b->id) = b->shadowed;
1158 /* Also pop back to the shadowed label_vars. */
1159 release_tree_vector (b->u.label->decls_in_scope);
1160 b->u.label = b->u.label->shadowed;
1161 break;
1163 case ENUMERAL_TYPE:
1164 case UNION_TYPE:
1165 case RECORD_TYPE:
1166 set_type_context (p, context);
1168 /* Types may not have tag-names, in which case the type
1169 appears in the bindings list with b->id NULL. */
1170 if (b->id)
1172 gcc_assert (I_TAG_BINDING (b->id) == b);
1173 I_TAG_BINDING (b->id) = b->shadowed;
1175 break;
1177 case FUNCTION_DECL:
1178 /* Propagate TREE_ADDRESSABLE from nested functions to their
1179 containing functions. */
1180 if (!TREE_ASM_WRITTEN (p)
1181 && DECL_INITIAL (p) != 0
1182 && TREE_ADDRESSABLE (p)
1183 && DECL_ABSTRACT_ORIGIN (p) != 0
1184 && DECL_ABSTRACT_ORIGIN (p) != p)
1185 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (p)) = 1;
1186 if (!DECL_EXTERNAL (p)
1187 && !DECL_INITIAL (p)
1188 && scope != file_scope
1189 && scope != external_scope)
1191 error ("nested function %q+D declared but never defined", p);
1192 undef_nested_function = true;
1194 else if (DECL_DECLARED_INLINE_P (p)
1195 && TREE_PUBLIC (p)
1196 && !DECL_INITIAL (p))
1198 /* C99 6.7.4p6: "a function with external linkage... declared
1199 with an inline function specifier ... shall also be defined
1200 in the same translation unit." */
1201 if (!flag_gnu89_inline)
1202 pedwarn (input_location, 0,
1203 "inline function %q+D declared but never defined", p);
1204 DECL_EXTERNAL (p) = 1;
1207 goto common_symbol;
1209 case VAR_DECL:
1210 /* Warnings for unused variables. */
1211 if ((!TREE_USED (p) || !DECL_READ_P (p))
1212 && !TREE_NO_WARNING (p)
1213 && !DECL_IN_SYSTEM_HEADER (p)
1214 && DECL_NAME (p)
1215 && !DECL_ARTIFICIAL (p)
1216 && scope != file_scope
1217 && scope != external_scope)
1219 if (!TREE_USED (p))
1220 warning (OPT_Wunused_variable, "unused variable %q+D", p);
1221 else if (DECL_CONTEXT (p) == current_function_decl)
1222 warning_at (DECL_SOURCE_LOCATION (p),
1223 OPT_Wunused_but_set_variable,
1224 "variable %qD set but not used", p);
1227 if (b->inner_comp)
1229 error ("type of array %q+D completed incompatibly with"
1230 " implicit initialization", p);
1233 /* Fall through. */
1234 case TYPE_DECL:
1235 case CONST_DECL:
1236 common_symbol:
1237 /* All of these go in BLOCK_VARS, but only if this is the
1238 binding in the home scope. */
1239 if (!b->nested)
1241 /* In LIPO mode compilation, ext_scope is popped out
1242 at end of each module to block name lookup across
1243 modules. The ext_scope is used to keep the list of
1244 global variables in that module scope. Other decls
1245 are filtered out. */
1246 if (!L_IPO_COMP_MODE
1247 || scope != external_scope
1248 || TREE_CODE (p) == VAR_DECL)
1250 DECL_CHAIN (p) = BLOCK_VARS (block);
1251 BLOCK_VARS (block) = p;
1254 else if (VAR_OR_FUNCTION_DECL_P (p) && scope != file_scope)
1256 /* For block local externs add a special
1257 DECL_EXTERNAL decl for debug info generation. */
1258 tree extp = copy_node (p);
1260 DECL_EXTERNAL (extp) = 1;
1261 TREE_STATIC (extp) = 0;
1262 TREE_PUBLIC (extp) = 1;
1263 DECL_INITIAL (extp) = NULL_TREE;
1264 DECL_LANG_SPECIFIC (extp) = NULL;
1265 DECL_CONTEXT (extp) = current_function_decl;
1266 if (TREE_CODE (p) == FUNCTION_DECL)
1268 DECL_RESULT (extp) = NULL_TREE;
1269 DECL_SAVED_TREE (extp) = NULL_TREE;
1270 DECL_STRUCT_FUNCTION (extp) = NULL;
1272 if (b->locus != UNKNOWN_LOCATION)
1273 DECL_SOURCE_LOCATION (extp) = b->locus;
1274 DECL_CHAIN (extp) = BLOCK_VARS (block);
1275 BLOCK_VARS (block) = extp;
1277 /* If this is the file scope set DECL_CONTEXT of each decl to
1278 the TRANSLATION_UNIT_DECL. This makes same_translation_unit_p
1279 work. */
1280 if (scope == file_scope)
1282 DECL_CONTEXT (p) = context;
1283 if (TREE_CODE (p) == TYPE_DECL
1284 && TREE_TYPE (p) != error_mark_node)
1285 set_type_context (TREE_TYPE (p), context);
1288 /* Fall through. */
1289 /* Parameters go in DECL_ARGUMENTS, not BLOCK_VARS, and have
1290 already been put there by store_parm_decls. Unused-
1291 parameter warnings are handled by function.c.
1292 error_mark_node obviously does not go in BLOCK_VARS and
1293 does not get unused-variable warnings. */
1294 case PARM_DECL:
1295 case ERROR_MARK:
1296 /* It is possible for a decl not to have a name. We get
1297 here with b->id NULL in this case. */
1298 if (b->id)
1300 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
1301 I_SYMBOL_BINDING (b->id) = b->shadowed;
1302 if (b->shadowed && b->shadowed->u.type)
1303 TREE_TYPE (b->shadowed->decl) = b->shadowed->u.type;
1305 break;
1307 default:
1308 gcc_unreachable ();
1313 /* Dispose of the block that we just made inside some higher level. */
1314 if ((scope->function_body || scope == file_scope) && context)
1316 DECL_INITIAL (context) = block;
1317 BLOCK_SUPERCONTEXT (block) = context;
1319 else if (scope->outer)
1321 if (block)
1322 SCOPE_LIST_APPEND (scope->outer, blocks, block);
1323 /* If we did not make a block for the scope just exited, any
1324 blocks made for inner scopes must be carried forward so they
1325 will later become subblocks of something else. */
1326 else if (scope->blocks)
1327 SCOPE_LIST_CONCAT (scope->outer, blocks, scope, blocks);
1330 /* Pop the current scope, and free the structure for reuse. */
1331 current_scope = scope->outer;
1332 if (scope->function_body)
1333 current_function_scope = scope->outer_function;
1335 memset (scope, 0, sizeof (struct c_scope));
1336 scope->outer = scope_freelist;
1337 scope_freelist = scope;
1339 return block;
1342 void
1343 push_file_scope (void)
1345 tree decl;
1347 if (file_scope)
1348 return;
1350 push_scope ();
1351 file_scope = current_scope;
1353 /* LIPO support -- do this before file scope bindings
1354 are created for visible_builtins -- only need to remember
1355 external scope bindings. */
1356 push_module_scope ();
1358 start_fname_decls ();
1360 for (decl = visible_builtins; decl; decl = DECL_CHAIN (decl))
1361 bind (DECL_NAME (decl), decl, file_scope,
1362 /*invisible=*/false, /*nested=*/true, DECL_SOURCE_LOCATION (decl));
1365 void
1366 pop_file_scope (void)
1368 /* In case there were missing closebraces, get us back to the global
1369 binding level. */
1370 while (current_scope != file_scope)
1371 pop_scope ();
1373 /* __FUNCTION__ is defined at file scope (""). This
1374 call may not be necessary as my tests indicate it
1375 still works without it. */
1376 finish_fname_decls ();
1378 check_inline_statics ();
1380 /* This is the point to write out a PCH if we're doing that.
1381 In that case we do not want to do anything else. */
1382 if (pch_file)
1384 c_common_write_pch ();
1385 return;
1388 /* Pop off the file scope and close this translation unit. */
1389 pop_scope ();
1390 file_scope = 0;
1392 if (!L_IPO_COMP_MODE)
1393 maybe_apply_pending_pragma_weaks ();
1394 else
1396 pop_ext_scope ();
1397 gcc_assert (current_scope == 0 && external_scope == 0);
1398 push_scope ();
1399 external_scope = current_scope;
1400 /* Prepare for parsing for the next module -- including
1401 builtin re-binding. */
1402 pop_module_scope ();
1406 /* Adjust the bindings for the start of a statement expression. */
1408 void
1409 c_bindings_start_stmt_expr (struct c_spot_bindings* switch_bindings)
1411 struct c_scope *scope;
1413 for (scope = current_scope; scope != NULL; scope = scope->outer)
1415 struct c_binding *b;
1417 if (!scope->has_label_bindings)
1418 continue;
1420 for (b = scope->bindings; b != NULL; b = b->prev)
1422 struct c_label_vars *label_vars;
1423 unsigned int ix;
1424 struct c_goto_bindings *g;
1426 if (TREE_CODE (b->decl) != LABEL_DECL)
1427 continue;
1428 label_vars = b->u.label;
1429 ++label_vars->label_bindings.stmt_exprs;
1430 FOR_EACH_VEC_SAFE_ELT (label_vars->gotos, ix, g)
1431 ++g->goto_bindings.stmt_exprs;
1435 if (switch_bindings != NULL)
1436 ++switch_bindings->stmt_exprs;
1439 /* Adjust the bindings for the end of a statement expression. */
1441 void
1442 c_bindings_end_stmt_expr (struct c_spot_bindings *switch_bindings)
1444 struct c_scope *scope;
1446 for (scope = current_scope; scope != NULL; scope = scope->outer)
1448 struct c_binding *b;
1450 if (!scope->has_label_bindings)
1451 continue;
1453 for (b = scope->bindings; b != NULL; b = b->prev)
1455 struct c_label_vars *label_vars;
1456 unsigned int ix;
1457 struct c_goto_bindings *g;
1459 if (TREE_CODE (b->decl) != LABEL_DECL)
1460 continue;
1461 label_vars = b->u.label;
1462 --label_vars->label_bindings.stmt_exprs;
1463 if (label_vars->label_bindings.stmt_exprs < 0)
1465 label_vars->label_bindings.left_stmt_expr = true;
1466 label_vars->label_bindings.stmt_exprs = 0;
1468 FOR_EACH_VEC_SAFE_ELT (label_vars->gotos, ix, g)
1470 --g->goto_bindings.stmt_exprs;
1471 if (g->goto_bindings.stmt_exprs < 0)
1473 g->goto_bindings.left_stmt_expr = true;
1474 g->goto_bindings.stmt_exprs = 0;
1480 if (switch_bindings != NULL)
1482 --switch_bindings->stmt_exprs;
1483 gcc_assert (switch_bindings->stmt_exprs >= 0);
1487 /* Push a definition or a declaration of struct, union or enum tag "name".
1488 "type" should be the type node.
1489 We assume that the tag "name" is not already defined, and has a location
1490 of LOC.
1492 Note that the definition may really be just a forward reference.
1493 In that case, the TYPE_SIZE will be zero. */
1495 static void
1496 pushtag (location_t loc, tree name, tree type)
1498 /* Record the identifier as the type's name if it has none. */
1499 if (name && !TYPE_NAME (type))
1500 TYPE_NAME (type) = name;
1501 bind (name, type, current_scope, /*invisible=*/false, /*nested=*/false, loc);
1503 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE will be the
1504 tagged type we just added to the current scope. This fake
1505 NULL-named TYPE_DECL node helps dwarfout.c to know when it needs
1506 to output a representation of a tagged type, and it also gives
1507 us a convenient place to record the "scope start" address for the
1508 tagged type. */
1510 TYPE_STUB_DECL (type) = pushdecl (build_decl (loc,
1511 TYPE_DECL, NULL_TREE, type));
1513 /* An approximation for now, so we can tell this is a function-scope tag.
1514 This will be updated in pop_scope. */
1515 TYPE_CONTEXT (type) = DECL_CONTEXT (TYPE_STUB_DECL (type));
1517 if (warn_cxx_compat && name != NULL_TREE)
1519 struct c_binding *b = I_SYMBOL_BINDING (name);
1521 if (b != NULL
1522 && b->decl != NULL_TREE
1523 && TREE_CODE (b->decl) == TYPE_DECL
1524 && (B_IN_CURRENT_SCOPE (b)
1525 || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
1526 && (TYPE_MAIN_VARIANT (TREE_TYPE (b->decl))
1527 != TYPE_MAIN_VARIANT (type)))
1529 warning_at (loc, OPT_Wc___compat,
1530 ("using %qD as both a typedef and a tag is "
1531 "invalid in C++"),
1532 b->decl);
1533 if (b->locus != UNKNOWN_LOCATION)
1534 inform (b->locus, "originally defined here");
1539 /* Subroutine of compare_decls. Allow harmless mismatches in return
1540 and argument types provided that the type modes match. This function
1541 return a unified type given a suitable match, and 0 otherwise. */
1543 static tree
1544 match_builtin_function_types (tree newtype, tree oldtype)
1546 tree newrettype, oldrettype;
1547 tree newargs, oldargs;
1548 tree trytype, tryargs;
1550 /* Accept the return type of the new declaration if same modes. */
1551 oldrettype = TREE_TYPE (oldtype);
1552 newrettype = TREE_TYPE (newtype);
1554 if (TYPE_MODE (oldrettype) != TYPE_MODE (newrettype))
1555 return 0;
1557 oldargs = TYPE_ARG_TYPES (oldtype);
1558 newargs = TYPE_ARG_TYPES (newtype);
1559 tryargs = newargs;
1561 while (oldargs || newargs)
1563 if (!oldargs
1564 || !newargs
1565 || !TREE_VALUE (oldargs)
1566 || !TREE_VALUE (newargs)
1567 || TYPE_MODE (TREE_VALUE (oldargs))
1568 != TYPE_MODE (TREE_VALUE (newargs)))
1569 return 0;
1571 oldargs = TREE_CHAIN (oldargs);
1572 newargs = TREE_CHAIN (newargs);
1575 trytype = build_function_type (newrettype, tryargs);
1576 return build_type_attribute_variant (trytype, TYPE_ATTRIBUTES (oldtype));
1579 /* Subroutine of diagnose_mismatched_decls. Check for function type
1580 mismatch involving an empty arglist vs a nonempty one and give clearer
1581 diagnostics. */
1582 static void
1583 diagnose_arglist_conflict (tree newdecl, tree olddecl,
1584 tree newtype, tree oldtype)
1586 tree t;
1588 if (TREE_CODE (olddecl) != FUNCTION_DECL
1589 || !comptypes (TREE_TYPE (oldtype), TREE_TYPE (newtype))
1590 || !((!prototype_p (oldtype) && DECL_INITIAL (olddecl) == 0)
1591 || (!prototype_p (newtype) && DECL_INITIAL (newdecl) == 0)))
1592 return;
1594 t = TYPE_ARG_TYPES (oldtype);
1595 if (t == 0)
1596 t = TYPE_ARG_TYPES (newtype);
1597 for (; t; t = TREE_CHAIN (t))
1599 tree type = TREE_VALUE (t);
1601 if (TREE_CHAIN (t) == 0
1602 && TYPE_MAIN_VARIANT (type) != void_type_node)
1604 inform (input_location, "a parameter list with an ellipsis can%'t match "
1605 "an empty parameter name list declaration");
1606 break;
1609 if (c_type_promotes_to (type) != type)
1611 inform (input_location, "an argument type that has a default promotion can%'t match "
1612 "an empty parameter name list declaration");
1613 break;
1618 /* Another subroutine of diagnose_mismatched_decls. OLDDECL is an
1619 old-style function definition, NEWDECL is a prototype declaration.
1620 Diagnose inconsistencies in the argument list. Returns TRUE if
1621 the prototype is compatible, FALSE if not. */
1622 static bool
1623 validate_proto_after_old_defn (tree newdecl, tree newtype, tree oldtype)
1625 tree newargs, oldargs;
1626 int i;
1628 #define END_OF_ARGLIST(t) ((t) == void_type_node)
1630 oldargs = TYPE_ACTUAL_ARG_TYPES (oldtype);
1631 newargs = TYPE_ARG_TYPES (newtype);
1632 i = 1;
1634 for (;;)
1636 tree oldargtype = TREE_VALUE (oldargs);
1637 tree newargtype = TREE_VALUE (newargs);
1639 if (oldargtype == error_mark_node || newargtype == error_mark_node)
1640 return false;
1642 oldargtype = (TYPE_ATOMIC (oldargtype)
1643 ? c_build_qualified_type (TYPE_MAIN_VARIANT (oldargtype),
1644 TYPE_QUAL_ATOMIC)
1645 : TYPE_MAIN_VARIANT (oldargtype));
1646 newargtype = (TYPE_ATOMIC (newargtype)
1647 ? c_build_qualified_type (TYPE_MAIN_VARIANT (newargtype),
1648 TYPE_QUAL_ATOMIC)
1649 : TYPE_MAIN_VARIANT (newargtype));
1651 if (END_OF_ARGLIST (oldargtype) && END_OF_ARGLIST (newargtype))
1652 break;
1654 /* Reaching the end of just one list means the two decls don't
1655 agree on the number of arguments. */
1656 if (END_OF_ARGLIST (oldargtype))
1658 error ("prototype for %q+D declares more arguments "
1659 "than previous old-style definition", newdecl);
1660 return false;
1662 else if (END_OF_ARGLIST (newargtype))
1664 error ("prototype for %q+D declares fewer arguments "
1665 "than previous old-style definition", newdecl);
1666 return false;
1669 /* Type for passing arg must be consistent with that declared
1670 for the arg. */
1671 else if (!comptypes (oldargtype, newargtype))
1673 error ("prototype for %q+D declares argument %d"
1674 " with incompatible type",
1675 newdecl, i);
1676 return false;
1679 oldargs = TREE_CHAIN (oldargs);
1680 newargs = TREE_CHAIN (newargs);
1681 i++;
1684 /* If we get here, no errors were found, but do issue a warning
1685 for this poor-style construct. */
1686 warning (0, "prototype for %q+D follows non-prototype definition",
1687 newdecl);
1688 return true;
1689 #undef END_OF_ARGLIST
1692 /* Subroutine of diagnose_mismatched_decls. Report the location of DECL,
1693 first in a pair of mismatched declarations, using the diagnostic
1694 function DIAG. */
1695 static void
1696 locate_old_decl (tree decl)
1698 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_BUILT_IN (decl)
1699 && !C_DECL_DECLARED_BUILTIN (decl))
1701 else if (DECL_INITIAL (decl))
1702 inform (input_location, "previous definition of %q+D was here", decl);
1703 else if (C_DECL_IMPLICIT (decl))
1704 inform (input_location, "previous implicit declaration of %q+D was here", decl);
1705 else
1706 inform (input_location, "previous declaration of %q+D was here", decl);
1709 /* Subroutine of duplicate_decls. Compare NEWDECL to OLDDECL.
1710 Returns true if the caller should proceed to merge the two, false
1711 if OLDDECL should simply be discarded. As a side effect, issues
1712 all necessary diagnostics for invalid or poor-style combinations.
1713 If it returns true, writes the types of NEWDECL and OLDDECL to
1714 *NEWTYPEP and *OLDTYPEP - these may have been adjusted from
1715 TREE_TYPE (NEWDECL, OLDDECL) respectively. */
1717 static bool
1718 diagnose_mismatched_decls (tree newdecl, tree olddecl,
1719 tree *newtypep, tree *oldtypep)
1721 tree newtype, oldtype;
1722 bool pedwarned = false;
1723 bool warned = false;
1724 bool retval = true;
1726 #define DECL_EXTERN_INLINE(DECL) (DECL_DECLARED_INLINE_P (DECL) \
1727 && DECL_EXTERNAL (DECL))
1729 /* If we have error_mark_node for either decl or type, just discard
1730 the previous decl - we're in an error cascade already. */
1731 if (olddecl == error_mark_node || newdecl == error_mark_node)
1732 return false;
1733 *oldtypep = oldtype = TREE_TYPE (olddecl);
1734 *newtypep = newtype = TREE_TYPE (newdecl);
1735 if (oldtype == error_mark_node || newtype == error_mark_node)
1736 return false;
1738 /* Two different categories of symbol altogether. This is an error
1739 unless OLDDECL is a builtin. OLDDECL will be discarded in any case. */
1740 if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1742 if (!(TREE_CODE (olddecl) == FUNCTION_DECL
1743 && DECL_BUILT_IN (olddecl)
1744 && !C_DECL_DECLARED_BUILTIN (olddecl)))
1746 error ("%q+D redeclared as different kind of symbol", newdecl);
1747 locate_old_decl (olddecl);
1749 else if (TREE_PUBLIC (newdecl))
1750 warning (0, "built-in function %q+D declared as non-function",
1751 newdecl);
1752 else
1753 warning (OPT_Wshadow, "declaration of %q+D shadows "
1754 "a built-in function", newdecl);
1755 return false;
1758 /* Enumerators have no linkage, so may only be declared once in a
1759 given scope. */
1760 if (TREE_CODE (olddecl) == CONST_DECL)
1762 error ("redeclaration of enumerator %q+D", newdecl);
1763 locate_old_decl (olddecl);
1764 return false;
1767 if (!comptypes (oldtype, newtype))
1769 if (TREE_CODE (olddecl) == FUNCTION_DECL
1770 && DECL_BUILT_IN (olddecl) && !C_DECL_DECLARED_BUILTIN (olddecl))
1772 /* Accept harmless mismatch in function types.
1773 This is for the ffs and fprintf builtins. */
1774 tree trytype = match_builtin_function_types (newtype, oldtype);
1776 if (trytype && comptypes (newtype, trytype))
1777 *oldtypep = oldtype = trytype;
1778 else
1780 /* If types don't match for a built-in, throw away the
1781 built-in. No point in calling locate_old_decl here, it
1782 won't print anything. */
1783 warning (0, "conflicting types for built-in function %q+D",
1784 newdecl);
1785 return false;
1788 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1789 && DECL_IS_BUILTIN (olddecl))
1791 /* A conflicting function declaration for a predeclared
1792 function that isn't actually built in. Objective C uses
1793 these. The new declaration silently overrides everything
1794 but the volatility (i.e. noreturn) indication. See also
1795 below. FIXME: Make Objective C use normal builtins. */
1796 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1797 return false;
1799 /* Permit void foo (...) to match int foo (...) if the latter is
1800 the definition and implicit int was used. See
1801 c-torture/compile/920625-2.c. */
1802 else if (TREE_CODE (newdecl) == FUNCTION_DECL && DECL_INITIAL (newdecl)
1803 && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype)) == void_type_node
1804 && TYPE_MAIN_VARIANT (TREE_TYPE (newtype)) == integer_type_node
1805 && C_FUNCTION_IMPLICIT_INT (newdecl) && !DECL_INITIAL (olddecl))
1807 pedwarned = pedwarn (input_location, 0,
1808 "conflicting types for %q+D", newdecl);
1809 /* Make sure we keep void as the return type. */
1810 TREE_TYPE (newdecl) = *newtypep = newtype = oldtype;
1811 C_FUNCTION_IMPLICIT_INT (newdecl) = 0;
1813 /* Permit void foo (...) to match an earlier call to foo (...) with
1814 no declared type (thus, implicitly int). */
1815 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1816 && TYPE_MAIN_VARIANT (TREE_TYPE (newtype)) == void_type_node
1817 && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype)) == integer_type_node
1818 && C_DECL_IMPLICIT (olddecl) && !DECL_INITIAL (olddecl))
1820 pedwarned = pedwarn (input_location, 0,
1821 "conflicting types for %q+D", newdecl);
1822 /* Make sure we keep void as the return type. */
1823 TREE_TYPE (olddecl) = *oldtypep = oldtype = newtype;
1825 else
1827 int new_quals = TYPE_QUALS (newtype);
1828 int old_quals = TYPE_QUALS (oldtype);
1830 if (new_quals != old_quals)
1832 addr_space_t new_addr = DECODE_QUAL_ADDR_SPACE (new_quals);
1833 addr_space_t old_addr = DECODE_QUAL_ADDR_SPACE (old_quals);
1834 if (new_addr != old_addr)
1836 if (ADDR_SPACE_GENERIC_P (new_addr))
1837 error ("conflicting named address spaces (generic vs %s) "
1838 "for %q+D",
1839 c_addr_space_name (old_addr), newdecl);
1840 else if (ADDR_SPACE_GENERIC_P (old_addr))
1841 error ("conflicting named address spaces (%s vs generic) "
1842 "for %q+D",
1843 c_addr_space_name (new_addr), newdecl);
1844 else
1845 error ("conflicting named address spaces (%s vs %s) "
1846 "for %q+D",
1847 c_addr_space_name (new_addr),
1848 c_addr_space_name (old_addr),
1849 newdecl);
1852 if (CLEAR_QUAL_ADDR_SPACE (new_quals)
1853 != CLEAR_QUAL_ADDR_SPACE (old_quals))
1854 error ("conflicting type qualifiers for %q+D", newdecl);
1856 else
1857 error ("conflicting types for %q+D", newdecl);
1858 diagnose_arglist_conflict (newdecl, olddecl, newtype, oldtype);
1859 locate_old_decl (olddecl);
1860 return false;
1864 /* Redeclaration of a type is a constraint violation (6.7.2.3p1),
1865 but silently ignore the redeclaration if either is in a system
1866 header. (Conflicting redeclarations were handled above.) This
1867 is allowed for C11 if the types are the same, not just
1868 compatible. */
1869 if (TREE_CODE (newdecl) == TYPE_DECL)
1871 bool types_different = false;
1872 int comptypes_result;
1874 comptypes_result
1875 = comptypes_check_different_types (oldtype, newtype, &types_different);
1877 if (comptypes_result != 1 || types_different)
1879 error ("redefinition of typedef %q+D with different type", newdecl);
1880 locate_old_decl (olddecl);
1881 return false;
1884 if (DECL_IN_SYSTEM_HEADER (newdecl)
1885 || DECL_IN_SYSTEM_HEADER (olddecl)
1886 || TREE_NO_WARNING (newdecl)
1887 || TREE_NO_WARNING (olddecl))
1888 return true; /* Allow OLDDECL to continue in use. */
1890 if (variably_modified_type_p (newtype, NULL))
1892 error ("redefinition of typedef %q+D with variably modified type",
1893 newdecl);
1894 locate_old_decl (olddecl);
1896 else if (pedantic && !flag_isoc11)
1898 pedwarn (input_location, OPT_Wpedantic,
1899 "redefinition of typedef %q+D", newdecl);
1900 locate_old_decl (olddecl);
1903 return true;
1906 /* Function declarations can either be 'static' or 'extern' (no
1907 qualifier is equivalent to 'extern' - C99 6.2.2p5) and therefore
1908 can never conflict with each other on account of linkage
1909 (6.2.2p4). Multiple definitions are not allowed (6.9p3,5) but
1910 gnu89 mode permits two definitions if one is 'extern inline' and
1911 one is not. The non- extern-inline definition supersedes the
1912 extern-inline definition. */
1914 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1916 /* If you declare a built-in function name as static, or
1917 define the built-in with an old-style definition (so we
1918 can't validate the argument list) the built-in definition is
1919 overridden, but optionally warn this was a bad choice of name. */
1920 if (DECL_BUILT_IN (olddecl)
1921 && !C_DECL_DECLARED_BUILTIN (olddecl)
1922 && (!TREE_PUBLIC (newdecl)
1923 || (DECL_INITIAL (newdecl)
1924 && !prototype_p (TREE_TYPE (newdecl)))))
1926 warning (OPT_Wshadow, "declaration of %q+D shadows "
1927 "a built-in function", newdecl);
1928 /* Discard the old built-in function. */
1929 return false;
1932 if (DECL_INITIAL (newdecl))
1934 if (DECL_INITIAL (olddecl))
1936 /* If both decls are in the same TU and the new declaration
1937 isn't overriding an extern inline reject the new decl.
1938 In c99, no overriding is allowed in the same translation
1939 unit. */
1940 if ((!DECL_EXTERN_INLINE (olddecl)
1941 || DECL_EXTERN_INLINE (newdecl)
1942 || (!flag_gnu89_inline
1943 && (!DECL_DECLARED_INLINE_P (olddecl)
1944 || !lookup_attribute ("gnu_inline",
1945 DECL_ATTRIBUTES (olddecl)))
1946 && (!DECL_DECLARED_INLINE_P (newdecl)
1947 || !lookup_attribute ("gnu_inline",
1948 DECL_ATTRIBUTES (newdecl))))
1950 && same_translation_unit_p (newdecl, olddecl))
1952 error ("redefinition of %q+D", newdecl);
1953 locate_old_decl (olddecl);
1954 return false;
1958 /* If we have a prototype after an old-style function definition,
1959 the argument types must be checked specially. */
1960 else if (DECL_INITIAL (olddecl)
1961 && !prototype_p (oldtype) && prototype_p (newtype)
1962 && TYPE_ACTUAL_ARG_TYPES (oldtype)
1963 && !validate_proto_after_old_defn (newdecl, newtype, oldtype))
1965 locate_old_decl (olddecl);
1966 return false;
1968 /* A non-static declaration (even an "extern") followed by a
1969 static declaration is undefined behavior per C99 6.2.2p3-5,7.
1970 The same is true for a static forward declaration at block
1971 scope followed by a non-static declaration/definition at file
1972 scope. Static followed by non-static at the same scope is
1973 not undefined behavior, and is the most convenient way to get
1974 some effects (see e.g. what unwind-dw2-fde-glibc.c does to
1975 the definition of _Unwind_Find_FDE in unwind-dw2-fde.c), but
1976 we do diagnose it if -Wtraditional. */
1977 if (TREE_PUBLIC (olddecl) && !TREE_PUBLIC (newdecl))
1979 /* Two exceptions to the rule. If olddecl is an extern
1980 inline, or a predeclared function that isn't actually
1981 built in, newdecl silently overrides olddecl. The latter
1982 occur only in Objective C; see also above. (FIXME: Make
1983 Objective C use normal builtins.) */
1984 if (!DECL_IS_BUILTIN (olddecl)
1985 && !DECL_EXTERN_INLINE (olddecl))
1987 error ("static declaration of %q+D follows "
1988 "non-static declaration", newdecl);
1989 locate_old_decl (olddecl);
1991 return false;
1993 else if (TREE_PUBLIC (newdecl) && !TREE_PUBLIC (olddecl))
1995 if (DECL_CONTEXT (olddecl))
1997 error ("non-static declaration of %q+D follows "
1998 "static declaration", newdecl);
1999 locate_old_decl (olddecl);
2000 return false;
2002 else if (warn_traditional)
2004 warned |= warning (OPT_Wtraditional,
2005 "non-static declaration of %q+D "
2006 "follows static declaration", newdecl);
2010 /* Make sure gnu_inline attribute is either not present, or
2011 present on all inline decls. */
2012 if (DECL_DECLARED_INLINE_P (olddecl)
2013 && DECL_DECLARED_INLINE_P (newdecl))
2015 bool newa = lookup_attribute ("gnu_inline",
2016 DECL_ATTRIBUTES (newdecl)) != NULL;
2017 bool olda = lookup_attribute ("gnu_inline",
2018 DECL_ATTRIBUTES (olddecl)) != NULL;
2019 if (newa != olda)
2021 error_at (input_location, "%<gnu_inline%> attribute present on %q+D",
2022 newa ? newdecl : olddecl);
2023 error_at (DECL_SOURCE_LOCATION (newa ? olddecl : newdecl),
2024 "but not here");
2028 else if (TREE_CODE (newdecl) == VAR_DECL)
2030 /* Only variables can be thread-local, and all declarations must
2031 agree on this property. */
2032 if (C_DECL_THREADPRIVATE_P (olddecl) && !DECL_THREAD_LOCAL_P (newdecl))
2034 /* Nothing to check. Since OLDDECL is marked threadprivate
2035 and NEWDECL does not have a thread-local attribute, we
2036 will merge the threadprivate attribute into NEWDECL. */
2039 else if (DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl))
2041 if (DECL_THREAD_LOCAL_P (newdecl))
2042 error ("thread-local declaration of %q+D follows "
2043 "non-thread-local declaration", newdecl);
2044 else
2045 error ("non-thread-local declaration of %q+D follows "
2046 "thread-local declaration", newdecl);
2048 locate_old_decl (olddecl);
2049 return false;
2052 /* Multiple initialized definitions are not allowed (6.9p3,5). */
2053 if (DECL_INITIAL (newdecl) && DECL_INITIAL (olddecl))
2055 error ("redefinition of %q+D", newdecl);
2056 locate_old_decl (olddecl);
2057 return false;
2060 /* Objects declared at file scope: if the first declaration had
2061 external linkage (even if it was an external reference) the
2062 second must have external linkage as well, or the behavior is
2063 undefined. If the first declaration had internal linkage, then
2064 the second must too, or else be an external reference (in which
2065 case the composite declaration still has internal linkage).
2066 As for function declarations, we warn about the static-then-
2067 extern case only for -Wtraditional. See generally 6.2.2p3-5,7. */
2068 if (DECL_FILE_SCOPE_P (newdecl)
2069 && TREE_PUBLIC (newdecl) != TREE_PUBLIC (olddecl))
2071 if (DECL_EXTERNAL (newdecl))
2073 if (!DECL_FILE_SCOPE_P (olddecl))
2075 error ("extern declaration of %q+D follows "
2076 "declaration with no linkage", newdecl);
2077 locate_old_decl (olddecl);
2078 return false;
2080 else if (warn_traditional)
2082 warned |= warning (OPT_Wtraditional,
2083 "non-static declaration of %q+D "
2084 "follows static declaration", newdecl);
2087 else
2089 if (TREE_PUBLIC (newdecl))
2090 error ("non-static declaration of %q+D follows "
2091 "static declaration", newdecl);
2092 else
2093 error ("static declaration of %q+D follows "
2094 "non-static declaration", newdecl);
2096 locate_old_decl (olddecl);
2097 return false;
2100 /* Two objects with the same name declared at the same block
2101 scope must both be external references (6.7p3). */
2102 else if (!DECL_FILE_SCOPE_P (newdecl))
2104 if (DECL_EXTERNAL (newdecl))
2106 /* Extern with initializer at block scope, which will
2107 already have received an error. */
2109 else if (DECL_EXTERNAL (olddecl))
2111 error ("declaration of %q+D with no linkage follows "
2112 "extern declaration", newdecl);
2113 locate_old_decl (olddecl);
2115 else
2117 error ("redeclaration of %q+D with no linkage", newdecl);
2118 locate_old_decl (olddecl);
2121 return false;
2124 /* C++ does not permit a decl to appear multiple times at file
2125 scope. */
2126 if (warn_cxx_compat
2127 && DECL_FILE_SCOPE_P (newdecl)
2128 && !DECL_EXTERNAL (newdecl)
2129 && !DECL_EXTERNAL (olddecl))
2130 warned |= warning_at (DECL_SOURCE_LOCATION (newdecl),
2131 OPT_Wc___compat,
2132 ("duplicate declaration of %qD is "
2133 "invalid in C++"),
2134 newdecl);
2137 /* warnings */
2138 /* All decls must agree on a visibility. */
2139 if (CODE_CONTAINS_STRUCT (TREE_CODE (newdecl), TS_DECL_WITH_VIS)
2140 && DECL_VISIBILITY_SPECIFIED (newdecl) && DECL_VISIBILITY_SPECIFIED (olddecl)
2141 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2143 warned |= warning (0, "redeclaration of %q+D with different visibility "
2144 "(old visibility preserved)", newdecl);
2147 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2149 /* Diagnose inline __attribute__ ((noinline)) which is silly. */
2150 if (DECL_DECLARED_INLINE_P (newdecl)
2151 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
2153 warned |= warning (OPT_Wattributes,
2154 "inline declaration of %qD follows "
2155 "declaration with attribute noinline", newdecl);
2157 else if (DECL_DECLARED_INLINE_P (olddecl)
2158 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
2160 warned |= warning (OPT_Wattributes,
2161 "declaration of %q+D with attribute "
2162 "noinline follows inline declaration ", newdecl);
2165 else /* PARM_DECL, VAR_DECL */
2167 /* Redeclaration of a parameter is a constraint violation (this is
2168 not explicitly stated, but follows from C99 6.7p3 [no more than
2169 one declaration of the same identifier with no linkage in the
2170 same scope, except type tags] and 6.2.2p6 [parameters have no
2171 linkage]). We must check for a forward parameter declaration,
2172 indicated by TREE_ASM_WRITTEN on the old declaration - this is
2173 an extension, the mandatory diagnostic for which is handled by
2174 mark_forward_parm_decls. */
2176 if (TREE_CODE (newdecl) == PARM_DECL
2177 && (!TREE_ASM_WRITTEN (olddecl) || TREE_ASM_WRITTEN (newdecl)))
2179 error ("redefinition of parameter %q+D", newdecl);
2180 locate_old_decl (olddecl);
2181 return false;
2185 /* Optional warning for completely redundant decls. */
2186 if (!warned && !pedwarned
2187 && warn_redundant_decls
2188 /* Don't warn about a function declaration followed by a
2189 definition. */
2190 && !(TREE_CODE (newdecl) == FUNCTION_DECL
2191 && DECL_INITIAL (newdecl) && !DECL_INITIAL (olddecl))
2192 /* Don't warn about redundant redeclarations of builtins. */
2193 && !(TREE_CODE (newdecl) == FUNCTION_DECL
2194 && !DECL_BUILT_IN (newdecl)
2195 && DECL_BUILT_IN (olddecl)
2196 && !C_DECL_DECLARED_BUILTIN (olddecl))
2197 /* Don't warn about an extern followed by a definition. */
2198 && !(DECL_EXTERNAL (olddecl) && !DECL_EXTERNAL (newdecl))
2199 /* Don't warn about forward parameter decls. */
2200 && !(TREE_CODE (newdecl) == PARM_DECL
2201 && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
2202 /* Don't warn about a variable definition following a declaration. */
2203 && !(TREE_CODE (newdecl) == VAR_DECL
2204 && DECL_INITIAL (newdecl) && !DECL_INITIAL (olddecl)))
2206 warned = warning (OPT_Wredundant_decls, "redundant redeclaration of %q+D",
2207 newdecl);
2210 /* Report location of previous decl/defn. */
2211 if (warned || pedwarned)
2212 locate_old_decl (olddecl);
2214 #undef DECL_EXTERN_INLINE
2216 return retval;
2219 /* Subroutine of duplicate_decls. NEWDECL has been found to be
2220 consistent with OLDDECL, but carries new information. Merge the
2221 new information into OLDDECL. This function issues no
2222 diagnostics. */
2224 static void
2225 merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
2227 bool new_is_definition = (TREE_CODE (newdecl) == FUNCTION_DECL
2228 && DECL_INITIAL (newdecl) != 0);
2229 bool new_is_prototype = (TREE_CODE (newdecl) == FUNCTION_DECL
2230 && prototype_p (TREE_TYPE (newdecl)));
2231 bool old_is_prototype = (TREE_CODE (olddecl) == FUNCTION_DECL
2232 && prototype_p (TREE_TYPE (olddecl)));
2234 /* For real parm decl following a forward decl, rechain the old decl
2235 in its new location and clear TREE_ASM_WRITTEN (it's not a
2236 forward decl anymore). */
2237 if (TREE_CODE (newdecl) == PARM_DECL
2238 && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
2240 struct c_binding *b, **here;
2242 for (here = &current_scope->bindings; *here; here = &(*here)->prev)
2243 if ((*here)->decl == olddecl)
2244 goto found;
2245 gcc_unreachable ();
2247 found:
2248 b = *here;
2249 *here = b->prev;
2250 b->prev = current_scope->bindings;
2251 current_scope->bindings = b;
2253 TREE_ASM_WRITTEN (olddecl) = 0;
2256 DECL_ATTRIBUTES (newdecl)
2257 = targetm.merge_decl_attributes (olddecl, newdecl);
2259 /* Merge the data types specified in the two decls. */
2260 TREE_TYPE (newdecl)
2261 = TREE_TYPE (olddecl)
2262 = composite_type (newtype, oldtype);
2264 /* Lay the type out, unless already done. */
2265 if (!comptypes (oldtype, TREE_TYPE (newdecl)))
2267 if (TREE_TYPE (newdecl) != error_mark_node)
2268 layout_type (TREE_TYPE (newdecl));
2269 if (TREE_CODE (newdecl) != FUNCTION_DECL
2270 && TREE_CODE (newdecl) != TYPE_DECL
2271 && TREE_CODE (newdecl) != CONST_DECL)
2272 layout_decl (newdecl, 0);
2274 else
2276 /* Since the type is OLDDECL's, make OLDDECL's size go with. */
2277 DECL_SIZE (newdecl) = DECL_SIZE (olddecl);
2278 DECL_SIZE_UNIT (newdecl) = DECL_SIZE_UNIT (olddecl);
2279 DECL_MODE (newdecl) = DECL_MODE (olddecl);
2280 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2282 DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
2283 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2287 /* Keep the old rtl since we can safely use it. */
2288 if (HAS_RTL_P (olddecl))
2289 COPY_DECL_RTL (olddecl, newdecl);
2291 /* Merge the type qualifiers. */
2292 if (TREE_READONLY (newdecl))
2293 TREE_READONLY (olddecl) = 1;
2295 if (TREE_THIS_VOLATILE (newdecl))
2296 TREE_THIS_VOLATILE (olddecl) = 1;
2298 /* Merge deprecatedness. */
2299 if (TREE_DEPRECATED (newdecl))
2300 TREE_DEPRECATED (olddecl) = 1;
2302 /* If a decl is in a system header and the other isn't, keep the one on the
2303 system header. Otherwise, keep source location of definition rather than
2304 declaration and of prototype rather than non-prototype unless that
2305 prototype is built-in. */
2306 if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS)
2307 && DECL_IN_SYSTEM_HEADER (olddecl)
2308 && !DECL_IN_SYSTEM_HEADER (newdecl) )
2309 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2310 else if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS)
2311 && DECL_IN_SYSTEM_HEADER (newdecl)
2312 && !DECL_IN_SYSTEM_HEADER (olddecl))
2313 DECL_SOURCE_LOCATION (olddecl) = DECL_SOURCE_LOCATION (newdecl);
2314 else if ((DECL_INITIAL (newdecl) == 0 && DECL_INITIAL (olddecl) != 0)
2315 || (old_is_prototype && !new_is_prototype
2316 && !C_DECL_BUILTIN_PROTOTYPE (olddecl)))
2317 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2319 /* Merge the initialization information. */
2320 if (DECL_INITIAL (newdecl) == 0)
2321 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2323 /* Merge the threadprivate attribute. */
2324 if (TREE_CODE (olddecl) == VAR_DECL && C_DECL_THREADPRIVATE_P (olddecl))
2326 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
2327 C_DECL_THREADPRIVATE_P (newdecl) = 1;
2330 if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS))
2332 /* Merge the section attribute.
2333 We want to issue an error if the sections conflict but that
2334 must be done later in decl_attributes since we are called
2335 before attributes are assigned. */
2336 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
2337 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
2339 /* Copy the assembler name.
2340 Currently, it can only be defined in the prototype. */
2341 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2343 /* Use visibility of whichever declaration had it specified */
2344 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2346 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2347 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2350 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2352 DECL_STATIC_CONSTRUCTOR(newdecl) |= DECL_STATIC_CONSTRUCTOR(olddecl);
2353 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
2354 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2355 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2356 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2357 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
2358 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
2359 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2360 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
2361 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
2362 DECL_IS_NOVOPS (newdecl) |= DECL_IS_NOVOPS (olddecl);
2365 /* Merge the storage class information. */
2366 merge_weak (newdecl, olddecl);
2368 /* For functions, static overrides non-static. */
2369 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2371 TREE_PUBLIC (newdecl) &= TREE_PUBLIC (olddecl);
2372 /* This is since we don't automatically
2373 copy the attributes of NEWDECL into OLDDECL. */
2374 TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
2375 /* If this clears `static', clear it in the identifier too. */
2376 if (!TREE_PUBLIC (olddecl))
2377 TREE_PUBLIC (DECL_NAME (olddecl)) = 0;
2381 /* In c99, 'extern' declaration before (or after) 'inline' means this
2382 function is not DECL_EXTERNAL, unless 'gnu_inline' attribute
2383 is present. */
2384 if (TREE_CODE (newdecl) == FUNCTION_DECL
2385 && !flag_gnu89_inline
2386 && (DECL_DECLARED_INLINE_P (newdecl)
2387 || DECL_DECLARED_INLINE_P (olddecl))
2388 && (!DECL_DECLARED_INLINE_P (newdecl)
2389 || !DECL_DECLARED_INLINE_P (olddecl)
2390 || !DECL_EXTERNAL (olddecl))
2391 && DECL_EXTERNAL (newdecl)
2392 && !lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (newdecl))
2393 && !current_function_decl)
2394 DECL_EXTERNAL (newdecl) = 0;
2396 /* An inline definition following a static declaration is not
2397 DECL_EXTERNAL. */
2398 if (new_is_definition
2399 && (DECL_DECLARED_INLINE_P (newdecl)
2400 || DECL_DECLARED_INLINE_P (olddecl))
2401 && !TREE_PUBLIC (olddecl))
2402 DECL_EXTERNAL (newdecl) = 0;
2404 if (DECL_EXTERNAL (newdecl))
2406 TREE_STATIC (newdecl) = TREE_STATIC (olddecl);
2407 DECL_EXTERNAL (newdecl) = DECL_EXTERNAL (olddecl);
2409 /* An extern decl does not override previous storage class. */
2410 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2411 if (!DECL_EXTERNAL (newdecl))
2413 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
2414 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2417 else
2419 TREE_STATIC (olddecl) = TREE_STATIC (newdecl);
2420 TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
2423 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2425 /* If we're redefining a function previously defined as extern
2426 inline, make sure we emit debug info for the inline before we
2427 throw it away, in case it was inlined into a function that
2428 hasn't been written out yet. */
2429 if (new_is_definition && DECL_INITIAL (olddecl))
2430 /* The new defn must not be inline. */
2431 DECL_UNINLINABLE (newdecl) = 1;
2432 else
2434 /* If either decl says `inline', this fn is inline, unless
2435 its definition was passed already. */
2436 if (DECL_DECLARED_INLINE_P (newdecl)
2437 || DECL_DECLARED_INLINE_P (olddecl))
2438 DECL_DECLARED_INLINE_P (newdecl) = 1;
2440 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2441 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2443 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2444 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2445 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2446 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2449 if (DECL_BUILT_IN (olddecl))
2451 /* If redeclaring a builtin function, it stays built in.
2452 But it gets tagged as having been declared. */
2453 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2454 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2455 C_DECL_DECLARED_BUILTIN (newdecl) = 1;
2456 if (new_is_prototype)
2458 C_DECL_BUILTIN_PROTOTYPE (newdecl) = 0;
2459 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2461 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2462 switch (fncode)
2464 /* If a compatible prototype of these builtin functions
2465 is seen, assume the runtime implements it with the
2466 expected semantics. */
2467 case BUILT_IN_STPCPY:
2468 if (builtin_decl_explicit_p (fncode))
2469 set_builtin_decl_implicit_p (fncode, true);
2470 break;
2471 default:
2472 break;
2476 else
2477 C_DECL_BUILTIN_PROTOTYPE (newdecl)
2478 = C_DECL_BUILTIN_PROTOTYPE (olddecl);
2481 /* Preserve function specific target and optimization options */
2482 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2483 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2484 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2485 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2487 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2488 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2489 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2490 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2492 /* Also preserve various other info from the definition. */
2493 if (!new_is_definition)
2495 tree t;
2496 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2497 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2498 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2499 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2500 DECL_ARGUMENTS (newdecl) = copy_list (DECL_ARGUMENTS (olddecl));
2501 for (t = DECL_ARGUMENTS (newdecl); t ; t = DECL_CHAIN (t))
2502 DECL_CONTEXT (t) = newdecl;
2504 /* See if we've got a function to instantiate from. */
2505 if (DECL_SAVED_TREE (olddecl))
2506 DECL_ABSTRACT_ORIGIN (newdecl)
2507 = DECL_ABSTRACT_ORIGIN (olddecl);
2511 /* Merge the USED information. */
2512 if (TREE_USED (olddecl))
2513 TREE_USED (newdecl) = 1;
2514 else if (TREE_USED (newdecl))
2515 TREE_USED (olddecl) = 1;
2516 if (TREE_CODE (olddecl) == VAR_DECL || TREE_CODE (olddecl) == PARM_DECL)
2517 DECL_READ_P (newdecl) |= DECL_READ_P (olddecl);
2518 if (DECL_PRESERVE_P (olddecl))
2519 DECL_PRESERVE_P (newdecl) = 1;
2520 else if (DECL_PRESERVE_P (newdecl))
2521 DECL_PRESERVE_P (olddecl) = 1;
2523 /* Copy most of the decl-specific fields of NEWDECL into OLDDECL.
2524 But preserve OLDDECL's DECL_UID, DECL_CONTEXT and
2525 DECL_ARGUMENTS (if appropriate). */
2527 unsigned olddecl_uid = DECL_UID (olddecl);
2528 tree olddecl_context = DECL_CONTEXT (olddecl);
2529 tree olddecl_arguments = NULL;
2530 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2531 olddecl_arguments = DECL_ARGUMENTS (olddecl);
2533 memcpy ((char *) olddecl + sizeof (struct tree_common),
2534 (char *) newdecl + sizeof (struct tree_common),
2535 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2536 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2537 switch (TREE_CODE (olddecl))
2539 case FUNCTION_DECL:
2540 case FIELD_DECL:
2541 case VAR_DECL:
2542 case PARM_DECL:
2543 case LABEL_DECL:
2544 case RESULT_DECL:
2545 case CONST_DECL:
2546 case TYPE_DECL:
2547 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2548 (char *) newdecl + sizeof (struct tree_decl_common),
2549 tree_code_size (TREE_CODE (olddecl)) - sizeof (struct tree_decl_common));
2550 break;
2552 default:
2554 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2555 (char *) newdecl + sizeof (struct tree_decl_common),
2556 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common));
2558 DECL_UID (olddecl) = olddecl_uid;
2559 DECL_CONTEXT (olddecl) = olddecl_context;
2560 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2561 DECL_ARGUMENTS (olddecl) = olddecl_arguments;
2564 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2565 so that encode_section_info has a chance to look at the new decl
2566 flags and attributes. */
2567 if (DECL_RTL_SET_P (olddecl)
2568 && (TREE_CODE (olddecl) == FUNCTION_DECL
2569 || (TREE_CODE (olddecl) == VAR_DECL
2570 && TREE_STATIC (olddecl))))
2571 make_decl_rtl (olddecl);
2574 /* Handle when a new declaration NEWDECL has the same name as an old
2575 one OLDDECL in the same binding contour. Prints an error message
2576 if appropriate.
2578 If safely possible, alter OLDDECL to look like NEWDECL, and return
2579 true. Otherwise, return false. */
2581 static bool
2582 duplicate_decls (tree newdecl, tree olddecl)
2584 tree newtype = NULL, oldtype = NULL;
2586 if (!diagnose_mismatched_decls (newdecl, olddecl, &newtype, &oldtype))
2588 /* Avoid `unused variable' and other warnings for OLDDECL. */
2589 TREE_NO_WARNING (olddecl) = 1;
2590 return false;
2593 merge_decls (newdecl, olddecl, newtype, oldtype);
2594 return true;
2598 /* Check whether decl-node NEW_DECL shadows an existing declaration. */
2599 static void
2600 warn_if_shadowing (tree new_decl)
2602 struct c_binding *b;
2604 /* Shadow warnings wanted? */
2605 if (!(warn_shadow
2606 || warn_shadow_local
2607 || warn_shadow_compatible_local)
2608 /* No shadow warnings for internally generated vars. */
2609 || DECL_IS_BUILTIN (new_decl)
2610 /* No shadow warnings for vars made for inlining. */
2611 || DECL_FROM_INLINE (new_decl))
2612 return;
2614 /* Is anything being shadowed? Invisible decls do not count. */
2615 for (b = I_SYMBOL_BINDING (DECL_NAME (new_decl)); b; b = b->shadowed)
2616 if (b->decl && b->decl != new_decl && !b->invisible
2617 && (b->decl == error_mark_node
2618 || diagnostic_report_warnings_p (global_dc,
2619 DECL_SOURCE_LOCATION (b->decl))))
2621 tree old_decl = b->decl;
2623 if (old_decl == error_mark_node)
2624 warning (OPT_Wshadow, "declaration of %q+D shadows previous "
2625 "non-variable", new_decl);
2626 else if (TREE_CODE (old_decl) == PARM_DECL)
2628 enum opt_code warning_code;
2630 /* If '-Wshadow-compatible-local' is specified without other
2631 -Wshadow flags, we will warn only when the types of the
2632 shadowing variable (i.e. new_decl) and the shadowed variable
2633 (old_decl) are compatible. */
2634 if (comptypes (TREE_TYPE (old_decl), TREE_TYPE (new_decl)))
2635 warning_code = OPT_Wshadow_compatible_local;
2636 else
2637 warning_code = OPT_Wshadow_local;
2638 warning (warning_code,
2639 "declaration of %q+D shadows a parameter", new_decl);
2640 warning_at (DECL_SOURCE_LOCATION (old_decl), warning_code,
2641 "shadowed declaration is here");
2643 else if (DECL_FILE_SCOPE_P (old_decl))
2645 /* Do not warn if a variable shadows a function, unless
2646 the variable is a function or a pointer-to-function. */
2647 if (TREE_CODE (old_decl) == FUNCTION_DECL
2648 && TREE_CODE (new_decl) != FUNCTION_DECL
2649 && !FUNCTION_POINTER_TYPE_P (TREE_TYPE (new_decl)))
2650 continue;
2652 warning (OPT_Wshadow, "declaration of %q+D shadows a global "
2653 "declaration", new_decl);
2654 warning_at (DECL_SOURCE_LOCATION (old_decl), OPT_Wshadow,
2655 "shadowed declaration is here");
2657 else if (TREE_CODE (old_decl) == FUNCTION_DECL
2658 && DECL_BUILT_IN (old_decl))
2659 warning (OPT_Wshadow, "declaration of %q+D shadows "
2660 "a built-in function", new_decl);
2661 else
2663 enum opt_code warning_code;
2665 /* If '-Wshadow-compatible-local' is specified without other
2666 -Wshadow flags, we will warn only when the types of the
2667 shadowing variable (i.e. new_decl) and the shadowed variable
2668 (old_decl) are compatible. */
2669 if (comptypes (TREE_TYPE (old_decl), TREE_TYPE (new_decl)))
2670 warning_code = OPT_Wshadow_compatible_local;
2671 else
2672 warning_code = OPT_Wshadow_local;
2673 warning (warning_code,
2674 "declaration of %q+D shadows a previous local",
2675 new_decl);
2677 warning_at (DECL_SOURCE_LOCATION (old_decl), warning_code,
2678 "shadowed declaration is here");
2681 break;
2685 /* Record a decl-node X as belonging to the current lexical scope.
2686 Check for errors (such as an incompatible declaration for the same
2687 name already seen in the same scope).
2689 Returns either X or an old decl for the same name.
2690 If an old decl is returned, it may have been smashed
2691 to agree with what X says. */
2693 tree
2694 pushdecl (tree x)
2696 tree name = DECL_NAME (x);
2697 struct c_scope *scope = current_scope;
2698 struct c_binding *b;
2699 bool nested = false;
2700 location_t locus = DECL_SOURCE_LOCATION (x);
2702 /* Must set DECL_CONTEXT for everything not at file scope or
2703 DECL_FILE_SCOPE_P won't work. Local externs don't count
2704 unless they have initializers (which generate code). */
2705 if (current_function_decl
2706 && ((TREE_CODE (x) != FUNCTION_DECL && TREE_CODE (x) != VAR_DECL)
2707 || DECL_INITIAL (x) || !DECL_EXTERNAL (x)))
2708 DECL_CONTEXT (x) = current_function_decl;
2710 /* Anonymous decls are just inserted in the scope. */
2711 if (!name)
2713 bind (name, x, scope, /*invisible=*/false, /*nested=*/false,
2714 locus);
2715 return x;
2718 /* First, see if there is another declaration with the same name in
2719 the current scope. If there is, duplicate_decls may do all the
2720 work for us. If duplicate_decls returns false, that indicates
2721 two incompatible decls in the same scope; we are to silently
2722 replace the old one (duplicate_decls has issued all appropriate
2723 diagnostics). In particular, we should not consider possible
2724 duplicates in the external scope, or shadowing. */
2725 b = I_SYMBOL_BINDING (name);
2726 if (b && B_IN_SCOPE (b, scope))
2728 struct c_binding *b_ext, *b_use;
2729 tree type = TREE_TYPE (x);
2730 tree visdecl = b->decl;
2731 tree vistype = TREE_TYPE (visdecl);
2732 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
2733 && COMPLETE_TYPE_P (TREE_TYPE (x)))
2734 b->inner_comp = false;
2735 b_use = b;
2736 b_ext = b;
2737 /* If this is an external linkage declaration, we should check
2738 for compatibility with the type in the external scope before
2739 setting the type at this scope based on the visible
2740 information only. */
2741 if (TREE_PUBLIC (x) && TREE_PUBLIC (visdecl))
2743 while (b_ext && !B_IN_EXTERNAL_SCOPE (b_ext))
2744 b_ext = b_ext->shadowed;
2745 if (b_ext)
2747 b_use = b_ext;
2748 if (b_use->u.type)
2749 TREE_TYPE (b_use->decl) = b_use->u.type;
2752 if (duplicate_decls (x, b_use->decl))
2754 if (b_use != b)
2756 /* Save the updated type in the external scope and
2757 restore the proper type for this scope. */
2758 tree thistype;
2759 if (comptypes (vistype, type))
2760 thistype = composite_type (vistype, type);
2761 else
2762 thistype = TREE_TYPE (b_use->decl);
2763 b_use->u.type = TREE_TYPE (b_use->decl);
2764 if (TREE_CODE (b_use->decl) == FUNCTION_DECL
2765 && DECL_BUILT_IN (b_use->decl))
2766 thistype
2767 = build_type_attribute_variant (thistype,
2768 TYPE_ATTRIBUTES
2769 (b_use->u.type));
2770 TREE_TYPE (b_use->decl) = thistype;
2772 return b_use->decl;
2774 else
2775 goto skip_external_and_shadow_checks;
2778 /* All declarations with external linkage, and all external
2779 references, go in the external scope, no matter what scope is
2780 current. However, the binding in that scope is ignored for
2781 purposes of normal name lookup. A separate binding structure is
2782 created in the requested scope; this governs the normal
2783 visibility of the symbol.
2785 The binding in the externals scope is used exclusively for
2786 detecting duplicate declarations of the same object, no matter
2787 what scope they are in; this is what we do here. (C99 6.2.7p2:
2788 All declarations that refer to the same object or function shall
2789 have compatible type; otherwise, the behavior is undefined.) */
2790 if (DECL_EXTERNAL (x) || scope == file_scope)
2792 tree type = TREE_TYPE (x);
2793 tree vistype = 0;
2794 tree visdecl = 0;
2795 bool type_saved = false;
2796 if (b && !B_IN_EXTERNAL_SCOPE (b)
2797 && (TREE_CODE (b->decl) == FUNCTION_DECL
2798 || TREE_CODE (b->decl) == VAR_DECL)
2799 && DECL_FILE_SCOPE_P (b->decl))
2801 visdecl = b->decl;
2802 vistype = TREE_TYPE (visdecl);
2804 if (scope != file_scope
2805 && !DECL_IN_SYSTEM_HEADER (x))
2806 warning (OPT_Wnested_externs, "nested extern declaration of %qD", x);
2808 while (b && !B_IN_EXTERNAL_SCOPE (b))
2810 /* If this decl might be modified, save its type. This is
2811 done here rather than when the decl is first bound
2812 because the type may change after first binding, through
2813 being completed or through attributes being added. If we
2814 encounter multiple such decls, only the first should have
2815 its type saved; the others will already have had their
2816 proper types saved and the types will not have changed as
2817 their scopes will not have been re-entered. */
2818 if (DECL_P (b->decl) && DECL_FILE_SCOPE_P (b->decl) && !type_saved)
2820 b->u.type = TREE_TYPE (b->decl);
2821 type_saved = true;
2823 if (B_IN_FILE_SCOPE (b)
2824 && TREE_CODE (b->decl) == VAR_DECL
2825 && TREE_STATIC (b->decl)
2826 && TREE_CODE (TREE_TYPE (b->decl)) == ARRAY_TYPE
2827 && !TYPE_DOMAIN (TREE_TYPE (b->decl))
2828 && TREE_CODE (type) == ARRAY_TYPE
2829 && TYPE_DOMAIN (type)
2830 && TYPE_MAX_VALUE (TYPE_DOMAIN (type))
2831 && !integer_zerop (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
2833 /* Array type completed in inner scope, which should be
2834 diagnosed if the completion does not have size 1 and
2835 it does not get completed in the file scope. */
2836 b->inner_comp = true;
2838 b = b->shadowed;
2841 /* If a matching external declaration has been found, set its
2842 type to the composite of all the types of that declaration.
2843 After the consistency checks, it will be reset to the
2844 composite of the visible types only. */
2845 if (b && (TREE_PUBLIC (x) || same_translation_unit_p (x, b->decl))
2846 && b->u.type)
2847 TREE_TYPE (b->decl) = b->u.type;
2849 /* The point of the same_translation_unit_p check here is,
2850 we want to detect a duplicate decl for a construct like
2851 foo() { extern bar(); } ... static bar(); but not if
2852 they are in different translation units. In any case,
2853 the static does not go in the externals scope. */
2854 if (b
2855 && (TREE_PUBLIC (x) || same_translation_unit_p (x, b->decl))
2856 && duplicate_decls (x, b->decl))
2858 tree thistype;
2859 if (vistype)
2861 if (comptypes (vistype, type))
2862 thistype = composite_type (vistype, type);
2863 else
2864 thistype = TREE_TYPE (b->decl);
2866 else
2867 thistype = type;
2868 b->u.type = TREE_TYPE (b->decl);
2869 if (TREE_CODE (b->decl) == FUNCTION_DECL && DECL_BUILT_IN (b->decl))
2870 thistype
2871 = build_type_attribute_variant (thistype,
2872 TYPE_ATTRIBUTES (b->u.type));
2873 TREE_TYPE (b->decl) = thistype;
2874 bind (name, b->decl, scope, /*invisible=*/false, /*nested=*/true,
2875 locus);
2876 return b->decl;
2878 else if (TREE_PUBLIC (x))
2880 if (visdecl && !b && duplicate_decls (x, visdecl))
2882 /* An external declaration at block scope referring to a
2883 visible entity with internal linkage. The composite
2884 type will already be correct for this scope, so we
2885 just need to fall through to make the declaration in
2886 this scope. */
2887 nested = true;
2888 x = visdecl;
2890 else
2892 bind (name, x, external_scope, /*invisible=*/true,
2893 /*nested=*/false, locus);
2894 nested = true;
2899 if (TREE_CODE (x) != PARM_DECL)
2900 warn_if_shadowing (x);
2902 skip_external_and_shadow_checks:
2903 if (TREE_CODE (x) == TYPE_DECL)
2905 /* So this is a typedef, set its underlying type. */
2906 set_underlying_type (x);
2908 /* If X is a typedef defined in the current function, record it
2909 for the purpose of implementing the -Wunused-local-typedefs
2910 warning. */
2911 record_locally_defined_typedef (x);
2914 bind (name, x, scope, /*invisible=*/false, nested, locus);
2916 /* If x's type is incomplete because it's based on a
2917 structure or union which has not yet been fully declared,
2918 attach it to that structure or union type, so we can go
2919 back and complete the variable declaration later, if the
2920 structure or union gets fully declared.
2922 If the input is erroneous, we can have error_mark in the type
2923 slot (e.g. "f(void a, ...)") - that doesn't count as an
2924 incomplete type. */
2925 if (TREE_TYPE (x) != error_mark_node
2926 && !COMPLETE_TYPE_P (TREE_TYPE (x)))
2928 tree element = TREE_TYPE (x);
2930 while (TREE_CODE (element) == ARRAY_TYPE)
2931 element = TREE_TYPE (element);
2932 element = TYPE_MAIN_VARIANT (element);
2934 if ((TREE_CODE (element) == RECORD_TYPE
2935 || TREE_CODE (element) == UNION_TYPE)
2936 && (TREE_CODE (x) != TYPE_DECL
2937 || TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE)
2938 && !COMPLETE_TYPE_P (element))
2939 C_TYPE_INCOMPLETE_VARS (element)
2940 = tree_cons (NULL_TREE, x, C_TYPE_INCOMPLETE_VARS (element));
2942 return x;
2945 /* Record X as belonging to file scope.
2946 This is used only internally by the Objective-C front end,
2947 and is limited to its needs. duplicate_decls is not called;
2948 if there is any preexisting decl for this identifier, it is an ICE. */
2950 tree
2951 pushdecl_top_level (tree x)
2953 tree name;
2954 bool nested = false;
2955 gcc_assert (TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == CONST_DECL);
2957 name = DECL_NAME (x);
2959 gcc_assert (TREE_CODE (x) == CONST_DECL || !I_SYMBOL_BINDING (name));
2961 if (TREE_PUBLIC (x))
2963 bind (name, x, external_scope, /*invisible=*/true, /*nested=*/false,
2964 UNKNOWN_LOCATION);
2965 nested = true;
2967 if (file_scope)
2968 bind (name, x, file_scope, /*invisible=*/false, nested, UNKNOWN_LOCATION);
2970 return x;
2973 static void
2974 implicit_decl_warning (tree id, tree olddecl)
2976 if (warn_implicit_function_declaration)
2978 bool warned;
2980 if (flag_isoc99)
2981 warned = pedwarn (input_location, OPT_Wimplicit_function_declaration,
2982 "implicit declaration of function %qE", id);
2983 else
2984 warned = warning (OPT_Wimplicit_function_declaration,
2985 G_("implicit declaration of function %qE"), id);
2986 if (olddecl && warned)
2987 locate_old_decl (olddecl);
2991 /* Generate an implicit declaration for identifier FUNCTIONID at LOC as a
2992 function of type int (). */
2994 tree
2995 implicitly_declare (location_t loc, tree functionid)
2997 struct c_binding *b;
2998 tree decl = 0;
2999 tree asmspec_tree;
3001 for (b = I_SYMBOL_BINDING (functionid); b; b = b->shadowed)
3003 if (B_IN_SCOPE (b, external_scope))
3005 decl = b->decl;
3006 break;
3010 if (decl)
3012 if (decl == error_mark_node)
3013 return decl;
3015 /* FIXME: Objective-C has weird not-really-builtin functions
3016 which are supposed to be visible automatically. They wind up
3017 in the external scope because they're pushed before the file
3018 scope gets created. Catch this here and rebind them into the
3019 file scope. */
3020 if (!DECL_BUILT_IN (decl) && DECL_IS_BUILTIN (decl))
3022 bind (functionid, decl, file_scope,
3023 /*invisible=*/false, /*nested=*/true,
3024 DECL_SOURCE_LOCATION (decl));
3025 return decl;
3027 else
3029 tree newtype = default_function_type;
3030 if (b->u.type)
3031 TREE_TYPE (decl) = b->u.type;
3032 /* Implicit declaration of a function already declared
3033 (somehow) in a different scope, or as a built-in.
3034 If this is the first time this has happened, warn;
3035 then recycle the old declaration but with the new type. */
3036 if (!C_DECL_IMPLICIT (decl))
3038 implicit_decl_warning (functionid, decl);
3039 C_DECL_IMPLICIT (decl) = 1;
3041 if (DECL_BUILT_IN (decl))
3043 newtype = build_type_attribute_variant (newtype,
3044 TYPE_ATTRIBUTES
3045 (TREE_TYPE (decl)));
3046 if (!comptypes (newtype, TREE_TYPE (decl)))
3048 warning_at (loc, 0, "incompatible implicit declaration of "
3049 "built-in function %qD", decl);
3050 newtype = TREE_TYPE (decl);
3053 else
3055 if (!comptypes (newtype, TREE_TYPE (decl)))
3057 error_at (loc, "incompatible implicit declaration of function %qD", decl);
3058 locate_old_decl (decl);
3061 b->u.type = TREE_TYPE (decl);
3062 TREE_TYPE (decl) = newtype;
3063 bind (functionid, decl, current_scope,
3064 /*invisible=*/false, /*nested=*/true,
3065 DECL_SOURCE_LOCATION (decl));
3066 return decl;
3070 /* Not seen before. */
3071 decl = build_decl (loc, FUNCTION_DECL, functionid, default_function_type);
3072 DECL_EXTERNAL (decl) = 1;
3073 TREE_PUBLIC (decl) = 1;
3074 C_DECL_IMPLICIT (decl) = 1;
3075 implicit_decl_warning (functionid, 0);
3076 asmspec_tree = maybe_apply_renaming_pragma (decl, /*asmname=*/NULL);
3077 if (asmspec_tree)
3078 set_user_assembler_name (decl, TREE_STRING_POINTER (asmspec_tree));
3080 /* C89 says implicit declarations are in the innermost block.
3081 So we record the decl in the standard fashion. */
3082 decl = pushdecl (decl);
3084 /* No need to call objc_check_decl here - it's a function type. */
3085 rest_of_decl_compilation (decl, 0, 0);
3087 /* Write a record describing this implicit function declaration
3088 to the prototypes file (if requested). */
3089 gen_aux_info_record (decl, 0, 1, 0);
3091 /* Possibly apply some default attributes to this implicit declaration. */
3092 decl_attributes (&decl, NULL_TREE, 0);
3094 return decl;
3097 /* Issue an error message for a reference to an undeclared variable
3098 ID, including a reference to a builtin outside of function-call
3099 context. Establish a binding of the identifier to error_mark_node
3100 in an appropriate scope, which will suppress further errors for the
3101 same identifier. The error message should be given location LOC. */
3102 void
3103 undeclared_variable (location_t loc, tree id)
3105 static bool already = false;
3106 struct c_scope *scope;
3108 if (current_function_decl == 0)
3110 error_at (loc, "%qE undeclared here (not in a function)", id);
3111 scope = current_scope;
3113 else
3115 if (!objc_diagnose_private_ivar (id))
3116 error_at (loc, "%qE undeclared (first use in this function)", id);
3117 if (!already)
3119 inform (loc, "each undeclared identifier is reported only"
3120 " once for each function it appears in");
3121 already = true;
3124 /* If we are parsing old-style parameter decls, current_function_decl
3125 will be nonnull but current_function_scope will be null. */
3126 scope = current_function_scope ? current_function_scope : current_scope;
3128 bind (id, error_mark_node, scope, /*invisible=*/false, /*nested=*/false,
3129 UNKNOWN_LOCATION);
3132 /* Subroutine of lookup_label, declare_label, define_label: construct a
3133 LABEL_DECL with all the proper frills. Also create a struct
3134 c_label_vars initialized for the current scope. */
3136 static tree
3137 make_label (location_t location, tree name, bool defining,
3138 struct c_label_vars **p_label_vars)
3140 tree label = build_decl (location, LABEL_DECL, name, void_type_node);
3141 struct c_label_vars *label_vars;
3143 DECL_CONTEXT (label) = current_function_decl;
3144 DECL_MODE (label) = VOIDmode;
3146 label_vars = ggc_alloc_c_label_vars ();
3147 label_vars->shadowed = NULL;
3148 set_spot_bindings (&label_vars->label_bindings, defining);
3149 label_vars->decls_in_scope = make_tree_vector ();
3150 label_vars->gotos = NULL;
3151 *p_label_vars = label_vars;
3153 return label;
3156 /* Get the LABEL_DECL corresponding to identifier NAME as a label.
3157 Create one if none exists so far for the current function.
3158 This is called when a label is used in a goto expression or
3159 has its address taken. */
3161 tree
3162 lookup_label (tree name)
3164 tree label;
3165 struct c_label_vars *label_vars;
3167 if (current_function_scope == 0)
3169 error ("label %qE referenced outside of any function", name);
3170 return 0;
3173 /* Use a label already defined or ref'd with this name, but not if
3174 it is inherited from a containing function and wasn't declared
3175 using __label__. */
3176 label = I_LABEL_DECL (name);
3177 if (label && (DECL_CONTEXT (label) == current_function_decl
3178 || C_DECLARED_LABEL_FLAG (label)))
3180 /* If the label has only been declared, update its apparent
3181 location to point here, for better diagnostics if it
3182 turns out not to have been defined. */
3183 if (DECL_INITIAL (label) == NULL_TREE)
3184 DECL_SOURCE_LOCATION (label) = input_location;
3185 return label;
3188 /* No label binding for that identifier; make one. */
3189 label = make_label (input_location, name, false, &label_vars);
3191 /* Ordinary labels go in the current function scope. */
3192 bind_label (name, label, current_function_scope, label_vars);
3194 return label;
3197 /* Issue a warning about DECL for a goto statement at GOTO_LOC going
3198 to LABEL. */
3200 static void
3201 warn_about_goto (location_t goto_loc, tree label, tree decl)
3203 if (variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
3204 error_at (goto_loc,
3205 "jump into scope of identifier with variably modified type");
3206 else
3207 warning_at (goto_loc, OPT_Wjump_misses_init,
3208 "jump skips variable initialization");
3209 inform (DECL_SOURCE_LOCATION (label), "label %qD defined here", label);
3210 inform (DECL_SOURCE_LOCATION (decl), "%qD declared here", decl);
3213 /* Look up a label because of a goto statement. This is like
3214 lookup_label, but also issues any appropriate warnings. */
3216 tree
3217 lookup_label_for_goto (location_t loc, tree name)
3219 tree label;
3220 struct c_label_vars *label_vars;
3221 unsigned int ix;
3222 tree decl;
3224 label = lookup_label (name);
3225 if (label == NULL_TREE)
3226 return NULL_TREE;
3228 /* If we are jumping to a different function, we can't issue any
3229 useful warnings. */
3230 if (DECL_CONTEXT (label) != current_function_decl)
3232 gcc_assert (C_DECLARED_LABEL_FLAG (label));
3233 return label;
3236 label_vars = I_LABEL_BINDING (name)->u.label;
3238 /* If the label has not yet been defined, then push this goto on a
3239 list for possible later warnings. */
3240 if (label_vars->label_bindings.scope == NULL)
3242 struct c_goto_bindings *g;
3244 g = ggc_alloc_c_goto_bindings ();
3245 g->loc = loc;
3246 set_spot_bindings (&g->goto_bindings, true);
3247 vec_safe_push (label_vars->gotos, g);
3248 return label;
3251 /* If there are any decls in label_vars->decls_in_scope, then this
3252 goto has missed the declaration of the decl. This happens for a
3253 case like
3254 int i = 1;
3255 lab:
3257 goto lab;
3258 Issue a warning or error. */
3259 FOR_EACH_VEC_SAFE_ELT (label_vars->decls_in_scope, ix, decl)
3260 warn_about_goto (loc, label, decl);
3262 if (label_vars->label_bindings.left_stmt_expr)
3264 error_at (loc, "jump into statement expression");
3265 inform (DECL_SOURCE_LOCATION (label), "label %qD defined here", label);
3268 return label;
3271 /* Make a label named NAME in the current function, shadowing silently
3272 any that may be inherited from containing functions or containing
3273 scopes. This is called for __label__ declarations. */
3275 tree
3276 declare_label (tree name)
3278 struct c_binding *b = I_LABEL_BINDING (name);
3279 tree label;
3280 struct c_label_vars *label_vars;
3282 /* Check to make sure that the label hasn't already been declared
3283 at this scope */
3284 if (b && B_IN_CURRENT_SCOPE (b))
3286 error ("duplicate label declaration %qE", name);
3287 locate_old_decl (b->decl);
3289 /* Just use the previous declaration. */
3290 return b->decl;
3293 label = make_label (input_location, name, false, &label_vars);
3294 C_DECLARED_LABEL_FLAG (label) = 1;
3296 /* Declared labels go in the current scope. */
3297 bind_label (name, label, current_scope, label_vars);
3299 return label;
3302 /* When we define a label, issue any appropriate warnings if there are
3303 any gotos earlier in the function which jump to this label. */
3305 static void
3306 check_earlier_gotos (tree label, struct c_label_vars* label_vars)
3308 unsigned int ix;
3309 struct c_goto_bindings *g;
3311 FOR_EACH_VEC_SAFE_ELT (label_vars->gotos, ix, g)
3313 struct c_binding *b;
3314 struct c_scope *scope;
3316 /* We have a goto to this label. The goto is going forward. In
3317 g->scope, the goto is going to skip any binding which was
3318 defined after g->bindings_in_scope. */
3319 if (g->goto_bindings.scope->has_jump_unsafe_decl)
3321 for (b = g->goto_bindings.scope->bindings;
3322 b != g->goto_bindings.bindings_in_scope;
3323 b = b->prev)
3325 if (decl_jump_unsafe (b->decl))
3326 warn_about_goto (g->loc, label, b->decl);
3330 /* We also need to warn about decls defined in any scopes
3331 between the scope of the label and the scope of the goto. */
3332 for (scope = label_vars->label_bindings.scope;
3333 scope != g->goto_bindings.scope;
3334 scope = scope->outer)
3336 gcc_assert (scope != NULL);
3337 if (scope->has_jump_unsafe_decl)
3339 if (scope == label_vars->label_bindings.scope)
3340 b = label_vars->label_bindings.bindings_in_scope;
3341 else
3342 b = scope->bindings;
3343 for (; b != NULL; b = b->prev)
3345 if (decl_jump_unsafe (b->decl))
3346 warn_about_goto (g->loc, label, b->decl);
3351 if (g->goto_bindings.stmt_exprs > 0)
3353 error_at (g->loc, "jump into statement expression");
3354 inform (DECL_SOURCE_LOCATION (label), "label %qD defined here",
3355 label);
3359 /* Now that the label is defined, we will issue warnings about
3360 subsequent gotos to this label when we see them. */
3361 vec_safe_truncate (label_vars->gotos, 0);
3362 label_vars->gotos = NULL;
3365 /* Define a label, specifying the location in the source file.
3366 Return the LABEL_DECL node for the label, if the definition is valid.
3367 Otherwise return 0. */
3369 tree
3370 define_label (location_t location, tree name)
3372 /* Find any preexisting label with this name. It is an error
3373 if that label has already been defined in this function, or
3374 if there is a containing function with a declared label with
3375 the same name. */
3376 tree label = I_LABEL_DECL (name);
3378 if (label
3379 && ((DECL_CONTEXT (label) == current_function_decl
3380 && DECL_INITIAL (label) != 0)
3381 || (DECL_CONTEXT (label) != current_function_decl
3382 && C_DECLARED_LABEL_FLAG (label))))
3384 error_at (location, "duplicate label %qD", label);
3385 locate_old_decl (label);
3386 return 0;
3388 else if (label && DECL_CONTEXT (label) == current_function_decl)
3390 struct c_label_vars *label_vars = I_LABEL_BINDING (name)->u.label;
3392 /* The label has been used or declared already in this function,
3393 but not defined. Update its location to point to this
3394 definition. */
3395 DECL_SOURCE_LOCATION (label) = location;
3396 set_spot_bindings (&label_vars->label_bindings, true);
3398 /* Issue warnings as required about any goto statements from
3399 earlier in the function. */
3400 check_earlier_gotos (label, label_vars);
3402 else
3404 struct c_label_vars *label_vars;
3406 /* No label binding for that identifier; make one. */
3407 label = make_label (location, name, true, &label_vars);
3409 /* Ordinary labels go in the current function scope. */
3410 bind_label (name, label, current_function_scope, label_vars);
3413 if (!in_system_header_at (input_location) && lookup_name (name))
3414 warning_at (location, OPT_Wtraditional,
3415 "traditional C lacks a separate namespace "
3416 "for labels, identifier %qE conflicts", name);
3418 /* Mark label as having been defined. */
3419 DECL_INITIAL (label) = error_mark_node;
3420 return label;
3423 /* Get the bindings for a new switch statement. This is used to issue
3424 warnings as appropriate for jumps from the switch to case or
3425 default labels. */
3427 struct c_spot_bindings *
3428 c_get_switch_bindings (void)
3430 struct c_spot_bindings *switch_bindings;
3432 switch_bindings = XNEW (struct c_spot_bindings);
3433 set_spot_bindings (switch_bindings, true);
3434 return switch_bindings;
3437 void
3438 c_release_switch_bindings (struct c_spot_bindings *bindings)
3440 gcc_assert (bindings->stmt_exprs == 0 && !bindings->left_stmt_expr);
3441 XDELETE (bindings);
3444 /* This is called at the point of a case or default label to issue
3445 warnings about decls as needed. It returns true if it found an
3446 error, not just a warning. */
3448 bool
3449 c_check_switch_jump_warnings (struct c_spot_bindings *switch_bindings,
3450 location_t switch_loc, location_t case_loc)
3452 bool saw_error;
3453 struct c_scope *scope;
3455 saw_error = false;
3456 for (scope = current_scope;
3457 scope != switch_bindings->scope;
3458 scope = scope->outer)
3460 struct c_binding *b;
3462 gcc_assert (scope != NULL);
3464 if (!scope->has_jump_unsafe_decl)
3465 continue;
3467 for (b = scope->bindings; b != NULL; b = b->prev)
3469 if (decl_jump_unsafe (b->decl))
3471 if (variably_modified_type_p (TREE_TYPE (b->decl), NULL_TREE))
3473 saw_error = true;
3474 error_at (case_loc,
3475 ("switch jumps into scope of identifier with "
3476 "variably modified type"));
3478 else
3479 warning_at (case_loc, OPT_Wjump_misses_init,
3480 "switch jumps over variable initialization");
3481 inform (switch_loc, "switch starts here");
3482 inform (DECL_SOURCE_LOCATION (b->decl), "%qD declared here",
3483 b->decl);
3488 if (switch_bindings->stmt_exprs > 0)
3490 saw_error = true;
3491 error_at (case_loc, "switch jumps into statement expression");
3492 inform (switch_loc, "switch starts here");
3495 return saw_error;
3498 /* Given NAME, an IDENTIFIER_NODE,
3499 return the structure (or union or enum) definition for that name.
3500 If THISLEVEL_ONLY is nonzero, searches only the current_scope.
3501 CODE says which kind of type the caller wants;
3502 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
3503 If PLOC is not NULL and this returns non-null, it sets *PLOC to the
3504 location where the tag was defined.
3505 If the wrong kind of type is found, an error is reported. */
3507 static tree
3508 lookup_tag (enum tree_code code, tree name, int thislevel_only,
3509 location_t *ploc)
3511 struct c_binding *b = I_TAG_BINDING (name);
3512 int thislevel = 0;
3514 if (!b || !b->decl)
3515 return 0;
3517 /* We only care about whether it's in this level if
3518 thislevel_only was set or it might be a type clash. */
3519 if (thislevel_only || TREE_CODE (b->decl) != code)
3521 /* For our purposes, a tag in the external scope is the same as
3522 a tag in the file scope. (Primarily relevant to Objective-C
3523 and its builtin structure tags, which get pushed before the
3524 file scope is created.) */
3525 if (B_IN_CURRENT_SCOPE (b)
3526 || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
3527 thislevel = 1;
3530 if (thislevel_only && !thislevel)
3531 return 0;
3533 if (TREE_CODE (b->decl) != code)
3535 /* Definition isn't the kind we were looking for. */
3536 pending_invalid_xref = name;
3537 pending_invalid_xref_location = input_location;
3539 /* If in the same binding level as a declaration as a tag
3540 of a different type, this must not be allowed to
3541 shadow that tag, so give the error immediately.
3542 (For example, "struct foo; union foo;" is invalid.) */
3543 if (thislevel)
3544 pending_xref_error ();
3547 if (ploc != NULL)
3548 *ploc = b->locus;
3550 return b->decl;
3553 /* Print an error message now
3554 for a recent invalid struct, union or enum cross reference.
3555 We don't print them immediately because they are not invalid
3556 when used in the `struct foo;' construct for shadowing. */
3558 void
3559 pending_xref_error (void)
3561 if (pending_invalid_xref != 0)
3562 error_at (pending_invalid_xref_location, "%qE defined as wrong kind of tag",
3563 pending_invalid_xref);
3564 pending_invalid_xref = 0;
3568 /* Look up NAME in the current scope and its superiors
3569 in the namespace of variables, functions and typedefs.
3570 Return a ..._DECL node of some kind representing its definition,
3571 or return 0 if it is undefined. */
3573 tree
3574 lookup_name (tree name)
3576 struct c_binding *b = I_SYMBOL_BINDING (name);
3577 if (b && !b->invisible)
3579 maybe_record_typedef_use (b->decl);
3580 return b->decl;
3582 return 0;
3585 /* Similar to `lookup_name' but look only at the indicated scope. */
3587 static tree
3588 lookup_name_in_scope (tree name, struct c_scope *scope)
3590 struct c_binding *b;
3592 for (b = I_SYMBOL_BINDING (name); b; b = b->shadowed)
3593 if (B_IN_SCOPE (b, scope))
3594 return b->decl;
3595 return 0;
3598 /* Create the predefined scalar types of C,
3599 and some nodes representing standard constants (0, 1, (void *) 0).
3600 Initialize the global scope.
3601 Make definitions for built-in primitive functions. */
3603 void
3604 c_init_decl_processing (void)
3606 location_t save_loc = input_location;
3608 /* Initialize reserved words for parser. */
3609 c_parse_init ();
3611 current_function_decl = 0;
3613 gcc_obstack_init (&parser_obstack);
3615 /* Make the externals scope. */
3616 push_scope ();
3617 external_scope = current_scope;
3619 /* Declarations from c_common_nodes_and_builtins must not be associated
3620 with this input file, lest we get differences between using and not
3621 using preprocessed headers. */
3622 input_location = BUILTINS_LOCATION;
3624 c_common_nodes_and_builtins ();
3626 /* In C, comparisons and TRUTH_* expressions have type int. */
3627 truthvalue_type_node = integer_type_node;
3628 truthvalue_true_node = integer_one_node;
3629 truthvalue_false_node = integer_zero_node;
3631 /* Even in C99, which has a real boolean type. */
3632 pushdecl (build_decl (UNKNOWN_LOCATION, TYPE_DECL, get_identifier ("_Bool"),
3633 boolean_type_node));
3635 input_location = save_loc;
3637 pedantic_lvalues = true;
3639 make_fname_decl = c_make_fname_decl;
3640 start_fname_decls ();
3643 /* Create the VAR_DECL at LOC for __FUNCTION__ etc. ID is the name to
3644 give the decl, NAME is the initialization string and TYPE_DEP
3645 indicates whether NAME depended on the type of the function. As we
3646 don't yet implement delayed emission of static data, we mark the
3647 decl as emitted so it is not placed in the output. Anything using
3648 it must therefore pull out the STRING_CST initializer directly.
3649 FIXME. */
3651 static tree
3652 c_make_fname_decl (location_t loc, tree id, int type_dep)
3654 const char *name = fname_as_string (type_dep);
3655 tree decl, type, init;
3656 size_t length = strlen (name);
3658 type = build_array_type (char_type_node,
3659 build_index_type (size_int (length)));
3660 type = c_build_qualified_type (type, TYPE_QUAL_CONST);
3662 decl = build_decl (loc, VAR_DECL, id, type);
3664 TREE_STATIC (decl) = 1;
3665 TREE_READONLY (decl) = 1;
3666 DECL_ARTIFICIAL (decl) = 1;
3668 init = build_string (length + 1, name);
3669 free (CONST_CAST (char *, name));
3670 TREE_TYPE (init) = type;
3671 DECL_INITIAL (decl) = init;
3673 TREE_USED (decl) = 1;
3675 if (current_function_decl
3676 /* For invalid programs like this:
3678 void foo()
3679 const char* p = __FUNCTION__;
3681 the __FUNCTION__ is believed to appear in K&R style function
3682 parameter declarator. In that case we still don't have
3683 function_scope. */
3684 && (!seen_error () || current_function_scope))
3686 DECL_CONTEXT (decl) = current_function_decl;
3687 bind (id, decl, current_function_scope,
3688 /*invisible=*/false, /*nested=*/false, UNKNOWN_LOCATION);
3691 finish_decl (decl, loc, init, NULL_TREE, NULL_TREE);
3693 return decl;
3696 tree
3697 c_builtin_function (tree decl)
3699 tree type = TREE_TYPE (decl);
3700 tree id = DECL_NAME (decl);
3702 const char *name = IDENTIFIER_POINTER (id);
3703 C_DECL_BUILTIN_PROTOTYPE (decl) = prototype_p (type);
3705 /* Should never be called on a symbol with a preexisting meaning. */
3706 gcc_assert (!I_SYMBOL_BINDING (id));
3708 bind (id, decl, external_scope, /*invisible=*/true, /*nested=*/false,
3709 UNKNOWN_LOCATION);
3711 /* Builtins in the implementation namespace are made visible without
3712 needing to be explicitly declared. See push_file_scope. */
3713 if (name[0] == '_' && (name[1] == '_' || ISUPPER (name[1])))
3715 DECL_CHAIN (decl) = visible_builtins;
3716 visible_builtins = decl;
3719 return decl;
3722 tree
3723 c_builtin_function_ext_scope (tree decl)
3725 tree type = TREE_TYPE (decl);
3726 tree id = DECL_NAME (decl);
3728 const char *name = IDENTIFIER_POINTER (id);
3729 C_DECL_BUILTIN_PROTOTYPE (decl) = prototype_p (type);
3731 if (external_scope)
3732 bind (id, decl, external_scope, /*invisible=*/false, /*nested=*/false,
3733 UNKNOWN_LOCATION);
3735 /* Builtins in the implementation namespace are made visible without
3736 needing to be explicitly declared. See push_file_scope. */
3737 if (name[0] == '_' && (name[1] == '_' || ISUPPER (name[1])))
3739 DECL_CHAIN (decl) = visible_builtins;
3740 visible_builtins = decl;
3743 return decl;
3746 /* Called when a declaration is seen that contains no names to declare.
3747 If its type is a reference to a structure, union or enum inherited
3748 from a containing scope, shadow that tag name for the current scope
3749 with a forward reference.
3750 If its type defines a new named structure or union
3751 or defines an enum, it is valid but we need not do anything here.
3752 Otherwise, it is an error. */
3754 void
3755 shadow_tag (const struct c_declspecs *declspecs)
3757 shadow_tag_warned (declspecs, 0);
3760 /* WARNED is 1 if we have done a pedwarn, 2 if we have done a warning,
3761 but no pedwarn. */
3762 void
3763 shadow_tag_warned (const struct c_declspecs *declspecs, int warned)
3765 bool found_tag = false;
3767 if (declspecs->type && !declspecs->default_int_p && !declspecs->typedef_p)
3769 tree value = declspecs->type;
3770 enum tree_code code = TREE_CODE (value);
3772 if (code == RECORD_TYPE || code == UNION_TYPE || code == ENUMERAL_TYPE)
3773 /* Used to test also that TYPE_SIZE (value) != 0.
3774 That caused warning for `struct foo;' at top level in the file. */
3776 tree name = TYPE_NAME (value);
3777 tree t;
3779 found_tag = true;
3781 if (declspecs->restrict_p)
3783 error ("invalid use of %<restrict%>");
3784 warned = 1;
3787 if (name == 0)
3789 if (warned != 1 && code != ENUMERAL_TYPE)
3790 /* Empty unnamed enum OK */
3792 pedwarn (input_location, 0,
3793 "unnamed struct/union that defines no instances");
3794 warned = 1;
3797 else if (declspecs->typespec_kind != ctsk_tagdef
3798 && declspecs->typespec_kind != ctsk_tagfirstref
3799 && declspecs->storage_class != csc_none)
3801 if (warned != 1)
3802 pedwarn (input_location, 0,
3803 "empty declaration with storage class specifier "
3804 "does not redeclare tag");
3805 warned = 1;
3806 pending_xref_error ();
3808 else if (declspecs->typespec_kind != ctsk_tagdef
3809 && declspecs->typespec_kind != ctsk_tagfirstref
3810 && (declspecs->const_p
3811 || declspecs->volatile_p
3812 || declspecs->atomic_p
3813 || declspecs->restrict_p
3814 || declspecs->address_space))
3816 if (warned != 1)
3817 pedwarn (input_location, 0,
3818 "empty declaration with type qualifier "
3819 "does not redeclare tag");
3820 warned = 1;
3821 pending_xref_error ();
3823 else if (declspecs->typespec_kind != ctsk_tagdef
3824 && declspecs->typespec_kind != ctsk_tagfirstref
3825 && declspecs->alignas_p)
3827 if (warned != 1)
3828 pedwarn (input_location, 0,
3829 "empty declaration with %<_Alignas%> "
3830 "does not redeclare tag");
3831 warned = 1;
3832 pending_xref_error ();
3834 else
3836 pending_invalid_xref = 0;
3837 t = lookup_tag (code, name, 1, NULL);
3839 if (t == 0)
3841 t = make_node (code);
3842 pushtag (input_location, name, t);
3846 else
3848 if (warned != 1 && !in_system_header_at (input_location))
3850 pedwarn (input_location, 0,
3851 "useless type name in empty declaration");
3852 warned = 1;
3856 else if (warned != 1 && !in_system_header_at (input_location)
3857 && declspecs->typedef_p)
3859 pedwarn (input_location, 0, "useless type name in empty declaration");
3860 warned = 1;
3863 pending_invalid_xref = 0;
3865 if (declspecs->inline_p)
3867 error ("%<inline%> in empty declaration");
3868 warned = 1;
3871 if (declspecs->noreturn_p)
3873 error ("%<_Noreturn%> in empty declaration");
3874 warned = 1;
3877 if (current_scope == file_scope && declspecs->storage_class == csc_auto)
3879 error ("%<auto%> in file-scope empty declaration");
3880 warned = 1;
3883 if (current_scope == file_scope && declspecs->storage_class == csc_register)
3885 error ("%<register%> in file-scope empty declaration");
3886 warned = 1;
3889 if (!warned && !in_system_header_at (input_location)
3890 && declspecs->storage_class != csc_none)
3892 warning (0, "useless storage class specifier in empty declaration");
3893 warned = 2;
3896 if (!warned && !in_system_header_at (input_location) && declspecs->thread_p)
3898 warning (0, "useless %qs in empty declaration",
3899 declspecs->thread_gnu_p ? "__thread" : "_Thread_local");
3900 warned = 2;
3903 if (!warned
3904 && !in_system_header_at (input_location)
3905 && (declspecs->const_p
3906 || declspecs->volatile_p
3907 || declspecs->atomic_p
3908 || declspecs->restrict_p
3909 || declspecs->address_space))
3911 warning (0, "useless type qualifier in empty declaration");
3912 warned = 2;
3915 if (!warned && !in_system_header_at (input_location)
3916 && declspecs->alignas_p)
3918 warning (0, "useless %<_Alignas%> in empty declaration");
3919 warned = 2;
3922 if (warned != 1)
3924 if (!found_tag)
3925 pedwarn (input_location, 0, "empty declaration");
3930 /* Return the qualifiers from SPECS as a bitwise OR of TYPE_QUAL_*
3931 bits. SPECS represents declaration specifiers that the grammar
3932 only permits to contain type qualifiers and attributes. */
3935 quals_from_declspecs (const struct c_declspecs *specs)
3937 int quals = ((specs->const_p ? TYPE_QUAL_CONST : 0)
3938 | (specs->volatile_p ? TYPE_QUAL_VOLATILE : 0)
3939 | (specs->restrict_p ? TYPE_QUAL_RESTRICT : 0)
3940 | (specs->atomic_p ? TYPE_QUAL_ATOMIC : 0)
3941 | (ENCODE_QUAL_ADDR_SPACE (specs->address_space)));
3942 gcc_assert (!specs->type
3943 && !specs->decl_attr
3944 && specs->typespec_word == cts_none
3945 && specs->storage_class == csc_none
3946 && !specs->typedef_p
3947 && !specs->explicit_signed_p
3948 && !specs->deprecated_p
3949 && !specs->long_p
3950 && !specs->long_long_p
3951 && !specs->short_p
3952 && !specs->signed_p
3953 && !specs->unsigned_p
3954 && !specs->complex_p
3955 && !specs->inline_p
3956 && !specs->noreturn_p
3957 && !specs->thread_p);
3958 return quals;
3961 /* Construct an array declarator. LOC is the location of the
3962 beginning of the array (usually the opening brace). EXPR is the
3963 expression inside [], or NULL_TREE. QUALS are the type qualifiers
3964 inside the [] (to be applied to the pointer to which a parameter
3965 array is converted). STATIC_P is true if "static" is inside the
3966 [], false otherwise. VLA_UNSPEC_P is true if the array is [*], a
3967 VLA of unspecified length which is nevertheless a complete type,
3968 false otherwise. The field for the contained declarator is left to
3969 be filled in by set_array_declarator_inner. */
3971 struct c_declarator *
3972 build_array_declarator (location_t loc,
3973 tree expr, struct c_declspecs *quals, bool static_p,
3974 bool vla_unspec_p)
3976 struct c_declarator *declarator = XOBNEW (&parser_obstack,
3977 struct c_declarator);
3978 declarator->id_loc = loc;
3979 declarator->kind = cdk_array;
3980 declarator->declarator = 0;
3981 declarator->u.array.dimen = expr;
3982 if (quals)
3984 declarator->u.array.attrs = quals->attrs;
3985 declarator->u.array.quals = quals_from_declspecs (quals);
3987 else
3989 declarator->u.array.attrs = NULL_TREE;
3990 declarator->u.array.quals = 0;
3992 declarator->u.array.static_p = static_p;
3993 declarator->u.array.vla_unspec_p = vla_unspec_p;
3994 if (!flag_isoc99)
3996 if (static_p || quals != NULL)
3997 pedwarn (loc, OPT_Wpedantic,
3998 "ISO C90 does not support %<static%> or type "
3999 "qualifiers in parameter array declarators");
4000 if (vla_unspec_p)
4001 pedwarn (loc, OPT_Wpedantic,
4002 "ISO C90 does not support %<[*]%> array declarators");
4004 if (vla_unspec_p)
4006 if (!current_scope->parm_flag)
4008 /* C99 6.7.5.2p4 */
4009 error_at (loc, "%<[*]%> not allowed in other than "
4010 "function prototype scope");
4011 declarator->u.array.vla_unspec_p = false;
4012 return NULL;
4014 current_scope->had_vla_unspec = true;
4016 return declarator;
4019 /* Set the contained declarator of an array declarator. DECL is the
4020 declarator, as constructed by build_array_declarator; INNER is what
4021 appears on the left of the []. */
4023 struct c_declarator *
4024 set_array_declarator_inner (struct c_declarator *decl,
4025 struct c_declarator *inner)
4027 decl->declarator = inner;
4028 return decl;
4031 /* INIT is a constructor that forms DECL's initializer. If the final
4032 element initializes a flexible array field, add the size of that
4033 initializer to DECL's size. */
4035 static void
4036 add_flexible_array_elts_to_size (tree decl, tree init)
4038 tree elt, type;
4040 if (vec_safe_is_empty (CONSTRUCTOR_ELTS (init)))
4041 return;
4043 elt = CONSTRUCTOR_ELTS (init)->last ().value;
4044 type = TREE_TYPE (elt);
4045 if (TREE_CODE (type) == ARRAY_TYPE
4046 && TYPE_SIZE (type) == NULL_TREE
4047 && TYPE_DOMAIN (type) != NULL_TREE
4048 && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL_TREE)
4050 complete_array_type (&type, elt, false);
4051 DECL_SIZE (decl)
4052 = size_binop (PLUS_EXPR, DECL_SIZE (decl), TYPE_SIZE (type));
4053 DECL_SIZE_UNIT (decl)
4054 = size_binop (PLUS_EXPR, DECL_SIZE_UNIT (decl), TYPE_SIZE_UNIT (type));
4058 /* Decode a "typename", such as "int **", returning a ..._TYPE node.
4059 Set *EXPR, if EXPR not NULL, to any expression to be evaluated
4060 before the type name, and set *EXPR_CONST_OPERANDS, if
4061 EXPR_CONST_OPERANDS not NULL, to indicate whether the type name may
4062 appear in a constant expression. */
4064 tree
4065 groktypename (struct c_type_name *type_name, tree *expr,
4066 bool *expr_const_operands)
4068 tree type;
4069 tree attrs = type_name->specs->attrs;
4071 type_name->specs->attrs = NULL_TREE;
4073 type = grokdeclarator (type_name->declarator, type_name->specs, TYPENAME,
4074 false, NULL, &attrs, expr, expr_const_operands,
4075 DEPRECATED_NORMAL);
4077 /* Apply attributes. */
4078 decl_attributes (&type, attrs, 0);
4080 return type;
4083 /* Wrapper for decl_attributes that adds some implicit attributes
4084 to VAR_DECLs or FUNCTION_DECLs. */
4086 static tree
4087 c_decl_attributes (tree *node, tree attributes, int flags)
4089 /* Add implicit "omp declare target" attribute if requested. */
4090 if (current_omp_declare_target_attribute
4091 && ((TREE_CODE (*node) == VAR_DECL && TREE_STATIC (*node))
4092 || TREE_CODE (*node) == FUNCTION_DECL))
4094 if (TREE_CODE (*node) == VAR_DECL
4095 && ((DECL_CONTEXT (*node)
4096 && TREE_CODE (DECL_CONTEXT (*node)) == FUNCTION_DECL)
4097 || (current_function_decl && !DECL_EXTERNAL (*node))))
4098 error ("%q+D in block scope inside of declare target directive",
4099 *node);
4100 else if (TREE_CODE (*node) == VAR_DECL
4101 && !lang_hooks.types.omp_mappable_type (TREE_TYPE (*node)))
4102 error ("%q+D in declare target directive does not have mappable type",
4103 *node);
4104 else
4105 attributes = tree_cons (get_identifier ("omp declare target"),
4106 NULL_TREE, attributes);
4108 return decl_attributes (node, attributes, flags);
4112 /* Decode a declarator in an ordinary declaration or data definition.
4113 This is called as soon as the type information and variable name
4114 have been parsed, before parsing the initializer if any.
4115 Here we create the ..._DECL node, fill in its type,
4116 and put it on the list of decls for the current context.
4117 The ..._DECL node is returned as the value.
4119 Exception: for arrays where the length is not specified,
4120 the type is left null, to be filled in by `finish_decl'.
4122 Function definitions do not come here; they go to start_function
4123 instead. However, external and forward declarations of functions
4124 do go through here. Structure field declarations are done by
4125 grokfield and not through here. */
4127 tree
4128 start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs,
4129 bool initialized, tree attributes)
4131 tree decl;
4132 tree tem;
4133 tree expr = NULL_TREE;
4134 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
4136 /* An object declared as __attribute__((deprecated)) suppresses
4137 warnings of uses of other deprecated items. */
4138 if (lookup_attribute ("deprecated", attributes))
4139 deprecated_state = DEPRECATED_SUPPRESS;
4141 decl = grokdeclarator (declarator, declspecs,
4142 NORMAL, initialized, NULL, &attributes, &expr, NULL,
4143 deprecated_state);
4144 if (!decl)
4145 return 0;
4147 if (expr)
4148 add_stmt (fold_convert (void_type_node, expr));
4150 if (TREE_CODE (decl) != FUNCTION_DECL && MAIN_NAME_P (DECL_NAME (decl)))
4151 warning (OPT_Wmain, "%q+D is usually a function", decl);
4153 if (initialized)
4154 /* Is it valid for this decl to have an initializer at all?
4155 If not, set INITIALIZED to zero, which will indirectly
4156 tell 'finish_decl' to ignore the initializer once it is parsed. */
4157 switch (TREE_CODE (decl))
4159 case TYPE_DECL:
4160 error ("typedef %qD is initialized (use __typeof__ instead)", decl);
4161 initialized = 0;
4162 break;
4164 case FUNCTION_DECL:
4165 error ("function %qD is initialized like a variable", decl);
4166 initialized = 0;
4167 break;
4169 case PARM_DECL:
4170 /* DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. */
4171 error ("parameter %qD is initialized", decl);
4172 initialized = 0;
4173 break;
4175 default:
4176 /* Don't allow initializations for incomplete types except for
4177 arrays which might be completed by the initialization. */
4179 /* This can happen if the array size is an undefined macro.
4180 We already gave a warning, so we don't need another one. */
4181 if (TREE_TYPE (decl) == error_mark_node)
4182 initialized = 0;
4183 else if (COMPLETE_TYPE_P (TREE_TYPE (decl)))
4185 /* A complete type is ok if size is fixed. */
4187 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (decl))) != INTEGER_CST
4188 || C_DECL_VARIABLE_SIZE (decl))
4190 error ("variable-sized object may not be initialized");
4191 initialized = 0;
4194 else if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE)
4196 error ("variable %qD has initializer but incomplete type", decl);
4197 initialized = 0;
4199 else if (C_DECL_VARIABLE_SIZE (decl))
4201 /* Although C99 is unclear about whether incomplete arrays
4202 of VLAs themselves count as VLAs, it does not make
4203 sense to permit them to be initialized given that
4204 ordinary VLAs may not be initialized. */
4205 error ("variable-sized object may not be initialized");
4206 initialized = 0;
4210 if (initialized)
4212 if (current_scope == file_scope)
4213 TREE_STATIC (decl) = 1;
4215 /* Tell 'pushdecl' this is an initialized decl
4216 even though we don't yet have the initializer expression.
4217 Also tell 'finish_decl' it may store the real initializer. */
4218 DECL_INITIAL (decl) = error_mark_node;
4221 /* If this is a function declaration, write a record describing it to the
4222 prototypes file (if requested). */
4224 if (TREE_CODE (decl) == FUNCTION_DECL)
4225 gen_aux_info_record (decl, 0, 0, prototype_p (TREE_TYPE (decl)));
4227 /* ANSI specifies that a tentative definition which is not merged with
4228 a non-tentative definition behaves exactly like a definition with an
4229 initializer equal to zero. (Section 3.7.2)
4231 -fno-common gives strict ANSI behavior, though this tends to break
4232 a large body of code that grew up without this rule.
4234 Thread-local variables are never common, since there's no entrenched
4235 body of code to break, and it allows more efficient variable references
4236 in the presence of dynamic linking. */
4238 if (TREE_CODE (decl) == VAR_DECL
4239 && !initialized
4240 && TREE_PUBLIC (decl)
4241 && !DECL_THREAD_LOCAL_P (decl)
4242 && !flag_no_common)
4243 DECL_COMMON (decl) = 1;
4245 /* Set attributes here so if duplicate decl, will have proper attributes. */
4246 c_decl_attributes (&decl, attributes, 0);
4248 /* Handle gnu_inline attribute. */
4249 if (declspecs->inline_p
4250 && !flag_gnu89_inline
4251 && TREE_CODE (decl) == FUNCTION_DECL
4252 && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl))
4253 || current_function_decl))
4255 if (declspecs->storage_class == csc_auto && current_scope != file_scope)
4257 else if (declspecs->storage_class != csc_static)
4258 DECL_EXTERNAL (decl) = !DECL_EXTERNAL (decl);
4261 if (TREE_CODE (decl) == FUNCTION_DECL
4262 && targetm.calls.promote_prototypes (TREE_TYPE (decl)))
4264 struct c_declarator *ce = declarator;
4266 if (ce->kind == cdk_pointer)
4267 ce = declarator->declarator;
4268 if (ce->kind == cdk_function)
4270 tree args = ce->u.arg_info->parms;
4271 for (; args; args = DECL_CHAIN (args))
4273 tree type = TREE_TYPE (args);
4274 if (type && INTEGRAL_TYPE_P (type)
4275 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
4276 DECL_ARG_TYPE (args) = c_type_promotes_to (type);
4281 if (TREE_CODE (decl) == FUNCTION_DECL
4282 && DECL_DECLARED_INLINE_P (decl)
4283 && DECL_UNINLINABLE (decl)
4284 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4285 warning (OPT_Wattributes, "inline function %q+D given attribute noinline",
4286 decl);
4288 /* C99 6.7.4p3: An inline definition of a function with external
4289 linkage shall not contain a definition of a modifiable object
4290 with static storage duration... */
4291 if (TREE_CODE (decl) == VAR_DECL
4292 && current_scope != file_scope
4293 && TREE_STATIC (decl)
4294 && !TREE_READONLY (decl)
4295 && DECL_DECLARED_INLINE_P (current_function_decl)
4296 && DECL_EXTERNAL (current_function_decl))
4297 record_inline_static (input_location, current_function_decl,
4298 decl, csi_modifiable);
4300 if (c_dialect_objc ()
4301 && (TREE_CODE (decl) == VAR_DECL
4302 || TREE_CODE (decl) == FUNCTION_DECL))
4303 objc_check_global_decl (decl);
4305 /* Add this decl to the current scope.
4306 TEM may equal DECL or it may be a previous decl of the same name. */
4307 tem = pushdecl (decl);
4309 if (initialized && DECL_EXTERNAL (tem))
4311 DECL_EXTERNAL (tem) = 0;
4312 TREE_STATIC (tem) = 1;
4315 return tem;
4318 /* Subroutine of finish_decl. TYPE is the type of an uninitialized object
4319 DECL or the non-array element type if DECL is an uninitialized array.
4320 If that type has a const member, diagnose this. */
4322 static void
4323 diagnose_uninitialized_cst_member (tree decl, tree type)
4325 tree field;
4326 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
4328 tree field_type;
4329 if (TREE_CODE (field) != FIELD_DECL)
4330 continue;
4331 field_type = strip_array_types (TREE_TYPE (field));
4333 if (TYPE_QUALS (field_type) & TYPE_QUAL_CONST)
4335 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wc___compat,
4336 "uninitialized const member in %qT is invalid in C++",
4337 strip_array_types (TREE_TYPE (decl)));
4338 inform (DECL_SOURCE_LOCATION (field), "%qD should be initialized", field);
4341 if (TREE_CODE (field_type) == RECORD_TYPE
4342 || TREE_CODE (field_type) == UNION_TYPE)
4343 diagnose_uninitialized_cst_member (decl, field_type);
4347 /* Finish processing of a declaration;
4348 install its initial value.
4349 If ORIGTYPE is not NULL_TREE, it is the original type of INIT.
4350 If the length of an array type is not known before,
4351 it must be determined now, from the initial value, or it is an error.
4353 INIT_LOC is the location of the initial value. */
4355 void
4356 finish_decl (tree decl, location_t init_loc, tree init,
4357 tree origtype, tree asmspec_tree)
4359 tree type;
4360 bool was_incomplete = (DECL_SIZE (decl) == 0);
4361 const char *asmspec = 0;
4363 /* If a name was specified, get the string. */
4364 if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
4365 && DECL_FILE_SCOPE_P (decl))
4366 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
4367 if (asmspec_tree)
4368 asmspec = TREE_STRING_POINTER (asmspec_tree);
4370 if (TREE_CODE (decl) == VAR_DECL
4371 && TREE_STATIC (decl)
4372 && global_bindings_p ())
4373 /* So decl is a global variable. Record the types it uses
4374 so that we can decide later to emit debug info for them. */
4375 record_types_used_by_current_var_decl (decl);
4377 /* If `start_decl' didn't like having an initialization, ignore it now. */
4378 if (init != 0 && DECL_INITIAL (decl) == 0)
4379 init = 0;
4381 /* Don't crash if parm is initialized. */
4382 if (TREE_CODE (decl) == PARM_DECL)
4383 init = 0;
4385 if (init)
4386 store_init_value (init_loc, decl, init, origtype);
4388 if (c_dialect_objc () && (TREE_CODE (decl) == VAR_DECL
4389 || TREE_CODE (decl) == FUNCTION_DECL
4390 || TREE_CODE (decl) == FIELD_DECL))
4391 objc_check_decl (decl);
4393 type = TREE_TYPE (decl);
4395 /* Deduce size of array from initialization, if not already known. */
4396 if (TREE_CODE (type) == ARRAY_TYPE
4397 && TYPE_DOMAIN (type) == 0
4398 && TREE_CODE (decl) != TYPE_DECL)
4400 bool do_default
4401 = (TREE_STATIC (decl)
4402 /* Even if pedantic, an external linkage array
4403 may have incomplete type at first. */
4404 ? pedantic && !TREE_PUBLIC (decl)
4405 : !DECL_EXTERNAL (decl));
4406 int failure
4407 = complete_array_type (&TREE_TYPE (decl), DECL_INITIAL (decl),
4408 do_default);
4410 /* Get the completed type made by complete_array_type. */
4411 type = TREE_TYPE (decl);
4413 switch (failure)
4415 case 1:
4416 error ("initializer fails to determine size of %q+D", decl);
4417 break;
4419 case 2:
4420 if (do_default)
4421 error ("array size missing in %q+D", decl);
4422 /* If a `static' var's size isn't known,
4423 make it extern as well as static, so it does not get
4424 allocated.
4425 If it is not `static', then do not mark extern;
4426 finish_incomplete_decl will give it a default size
4427 and it will get allocated. */
4428 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4429 DECL_EXTERNAL (decl) = 1;
4430 break;
4432 case 3:
4433 error ("zero or negative size array %q+D", decl);
4434 break;
4436 case 0:
4437 /* For global variables, update the copy of the type that
4438 exists in the binding. */
4439 if (TREE_PUBLIC (decl))
4441 struct c_binding *b_ext = I_SYMBOL_BINDING (DECL_NAME (decl));
4442 while (b_ext && !B_IN_EXTERNAL_SCOPE (b_ext))
4443 b_ext = b_ext->shadowed;
4444 if (b_ext)
4446 if (b_ext->u.type && comptypes (b_ext->u.type, type))
4447 b_ext->u.type = composite_type (b_ext->u.type, type);
4448 else
4449 b_ext->u.type = type;
4452 break;
4454 default:
4455 gcc_unreachable ();
4458 if (DECL_INITIAL (decl))
4459 TREE_TYPE (DECL_INITIAL (decl)) = type;
4461 relayout_decl (decl);
4464 if (TREE_CODE (decl) == VAR_DECL)
4466 if (init && TREE_CODE (init) == CONSTRUCTOR)
4467 add_flexible_array_elts_to_size (decl, init);
4469 if (DECL_SIZE (decl) == 0 && TREE_TYPE (decl) != error_mark_node
4470 && COMPLETE_TYPE_P (TREE_TYPE (decl)))
4471 layout_decl (decl, 0);
4473 if (DECL_SIZE (decl) == 0
4474 /* Don't give an error if we already gave one earlier. */
4475 && TREE_TYPE (decl) != error_mark_node
4476 && (TREE_STATIC (decl)
4477 /* A static variable with an incomplete type
4478 is an error if it is initialized.
4479 Also if it is not file scope.
4480 Otherwise, let it through, but if it is not `extern'
4481 then it may cause an error message later. */
4482 ? (DECL_INITIAL (decl) != 0
4483 || !DECL_FILE_SCOPE_P (decl))
4484 /* An automatic variable with an incomplete type
4485 is an error. */
4486 : !DECL_EXTERNAL (decl)))
4488 error ("storage size of %q+D isn%'t known", decl);
4489 TREE_TYPE (decl) = error_mark_node;
4492 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4493 && DECL_SIZE (decl) != 0)
4495 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4496 constant_expression_warning (DECL_SIZE (decl));
4497 else
4499 error ("storage size of %q+D isn%'t constant", decl);
4500 TREE_TYPE (decl) = error_mark_node;
4504 if (TREE_USED (type))
4506 TREE_USED (decl) = 1;
4507 DECL_READ_P (decl) = 1;
4511 /* If this is a function and an assembler name is specified, reset DECL_RTL
4512 so we can give it its new name. Also, update builtin_decl if it
4513 was a normal built-in. */
4514 if (TREE_CODE (decl) == FUNCTION_DECL && asmspec)
4516 if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
4517 set_builtin_user_assembler_name (decl, asmspec);
4518 set_user_assembler_name (decl, asmspec);
4521 /* If #pragma weak was used, mark the decl weak now. */
4522 maybe_apply_pragma_weak (decl);
4524 /* Output the assembler code and/or RTL code for variables and functions,
4525 unless the type is an undefined structure or union.
4526 If not, it will get done when the type is completed. */
4528 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
4530 /* Determine the ELF visibility. */
4531 if (TREE_PUBLIC (decl))
4532 c_determine_visibility (decl);
4534 /* This is a no-op in c-lang.c or something real in objc-act.c. */
4535 if (c_dialect_objc ())
4536 objc_check_decl (decl);
4538 if (asmspec)
4540 /* If this is not a static variable, issue a warning.
4541 It doesn't make any sense to give an ASMSPEC for an
4542 ordinary, non-register local variable. Historically,
4543 GCC has accepted -- but ignored -- the ASMSPEC in
4544 this case. */
4545 if (!DECL_FILE_SCOPE_P (decl)
4546 && TREE_CODE (decl) == VAR_DECL
4547 && !C_DECL_REGISTER (decl)
4548 && !TREE_STATIC (decl))
4549 warning (0, "ignoring asm-specifier for non-static local "
4550 "variable %q+D", decl);
4551 else
4552 set_user_assembler_name (decl, asmspec);
4555 if (DECL_FILE_SCOPE_P (decl))
4557 if (DECL_INITIAL (decl) == NULL_TREE
4558 || DECL_INITIAL (decl) == error_mark_node)
4559 /* Don't output anything
4560 when a tentative file-scope definition is seen.
4561 But at end of compilation, do output code for them. */
4562 DECL_DEFER_OUTPUT (decl) = 1;
4564 /* In LIPO mode, create varpool_node early
4565 enough so that module id of the current source file being
4566 parsed is captured. */
4567 if (flag_dyn_ipa && TREE_CODE (decl) == VAR_DECL)
4568 varpool_node_for_decl (decl);
4570 if (asmspec && C_DECL_REGISTER (decl))
4571 DECL_HARD_REGISTER (decl) = 1;
4572 rest_of_decl_compilation (decl, true, 0);
4574 else
4576 /* LIPO: capture module id. */
4577 if (flag_dyn_ipa
4578 && TREE_CODE (decl) == VAR_DECL
4579 && TREE_STATIC (decl))
4580 varpool_node_for_decl (decl);
4582 /* In conjunction with an ASMSPEC, the `register'
4583 keyword indicates that we should place the variable
4584 in a particular register. */
4585 if (asmspec && C_DECL_REGISTER (decl))
4587 DECL_HARD_REGISTER (decl) = 1;
4588 /* This cannot be done for a structure with volatile
4589 fields, on which DECL_REGISTER will have been
4590 reset. */
4591 if (!DECL_REGISTER (decl))
4592 error ("cannot put object with volatile field into register");
4595 if (TREE_CODE (decl) != FUNCTION_DECL)
4597 /* If we're building a variable sized type, and we might be
4598 reachable other than via the top of the current binding
4599 level, then create a new BIND_EXPR so that we deallocate
4600 the object at the right time. */
4601 /* Note that DECL_SIZE can be null due to errors. */
4602 if (DECL_SIZE (decl)
4603 && !TREE_CONSTANT (DECL_SIZE (decl))
4604 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
4606 tree bind;
4607 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
4608 TREE_SIDE_EFFECTS (bind) = 1;
4609 add_stmt (bind);
4610 BIND_EXPR_BODY (bind) = push_stmt_list ();
4612 add_stmt (build_stmt (DECL_SOURCE_LOCATION (decl),
4613 DECL_EXPR, decl));
4618 if (!DECL_FILE_SCOPE_P (decl))
4620 /* Recompute the RTL of a local array now
4621 if it used to be an incomplete type. */
4622 if (was_incomplete
4623 && !TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
4625 /* If we used it already as memory, it must stay in memory. */
4626 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
4627 /* If it's still incomplete now, no init will save it. */
4628 if (DECL_SIZE (decl) == 0)
4629 DECL_INITIAL (decl) = 0;
4634 if (TREE_CODE (decl) == TYPE_DECL)
4636 if (!DECL_FILE_SCOPE_P (decl)
4637 && variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
4638 add_stmt (build_stmt (DECL_SOURCE_LOCATION (decl), DECL_EXPR, decl));
4640 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl), 0);
4643 /* Install a cleanup (aka destructor) if one was given. */
4644 if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
4646 tree attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
4647 if (attr)
4649 tree cleanup_id = TREE_VALUE (TREE_VALUE (attr));
4650 tree cleanup_decl = lookup_name (cleanup_id);
4651 tree cleanup;
4652 vec<tree, va_gc> *v;
4654 /* Build "cleanup(&decl)" for the destructor. */
4655 cleanup = build_unary_op (input_location, ADDR_EXPR, decl, 0);
4656 vec_alloc (v, 1);
4657 v->quick_push (cleanup);
4658 cleanup = c_build_function_call_vec (DECL_SOURCE_LOCATION (decl),
4659 vNULL, cleanup_decl, v, NULL);
4660 vec_free (v);
4662 /* Don't warn about decl unused; the cleanup uses it. */
4663 TREE_USED (decl) = 1;
4664 TREE_USED (cleanup_decl) = 1;
4665 DECL_READ_P (decl) = 1;
4667 push_cleanup (decl, cleanup, false);
4671 if (warn_cxx_compat
4672 && TREE_CODE (decl) == VAR_DECL
4673 && !DECL_EXTERNAL (decl)
4674 && DECL_INITIAL (decl) == NULL_TREE)
4676 type = strip_array_types (type);
4677 if (TREE_READONLY (decl))
4678 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wc___compat,
4679 "uninitialized const %qD is invalid in C++", decl);
4680 else if ((TREE_CODE (type) == RECORD_TYPE
4681 || TREE_CODE (type) == UNION_TYPE)
4682 && C_TYPE_FIELDS_READONLY (type))
4683 diagnose_uninitialized_cst_member (decl, type);
4686 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
4689 /* Given a parsed parameter declaration, decode it into a PARM_DECL.
4690 EXPR is NULL or a pointer to an expression that needs to be
4691 evaluated for the side effects of array size expressions in the
4692 parameters. */
4694 tree
4695 grokparm (const struct c_parm *parm, tree *expr)
4697 tree attrs = parm->attrs;
4698 tree decl = grokdeclarator (parm->declarator, parm->specs, PARM, false,
4699 NULL, &attrs, expr, NULL, DEPRECATED_NORMAL);
4701 decl_attributes (&decl, attrs, 0);
4703 return decl;
4706 /* Given a parsed parameter declaration, decode it into a PARM_DECL
4707 and push that on the current scope. EXPR is a pointer to an
4708 expression that needs to be evaluated for the side effects of array
4709 size expressions in the parameters. */
4711 void
4712 push_parm_decl (const struct c_parm *parm, tree *expr)
4714 tree attrs = parm->attrs;
4715 tree decl;
4717 decl = grokdeclarator (parm->declarator, parm->specs, PARM, false, NULL,
4718 &attrs, expr, NULL, DEPRECATED_NORMAL);
4719 decl_attributes (&decl, attrs, 0);
4721 decl = pushdecl (decl);
4723 finish_decl (decl, input_location, NULL_TREE, NULL_TREE, NULL_TREE);
4726 /* Mark all the parameter declarations to date as forward decls.
4727 Also diagnose use of this extension. */
4729 void
4730 mark_forward_parm_decls (void)
4732 struct c_binding *b;
4734 if (pedantic && !current_scope->warned_forward_parm_decls)
4736 pedwarn (input_location, OPT_Wpedantic,
4737 "ISO C forbids forward parameter declarations");
4738 current_scope->warned_forward_parm_decls = true;
4741 for (b = current_scope->bindings; b; b = b->prev)
4742 if (TREE_CODE (b->decl) == PARM_DECL)
4743 TREE_ASM_WRITTEN (b->decl) = 1;
4746 /* Build a COMPOUND_LITERAL_EXPR. TYPE is the type given in the compound
4747 literal, which may be an incomplete array type completed by the
4748 initializer; INIT is a CONSTRUCTOR at LOC that initializes the compound
4749 literal. NON_CONST is true if the initializers contain something
4750 that cannot occur in a constant expression. */
4752 tree
4753 build_compound_literal (location_t loc, tree type, tree init, bool non_const)
4755 /* We do not use start_decl here because we have a type, not a declarator;
4756 and do not use finish_decl because the decl should be stored inside
4757 the COMPOUND_LITERAL_EXPR rather than added elsewhere as a DECL_EXPR. */
4758 tree decl;
4759 tree complit;
4760 tree stmt;
4762 if (type == error_mark_node
4763 || init == error_mark_node)
4764 return error_mark_node;
4766 decl = build_decl (loc, VAR_DECL, NULL_TREE, type);
4767 DECL_EXTERNAL (decl) = 0;
4768 TREE_PUBLIC (decl) = 0;
4769 TREE_STATIC (decl) = (current_scope == file_scope);
4770 DECL_CONTEXT (decl) = current_function_decl;
4771 TREE_USED (decl) = 1;
4772 DECL_READ_P (decl) = 1;
4773 TREE_TYPE (decl) = type;
4774 TREE_READONLY (decl) = (TYPE_READONLY (type)
4775 || (TREE_CODE (type) == ARRAY_TYPE
4776 && TYPE_READONLY (TREE_TYPE (type))));
4777 store_init_value (loc, decl, init, NULL_TREE);
4779 if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
4781 int failure = complete_array_type (&TREE_TYPE (decl),
4782 DECL_INITIAL (decl), true);
4783 /* If complete_array_type returns 3, it means that the
4784 initial value of the compound literal is empty. Allow it. */
4785 gcc_assert (failure == 0 || failure == 3);
4787 type = TREE_TYPE (decl);
4788 TREE_TYPE (DECL_INITIAL (decl)) = type;
4791 if (type == error_mark_node || !COMPLETE_TYPE_P (type))
4793 c_incomplete_type_error (NULL_TREE, type);
4794 return error_mark_node;
4797 stmt = build_stmt (DECL_SOURCE_LOCATION (decl), DECL_EXPR, decl);
4798 complit = build1 (COMPOUND_LITERAL_EXPR, type, stmt);
4799 TREE_SIDE_EFFECTS (complit) = 1;
4801 layout_decl (decl, 0);
4803 if (TREE_STATIC (decl))
4805 /* This decl needs a name for the assembler output. */
4806 set_compound_literal_name (decl);
4807 DECL_DEFER_OUTPUT (decl) = 1;
4808 DECL_COMDAT (decl) = 1;
4809 DECL_ARTIFICIAL (decl) = 1;
4810 DECL_IGNORED_P (decl) = 1;
4811 pushdecl (decl);
4812 rest_of_decl_compilation (decl, 1, 0);
4815 if (non_const)
4817 complit = build2 (C_MAYBE_CONST_EXPR, type, NULL, complit);
4818 C_MAYBE_CONST_EXPR_NON_CONST (complit) = 1;
4821 return complit;
4824 /* Check the type of a compound literal. Here we just check that it
4825 is valid for C++. */
4827 void
4828 check_compound_literal_type (location_t loc, struct c_type_name *type_name)
4830 if (warn_cxx_compat
4831 && (type_name->specs->typespec_kind == ctsk_tagdef
4832 || type_name->specs->typespec_kind == ctsk_tagfirstref))
4833 warning_at (loc, OPT_Wc___compat,
4834 "defining a type in a compound literal is invalid in C++");
4837 /* Determine whether TYPE is a structure with a flexible array member,
4838 or a union containing such a structure (possibly recursively). */
4840 static bool
4841 flexible_array_type_p (tree type)
4843 tree x;
4844 switch (TREE_CODE (type))
4846 case RECORD_TYPE:
4847 x = TYPE_FIELDS (type);
4848 if (x == NULL_TREE)
4849 return false;
4850 while (DECL_CHAIN (x) != NULL_TREE)
4851 x = DECL_CHAIN (x);
4852 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
4853 && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
4854 && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
4855 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
4856 return true;
4857 return false;
4858 case UNION_TYPE:
4859 for (x = TYPE_FIELDS (type); x != NULL_TREE; x = DECL_CHAIN (x))
4861 if (flexible_array_type_p (TREE_TYPE (x)))
4862 return true;
4864 return false;
4865 default:
4866 return false;
4870 /* Performs sanity checks on the TYPE and WIDTH of the bit-field NAME,
4871 replacing with appropriate values if they are invalid. */
4872 static void
4873 check_bitfield_type_and_width (tree *type, tree *width, tree orig_name)
4875 tree type_mv;
4876 unsigned int max_width;
4877 unsigned HOST_WIDE_INT w;
4878 const char *name = (orig_name
4879 ? identifier_to_locale (IDENTIFIER_POINTER (orig_name))
4880 : _("<anonymous>"));
4882 /* Detect and ignore out of range field width and process valid
4883 field widths. */
4884 if (!INTEGRAL_TYPE_P (TREE_TYPE (*width)))
4886 error ("bit-field %qs width not an integer constant", name);
4887 *width = integer_one_node;
4889 else
4891 if (TREE_CODE (*width) != INTEGER_CST)
4893 *width = c_fully_fold (*width, false, NULL);
4894 if (TREE_CODE (*width) == INTEGER_CST)
4895 pedwarn (input_location, OPT_Wpedantic,
4896 "bit-field %qs width not an integer constant expression",
4897 name);
4899 if (TREE_CODE (*width) != INTEGER_CST)
4901 error ("bit-field %qs width not an integer constant", name);
4902 *width = integer_one_node;
4904 constant_expression_warning (*width);
4905 if (tree_int_cst_sgn (*width) < 0)
4907 error ("negative width in bit-field %qs", name);
4908 *width = integer_one_node;
4910 else if (integer_zerop (*width) && orig_name)
4912 error ("zero width for bit-field %qs", name);
4913 *width = integer_one_node;
4917 /* Detect invalid bit-field type. */
4918 if (TREE_CODE (*type) != INTEGER_TYPE
4919 && TREE_CODE (*type) != BOOLEAN_TYPE
4920 && TREE_CODE (*type) != ENUMERAL_TYPE)
4922 error ("bit-field %qs has invalid type", name);
4923 *type = unsigned_type_node;
4926 type_mv = TYPE_MAIN_VARIANT (*type);
4927 if (!in_system_header_at (input_location)
4928 && type_mv != integer_type_node
4929 && type_mv != unsigned_type_node
4930 && type_mv != boolean_type_node
4931 && !flag_isoc99)
4932 pedwarn (input_location, OPT_Wpedantic,
4933 "type of bit-field %qs is a GCC extension", name);
4935 max_width = TYPE_PRECISION (*type);
4937 if (0 < compare_tree_int (*width, max_width))
4939 error ("width of %qs exceeds its type", name);
4940 w = max_width;
4941 *width = build_int_cst (integer_type_node, w);
4943 else
4944 w = tree_to_uhwi (*width);
4946 if (TREE_CODE (*type) == ENUMERAL_TYPE)
4948 struct lang_type *lt = TYPE_LANG_SPECIFIC (*type);
4949 if (!lt
4950 || w < tree_int_cst_min_precision (lt->enum_min, TYPE_UNSIGNED (*type))
4951 || w < tree_int_cst_min_precision (lt->enum_max, TYPE_UNSIGNED (*type)))
4952 warning (0, "%qs is narrower than values of its type", name);
4958 /* Print warning about variable length array if necessary. */
4960 static void
4961 warn_variable_length_array (tree name, tree size)
4963 int const_size = TREE_CONSTANT (size);
4965 if (!flag_isoc99 && pedantic && warn_vla != 0)
4967 if (const_size)
4969 if (name)
4970 pedwarn (input_location, OPT_Wvla,
4971 "ISO C90 forbids array %qE whose size "
4972 "can%'t be evaluated",
4973 name);
4974 else
4975 pedwarn (input_location, OPT_Wvla, "ISO C90 forbids array whose size "
4976 "can%'t be evaluated");
4978 else
4980 if (name)
4981 pedwarn (input_location, OPT_Wvla,
4982 "ISO C90 forbids variable length array %qE",
4983 name);
4984 else
4985 pedwarn (input_location, OPT_Wvla, "ISO C90 forbids variable length array");
4988 else if (warn_vla > 0)
4990 if (const_size)
4992 if (name)
4993 warning (OPT_Wvla,
4994 "the size of array %qE can"
4995 "%'t be evaluated", name);
4996 else
4997 warning (OPT_Wvla,
4998 "the size of array can %'t be evaluated");
5000 else
5002 if (name)
5003 warning (OPT_Wvla,
5004 "variable length array %qE is used",
5005 name);
5006 else
5007 warning (OPT_Wvla,
5008 "variable length array is used");
5013 /* Given declspecs and a declarator,
5014 determine the name and type of the object declared
5015 and construct a ..._DECL node for it.
5016 (In one case we can return a ..._TYPE node instead.
5017 For invalid input we sometimes return 0.)
5019 DECLSPECS is a c_declspecs structure for the declaration specifiers.
5021 DECL_CONTEXT says which syntactic context this declaration is in:
5022 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
5023 FUNCDEF for a function definition. Like NORMAL but a few different
5024 error messages in each case. Return value may be zero meaning
5025 this definition is too screwy to try to parse.
5026 PARM for a parameter declaration (either within a function prototype
5027 or before a function body). Make a PARM_DECL, or return void_type_node.
5028 TYPENAME if for a typename (in a cast or sizeof).
5029 Don't make a DECL node; just return the ..._TYPE node.
5030 FIELD for a struct or union field; make a FIELD_DECL.
5031 INITIALIZED is true if the decl has an initializer.
5032 WIDTH is non-NULL for bit-fields, and is a pointer to an INTEGER_CST node
5033 representing the width of the bit-field.
5034 DECL_ATTRS points to the list of attributes that should be added to this
5035 decl. Any nested attributes that belong on the decl itself will be
5036 added to this list.
5037 If EXPR is not NULL, any expressions that need to be evaluated as
5038 part of evaluating variably modified types will be stored in *EXPR.
5039 If EXPR_CONST_OPERANDS is not NULL, *EXPR_CONST_OPERANDS will be
5040 set to indicate whether operands in *EXPR can be used in constant
5041 expressions.
5042 DEPRECATED_STATE is a deprecated_states value indicating whether
5043 deprecation warnings should be suppressed.
5045 In the TYPENAME case, DECLARATOR is really an absolute declarator.
5046 It may also be so in the PARM case, for a prototype where the
5047 argument type is specified but not the name.
5049 This function is where the complicated C meanings of `static'
5050 and `extern' are interpreted. */
5052 static tree
5053 grokdeclarator (const struct c_declarator *declarator,
5054 struct c_declspecs *declspecs,
5055 enum decl_context decl_context, bool initialized, tree *width,
5056 tree *decl_attrs, tree *expr, bool *expr_const_operands,
5057 enum deprecated_states deprecated_state)
5059 tree type = declspecs->type;
5060 bool threadp = declspecs->thread_p;
5061 enum c_storage_class storage_class = declspecs->storage_class;
5062 int constp;
5063 int restrictp;
5064 int volatilep;
5065 int atomicp;
5066 int type_quals = TYPE_UNQUALIFIED;
5067 tree name = NULL_TREE;
5068 bool funcdef_flag = false;
5069 bool funcdef_syntax = false;
5070 bool size_varies = false;
5071 tree decl_attr = declspecs->decl_attr;
5072 int array_ptr_quals = TYPE_UNQUALIFIED;
5073 tree array_ptr_attrs = NULL_TREE;
5074 int array_parm_static = 0;
5075 bool array_parm_vla_unspec_p = false;
5076 tree returned_attrs = NULL_TREE;
5077 bool bitfield = width != NULL;
5078 tree element_type;
5079 struct c_arg_info *arg_info = 0;
5080 addr_space_t as1, as2, address_space;
5081 location_t loc = UNKNOWN_LOCATION;
5082 const char *errmsg;
5083 tree expr_dummy;
5084 bool expr_const_operands_dummy;
5085 enum c_declarator_kind first_non_attr_kind;
5086 unsigned int alignas_align = 0;
5088 if (TREE_CODE (type) == ERROR_MARK)
5089 return error_mark_node;
5090 if (expr == NULL)
5091 expr = &expr_dummy;
5092 if (expr_const_operands == NULL)
5093 expr_const_operands = &expr_const_operands_dummy;
5095 *expr = declspecs->expr;
5096 *expr_const_operands = declspecs->expr_const_operands;
5098 if (decl_context == FUNCDEF)
5099 funcdef_flag = true, decl_context = NORMAL;
5101 /* Look inside a declarator for the name being declared
5102 and get it as an IDENTIFIER_NODE, for an error message. */
5104 const struct c_declarator *decl = declarator;
5106 first_non_attr_kind = cdk_attrs;
5107 while (decl)
5108 switch (decl->kind)
5110 case cdk_array:
5111 loc = decl->id_loc;
5112 /* FALL THRU. */
5114 case cdk_function:
5115 case cdk_pointer:
5116 funcdef_syntax = (decl->kind == cdk_function);
5117 decl = decl->declarator;
5118 if (first_non_attr_kind == cdk_attrs)
5119 first_non_attr_kind = decl->kind;
5120 break;
5122 case cdk_attrs:
5123 decl = decl->declarator;
5124 break;
5126 case cdk_id:
5127 loc = decl->id_loc;
5128 if (decl->u.id)
5129 name = decl->u.id;
5130 if (first_non_attr_kind == cdk_attrs)
5131 first_non_attr_kind = decl->kind;
5132 decl = 0;
5133 break;
5135 default:
5136 gcc_unreachable ();
5138 if (name == 0)
5140 gcc_assert (decl_context == PARM
5141 || decl_context == TYPENAME
5142 || (decl_context == FIELD
5143 && declarator->kind == cdk_id));
5144 gcc_assert (!initialized);
5148 /* A function definition's declarator must have the form of
5149 a function declarator. */
5151 if (funcdef_flag && !funcdef_syntax)
5152 return 0;
5154 /* If this looks like a function definition, make it one,
5155 even if it occurs where parms are expected.
5156 Then store_parm_decls will reject it and not use it as a parm. */
5157 if (decl_context == NORMAL && !funcdef_flag && current_scope->parm_flag)
5158 decl_context = PARM;
5160 if (declspecs->deprecated_p && deprecated_state != DEPRECATED_SUPPRESS)
5161 warn_deprecated_use (declspecs->type, declspecs->decl_attr);
5163 if ((decl_context == NORMAL || decl_context == FIELD)
5164 && current_scope == file_scope
5165 && variably_modified_type_p (type, NULL_TREE))
5167 if (name)
5168 error_at (loc, "variably modified %qE at file scope", name);
5169 else
5170 error_at (loc, "variably modified field at file scope");
5171 type = integer_type_node;
5174 size_varies = C_TYPE_VARIABLE_SIZE (type) != 0;
5176 /* Diagnose defaulting to "int". */
5178 if (declspecs->default_int_p && !in_system_header_at (input_location))
5180 /* Issue a warning if this is an ISO C 99 program or if
5181 -Wreturn-type and this is a function, or if -Wimplicit;
5182 prefer the former warning since it is more explicit. */
5183 if ((warn_implicit_int || warn_return_type || flag_isoc99)
5184 && funcdef_flag)
5185 warn_about_return_type = 1;
5186 else
5188 if (name)
5189 pedwarn_c99 (loc, flag_isoc99 ? 0 : OPT_Wimplicit_int,
5190 "type defaults to %<int%> in declaration of %qE",
5191 name);
5192 else
5193 pedwarn_c99 (input_location, flag_isoc99 ? 0 : OPT_Wimplicit_int,
5194 "type defaults to %<int%> in type name");
5198 /* Adjust the type if a bit-field is being declared,
5199 -funsigned-bitfields applied and the type is not explicitly
5200 "signed". */
5201 if (bitfield && !flag_signed_bitfields && !declspecs->explicit_signed_p
5202 && TREE_CODE (type) == INTEGER_TYPE)
5203 type = unsigned_type_for (type);
5205 /* Figure out the type qualifiers for the declaration. There are
5206 two ways a declaration can become qualified. One is something
5207 like `const int i' where the `const' is explicit. Another is
5208 something like `typedef const int CI; CI i' where the type of the
5209 declaration contains the `const'. A third possibility is that
5210 there is a type qualifier on the element type of a typedefed
5211 array type, in which case we should extract that qualifier so
5212 that c_apply_type_quals_to_decl receives the full list of
5213 qualifiers to work with (C90 is not entirely clear about whether
5214 duplicate qualifiers should be diagnosed in this case, but it
5215 seems most appropriate to do so). */
5216 element_type = strip_array_types (type);
5217 constp = declspecs->const_p + TYPE_READONLY (element_type);
5218 restrictp = declspecs->restrict_p + TYPE_RESTRICT (element_type);
5219 volatilep = declspecs->volatile_p + TYPE_VOLATILE (element_type);
5220 atomicp = declspecs->atomic_p + TYPE_ATOMIC (element_type);
5221 as1 = declspecs->address_space;
5222 as2 = TYPE_ADDR_SPACE (element_type);
5223 address_space = ADDR_SPACE_GENERIC_P (as1)? as2 : as1;
5225 if (pedantic && !flag_isoc99)
5227 if (constp > 1)
5228 pedwarn (loc, OPT_Wpedantic, "duplicate %<const%>");
5229 if (restrictp > 1)
5230 pedwarn (loc, OPT_Wpedantic, "duplicate %<restrict%>");
5231 if (volatilep > 1)
5232 pedwarn (loc, OPT_Wpedantic, "duplicate %<volatile%>");
5233 if (atomicp > 1)
5234 pedwarn (loc, OPT_Wpedantic, "duplicate %<_Atomic%>");
5238 if (!ADDR_SPACE_GENERIC_P (as1) && !ADDR_SPACE_GENERIC_P (as2) && as1 != as2)
5239 error_at (loc, "conflicting named address spaces (%s vs %s)",
5240 c_addr_space_name (as1), c_addr_space_name (as2));
5242 if ((TREE_CODE (type) == ARRAY_TYPE
5243 || first_non_attr_kind == cdk_array)
5244 && TYPE_QUALS (element_type))
5245 type = TYPE_MAIN_VARIANT (type);
5246 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
5247 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
5248 | (volatilep ? TYPE_QUAL_VOLATILE : 0)
5249 | (atomicp ? TYPE_QUAL_ATOMIC : 0)
5250 | ENCODE_QUAL_ADDR_SPACE (address_space));
5252 /* Applying the _Atomic qualifier to an array type (through the use
5253 of typedefs or typeof) must be detected here. If the qualifier
5254 is introduced later, any appearance of applying it to an array is
5255 actually applying it to an element of that array. */
5256 if (atomicp && TREE_CODE (type) == ARRAY_TYPE)
5257 error_at (loc, "%<_Atomic%>-qualified array type");
5259 /* Warn about storage classes that are invalid for certain
5260 kinds of declarations (parameters, typenames, etc.). */
5262 if (funcdef_flag
5263 && (threadp
5264 || storage_class == csc_auto
5265 || storage_class == csc_register
5266 || storage_class == csc_typedef))
5268 if (storage_class == csc_auto)
5269 pedwarn (loc,
5270 (current_scope == file_scope) ? 0 : OPT_Wpedantic,
5271 "function definition declared %<auto%>");
5272 if (storage_class == csc_register)
5273 error_at (loc, "function definition declared %<register%>");
5274 if (storage_class == csc_typedef)
5275 error_at (loc, "function definition declared %<typedef%>");
5276 if (threadp)
5277 error_at (loc, "function definition declared %qs",
5278 declspecs->thread_gnu_p ? "__thread" : "_Thread_local");
5279 threadp = false;
5280 if (storage_class == csc_auto
5281 || storage_class == csc_register
5282 || storage_class == csc_typedef)
5283 storage_class = csc_none;
5285 else if (decl_context != NORMAL && (storage_class != csc_none || threadp))
5287 if (decl_context == PARM && storage_class == csc_register)
5289 else
5291 switch (decl_context)
5293 case FIELD:
5294 if (name)
5295 error_at (loc, "storage class specified for structure "
5296 "field %qE", name);
5297 else
5298 error_at (loc, "storage class specified for structure field");
5299 break;
5300 case PARM:
5301 if (name)
5302 error_at (loc, "storage class specified for parameter %qE",
5303 name);
5304 else
5305 error_at (loc, "storage class specified for unnamed parameter");
5306 break;
5307 default:
5308 error_at (loc, "storage class specified for typename");
5309 break;
5311 storage_class = csc_none;
5312 threadp = false;
5315 else if (storage_class == csc_extern
5316 && initialized
5317 && !funcdef_flag)
5319 /* 'extern' with initialization is invalid if not at file scope. */
5320 if (current_scope == file_scope)
5322 /* It is fine to have 'extern const' when compiling at C
5323 and C++ intersection. */
5324 if (!(warn_cxx_compat && constp))
5325 warning_at (loc, 0, "%qE initialized and declared %<extern%>",
5326 name);
5328 else
5329 error_at (loc, "%qE has both %<extern%> and initializer", name);
5331 else if (current_scope == file_scope)
5333 if (storage_class == csc_auto)
5334 error_at (loc, "file-scope declaration of %qE specifies %<auto%>",
5335 name);
5336 if (pedantic && storage_class == csc_register)
5337 pedwarn (input_location, OPT_Wpedantic,
5338 "file-scope declaration of %qE specifies %<register%>", name);
5340 else
5342 if (storage_class == csc_extern && funcdef_flag)
5343 error_at (loc, "nested function %qE declared %<extern%>", name);
5344 else if (threadp && storage_class == csc_none)
5346 error_at (loc, "function-scope %qE implicitly auto and declared "
5347 "%qs", name,
5348 declspecs->thread_gnu_p ? "__thread" : "_Thread_local");
5349 threadp = false;
5353 /* Now figure out the structure of the declarator proper.
5354 Descend through it, creating more complex types, until we reach
5355 the declared identifier (or NULL_TREE, in an absolute declarator).
5356 At each stage we maintain an unqualified version of the type
5357 together with any qualifiers that should be applied to it with
5358 c_build_qualified_type; this way, array types including
5359 multidimensional array types are first built up in unqualified
5360 form and then the qualified form is created with
5361 TYPE_MAIN_VARIANT pointing to the unqualified form. */
5363 while (declarator && declarator->kind != cdk_id)
5365 if (type == error_mark_node)
5367 declarator = declarator->declarator;
5368 continue;
5371 /* Each level of DECLARATOR is either a cdk_array (for ...[..]),
5372 a cdk_pointer (for *...),
5373 a cdk_function (for ...(...)),
5374 a cdk_attrs (for nested attributes),
5375 or a cdk_id (for the name being declared
5376 or the place in an absolute declarator
5377 where the name was omitted).
5378 For the last case, we have just exited the loop.
5380 At this point, TYPE is the type of elements of an array,
5381 or for a function to return, or for a pointer to point to.
5382 After this sequence of ifs, TYPE is the type of the
5383 array or function or pointer, and DECLARATOR has had its
5384 outermost layer removed. */
5386 if (array_ptr_quals != TYPE_UNQUALIFIED
5387 || array_ptr_attrs != NULL_TREE
5388 || array_parm_static)
5390 /* Only the innermost declarator (making a parameter be of
5391 array type which is converted to pointer type)
5392 may have static or type qualifiers. */
5393 error_at (loc, "static or type qualifiers in non-parameter array declarator");
5394 array_ptr_quals = TYPE_UNQUALIFIED;
5395 array_ptr_attrs = NULL_TREE;
5396 array_parm_static = 0;
5399 switch (declarator->kind)
5401 case cdk_attrs:
5403 /* A declarator with embedded attributes. */
5404 tree attrs = declarator->u.attrs;
5405 const struct c_declarator *inner_decl;
5406 int attr_flags = 0;
5407 declarator = declarator->declarator;
5408 inner_decl = declarator;
5409 while (inner_decl->kind == cdk_attrs)
5410 inner_decl = inner_decl->declarator;
5411 if (inner_decl->kind == cdk_id)
5412 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
5413 else if (inner_decl->kind == cdk_function)
5414 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
5415 else if (inner_decl->kind == cdk_array)
5416 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
5417 returned_attrs = decl_attributes (&type,
5418 chainon (returned_attrs, attrs),
5419 attr_flags);
5420 break;
5422 case cdk_array:
5424 tree itype = NULL_TREE;
5425 tree size = declarator->u.array.dimen;
5426 /* The index is a signed object `sizetype' bits wide. */
5427 tree index_type = c_common_signed_type (sizetype);
5429 array_ptr_quals = declarator->u.array.quals;
5430 array_ptr_attrs = declarator->u.array.attrs;
5431 array_parm_static = declarator->u.array.static_p;
5432 array_parm_vla_unspec_p = declarator->u.array.vla_unspec_p;
5434 declarator = declarator->declarator;
5436 /* Check for some types that there cannot be arrays of. */
5438 if (VOID_TYPE_P (type))
5440 if (name)
5441 error_at (loc, "declaration of %qE as array of voids", name);
5442 else
5443 error_at (loc, "declaration of type name as array of voids");
5444 type = error_mark_node;
5447 if (TREE_CODE (type) == FUNCTION_TYPE)
5449 if (name)
5450 error_at (loc, "declaration of %qE as array of functions",
5451 name);
5452 else
5453 error_at (loc, "declaration of type name as array of "
5454 "functions");
5455 type = error_mark_node;
5458 if (pedantic && !in_system_header_at (input_location)
5459 && flexible_array_type_p (type))
5460 pedwarn (loc, OPT_Wpedantic,
5461 "invalid use of structure with flexible array member");
5463 if (size == error_mark_node)
5464 type = error_mark_node;
5466 if (type == error_mark_node)
5467 continue;
5469 /* If size was specified, set ITYPE to a range-type for
5470 that size. Otherwise, ITYPE remains null. finish_decl
5471 may figure it out from an initial value. */
5473 if (size)
5475 bool size_maybe_const = true;
5476 bool size_int_const = (TREE_CODE (size) == INTEGER_CST
5477 && !TREE_OVERFLOW (size));
5478 bool this_size_varies = false;
5480 /* Strip NON_LVALUE_EXPRs since we aren't using as an
5481 lvalue. */
5482 STRIP_TYPE_NOPS (size);
5484 if (!INTEGRAL_TYPE_P (TREE_TYPE (size)))
5486 if (name)
5487 error_at (loc, "size of array %qE has non-integer type",
5488 name);
5489 else
5490 error_at (loc,
5491 "size of unnamed array has non-integer type");
5492 size = integer_one_node;
5495 size = c_fully_fold (size, false, &size_maybe_const);
5497 if (pedantic && size_maybe_const && integer_zerop (size))
5499 if (name)
5500 pedwarn (loc, OPT_Wpedantic,
5501 "ISO C forbids zero-size array %qE", name);
5502 else
5503 pedwarn (loc, OPT_Wpedantic,
5504 "ISO C forbids zero-size array");
5507 if (TREE_CODE (size) == INTEGER_CST && size_maybe_const)
5509 constant_expression_warning (size);
5510 if (tree_int_cst_sgn (size) < 0)
5512 if (name)
5513 error_at (loc, "size of array %qE is negative", name);
5514 else
5515 error_at (loc, "size of unnamed array is negative");
5516 size = integer_one_node;
5518 /* Handle a size folded to an integer constant but
5519 not an integer constant expression. */
5520 if (!size_int_const)
5522 /* If this is a file scope declaration of an
5523 ordinary identifier, this is invalid code;
5524 diagnosing it here and not subsequently
5525 treating the type as variable-length avoids
5526 more confusing diagnostics later. */
5527 if ((decl_context == NORMAL || decl_context == FIELD)
5528 && current_scope == file_scope)
5529 pedwarn (input_location, 0,
5530 "variably modified %qE at file scope",
5531 name);
5532 else
5533 this_size_varies = size_varies = true;
5534 warn_variable_length_array (name, size);
5537 else if ((decl_context == NORMAL || decl_context == FIELD)
5538 && current_scope == file_scope)
5540 error_at (loc, "variably modified %qE at file scope", name);
5541 size = integer_one_node;
5543 else
5545 /* Make sure the array size remains visibly
5546 nonconstant even if it is (eg) a const variable
5547 with known value. */
5548 this_size_varies = size_varies = true;
5549 warn_variable_length_array (name, size);
5550 if (flag_sanitize & SANITIZE_VLA
5551 && decl_context == NORMAL)
5553 /* Evaluate the array size only once. */
5554 size = c_save_expr (size);
5555 size = c_fully_fold (size, false, NULL);
5556 size = fold_build2 (COMPOUND_EXPR, TREE_TYPE (size),
5557 ubsan_instrument_vla (loc, size),
5558 size);
5562 if (integer_zerop (size) && !this_size_varies)
5564 /* A zero-length array cannot be represented with
5565 an unsigned index type, which is what we'll
5566 get with build_index_type. Create an
5567 open-ended range instead. */
5568 itype = build_range_type (sizetype, size, NULL_TREE);
5570 else
5572 /* Arrange for the SAVE_EXPR on the inside of the
5573 MINUS_EXPR, which allows the -1 to get folded
5574 with the +1 that happens when building TYPE_SIZE. */
5575 if (size_varies)
5576 size = save_expr (size);
5577 if (this_size_varies && TREE_CODE (size) == INTEGER_CST)
5578 size = build2 (COMPOUND_EXPR, TREE_TYPE (size),
5579 integer_zero_node, size);
5581 /* Compute the maximum valid index, that is, size
5582 - 1. Do the calculation in index_type, so that
5583 if it is a variable the computations will be
5584 done in the proper mode. */
5585 itype = fold_build2_loc (loc, MINUS_EXPR, index_type,
5586 convert (index_type, size),
5587 convert (index_type,
5588 size_one_node));
5590 /* The above overflows when size does not fit
5591 in index_type.
5592 ??? While a size of INT_MAX+1 technically shouldn't
5593 cause an overflow (because we subtract 1), handling
5594 this case seems like an unnecessary complication. */
5595 if (TREE_CODE (size) == INTEGER_CST
5596 && !int_fits_type_p (size, index_type))
5598 if (name)
5599 error_at (loc, "size of array %qE is too large",
5600 name);
5601 else
5602 error_at (loc, "size of unnamed array is too large");
5603 type = error_mark_node;
5604 continue;
5607 itype = build_index_type (itype);
5609 if (this_size_varies)
5611 if (*expr)
5612 *expr = build2 (COMPOUND_EXPR, TREE_TYPE (size),
5613 *expr, size);
5614 else
5615 *expr = size;
5616 *expr_const_operands &= size_maybe_const;
5619 else if (decl_context == FIELD)
5621 bool flexible_array_member = false;
5622 if (array_parm_vla_unspec_p)
5623 /* Field names can in fact have function prototype
5624 scope so [*] is disallowed here through making
5625 the field variably modified, not through being
5626 something other than a declaration with function
5627 prototype scope. */
5628 size_varies = true;
5629 else
5631 const struct c_declarator *t = declarator;
5632 while (t->kind == cdk_attrs)
5633 t = t->declarator;
5634 flexible_array_member = (t->kind == cdk_id);
5636 if (flexible_array_member
5637 && pedantic && !flag_isoc99
5638 && !in_system_header_at (input_location))
5639 pedwarn (loc, OPT_Wpedantic,
5640 "ISO C90 does not support flexible array members");
5642 /* ISO C99 Flexible array members are effectively
5643 identical to GCC's zero-length array extension. */
5644 if (flexible_array_member || array_parm_vla_unspec_p)
5645 itype = build_range_type (sizetype, size_zero_node,
5646 NULL_TREE);
5648 else if (decl_context == PARM)
5650 if (array_parm_vla_unspec_p)
5652 itype = build_range_type (sizetype, size_zero_node, NULL_TREE);
5653 size_varies = true;
5656 else if (decl_context == TYPENAME)
5658 if (array_parm_vla_unspec_p)
5660 /* C99 6.7.5.2p4 */
5661 warning (0, "%<[*]%> not in a declaration");
5662 /* We use this to avoid messing up with incomplete
5663 array types of the same type, that would
5664 otherwise be modified below. */
5665 itype = build_range_type (sizetype, size_zero_node,
5666 NULL_TREE);
5667 size_varies = true;
5671 /* Complain about arrays of incomplete types. */
5672 if (!COMPLETE_TYPE_P (type))
5674 error_at (loc, "array type has incomplete element type");
5675 type = error_mark_node;
5677 else
5678 /* When itype is NULL, a shared incomplete array type is
5679 returned for all array of a given type. Elsewhere we
5680 make sure we don't complete that type before copying
5681 it, but here we want to make sure we don't ever
5682 modify the shared type, so we gcc_assert (itype)
5683 below. */
5685 addr_space_t as = DECODE_QUAL_ADDR_SPACE (type_quals);
5686 if (!ADDR_SPACE_GENERIC_P (as) && as != TYPE_ADDR_SPACE (type))
5687 type = build_qualified_type (type,
5688 ENCODE_QUAL_ADDR_SPACE (as));
5690 type = build_array_type (type, itype);
5693 if (type != error_mark_node)
5695 if (size_varies)
5697 /* It is ok to modify type here even if itype is
5698 NULL: if size_varies, we're in a
5699 multi-dimensional array and the inner type has
5700 variable size, so the enclosing shared array type
5701 must too. */
5702 if (size && TREE_CODE (size) == INTEGER_CST)
5703 type
5704 = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
5705 C_TYPE_VARIABLE_SIZE (type) = 1;
5708 /* The GCC extension for zero-length arrays differs from
5709 ISO flexible array members in that sizeof yields
5710 zero. */
5711 if (size && integer_zerop (size))
5713 gcc_assert (itype);
5714 type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
5715 TYPE_SIZE (type) = bitsize_zero_node;
5716 TYPE_SIZE_UNIT (type) = size_zero_node;
5717 SET_TYPE_STRUCTURAL_EQUALITY (type);
5719 if (array_parm_vla_unspec_p)
5721 gcc_assert (itype);
5722 /* The type is complete. C99 6.7.5.2p4 */
5723 type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
5724 TYPE_SIZE (type) = bitsize_zero_node;
5725 TYPE_SIZE_UNIT (type) = size_zero_node;
5726 SET_TYPE_STRUCTURAL_EQUALITY (type);
5730 if (decl_context != PARM
5731 && (array_ptr_quals != TYPE_UNQUALIFIED
5732 || array_ptr_attrs != NULL_TREE
5733 || array_parm_static))
5735 error_at (loc, "static or type qualifiers in non-parameter array declarator");
5736 array_ptr_quals = TYPE_UNQUALIFIED;
5737 array_ptr_attrs = NULL_TREE;
5738 array_parm_static = 0;
5740 break;
5742 case cdk_function:
5744 /* Say it's a definition only for the declarator closest
5745 to the identifier, apart possibly from some
5746 attributes. */
5747 bool really_funcdef = false;
5748 tree arg_types;
5749 if (funcdef_flag)
5751 const struct c_declarator *t = declarator->declarator;
5752 while (t->kind == cdk_attrs)
5753 t = t->declarator;
5754 really_funcdef = (t->kind == cdk_id);
5757 /* Declaring a function type. Make sure we have a valid
5758 type for the function to return. */
5759 if (type == error_mark_node)
5760 continue;
5762 size_varies = false;
5764 /* Warn about some types functions can't return. */
5765 if (TREE_CODE (type) == FUNCTION_TYPE)
5767 if (name)
5768 error_at (loc, "%qE declared as function returning a "
5769 "function", name);
5770 else
5771 error_at (loc, "type name declared as function "
5772 "returning a function");
5773 type = integer_type_node;
5775 if (TREE_CODE (type) == ARRAY_TYPE)
5777 if (name)
5778 error_at (loc, "%qE declared as function returning an array",
5779 name);
5780 else
5781 error_at (loc, "type name declared as function returning "
5782 "an array");
5783 type = integer_type_node;
5785 errmsg = targetm.invalid_return_type (type);
5786 if (errmsg)
5788 error (errmsg);
5789 type = integer_type_node;
5792 /* Construct the function type and go to the next
5793 inner layer of declarator. */
5794 arg_info = declarator->u.arg_info;
5795 arg_types = grokparms (arg_info, really_funcdef);
5797 /* Type qualifiers before the return type of the function
5798 qualify the return type, not the function type. */
5799 if (type_quals)
5801 /* Type qualifiers on a function return type are
5802 normally permitted by the standard but have no
5803 effect, so give a warning at -Wreturn-type.
5804 Qualifiers on a void return type are banned on
5805 function definitions in ISO C; GCC used to used
5806 them for noreturn functions. */
5807 if (VOID_TYPE_P (type) && really_funcdef)
5808 pedwarn (loc, 0,
5809 "function definition has qualified void return type");
5810 else
5811 warning_at (loc, OPT_Wignored_qualifiers,
5812 "type qualifiers ignored on function return type");
5814 type = c_build_qualified_type (type, type_quals);
5816 type_quals = TYPE_UNQUALIFIED;
5818 type = build_function_type (type, arg_types);
5819 declarator = declarator->declarator;
5821 /* Set the TYPE_CONTEXTs for each tagged type which is local to
5822 the formal parameter list of this FUNCTION_TYPE to point to
5823 the FUNCTION_TYPE node itself. */
5825 c_arg_tag *tag;
5826 unsigned ix;
5828 FOR_EACH_VEC_SAFE_ELT_REVERSE (arg_info->tags, ix, tag)
5829 TYPE_CONTEXT (tag->type) = type;
5831 break;
5833 case cdk_pointer:
5835 /* Merge any constancy or volatility into the target type
5836 for the pointer. */
5837 if ((type_quals & TYPE_QUAL_ATOMIC)
5838 && TREE_CODE (type) == FUNCTION_TYPE)
5840 error_at (loc,
5841 "%<_Atomic%>-qualified function type");
5842 type_quals &= ~TYPE_QUAL_ATOMIC;
5844 else if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
5845 && type_quals)
5846 pedwarn (loc, OPT_Wpedantic,
5847 "ISO C forbids qualified function types");
5848 if (type_quals)
5849 type = c_build_qualified_type (type, type_quals);
5850 size_varies = false;
5852 /* When the pointed-to type involves components of variable size,
5853 care must be taken to ensure that the size evaluation code is
5854 emitted early enough to dominate all the possible later uses
5855 and late enough for the variables on which it depends to have
5856 been assigned.
5858 This is expected to happen automatically when the pointed-to
5859 type has a name/declaration of it's own, but special attention
5860 is required if the type is anonymous.
5862 We handle the NORMAL and FIELD contexts here by attaching an
5863 artificial TYPE_DECL to such pointed-to type. This forces the
5864 sizes evaluation at a safe point and ensures it is not deferred
5865 until e.g. within a deeper conditional context.
5867 We expect nothing to be needed here for PARM or TYPENAME.
5868 Pushing a TYPE_DECL at this point for TYPENAME would actually
5869 be incorrect, as we might be in the middle of an expression
5870 with side effects on the pointed-to type size "arguments" prior
5871 to the pointer declaration point and the fake TYPE_DECL in the
5872 enclosing context would force the size evaluation prior to the
5873 side effects. */
5875 if (!TYPE_NAME (type)
5876 && (decl_context == NORMAL || decl_context == FIELD)
5877 && variably_modified_type_p (type, NULL_TREE))
5879 tree decl = build_decl (loc, TYPE_DECL, NULL_TREE, type);
5880 DECL_ARTIFICIAL (decl) = 1;
5881 pushdecl (decl);
5882 finish_decl (decl, loc, NULL_TREE, NULL_TREE, NULL_TREE);
5883 TYPE_NAME (type) = decl;
5886 type = c_build_pointer_type (type);
5888 /* Process type qualifiers (such as const or volatile)
5889 that were given inside the `*'. */
5890 type_quals = declarator->u.pointer_quals;
5892 declarator = declarator->declarator;
5893 break;
5895 default:
5896 gcc_unreachable ();
5899 *decl_attrs = chainon (returned_attrs, *decl_attrs);
5901 /* Now TYPE has the actual type, apart from any qualifiers in
5902 TYPE_QUALS. */
5904 /* Warn about address space used for things other than static memory or
5905 pointers. */
5906 address_space = DECODE_QUAL_ADDR_SPACE (type_quals);
5907 if (!ADDR_SPACE_GENERIC_P (address_space))
5909 if (decl_context == NORMAL)
5911 switch (storage_class)
5913 case csc_auto:
5914 error ("%qs combined with %<auto%> qualifier for %qE",
5915 c_addr_space_name (address_space), name);
5916 break;
5917 case csc_register:
5918 error ("%qs combined with %<register%> qualifier for %qE",
5919 c_addr_space_name (address_space), name);
5920 break;
5921 case csc_none:
5922 if (current_function_scope)
5924 error ("%qs specified for auto variable %qE",
5925 c_addr_space_name (address_space), name);
5926 break;
5928 break;
5929 case csc_static:
5930 case csc_extern:
5931 case csc_typedef:
5932 break;
5933 default:
5934 gcc_unreachable ();
5937 else if (decl_context == PARM && TREE_CODE (type) != ARRAY_TYPE)
5939 if (name)
5940 error ("%qs specified for parameter %qE",
5941 c_addr_space_name (address_space), name);
5942 else
5943 error ("%qs specified for unnamed parameter",
5944 c_addr_space_name (address_space));
5946 else if (decl_context == FIELD)
5948 if (name)
5949 error ("%qs specified for structure field %qE",
5950 c_addr_space_name (address_space), name);
5951 else
5952 error ("%qs specified for structure field",
5953 c_addr_space_name (address_space));
5957 /* Check the type and width of a bit-field. */
5958 if (bitfield)
5960 check_bitfield_type_and_width (&type, width, name);
5961 /* C11 makes it implementation-defined (6.7.2.1#5) whether
5962 atomic types are permitted for bit-fields; we have no code to
5963 make bit-field accesses atomic, so disallow them. */
5964 if (type_quals & TYPE_QUAL_ATOMIC)
5966 if (name)
5967 error ("bit-field %qE has atomic type", name);
5968 else
5969 error ("bit-field has atomic type");
5970 type_quals &= ~TYPE_QUAL_ATOMIC;
5974 /* Reject invalid uses of _Alignas. */
5975 if (declspecs->alignas_p)
5977 if (storage_class == csc_typedef)
5978 error_at (loc, "alignment specified for typedef %qE", name);
5979 else if (storage_class == csc_register)
5980 error_at (loc, "alignment specified for %<register%> object %qE",
5981 name);
5982 else if (decl_context == PARM)
5984 if (name)
5985 error_at (loc, "alignment specified for parameter %qE", name);
5986 else
5987 error_at (loc, "alignment specified for unnamed parameter");
5989 else if (bitfield)
5991 if (name)
5992 error_at (loc, "alignment specified for bit-field %qE", name);
5993 else
5994 error_at (loc, "alignment specified for unnamed bit-field");
5996 else if (TREE_CODE (type) == FUNCTION_TYPE)
5997 error_at (loc, "alignment specified for function %qE", name);
5998 else if (declspecs->align_log != -1)
6000 alignas_align = 1U << declspecs->align_log;
6001 if (alignas_align < min_align_of_type (type))
6003 if (name)
6004 error_at (loc, "%<_Alignas%> specifiers cannot reduce "
6005 "alignment of %qE", name);
6006 else
6007 error_at (loc, "%<_Alignas%> specifiers cannot reduce "
6008 "alignment of unnamed field");
6009 alignas_align = 0;
6014 /* Did array size calculations overflow or does the array cover more
6015 than half of the address-space? */
6016 if (TREE_CODE (type) == ARRAY_TYPE
6017 && COMPLETE_TYPE_P (type)
6018 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
6019 && ! valid_constant_size_p (TYPE_SIZE_UNIT (type)))
6021 if (name)
6022 error_at (loc, "size of array %qE is too large", name);
6023 else
6024 error_at (loc, "size of unnamed array is too large");
6025 /* If we proceed with the array type as it is, we'll eventually
6026 crash in tree_to_[su]hwi(). */
6027 type = error_mark_node;
6030 /* If this is declaring a typedef name, return a TYPE_DECL. */
6032 if (storage_class == csc_typedef)
6034 tree decl;
6035 if ((type_quals & TYPE_QUAL_ATOMIC)
6036 && TREE_CODE (type) == FUNCTION_TYPE)
6038 error_at (loc,
6039 "%<_Atomic%>-qualified function type");
6040 type_quals &= ~TYPE_QUAL_ATOMIC;
6042 else if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
6043 && type_quals)
6044 pedwarn (loc, OPT_Wpedantic,
6045 "ISO C forbids qualified function types");
6046 if (type_quals)
6047 type = c_build_qualified_type (type, type_quals);
6048 decl = build_decl (declarator->id_loc,
6049 TYPE_DECL, declarator->u.id, type);
6050 if (declspecs->explicit_signed_p)
6051 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
6052 if (declspecs->inline_p)
6053 pedwarn (loc, 0,"typedef %q+D declared %<inline%>", decl);
6054 if (declspecs->noreturn_p)
6055 pedwarn (loc, 0,"typedef %q+D declared %<_Noreturn%>", decl);
6057 if (warn_cxx_compat && declarator->u.id != NULL_TREE)
6059 struct c_binding *b = I_TAG_BINDING (declarator->u.id);
6061 if (b != NULL
6062 && b->decl != NULL_TREE
6063 && (B_IN_CURRENT_SCOPE (b)
6064 || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
6065 && TYPE_MAIN_VARIANT (b->decl) != TYPE_MAIN_VARIANT (type))
6067 warning_at (declarator->id_loc, OPT_Wc___compat,
6068 ("using %qD as both a typedef and a tag is "
6069 "invalid in C++"),
6070 decl);
6071 if (b->locus != UNKNOWN_LOCATION)
6072 inform (b->locus, "originally defined here");
6076 return decl;
6079 /* If this is a type name (such as, in a cast or sizeof),
6080 compute the type and return it now. */
6082 if (decl_context == TYPENAME)
6084 /* Note that the grammar rejects storage classes in typenames
6085 and fields. */
6086 gcc_assert (storage_class == csc_none && !threadp
6087 && !declspecs->inline_p && !declspecs->noreturn_p);
6088 if ((type_quals & TYPE_QUAL_ATOMIC)
6089 && TREE_CODE (type) == FUNCTION_TYPE)
6091 error_at (loc,
6092 "%<_Atomic%>-qualified function type");
6093 type_quals &= ~TYPE_QUAL_ATOMIC;
6095 else if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
6096 && type_quals)
6097 pedwarn (loc, OPT_Wpedantic,
6098 "ISO C forbids const or volatile function types");
6099 if (type_quals)
6100 type = c_build_qualified_type (type, type_quals);
6101 return type;
6104 if (pedantic && decl_context == FIELD
6105 && variably_modified_type_p (type, NULL_TREE))
6107 /* C99 6.7.2.1p8 */
6108 pedwarn (loc, OPT_Wpedantic, "a member of a structure or union cannot "
6109 "have a variably modified type");
6112 /* Aside from typedefs and type names (handle above),
6113 `void' at top level (not within pointer)
6114 is allowed only in public variables.
6115 We don't complain about parms either, but that is because
6116 a better error message can be made later. */
6118 if (VOID_TYPE_P (type) && decl_context != PARM
6119 && !((decl_context != FIELD && TREE_CODE (type) != FUNCTION_TYPE)
6120 && (storage_class == csc_extern
6121 || (current_scope == file_scope
6122 && !(storage_class == csc_static
6123 || storage_class == csc_register)))))
6125 error_at (loc, "variable or field %qE declared void", name);
6126 type = integer_type_node;
6129 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
6130 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
6133 tree decl;
6135 if (decl_context == PARM)
6137 tree promoted_type;
6139 /* A parameter declared as an array of T is really a pointer to T.
6140 One declared as a function is really a pointer to a function. */
6142 if (TREE_CODE (type) == ARRAY_TYPE)
6144 /* Transfer const-ness of array into that of type pointed to. */
6145 type = TREE_TYPE (type);
6146 if (type_quals)
6147 type = c_build_qualified_type (type, type_quals);
6148 type = c_build_pointer_type (type);
6149 type_quals = array_ptr_quals;
6150 if (type_quals)
6151 type = c_build_qualified_type (type, type_quals);
6153 /* We don't yet implement attributes in this context. */
6154 if (array_ptr_attrs != NULL_TREE)
6155 warning_at (loc, OPT_Wattributes,
6156 "attributes in parameter array declarator ignored");
6158 size_varies = false;
6160 else if (TREE_CODE (type) == FUNCTION_TYPE)
6162 if (type_quals & TYPE_QUAL_ATOMIC)
6164 error_at (loc,
6165 "%<_Atomic%>-qualified function type");
6166 type_quals &= ~TYPE_QUAL_ATOMIC;
6168 else if (type_quals)
6169 pedwarn (loc, OPT_Wpedantic,
6170 "ISO C forbids qualified function types");
6171 if (type_quals)
6172 type = c_build_qualified_type (type, type_quals);
6173 type = c_build_pointer_type (type);
6174 type_quals = TYPE_UNQUALIFIED;
6176 else if (type_quals)
6177 type = c_build_qualified_type (type, type_quals);
6179 decl = build_decl (declarator->id_loc,
6180 PARM_DECL, declarator->u.id, type);
6181 if (size_varies)
6182 C_DECL_VARIABLE_SIZE (decl) = 1;
6184 /* Compute the type actually passed in the parmlist,
6185 for the case where there is no prototype.
6186 (For example, shorts and chars are passed as ints.)
6187 When there is a prototype, this is overridden later. */
6189 if (type == error_mark_node)
6190 promoted_type = type;
6191 else
6192 promoted_type = c_type_promotes_to (type);
6194 DECL_ARG_TYPE (decl) = promoted_type;
6195 if (declspecs->inline_p)
6196 pedwarn (loc, 0, "parameter %q+D declared %<inline%>", decl);
6197 if (declspecs->noreturn_p)
6198 pedwarn (loc, 0, "parameter %q+D declared %<_Noreturn%>", decl);
6200 else if (decl_context == FIELD)
6202 /* Note that the grammar rejects storage classes in typenames
6203 and fields. */
6204 gcc_assert (storage_class == csc_none && !threadp
6205 && !declspecs->inline_p && !declspecs->noreturn_p);
6207 /* Structure field. It may not be a function. */
6209 if (TREE_CODE (type) == FUNCTION_TYPE)
6211 error_at (loc, "field %qE declared as a function", name);
6212 type = build_pointer_type (type);
6214 else if (TREE_CODE (type) != ERROR_MARK
6215 && !COMPLETE_OR_UNBOUND_ARRAY_TYPE_P (type))
6217 if (name)
6218 error_at (loc, "field %qE has incomplete type", name);
6219 else
6220 error_at (loc, "unnamed field has incomplete type");
6221 type = error_mark_node;
6223 type = c_build_qualified_type (type, type_quals);
6224 decl = build_decl (declarator->id_loc,
6225 FIELD_DECL, declarator->u.id, type);
6226 DECL_NONADDRESSABLE_P (decl) = bitfield;
6227 if (bitfield && !declarator->u.id)
6228 TREE_NO_WARNING (decl) = 1;
6230 if (size_varies)
6231 C_DECL_VARIABLE_SIZE (decl) = 1;
6233 else if (TREE_CODE (type) == FUNCTION_TYPE)
6235 if (storage_class == csc_register || threadp)
6237 error_at (loc, "invalid storage class for function %qE", name);
6239 else if (current_scope != file_scope)
6241 /* Function declaration not at file scope. Storage
6242 classes other than `extern' are not allowed, C99
6243 6.7.1p5, and `extern' makes no difference. However,
6244 GCC allows 'auto', perhaps with 'inline', to support
6245 nested functions. */
6246 if (storage_class == csc_auto)
6247 pedwarn (loc, OPT_Wpedantic,
6248 "invalid storage class for function %qE", name);
6249 else if (storage_class == csc_static)
6251 error_at (loc, "invalid storage class for function %qE", name);
6252 if (funcdef_flag)
6253 storage_class = declspecs->storage_class = csc_none;
6254 else
6255 return 0;
6259 decl = build_decl (declarator->id_loc,
6260 FUNCTION_DECL, declarator->u.id, type);
6261 decl = build_decl_attribute_variant (decl, decl_attr);
6263 if (type_quals & TYPE_QUAL_ATOMIC)
6265 error_at (loc,
6266 "%<_Atomic%>-qualified function type");
6267 type_quals &= ~TYPE_QUAL_ATOMIC;
6269 else if (pedantic && type_quals && !DECL_IN_SYSTEM_HEADER (decl))
6270 pedwarn (loc, OPT_Wpedantic,
6271 "ISO C forbids qualified function types");
6273 /* Every function declaration is an external reference
6274 (DECL_EXTERNAL) except for those which are not at file
6275 scope and are explicitly declared "auto". This is
6276 forbidden by standard C (C99 6.7.1p5) and is interpreted by
6277 GCC to signify a forward declaration of a nested function. */
6278 if (storage_class == csc_auto && current_scope != file_scope)
6279 DECL_EXTERNAL (decl) = 0;
6280 /* In C99, a function which is declared 'inline' with 'extern'
6281 is not an external reference (which is confusing). It
6282 means that the later definition of the function must be output
6283 in this file, C99 6.7.4p6. In GNU C89, a function declared
6284 'extern inline' is an external reference. */
6285 else if (declspecs->inline_p && storage_class != csc_static)
6286 DECL_EXTERNAL (decl) = ((storage_class == csc_extern)
6287 == flag_gnu89_inline);
6288 else
6289 DECL_EXTERNAL (decl) = !initialized;
6291 /* Record absence of global scope for `static' or `auto'. */
6292 TREE_PUBLIC (decl)
6293 = !(storage_class == csc_static || storage_class == csc_auto);
6295 /* For a function definition, record the argument information
6296 block where store_parm_decls will look for it. */
6297 if (funcdef_flag)
6298 current_function_arg_info = arg_info;
6300 if (declspecs->default_int_p)
6301 C_FUNCTION_IMPLICIT_INT (decl) = 1;
6303 /* Record presence of `inline' and `_Noreturn', if it is
6304 reasonable. */
6305 if (flag_hosted && MAIN_NAME_P (declarator->u.id))
6307 if (declspecs->inline_p)
6308 pedwarn (loc, 0, "cannot inline function %<main%>");
6309 if (declspecs->noreturn_p)
6310 pedwarn (loc, 0, "%<main%> declared %<_Noreturn%>");
6312 else
6314 if (declspecs->inline_p)
6315 /* Record that the function is declared `inline'. */
6316 DECL_DECLARED_INLINE_P (decl) = 1;
6317 if (declspecs->noreturn_p)
6319 if (!flag_isoc11)
6321 if (flag_isoc99)
6322 pedwarn (loc, OPT_Wpedantic,
6323 "ISO C99 does not support %<_Noreturn%>");
6324 else
6325 pedwarn (loc, OPT_Wpedantic,
6326 "ISO C90 does not support %<_Noreturn%>");
6328 TREE_THIS_VOLATILE (decl) = 1;
6332 else
6334 /* It's a variable. */
6335 /* An uninitialized decl with `extern' is a reference. */
6336 int extern_ref = !initialized && storage_class == csc_extern;
6338 type = c_build_qualified_type (type, type_quals);
6340 /* C99 6.2.2p7: It is invalid (compile-time undefined
6341 behavior) to create an 'extern' declaration for a
6342 variable if there is a global declaration that is
6343 'static' and the global declaration is not visible.
6344 (If the static declaration _is_ currently visible,
6345 the 'extern' declaration is taken to refer to that decl.) */
6346 if (extern_ref && current_scope != file_scope)
6348 tree global_decl = identifier_global_value (declarator->u.id);
6349 tree visible_decl = lookup_name (declarator->u.id);
6351 if (global_decl
6352 && global_decl != visible_decl
6353 && TREE_CODE (global_decl) == VAR_DECL
6354 && !TREE_PUBLIC (global_decl))
6355 error_at (loc, "variable previously declared %<static%> "
6356 "redeclared %<extern%>");
6359 decl = build_decl (declarator->id_loc,
6360 VAR_DECL, declarator->u.id, type);
6361 if (size_varies)
6362 C_DECL_VARIABLE_SIZE (decl) = 1;
6364 if (declspecs->inline_p)
6365 pedwarn (loc, 0, "variable %q+D declared %<inline%>", decl);
6366 if (declspecs->noreturn_p)
6367 pedwarn (loc, 0, "variable %q+D declared %<_Noreturn%>", decl);
6369 /* At file scope, an initialized extern declaration may follow
6370 a static declaration. In that case, DECL_EXTERNAL will be
6371 reset later in start_decl. */
6372 DECL_EXTERNAL (decl) = (storage_class == csc_extern);
6374 /* At file scope, the presence of a `static' or `register' storage
6375 class specifier, or the absence of all storage class specifiers
6376 makes this declaration a definition (perhaps tentative). Also,
6377 the absence of `static' makes it public. */
6378 if (current_scope == file_scope)
6380 TREE_PUBLIC (decl) = storage_class != csc_static;
6381 TREE_STATIC (decl) = !extern_ref;
6383 /* Not at file scope, only `static' makes a static definition. */
6384 else
6386 TREE_STATIC (decl) = (storage_class == csc_static);
6387 TREE_PUBLIC (decl) = extern_ref;
6390 if (threadp)
6391 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
6394 if ((storage_class == csc_extern
6395 || (storage_class == csc_none
6396 && TREE_CODE (type) == FUNCTION_TYPE
6397 && !funcdef_flag))
6398 && variably_modified_type_p (type, NULL_TREE))
6400 /* C99 6.7.5.2p2 */
6401 if (TREE_CODE (type) == FUNCTION_TYPE)
6402 error_at (loc, "non-nested function with variably modified type");
6403 else
6404 error_at (loc, "object with variably modified type must have "
6405 "no linkage");
6408 /* Record `register' declaration for warnings on &
6409 and in case doing stupid register allocation. */
6411 if (storage_class == csc_register)
6413 C_DECL_REGISTER (decl) = 1;
6414 DECL_REGISTER (decl) = 1;
6417 /* Record constancy and volatility. */
6418 c_apply_type_quals_to_decl (type_quals, decl);
6420 /* Apply _Alignas specifiers. */
6421 if (alignas_align)
6423 DECL_ALIGN (decl) = alignas_align * BITS_PER_UNIT;
6424 DECL_USER_ALIGN (decl) = 1;
6427 /* If a type has volatile components, it should be stored in memory.
6428 Otherwise, the fact that those components are volatile
6429 will be ignored, and would even crash the compiler.
6430 Of course, this only makes sense on VAR,PARM, and RESULT decl's. */
6431 if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl))
6432 && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
6433 || TREE_CODE (decl) == RESULT_DECL))
6435 /* It is not an error for a structure with volatile fields to
6436 be declared register, but reset DECL_REGISTER since it
6437 cannot actually go in a register. */
6438 int was_reg = C_DECL_REGISTER (decl);
6439 C_DECL_REGISTER (decl) = 0;
6440 DECL_REGISTER (decl) = 0;
6441 c_mark_addressable (decl);
6442 C_DECL_REGISTER (decl) = was_reg;
6445 /* This is the earliest point at which we might know the assembler
6446 name of a variable. Thus, if it's known before this, die horribly. */
6447 gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl));
6449 if (warn_cxx_compat
6450 && TREE_CODE (decl) == VAR_DECL
6451 && TREE_PUBLIC (decl)
6452 && TREE_STATIC (decl)
6453 && (TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
6454 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
6455 || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
6456 && TYPE_NAME (TREE_TYPE (decl)) == NULL_TREE)
6457 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wc___compat,
6458 ("non-local variable %qD with anonymous type is "
6459 "questionable in C++"),
6460 decl);
6462 return decl;
6466 /* Decode the parameter-list info for a function type or function definition.
6467 The argument is the value returned by `get_parm_info' (or made in c-parse.c
6468 if there is an identifier list instead of a parameter decl list).
6469 These two functions are separate because when a function returns
6470 or receives functions then each is called multiple times but the order
6471 of calls is different. The last call to `grokparms' is always the one
6472 that contains the formal parameter names of a function definition.
6474 Return a list of arg types to use in the FUNCTION_TYPE for this function.
6476 FUNCDEF_FLAG is true for a function definition, false for
6477 a mere declaration. A nonempty identifier-list gets an error message
6478 when FUNCDEF_FLAG is false. */
6480 static tree
6481 grokparms (struct c_arg_info *arg_info, bool funcdef_flag)
6483 tree arg_types = arg_info->types;
6485 if (funcdef_flag && arg_info->had_vla_unspec)
6487 /* A function definition isn't function prototype scope C99 6.2.1p4. */
6488 /* C99 6.7.5.2p4 */
6489 error ("%<[*]%> not allowed in other than function prototype scope");
6492 if (arg_types == 0 && !funcdef_flag
6493 && !in_system_header_at (input_location))
6494 warning (OPT_Wstrict_prototypes,
6495 "function declaration isn%'t a prototype");
6497 if (arg_types == error_mark_node)
6498 return 0; /* don't set TYPE_ARG_TYPES in this case */
6500 else if (arg_types && TREE_CODE (TREE_VALUE (arg_types)) == IDENTIFIER_NODE)
6502 if (!funcdef_flag)
6504 pedwarn (input_location, 0, "parameter names (without types) in function declaration");
6505 arg_info->parms = NULL_TREE;
6507 else
6508 arg_info->parms = arg_info->types;
6510 arg_info->types = 0;
6511 return 0;
6513 else
6515 tree parm, type, typelt;
6516 unsigned int parmno;
6517 const char *errmsg;
6519 /* If there is a parameter of incomplete type in a definition,
6520 this is an error. In a declaration this is valid, and a
6521 struct or union type may be completed later, before any calls
6522 or definition of the function. In the case where the tag was
6523 first declared within the parameter list, a warning has
6524 already been given. If a parameter has void type, then
6525 however the function cannot be defined or called, so
6526 warn. */
6528 for (parm = arg_info->parms, typelt = arg_types, parmno = 1;
6529 parm;
6530 parm = DECL_CHAIN (parm), typelt = TREE_CHAIN (typelt), parmno++)
6532 type = TREE_VALUE (typelt);
6533 if (type == error_mark_node)
6534 continue;
6536 if (!COMPLETE_TYPE_P (type))
6538 if (funcdef_flag)
6540 if (DECL_NAME (parm))
6541 error_at (input_location,
6542 "parameter %u (%q+D) has incomplete type",
6543 parmno, parm);
6544 else
6545 error_at (DECL_SOURCE_LOCATION (parm),
6546 "parameter %u has incomplete type",
6547 parmno);
6549 TREE_VALUE (typelt) = error_mark_node;
6550 TREE_TYPE (parm) = error_mark_node;
6551 arg_types = NULL_TREE;
6553 else if (VOID_TYPE_P (type))
6555 if (DECL_NAME (parm))
6556 warning_at (input_location, 0,
6557 "parameter %u (%q+D) has void type",
6558 parmno, parm);
6559 else
6560 warning_at (DECL_SOURCE_LOCATION (parm), 0,
6561 "parameter %u has void type",
6562 parmno);
6566 errmsg = targetm.invalid_parameter_type (type);
6567 if (errmsg)
6569 error (errmsg);
6570 TREE_VALUE (typelt) = error_mark_node;
6571 TREE_TYPE (parm) = error_mark_node;
6572 arg_types = NULL_TREE;
6575 if (DECL_NAME (parm) && TREE_USED (parm))
6576 warn_if_shadowing (parm);
6578 return arg_types;
6582 /* Allocate and initialize a c_arg_info structure from the parser's
6583 obstack. */
6585 struct c_arg_info *
6586 build_arg_info (void)
6588 struct c_arg_info *ret = XOBNEW (&parser_obstack, struct c_arg_info);
6589 ret->parms = NULL_TREE;
6590 ret->tags = NULL;
6591 ret->types = NULL_TREE;
6592 ret->others = NULL_TREE;
6593 ret->pending_sizes = NULL;
6594 ret->had_vla_unspec = 0;
6595 return ret;
6598 /* Take apart the current scope and return a c_arg_info structure with
6599 info on a parameter list just parsed.
6601 This structure is later fed to 'grokparms' and 'store_parm_decls'.
6603 ELLIPSIS being true means the argument list ended in '...' so don't
6604 append a sentinel (void_list_node) to the end of the type-list.
6606 EXPR is NULL or an expression that needs to be evaluated for the
6607 side effects of array size expressions in the parameters. */
6609 struct c_arg_info *
6610 get_parm_info (bool ellipsis, tree expr)
6612 struct c_binding *b = current_scope->bindings;
6613 struct c_arg_info *arg_info = build_arg_info ();
6615 tree parms = 0;
6616 vec<c_arg_tag, va_gc> *tags = NULL;
6617 tree types = 0;
6618 tree others = 0;
6620 static bool explained_incomplete_types = false;
6621 bool gave_void_only_once_err = false;
6623 arg_info->had_vla_unspec = current_scope->had_vla_unspec;
6625 /* The bindings in this scope must not get put into a block.
6626 We will take care of deleting the binding nodes. */
6627 current_scope->bindings = 0;
6629 /* This function is only called if there was *something* on the
6630 parameter list. */
6631 gcc_assert (b);
6633 /* A parameter list consisting solely of 'void' indicates that the
6634 function takes no arguments. But if the 'void' is qualified
6635 (by 'const' or 'volatile'), or has a storage class specifier
6636 ('register'), then the behavior is undefined; issue an error.
6637 Typedefs for 'void' are OK (see DR#157). */
6638 if (b->prev == 0 /* one binding */
6639 && TREE_CODE (b->decl) == PARM_DECL /* which is a parameter */
6640 && !DECL_NAME (b->decl) /* anonymous */
6641 && VOID_TYPE_P (TREE_TYPE (b->decl))) /* of void type */
6643 if (TYPE_QUALS (TREE_TYPE (b->decl)) != TYPE_UNQUALIFIED
6644 || C_DECL_REGISTER (b->decl))
6645 error ("%<void%> as only parameter may not be qualified");
6647 /* There cannot be an ellipsis. */
6648 if (ellipsis)
6649 error ("%<void%> must be the only parameter");
6651 arg_info->types = void_list_node;
6652 return arg_info;
6655 if (!ellipsis)
6656 types = void_list_node;
6658 /* Break up the bindings list into parms, tags, types, and others;
6659 apply sanity checks; purge the name-to-decl bindings. */
6660 while (b)
6662 tree decl = b->decl;
6663 tree type = TREE_TYPE (decl);
6664 c_arg_tag tag;
6665 const char *keyword;
6667 switch (TREE_CODE (decl))
6669 case PARM_DECL:
6670 if (b->id)
6672 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
6673 I_SYMBOL_BINDING (b->id) = b->shadowed;
6676 /* Check for forward decls that never got their actual decl. */
6677 if (TREE_ASM_WRITTEN (decl))
6678 error ("parameter %q+D has just a forward declaration", decl);
6679 /* Check for (..., void, ...) and issue an error. */
6680 else if (VOID_TYPE_P (type) && !DECL_NAME (decl))
6682 if (!gave_void_only_once_err)
6684 error ("%<void%> must be the only parameter");
6685 gave_void_only_once_err = true;
6688 else
6690 /* Valid parameter, add it to the list. */
6691 DECL_CHAIN (decl) = parms;
6692 parms = decl;
6694 /* Since there is a prototype, args are passed in their
6695 declared types. The back end may override this later. */
6696 DECL_ARG_TYPE (decl) = type;
6697 types = tree_cons (0, type, types);
6699 break;
6701 case ENUMERAL_TYPE: keyword = "enum"; goto tag;
6702 case UNION_TYPE: keyword = "union"; goto tag;
6703 case RECORD_TYPE: keyword = "struct"; goto tag;
6704 tag:
6705 /* Types may not have tag-names, in which case the type
6706 appears in the bindings list with b->id NULL. */
6707 if (b->id)
6709 gcc_assert (I_TAG_BINDING (b->id) == b);
6710 I_TAG_BINDING (b->id) = b->shadowed;
6713 /* Warn about any struct, union or enum tags defined in a
6714 parameter list. The scope of such types is limited to
6715 the parameter list, which is rarely if ever desirable
6716 (it's impossible to call such a function with type-
6717 correct arguments). An anonymous union parm type is
6718 meaningful as a GNU extension, so don't warn for that. */
6719 if (TREE_CODE (decl) != UNION_TYPE || b->id != 0)
6721 if (b->id)
6722 /* The %s will be one of 'struct', 'union', or 'enum'. */
6723 warning (0, "%<%s %E%> declared inside parameter list",
6724 keyword, b->id);
6725 else
6726 /* The %s will be one of 'struct', 'union', or 'enum'. */
6727 warning (0, "anonymous %s declared inside parameter list",
6728 keyword);
6730 if (!explained_incomplete_types)
6732 warning (0, "its scope is only this definition or declaration,"
6733 " which is probably not what you want");
6734 explained_incomplete_types = true;
6738 tag.id = b->id;
6739 tag.type = decl;
6740 vec_safe_push (tags, tag);
6741 break;
6743 case CONST_DECL:
6744 case TYPE_DECL:
6745 case FUNCTION_DECL:
6746 /* CONST_DECLs appear here when we have an embedded enum,
6747 and TYPE_DECLs appear here when we have an embedded struct
6748 or union. No warnings for this - we already warned about the
6749 type itself. FUNCTION_DECLs appear when there is an implicit
6750 function declaration in the parameter list. */
6752 /* When we reinsert this decl in the function body, we need
6753 to reconstruct whether it was marked as nested. */
6754 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
6755 ? b->nested
6756 : !b->nested);
6757 DECL_CHAIN (decl) = others;
6758 others = decl;
6759 /* fall through */
6761 case ERROR_MARK:
6762 /* error_mark_node appears here when we have an undeclared
6763 variable. Just throw it away. */
6764 if (b->id)
6766 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
6767 I_SYMBOL_BINDING (b->id) = b->shadowed;
6769 break;
6771 /* Other things that might be encountered. */
6772 case LABEL_DECL:
6773 case VAR_DECL:
6774 default:
6775 gcc_unreachable ();
6778 b = free_binding_and_advance (b);
6781 arg_info->parms = parms;
6782 arg_info->tags = tags;
6783 arg_info->types = types;
6784 arg_info->others = others;
6785 arg_info->pending_sizes = expr;
6786 return arg_info;
6789 /* Get the struct, enum or union (CODE says which) with tag NAME.
6790 Define the tag as a forward-reference with location LOC if it is
6791 not defined. Return a c_typespec structure for the type
6792 specifier. */
6794 struct c_typespec
6795 parser_xref_tag (location_t loc, enum tree_code code, tree name)
6797 struct c_typespec ret;
6798 tree ref;
6799 location_t refloc;
6801 ret.expr = NULL_TREE;
6802 ret.expr_const_operands = true;
6804 /* If a cross reference is requested, look up the type
6805 already defined for this tag and return it. */
6807 ref = lookup_tag (code, name, 0, &refloc);
6808 /* If this is the right type of tag, return what we found.
6809 (This reference will be shadowed by shadow_tag later if appropriate.)
6810 If this is the wrong type of tag, do not return it. If it was the
6811 wrong type in the same scope, we will have had an error
6812 message already; if in a different scope and declaring
6813 a name, pending_xref_error will give an error message; but if in a
6814 different scope and not declaring a name, this tag should
6815 shadow the previous declaration of a different type of tag, and
6816 this would not work properly if we return the reference found.
6817 (For example, with "struct foo" in an outer scope, "union foo;"
6818 must shadow that tag with a new one of union type.) */
6819 ret.kind = (ref ? ctsk_tagref : ctsk_tagfirstref);
6820 if (ref && TREE_CODE (ref) == code)
6822 if (C_TYPE_DEFINED_IN_STRUCT (ref)
6823 && loc != UNKNOWN_LOCATION
6824 && warn_cxx_compat)
6826 switch (code)
6828 case ENUMERAL_TYPE:
6829 warning_at (loc, OPT_Wc___compat,
6830 ("enum type defined in struct or union "
6831 "is not visible in C++"));
6832 inform (refloc, "enum type defined here");
6833 break;
6834 case RECORD_TYPE:
6835 warning_at (loc, OPT_Wc___compat,
6836 ("struct defined in struct or union "
6837 "is not visible in C++"));
6838 inform (refloc, "struct defined here");
6839 break;
6840 case UNION_TYPE:
6841 warning_at (loc, OPT_Wc___compat,
6842 ("union defined in struct or union "
6843 "is not visible in C++"));
6844 inform (refloc, "union defined here");
6845 break;
6846 default:
6847 gcc_unreachable();
6851 ret.spec = ref;
6852 return ret;
6855 /* If no such tag is yet defined, create a forward-reference node
6856 and record it as the "definition".
6857 When a real declaration of this type is found,
6858 the forward-reference will be altered into a real type. */
6860 ref = make_node (code);
6861 if (code == ENUMERAL_TYPE)
6863 /* Give the type a default layout like unsigned int
6864 to avoid crashing if it does not get defined. */
6865 SET_TYPE_MODE (ref, TYPE_MODE (unsigned_type_node));
6866 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
6867 TYPE_USER_ALIGN (ref) = 0;
6868 TYPE_UNSIGNED (ref) = 1;
6869 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
6870 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
6871 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
6874 pushtag (loc, name, ref);
6876 ret.spec = ref;
6877 return ret;
6880 /* Get the struct, enum or union (CODE says which) with tag NAME.
6881 Define the tag as a forward-reference if it is not defined.
6882 Return a tree for the type. */
6884 tree
6885 xref_tag (enum tree_code code, tree name)
6887 return parser_xref_tag (input_location, code, name).spec;
6890 /* Make sure that the tag NAME is defined *in the current scope*
6891 at least as a forward reference.
6892 LOC is the location of the struct's definition.
6893 CODE says which kind of tag NAME ought to be.
6895 This stores the current value of the file static STRUCT_PARSE_INFO
6896 in *ENCLOSING_STRUCT_PARSE_INFO, and points STRUCT_PARSE_INFO at a
6897 new c_struct_parse_info structure. The old value of
6898 STRUCT_PARSE_INFO is restored in finish_struct. */
6900 tree
6901 start_struct (location_t loc, enum tree_code code, tree name,
6902 struct c_struct_parse_info **enclosing_struct_parse_info)
6904 /* If there is already a tag defined at this scope
6905 (as a forward reference), just return it. */
6907 tree ref = NULL_TREE;
6908 location_t refloc = UNKNOWN_LOCATION;
6910 if (name != NULL_TREE)
6911 ref = lookup_tag (code, name, 1, &refloc);
6912 if (ref && TREE_CODE (ref) == code)
6914 if (TYPE_SIZE (ref))
6916 if (code == UNION_TYPE)
6917 error_at (loc, "redefinition of %<union %E%>", name);
6918 else
6919 error_at (loc, "redefinition of %<struct %E%>", name);
6920 if (refloc != UNKNOWN_LOCATION)
6921 inform (refloc, "originally defined here");
6922 /* Don't create structures using a name already in use. */
6923 ref = NULL_TREE;
6925 else if (C_TYPE_BEING_DEFINED (ref))
6927 if (code == UNION_TYPE)
6928 error_at (loc, "nested redefinition of %<union %E%>", name);
6929 else
6930 error_at (loc, "nested redefinition of %<struct %E%>", name);
6931 /* Don't bother to report "originally defined here" for a
6932 nested redefinition; the original definition should be
6933 obvious. */
6934 /* Don't create structures that contain themselves. */
6935 ref = NULL_TREE;
6939 /* Otherwise create a forward-reference just so the tag is in scope. */
6941 if (ref == NULL_TREE || TREE_CODE (ref) != code)
6943 ref = make_node (code);
6944 pushtag (loc, name, ref);
6947 C_TYPE_BEING_DEFINED (ref) = 1;
6948 TYPE_PACKED (ref) = flag_pack_struct;
6950 *enclosing_struct_parse_info = struct_parse_info;
6951 struct_parse_info = XNEW (struct c_struct_parse_info);
6952 struct_parse_info->struct_types.create (0);
6953 struct_parse_info->fields.create (0);
6954 struct_parse_info->typedefs_seen.create (0);
6956 /* FIXME: This will issue a warning for a use of a type defined
6957 within a statement expr used within sizeof, et. al. This is not
6958 terribly serious as C++ doesn't permit statement exprs within
6959 sizeof anyhow. */
6960 if (warn_cxx_compat && (in_sizeof || in_typeof || in_alignof))
6961 warning_at (loc, OPT_Wc___compat,
6962 "defining type in %qs expression is invalid in C++",
6963 (in_sizeof
6964 ? "sizeof"
6965 : (in_typeof ? "typeof" : "alignof")));
6967 return ref;
6970 /* Process the specs, declarator and width (NULL if omitted)
6971 of a structure component, returning a FIELD_DECL node.
6972 WIDTH is non-NULL for bit-fields only, and is an INTEGER_CST node.
6973 DECL_ATTRS is as for grokdeclarator.
6975 LOC is the location of the structure component.
6977 This is done during the parsing of the struct declaration.
6978 The FIELD_DECL nodes are chained together and the lot of them
6979 are ultimately passed to `build_struct' to make the RECORD_TYPE node. */
6981 tree
6982 grokfield (location_t loc,
6983 struct c_declarator *declarator, struct c_declspecs *declspecs,
6984 tree width, tree *decl_attrs)
6986 tree value;
6988 if (declarator->kind == cdk_id && declarator->u.id == NULL_TREE
6989 && width == NULL_TREE)
6991 /* This is an unnamed decl.
6993 If we have something of the form "union { list } ;" then this
6994 is the anonymous union extension. Similarly for struct.
6996 If this is something of the form "struct foo;", then
6997 If MS or Plan 9 extensions are enabled, this is handled as
6998 an anonymous struct.
6999 Otherwise this is a forward declaration of a structure tag.
7001 If this is something of the form "foo;" and foo is a TYPE_DECL, then
7002 If foo names a structure or union without a tag, then this
7003 is an anonymous struct (this is permitted by C11).
7004 If MS or Plan 9 extensions are enabled and foo names a
7005 structure, then again this is an anonymous struct.
7006 Otherwise this is an error.
7008 Oh what a horrid tangled web we weave. I wonder if MS consciously
7009 took this from Plan 9 or if it was an accident of implementation
7010 that took root before someone noticed the bug... */
7012 tree type = declspecs->type;
7013 bool type_ok = (TREE_CODE (type) == RECORD_TYPE
7014 || TREE_CODE (type) == UNION_TYPE);
7015 bool ok = false;
7017 if (type_ok
7018 && (flag_ms_extensions
7019 || flag_plan9_extensions
7020 || !declspecs->typedef_p))
7022 if (flag_ms_extensions || flag_plan9_extensions)
7023 ok = true;
7024 else if (TYPE_NAME (type) == NULL)
7025 ok = true;
7026 else
7027 ok = false;
7029 if (!ok)
7031 pedwarn (loc, 0, "declaration does not declare anything");
7032 return NULL_TREE;
7034 if (!flag_isoc11)
7036 if (flag_isoc99)
7037 pedwarn (loc, OPT_Wpedantic,
7038 "ISO C99 doesn%'t support unnamed structs/unions");
7039 else
7040 pedwarn (loc, OPT_Wpedantic,
7041 "ISO C90 doesn%'t support unnamed structs/unions");
7045 value = grokdeclarator (declarator, declspecs, FIELD, false,
7046 width ? &width : NULL, decl_attrs, NULL, NULL,
7047 DEPRECATED_NORMAL);
7049 finish_decl (value, loc, NULL_TREE, NULL_TREE, NULL_TREE);
7050 DECL_INITIAL (value) = width;
7052 if (warn_cxx_compat && DECL_NAME (value) != NULL_TREE)
7054 /* If we currently have a binding for this field, set the
7055 in_struct field in the binding, so that we warn about lookups
7056 which find it. */
7057 struct c_binding *b = I_SYMBOL_BINDING (DECL_NAME (value));
7058 if (b != NULL)
7060 /* If the in_struct field is not yet set, push it on a list
7061 to be cleared when this struct is finished. */
7062 if (!b->in_struct)
7064 struct_parse_info->fields.safe_push (b);
7065 b->in_struct = 1;
7070 return value;
7073 /* Subroutine of detect_field_duplicates: return whether X and Y,
7074 which are both fields in the same struct, have duplicate field
7075 names. */
7077 static bool
7078 is_duplicate_field (tree x, tree y)
7080 if (DECL_NAME (x) != NULL_TREE && DECL_NAME (x) == DECL_NAME (y))
7081 return true;
7083 /* When using -fplan9-extensions, an anonymous field whose name is a
7084 typedef can duplicate a field name. */
7085 if (flag_plan9_extensions
7086 && (DECL_NAME (x) == NULL_TREE || DECL_NAME (y) == NULL_TREE))
7088 tree xt, xn, yt, yn;
7090 xt = TREE_TYPE (x);
7091 if (DECL_NAME (x) != NULL_TREE)
7092 xn = DECL_NAME (x);
7093 else if ((TREE_CODE (xt) == RECORD_TYPE || TREE_CODE (xt) == UNION_TYPE)
7094 && TYPE_NAME (xt) != NULL_TREE
7095 && TREE_CODE (TYPE_NAME (xt)) == TYPE_DECL)
7096 xn = DECL_NAME (TYPE_NAME (xt));
7097 else
7098 xn = NULL_TREE;
7100 yt = TREE_TYPE (y);
7101 if (DECL_NAME (y) != NULL_TREE)
7102 yn = DECL_NAME (y);
7103 else if ((TREE_CODE (yt) == RECORD_TYPE || TREE_CODE (yt) == UNION_TYPE)
7104 && TYPE_NAME (yt) != NULL_TREE
7105 && TREE_CODE (TYPE_NAME (yt)) == TYPE_DECL)
7106 yn = DECL_NAME (TYPE_NAME (yt));
7107 else
7108 yn = NULL_TREE;
7110 if (xn != NULL_TREE && xn == yn)
7111 return true;
7114 return false;
7117 /* Subroutine of detect_field_duplicates: add the fields of FIELDLIST
7118 to HTAB, giving errors for any duplicates. */
7120 static void
7121 detect_field_duplicates_hash (tree fieldlist,
7122 hash_table <pointer_hash <tree_node> > htab)
7124 tree x, y;
7125 tree_node **slot;
7127 for (x = fieldlist; x ; x = DECL_CHAIN (x))
7128 if ((y = DECL_NAME (x)) != 0)
7130 slot = htab.find_slot (y, INSERT);
7131 if (*slot)
7133 error ("duplicate member %q+D", x);
7134 DECL_NAME (x) = NULL_TREE;
7136 *slot = y;
7138 else if (TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
7139 || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE)
7141 detect_field_duplicates_hash (TYPE_FIELDS (TREE_TYPE (x)), htab);
7143 /* When using -fplan9-extensions, an anonymous field whose
7144 name is a typedef can duplicate a field name. */
7145 if (flag_plan9_extensions
7146 && TYPE_NAME (TREE_TYPE (x)) != NULL_TREE
7147 && TREE_CODE (TYPE_NAME (TREE_TYPE (x))) == TYPE_DECL)
7149 tree xn = DECL_NAME (TYPE_NAME (TREE_TYPE (x)));
7150 slot = htab.find_slot (xn, INSERT);
7151 if (*slot)
7152 error ("duplicate member %q+D", TYPE_NAME (TREE_TYPE (x)));
7153 *slot = xn;
7158 /* Generate an error for any duplicate field names in FIELDLIST. Munge
7159 the list such that this does not present a problem later. */
7161 static void
7162 detect_field_duplicates (tree fieldlist)
7164 tree x, y;
7165 int timeout = 10;
7167 /* If the struct is the list of instance variables of an Objective-C
7168 class, then we need to check all the instance variables of
7169 superclasses when checking for duplicates (since you can't have
7170 an instance variable in a subclass with the same name as an
7171 instance variable in a superclass). We pass on this job to the
7172 Objective-C compiler. objc_detect_field_duplicates() will return
7173 false if we are not checking the list of instance variables and
7174 the C frontend should proceed with the standard field duplicate
7175 checks. If we are checking the list of instance variables, the
7176 ObjC frontend will do the check, emit the errors if needed, and
7177 then return true. */
7178 if (c_dialect_objc ())
7179 if (objc_detect_field_duplicates (false))
7180 return;
7182 /* First, see if there are more than "a few" fields.
7183 This is trivially true if there are zero or one fields. */
7184 if (!fieldlist || !DECL_CHAIN (fieldlist))
7185 return;
7186 x = fieldlist;
7187 do {
7188 timeout--;
7189 if (DECL_NAME (x) == NULL_TREE
7190 && (TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
7191 || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE))
7192 timeout = 0;
7193 x = DECL_CHAIN (x);
7194 } while (timeout > 0 && x);
7196 /* If there were "few" fields and no anonymous structures or unions,
7197 avoid the overhead of allocating a hash table. Instead just do
7198 the nested traversal thing. */
7199 if (timeout > 0)
7201 for (x = DECL_CHAIN (fieldlist); x; x = DECL_CHAIN (x))
7202 /* When using -fplan9-extensions, we can have duplicates
7203 between typedef names and fields. */
7204 if (DECL_NAME (x)
7205 || (flag_plan9_extensions
7206 && DECL_NAME (x) == NULL_TREE
7207 && (TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
7208 || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE)
7209 && TYPE_NAME (TREE_TYPE (x)) != NULL_TREE
7210 && TREE_CODE (TYPE_NAME (TREE_TYPE (x))) == TYPE_DECL))
7212 for (y = fieldlist; y != x; y = TREE_CHAIN (y))
7213 if (is_duplicate_field (y, x))
7215 error ("duplicate member %q+D", x);
7216 DECL_NAME (x) = NULL_TREE;
7220 else
7222 hash_table <pointer_hash <tree_node> > htab;
7223 htab.create (37);
7225 detect_field_duplicates_hash (fieldlist, htab);
7226 htab.dispose ();
7230 /* Finish up struct info used by -Wc++-compat. */
7232 static void
7233 warn_cxx_compat_finish_struct (tree fieldlist)
7235 unsigned int ix;
7236 tree x;
7237 struct c_binding *b;
7239 /* Set the C_TYPE_DEFINED_IN_STRUCT flag for each type defined in
7240 the current struct. We do this now at the end of the struct
7241 because the flag is used to issue visibility warnings, and we
7242 only want to issue those warnings if the type is referenced
7243 outside of the struct declaration. */
7244 FOR_EACH_VEC_ELT (struct_parse_info->struct_types, ix, x)
7245 C_TYPE_DEFINED_IN_STRUCT (x) = 1;
7247 /* The TYPEDEFS_SEEN field of STRUCT_PARSE_INFO is a list of
7248 typedefs used when declaring fields in this struct. If the name
7249 of any of the fields is also a typedef name then the struct would
7250 not parse in C++, because the C++ lookup rules say that the
7251 typedef name would be looked up in the context of the struct, and
7252 would thus be the field rather than the typedef. */
7253 if (!struct_parse_info->typedefs_seen.is_empty ()
7254 && fieldlist != NULL_TREE)
7256 /* Use a pointer_set using the name of the typedef. We can use
7257 a pointer_set because identifiers are interned. */
7258 struct pointer_set_t *tset = pointer_set_create ();
7260 FOR_EACH_VEC_ELT (struct_parse_info->typedefs_seen, ix, x)
7261 pointer_set_insert (tset, DECL_NAME (x));
7263 for (x = fieldlist; x != NULL_TREE; x = DECL_CHAIN (x))
7265 if (DECL_NAME (x) != NULL_TREE
7266 && pointer_set_contains (tset, DECL_NAME (x)))
7268 warning_at (DECL_SOURCE_LOCATION (x), OPT_Wc___compat,
7269 ("using %qD as both field and typedef name is "
7270 "invalid in C++"),
7272 /* FIXME: It would be nice to report the location where
7273 the typedef name is used. */
7277 pointer_set_destroy (tset);
7280 /* For each field which has a binding and which was not defined in
7281 an enclosing struct, clear the in_struct field. */
7282 FOR_EACH_VEC_ELT (struct_parse_info->fields, ix, b)
7283 b->in_struct = 0;
7286 /* Fill in the fields of a RECORD_TYPE or UNION_TYPE node, T.
7287 LOC is the location of the RECORD_TYPE or UNION_TYPE's definition.
7288 FIELDLIST is a chain of FIELD_DECL nodes for the fields.
7289 ATTRIBUTES are attributes to be applied to the structure.
7291 ENCLOSING_STRUCT_PARSE_INFO is the value of STRUCT_PARSE_INFO when
7292 the struct was started. */
7294 tree
7295 finish_struct (location_t loc, tree t, tree fieldlist, tree attributes,
7296 struct c_struct_parse_info *enclosing_struct_parse_info)
7298 tree x;
7299 bool toplevel = file_scope == current_scope;
7300 int saw_named_field;
7302 /* If this type was previously laid out as a forward reference,
7303 make sure we lay it out again. */
7305 TYPE_SIZE (t) = 0;
7307 decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
7309 if (pedantic)
7311 for (x = fieldlist; x; x = DECL_CHAIN (x))
7313 if (DECL_NAME (x) != 0)
7314 break;
7315 if (flag_isoc11
7316 && (TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
7317 || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE))
7318 break;
7321 if (x == 0)
7323 if (TREE_CODE (t) == UNION_TYPE)
7325 if (fieldlist)
7326 pedwarn (loc, OPT_Wpedantic, "union has no named members");
7327 else
7328 pedwarn (loc, OPT_Wpedantic, "union has no members");
7330 else
7332 if (fieldlist)
7333 pedwarn (loc, OPT_Wpedantic, "struct has no named members");
7334 else
7335 pedwarn (loc, OPT_Wpedantic, "struct has no members");
7340 /* Install struct as DECL_CONTEXT of each field decl.
7341 Also process specified field sizes, found in the DECL_INITIAL,
7342 storing 0 there after the type has been changed to precision equal
7343 to its width, rather than the precision of the specified standard
7344 type. (Correct layout requires the original type to have been preserved
7345 until now.) */
7347 saw_named_field = 0;
7348 for (x = fieldlist; x; x = DECL_CHAIN (x))
7350 if (TREE_TYPE (x) == error_mark_node)
7351 continue;
7353 DECL_CONTEXT (x) = t;
7355 /* If any field is const, the structure type is pseudo-const. */
7356 if (TREE_READONLY (x))
7357 C_TYPE_FIELDS_READONLY (t) = 1;
7358 else
7360 /* A field that is pseudo-const makes the structure likewise. */
7361 tree t1 = strip_array_types (TREE_TYPE (x));
7362 if ((TREE_CODE (t1) == RECORD_TYPE || TREE_CODE (t1) == UNION_TYPE)
7363 && C_TYPE_FIELDS_READONLY (t1))
7364 C_TYPE_FIELDS_READONLY (t) = 1;
7367 /* Any field that is volatile means variables of this type must be
7368 treated in some ways as volatile. */
7369 if (TREE_THIS_VOLATILE (x))
7370 C_TYPE_FIELDS_VOLATILE (t) = 1;
7372 /* Any field of nominal variable size implies structure is too. */
7373 if (C_DECL_VARIABLE_SIZE (x))
7374 C_TYPE_VARIABLE_SIZE (t) = 1;
7376 if (DECL_INITIAL (x))
7378 unsigned HOST_WIDE_INT width = tree_to_uhwi (DECL_INITIAL (x));
7379 DECL_SIZE (x) = bitsize_int (width);
7380 DECL_BIT_FIELD (x) = 1;
7381 SET_DECL_C_BIT_FIELD (x);
7384 if (TYPE_PACKED (t)
7385 && (DECL_BIT_FIELD (x)
7386 || TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT))
7387 DECL_PACKED (x) = 1;
7389 /* Detect flexible array member in an invalid context. */
7390 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
7391 && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
7392 && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
7393 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
7395 if (TREE_CODE (t) == UNION_TYPE)
7397 error_at (DECL_SOURCE_LOCATION (x),
7398 "flexible array member in union");
7399 TREE_TYPE (x) = error_mark_node;
7401 else if (DECL_CHAIN (x) != NULL_TREE)
7403 error_at (DECL_SOURCE_LOCATION (x),
7404 "flexible array member not at end of struct");
7405 TREE_TYPE (x) = error_mark_node;
7407 else if (!saw_named_field)
7409 error_at (DECL_SOURCE_LOCATION (x),
7410 "flexible array member in otherwise empty struct");
7411 TREE_TYPE (x) = error_mark_node;
7415 if (pedantic && TREE_CODE (t) == RECORD_TYPE
7416 && flexible_array_type_p (TREE_TYPE (x)))
7417 pedwarn (DECL_SOURCE_LOCATION (x), OPT_Wpedantic,
7418 "invalid use of structure with flexible array member");
7420 if (DECL_NAME (x)
7421 || TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
7422 || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE)
7423 saw_named_field = 1;
7426 detect_field_duplicates (fieldlist);
7428 /* Now we have the nearly final fieldlist. Record it,
7429 then lay out the structure or union (including the fields). */
7431 TYPE_FIELDS (t) = fieldlist;
7433 layout_type (t);
7435 if (TYPE_SIZE_UNIT (t)
7436 && TREE_CODE (TYPE_SIZE_UNIT (t)) == INTEGER_CST
7437 && !TREE_OVERFLOW (TYPE_SIZE_UNIT (t))
7438 && !valid_constant_size_p (TYPE_SIZE_UNIT (t)))
7439 error ("type %qT is too large", t);
7441 /* Give bit-fields their proper types. */
7443 tree *fieldlistp = &fieldlist;
7444 while (*fieldlistp)
7445 if (TREE_CODE (*fieldlistp) == FIELD_DECL && DECL_INITIAL (*fieldlistp)
7446 && TREE_TYPE (*fieldlistp) != error_mark_node)
7448 unsigned HOST_WIDE_INT width
7449 = tree_to_uhwi (DECL_INITIAL (*fieldlistp));
7450 tree type = TREE_TYPE (*fieldlistp);
7451 if (width != TYPE_PRECISION (type))
7453 TREE_TYPE (*fieldlistp)
7454 = c_build_bitfield_integer_type (width, TYPE_UNSIGNED (type));
7455 DECL_MODE (*fieldlistp) = TYPE_MODE (TREE_TYPE (*fieldlistp));
7457 DECL_INITIAL (*fieldlistp) = 0;
7459 else
7460 fieldlistp = &DECL_CHAIN (*fieldlistp);
7463 /* Now we have the truly final field list.
7464 Store it in this type and in the variants. */
7466 TYPE_FIELDS (t) = fieldlist;
7468 /* If there are lots of fields, sort so we can look through them fast.
7469 We arbitrarily consider 16 or more elts to be "a lot". */
7472 int len = 0;
7474 for (x = fieldlist; x; x = DECL_CHAIN (x))
7476 if (len > 15 || DECL_NAME (x) == NULL)
7477 break;
7478 len += 1;
7481 if (len > 15)
7483 tree *field_array;
7484 struct lang_type *space;
7485 struct sorted_fields_type *space2;
7487 len += list_length (x);
7489 /* Use the same allocation policy here that make_node uses, to
7490 ensure that this lives as long as the rest of the struct decl.
7491 All decls in an inline function need to be saved. */
7493 space = ggc_alloc_cleared_lang_type (sizeof (struct lang_type));
7494 space2 = ggc_alloc_sorted_fields_type
7495 (sizeof (struct sorted_fields_type) + len * sizeof (tree));
7497 len = 0;
7498 space->s = space2;
7499 field_array = &space2->elts[0];
7500 for (x = fieldlist; x; x = DECL_CHAIN (x))
7502 field_array[len++] = x;
7504 /* If there is anonymous struct or union, break out of the loop. */
7505 if (DECL_NAME (x) == NULL)
7506 break;
7508 /* Found no anonymous struct/union. Add the TYPE_LANG_SPECIFIC. */
7509 if (x == NULL)
7511 TYPE_LANG_SPECIFIC (t) = space;
7512 TYPE_LANG_SPECIFIC (t)->s->len = len;
7513 field_array = TYPE_LANG_SPECIFIC (t)->s->elts;
7514 qsort (field_array, len, sizeof (tree), field_decl_cmp);
7519 for (x = TYPE_MAIN_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
7521 TYPE_FIELDS (x) = TYPE_FIELDS (t);
7522 TYPE_LANG_SPECIFIC (x) = TYPE_LANG_SPECIFIC (t);
7523 C_TYPE_FIELDS_READONLY (x) = C_TYPE_FIELDS_READONLY (t);
7524 C_TYPE_FIELDS_VOLATILE (x) = C_TYPE_FIELDS_VOLATILE (t);
7525 C_TYPE_VARIABLE_SIZE (x) = C_TYPE_VARIABLE_SIZE (t);
7528 /* If this was supposed to be a transparent union, but we can't
7529 make it one, warn and turn off the flag. */
7530 if (TREE_CODE (t) == UNION_TYPE
7531 && TYPE_TRANSPARENT_AGGR (t)
7532 && (!TYPE_FIELDS (t) || TYPE_MODE (t) != DECL_MODE (TYPE_FIELDS (t))))
7534 TYPE_TRANSPARENT_AGGR (t) = 0;
7535 warning_at (loc, 0, "union cannot be made transparent");
7538 /* If this structure or union completes the type of any previous
7539 variable declaration, lay it out and output its rtl. */
7540 for (x = C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t));
7542 x = TREE_CHAIN (x))
7544 tree decl = TREE_VALUE (x);
7545 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
7546 layout_array_type (TREE_TYPE (decl));
7547 if (TREE_CODE (decl) != TYPE_DECL)
7549 layout_decl (decl, 0);
7550 if (c_dialect_objc ())
7551 objc_check_decl (decl);
7552 rest_of_decl_compilation (decl, toplevel, 0);
7555 C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t)) = 0;
7557 /* Update type location to the one of the definition, instead of e.g.
7558 a forward declaration. */
7559 if (TYPE_STUB_DECL (t))
7560 DECL_SOURCE_LOCATION (TYPE_STUB_DECL (t)) = loc;
7562 /* Finish debugging output for this type. */
7563 rest_of_type_compilation (t, toplevel);
7565 /* If we're inside a function proper, i.e. not file-scope and not still
7566 parsing parameters, then arrange for the size of a variable sized type
7567 to be bound now. */
7568 if (building_stmt_list_p () && variably_modified_type_p (t, NULL_TREE))
7569 add_stmt (build_stmt (loc,
7570 DECL_EXPR, build_decl (loc, TYPE_DECL, NULL, t)));
7572 if (warn_cxx_compat)
7573 warn_cxx_compat_finish_struct (fieldlist);
7575 struct_parse_info->struct_types.release ();
7576 struct_parse_info->fields.release ();
7577 struct_parse_info->typedefs_seen.release ();
7578 XDELETE (struct_parse_info);
7580 struct_parse_info = enclosing_struct_parse_info;
7582 /* If this struct is defined inside a struct, add it to
7583 struct_types. */
7584 if (warn_cxx_compat
7585 && struct_parse_info != NULL
7586 && !in_sizeof && !in_typeof && !in_alignof)
7587 struct_parse_info->struct_types.safe_push (t);
7589 return t;
7592 /* Lay out the type T, and its element type, and so on. */
7594 static void
7595 layout_array_type (tree t)
7597 if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
7598 layout_array_type (TREE_TYPE (t));
7599 layout_type (t);
7602 /* Begin compiling the definition of an enumeration type.
7603 NAME is its name (or null if anonymous).
7604 LOC is the enum's location.
7605 Returns the type object, as yet incomplete.
7606 Also records info about it so that build_enumerator
7607 may be used to declare the individual values as they are read. */
7609 tree
7610 start_enum (location_t loc, struct c_enum_contents *the_enum, tree name)
7612 tree enumtype = NULL_TREE;
7613 location_t enumloc = UNKNOWN_LOCATION;
7615 /* If this is the real definition for a previous forward reference,
7616 fill in the contents in the same object that used to be the
7617 forward reference. */
7619 if (name != NULL_TREE)
7620 enumtype = lookup_tag (ENUMERAL_TYPE, name, 1, &enumloc);
7622 if (enumtype == 0 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
7624 enumtype = make_node (ENUMERAL_TYPE);
7625 pushtag (loc, name, enumtype);
7628 if (C_TYPE_BEING_DEFINED (enumtype))
7629 error_at (loc, "nested redefinition of %<enum %E%>", name);
7631 C_TYPE_BEING_DEFINED (enumtype) = 1;
7633 if (TYPE_VALUES (enumtype) != 0)
7635 /* This enum is a named one that has been declared already. */
7636 error_at (loc, "redeclaration of %<enum %E%>", name);
7637 if (enumloc != UNKNOWN_LOCATION)
7638 inform (enumloc, "originally defined here");
7640 /* Completely replace its old definition.
7641 The old enumerators remain defined, however. */
7642 TYPE_VALUES (enumtype) = 0;
7645 the_enum->enum_next_value = integer_zero_node;
7646 the_enum->enum_overflow = 0;
7648 if (flag_short_enums)
7649 TYPE_PACKED (enumtype) = 1;
7651 /* FIXME: This will issue a warning for a use of a type defined
7652 within sizeof in a statement expr. This is not terribly serious
7653 as C++ doesn't permit statement exprs within sizeof anyhow. */
7654 if (warn_cxx_compat && (in_sizeof || in_typeof || in_alignof))
7655 warning_at (loc, OPT_Wc___compat,
7656 "defining type in %qs expression is invalid in C++",
7657 (in_sizeof
7658 ? "sizeof"
7659 : (in_typeof ? "typeof" : "alignof")));
7661 return enumtype;
7664 /* After processing and defining all the values of an enumeration type,
7665 install their decls in the enumeration type and finish it off.
7666 ENUMTYPE is the type object, VALUES a list of decl-value pairs,
7667 and ATTRIBUTES are the specified attributes.
7668 Returns ENUMTYPE. */
7670 tree
7671 finish_enum (tree enumtype, tree values, tree attributes)
7673 tree pair, tem;
7674 tree minnode = 0, maxnode = 0;
7675 int precision, unsign;
7676 bool toplevel = (file_scope == current_scope);
7677 struct lang_type *lt;
7679 decl_attributes (&enumtype, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
7681 /* Calculate the maximum value of any enumerator in this type. */
7683 if (values == error_mark_node)
7684 minnode = maxnode = integer_zero_node;
7685 else
7687 minnode = maxnode = TREE_VALUE (values);
7688 for (pair = TREE_CHAIN (values); pair; pair = TREE_CHAIN (pair))
7690 tree value = TREE_VALUE (pair);
7691 if (tree_int_cst_lt (maxnode, value))
7692 maxnode = value;
7693 if (tree_int_cst_lt (value, minnode))
7694 minnode = value;
7698 /* Construct the final type of this enumeration. It is the same
7699 as one of the integral types - the narrowest one that fits, except
7700 that normally we only go as narrow as int - and signed iff any of
7701 the values are negative. */
7702 unsign = (tree_int_cst_sgn (minnode) >= 0);
7703 precision = MAX (tree_int_cst_min_precision (minnode, unsign),
7704 tree_int_cst_min_precision (maxnode, unsign));
7706 if (TYPE_PACKED (enumtype) || precision > TYPE_PRECISION (integer_type_node))
7708 tem = c_common_type_for_size (precision, unsign);
7709 if (tem == NULL)
7711 warning (0, "enumeration values exceed range of largest integer");
7712 tem = long_long_integer_type_node;
7715 else
7716 tem = unsign ? unsigned_type_node : integer_type_node;
7718 TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (tem);
7719 TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (tem);
7720 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (tem);
7721 TYPE_SIZE (enumtype) = 0;
7723 /* If the precision of the type was specific with an attribute and it
7724 was too small, give an error. Otherwise, use it. */
7725 if (TYPE_PRECISION (enumtype))
7727 if (precision > TYPE_PRECISION (enumtype))
7728 error ("specified mode too small for enumeral values");
7730 else
7731 TYPE_PRECISION (enumtype) = TYPE_PRECISION (tem);
7733 layout_type (enumtype);
7735 if (values != error_mark_node)
7737 /* Change the type of the enumerators to be the enum type. We
7738 need to do this irrespective of the size of the enum, for
7739 proper type checking. Replace the DECL_INITIALs of the
7740 enumerators, and the value slots of the list, with copies
7741 that have the enum type; they cannot be modified in place
7742 because they may be shared (e.g. integer_zero_node) Finally,
7743 change the purpose slots to point to the names of the decls. */
7744 for (pair = values; pair; pair = TREE_CHAIN (pair))
7746 tree enu = TREE_PURPOSE (pair);
7747 tree ini = DECL_INITIAL (enu);
7749 TREE_TYPE (enu) = enumtype;
7751 /* The ISO C Standard mandates enumerators to have type int,
7752 even though the underlying type of an enum type is
7753 unspecified. However, GCC allows enumerators of any
7754 integer type as an extensions. build_enumerator()
7755 converts any enumerators that fit in an int to type int,
7756 to avoid promotions to unsigned types when comparing
7757 integers with enumerators that fit in the int range.
7758 When -pedantic is given, build_enumerator() would have
7759 already warned about those that don't fit. Here we
7760 convert the rest to the enumerator type. */
7761 if (TREE_TYPE (ini) != integer_type_node)
7762 ini = convert (enumtype, ini);
7764 DECL_INITIAL (enu) = ini;
7765 TREE_PURPOSE (pair) = DECL_NAME (enu);
7766 TREE_VALUE (pair) = ini;
7769 TYPE_VALUES (enumtype) = values;
7772 /* Record the min/max values so that we can warn about bit-field
7773 enumerations that are too small for the values. */
7774 lt = ggc_alloc_cleared_lang_type (sizeof (struct lang_type));
7775 lt->enum_min = minnode;
7776 lt->enum_max = maxnode;
7777 TYPE_LANG_SPECIFIC (enumtype) = lt;
7779 /* Fix up all variant types of this enum type. */
7780 for (tem = TYPE_MAIN_VARIANT (enumtype); tem; tem = TYPE_NEXT_VARIANT (tem))
7782 if (tem == enumtype)
7783 continue;
7784 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
7785 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
7786 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
7787 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
7788 TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
7789 SET_TYPE_MODE (tem, TYPE_MODE (enumtype));
7790 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
7791 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
7792 TYPE_USER_ALIGN (tem) = TYPE_USER_ALIGN (enumtype);
7793 TYPE_UNSIGNED (tem) = TYPE_UNSIGNED (enumtype);
7794 TYPE_LANG_SPECIFIC (tem) = TYPE_LANG_SPECIFIC (enumtype);
7797 /* Finish debugging output for this type. */
7798 rest_of_type_compilation (enumtype, toplevel);
7800 /* If this enum is defined inside a struct, add it to
7801 struct_types. */
7802 if (warn_cxx_compat
7803 && struct_parse_info != NULL
7804 && !in_sizeof && !in_typeof && !in_alignof)
7805 struct_parse_info->struct_types.safe_push (enumtype);
7807 return enumtype;
7810 /* Build and install a CONST_DECL for one value of the
7811 current enumeration type (one that was begun with start_enum).
7812 DECL_LOC is the location of the enumerator.
7813 LOC is the location of the '=' operator if any, DECL_LOC otherwise.
7814 Return a tree-list containing the CONST_DECL and its value.
7815 Assignment of sequential values by default is handled here. */
7817 tree
7818 build_enumerator (location_t decl_loc, location_t loc,
7819 struct c_enum_contents *the_enum, tree name, tree value)
7821 tree decl, type;
7823 /* Validate and default VALUE. */
7825 if (value != 0)
7827 /* Don't issue more errors for error_mark_node (i.e. an
7828 undeclared identifier) - just ignore the value expression. */
7829 if (value == error_mark_node)
7830 value = 0;
7831 else if (!INTEGRAL_TYPE_P (TREE_TYPE (value)))
7833 error_at (loc, "enumerator value for %qE is not an integer constant",
7834 name);
7835 value = 0;
7837 else
7839 if (TREE_CODE (value) != INTEGER_CST)
7841 value = c_fully_fold (value, false, NULL);
7842 if (TREE_CODE (value) == INTEGER_CST)
7843 pedwarn (loc, OPT_Wpedantic,
7844 "enumerator value for %qE is not an integer "
7845 "constant expression", name);
7847 if (TREE_CODE (value) != INTEGER_CST)
7849 error ("enumerator value for %qE is not an integer constant",
7850 name);
7851 value = 0;
7853 else
7855 value = default_conversion (value);
7856 constant_expression_warning (value);
7861 /* Default based on previous value. */
7862 /* It should no longer be possible to have NON_LVALUE_EXPR
7863 in the default. */
7864 if (value == 0)
7866 value = the_enum->enum_next_value;
7867 if (the_enum->enum_overflow)
7868 error_at (loc, "overflow in enumeration values");
7870 /* Even though the underlying type of an enum is unspecified, the
7871 type of enumeration constants is explicitly defined as int
7872 (6.4.4.3/2 in the C99 Standard). GCC allows any integer type as
7873 an extension. */
7874 else if (!int_fits_type_p (value, integer_type_node))
7875 pedwarn (loc, OPT_Wpedantic,
7876 "ISO C restricts enumerator values to range of %<int%>");
7878 /* The ISO C Standard mandates enumerators to have type int, even
7879 though the underlying type of an enum type is unspecified.
7880 However, GCC allows enumerators of any integer type as an
7881 extensions. Here we convert any enumerators that fit in an int
7882 to type int, to avoid promotions to unsigned types when comparing
7883 integers with enumerators that fit in the int range. When
7884 -pedantic is given, we would have already warned about those that
7885 don't fit. We have to do this here rather than in finish_enum
7886 because this value may be used to define more enumerators. */
7887 if (int_fits_type_p (value, integer_type_node))
7888 value = convert (integer_type_node, value);
7890 /* Set basis for default for next value. */
7891 the_enum->enum_next_value
7892 = build_binary_op (EXPR_LOC_OR_LOC (value, input_location),
7893 PLUS_EXPR, value, integer_one_node, 0);
7894 the_enum->enum_overflow = tree_int_cst_lt (the_enum->enum_next_value, value);
7896 /* Now create a declaration for the enum value name. */
7898 type = TREE_TYPE (value);
7899 type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
7900 TYPE_PRECISION (integer_type_node)),
7901 (TYPE_PRECISION (type)
7902 >= TYPE_PRECISION (integer_type_node)
7903 && TYPE_UNSIGNED (type)));
7905 decl = build_decl (decl_loc, CONST_DECL, name, type);
7906 DECL_INITIAL (decl) = convert (type, value);
7907 pushdecl (decl);
7909 return tree_cons (decl, value, NULL_TREE);
7913 /* Create the FUNCTION_DECL for a function definition.
7914 DECLSPECS, DECLARATOR and ATTRIBUTES are the parts of
7915 the declaration; they describe the function's name and the type it returns,
7916 but twisted together in a fashion that parallels the syntax of C.
7918 This function creates a binding context for the function body
7919 as well as setting up the FUNCTION_DECL in current_function_decl.
7921 Returns 1 on success. If the DECLARATOR is not suitable for a function
7922 (it defines a datum instead), we return 0, which tells
7923 yyparse to report a parse error. */
7926 start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
7927 tree attributes)
7929 tree decl1, old_decl;
7930 tree restype, resdecl;
7931 location_t loc;
7933 current_function_returns_value = 0; /* Assume, until we see it does. */
7934 current_function_returns_null = 0;
7935 current_function_returns_abnormally = 0;
7936 warn_about_return_type = 0;
7937 c_switch_stack = NULL;
7939 /* Indicate no valid break/continue context by setting these variables
7940 to some non-null, non-label value. We'll notice and emit the proper
7941 error message in c_finish_bc_stmt. */
7942 c_break_label = c_cont_label = size_zero_node;
7944 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, true, NULL,
7945 &attributes, NULL, NULL, DEPRECATED_NORMAL);
7947 /* If the declarator is not suitable for a function definition,
7948 cause a syntax error. */
7949 if (decl1 == 0
7950 || TREE_CODE (decl1) != FUNCTION_DECL)
7951 return 0;
7953 loc = DECL_SOURCE_LOCATION (decl1);
7955 c_decl_attributes (&decl1, attributes, 0);
7957 if (DECL_DECLARED_INLINE_P (decl1)
7958 && DECL_UNINLINABLE (decl1)
7959 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl1)))
7960 warning_at (loc, OPT_Wattributes,
7961 "inline function %qD given attribute noinline",
7962 decl1);
7964 /* Handle gnu_inline attribute. */
7965 if (declspecs->inline_p
7966 && !flag_gnu89_inline
7967 && TREE_CODE (decl1) == FUNCTION_DECL
7968 && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl1))
7969 || current_function_decl))
7971 if (declspecs->storage_class != csc_static)
7972 DECL_EXTERNAL (decl1) = !DECL_EXTERNAL (decl1);
7975 announce_function (decl1);
7977 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl1))))
7979 error_at (loc, "return type is an incomplete type");
7980 /* Make it return void instead. */
7981 TREE_TYPE (decl1)
7982 = build_function_type (void_type_node,
7983 TYPE_ARG_TYPES (TREE_TYPE (decl1)));
7986 if (warn_about_return_type)
7987 pedwarn_c99 (loc, flag_isoc99 ? 0
7988 : (warn_return_type ? OPT_Wreturn_type : OPT_Wimplicit_int),
7989 "return type defaults to %<int%>");
7991 /* Make the init_value nonzero so pushdecl knows this is not tentative.
7992 error_mark_node is replaced below (in pop_scope) with the BLOCK. */
7993 DECL_INITIAL (decl1) = error_mark_node;
7995 /* A nested function is not global. */
7996 if (current_function_decl != 0)
7997 TREE_PUBLIC (decl1) = 0;
7999 /* If this definition isn't a prototype and we had a prototype declaration
8000 before, copy the arg type info from that prototype. */
8001 old_decl = lookup_name_in_scope (DECL_NAME (decl1), current_scope);
8002 if (old_decl && TREE_CODE (old_decl) != FUNCTION_DECL)
8003 old_decl = 0;
8004 current_function_prototype_locus = UNKNOWN_LOCATION;
8005 current_function_prototype_built_in = false;
8006 current_function_prototype_arg_types = NULL_TREE;
8007 if (!prototype_p (TREE_TYPE (decl1)))
8009 if (old_decl != 0 && TREE_CODE (TREE_TYPE (old_decl)) == FUNCTION_TYPE
8010 && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
8011 TREE_TYPE (TREE_TYPE (old_decl))))
8013 TREE_TYPE (decl1) = composite_type (TREE_TYPE (old_decl),
8014 TREE_TYPE (decl1));
8015 current_function_prototype_locus = DECL_SOURCE_LOCATION (old_decl);
8016 current_function_prototype_built_in
8017 = C_DECL_BUILTIN_PROTOTYPE (old_decl);
8018 current_function_prototype_arg_types
8019 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
8021 if (TREE_PUBLIC (decl1))
8023 /* If there is an external prototype declaration of this
8024 function, record its location but do not copy information
8025 to this decl. This may be an invisible declaration
8026 (built-in or in a scope which has finished) or simply
8027 have more refined argument types than any declaration
8028 found above. */
8029 struct c_binding *b;
8030 for (b = I_SYMBOL_BINDING (DECL_NAME (decl1)); b; b = b->shadowed)
8031 if (B_IN_SCOPE (b, external_scope))
8032 break;
8033 if (b)
8035 tree ext_decl, ext_type;
8036 ext_decl = b->decl;
8037 ext_type = b->u.type ? b->u.type : TREE_TYPE (ext_decl);
8038 if (TREE_CODE (ext_type) == FUNCTION_TYPE
8039 && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
8040 TREE_TYPE (ext_type)))
8042 current_function_prototype_locus
8043 = DECL_SOURCE_LOCATION (ext_decl);
8044 current_function_prototype_built_in
8045 = C_DECL_BUILTIN_PROTOTYPE (ext_decl);
8046 current_function_prototype_arg_types
8047 = TYPE_ARG_TYPES (ext_type);
8053 /* Optionally warn of old-fashioned def with no previous prototype. */
8054 if (warn_strict_prototypes
8055 && old_decl != error_mark_node
8056 && !prototype_p (TREE_TYPE (decl1))
8057 && C_DECL_ISNT_PROTOTYPE (old_decl))
8058 warning_at (loc, OPT_Wstrict_prototypes,
8059 "function declaration isn%'t a prototype");
8060 /* Optionally warn of any global def with no previous prototype. */
8061 else if (warn_missing_prototypes
8062 && old_decl != error_mark_node
8063 && TREE_PUBLIC (decl1)
8064 && !MAIN_NAME_P (DECL_NAME (decl1))
8065 && C_DECL_ISNT_PROTOTYPE (old_decl)
8066 && !DECL_DECLARED_INLINE_P (decl1))
8067 warning_at (loc, OPT_Wmissing_prototypes,
8068 "no previous prototype for %qD", decl1);
8069 /* Optionally warn of any def with no previous prototype
8070 if the function has already been used. */
8071 else if (warn_missing_prototypes
8072 && old_decl != 0
8073 && old_decl != error_mark_node
8074 && TREE_USED (old_decl)
8075 && !prototype_p (TREE_TYPE (old_decl)))
8076 warning_at (loc, OPT_Wmissing_prototypes,
8077 "%qD was used with no prototype before its definition", decl1);
8078 /* Optionally warn of any global def with no previous declaration. */
8079 else if (warn_missing_declarations
8080 && TREE_PUBLIC (decl1)
8081 && old_decl == 0
8082 && !MAIN_NAME_P (DECL_NAME (decl1)))
8083 warning_at (loc, OPT_Wmissing_declarations,
8084 "no previous declaration for %qD",
8085 decl1);
8086 /* Optionally warn of any def with no previous declaration
8087 if the function has already been used. */
8088 else if (warn_missing_declarations
8089 && old_decl != 0
8090 && old_decl != error_mark_node
8091 && TREE_USED (old_decl)
8092 && C_DECL_IMPLICIT (old_decl))
8093 warning_at (loc, OPT_Wmissing_declarations,
8094 "%qD was used with no declaration before its definition", decl1);
8096 /* This function exists in static storage.
8097 (This does not mean `static' in the C sense!) */
8098 TREE_STATIC (decl1) = 1;
8100 /* This is the earliest point at which we might know the assembler
8101 name of the function. Thus, if it's set before this, die horribly. */
8102 gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl1));
8104 /* If #pragma weak was used, mark the decl weak now. */
8105 if (current_scope == file_scope)
8106 maybe_apply_pragma_weak (decl1);
8108 /* Warn for unlikely, improbable, or stupid declarations of `main'. */
8109 if (warn_main && MAIN_NAME_P (DECL_NAME (decl1)))
8111 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1)))
8112 != integer_type_node)
8113 pedwarn (loc, OPT_Wmain, "return type of %qD is not %<int%>", decl1);
8115 check_main_parameter_types (decl1);
8117 if (!TREE_PUBLIC (decl1))
8118 pedwarn (loc, OPT_Wmain,
8119 "%qD is normally a non-static function", decl1);
8122 /* Record the decl so that the function name is defined.
8123 If we already have a decl for this name, and it is a FUNCTION_DECL,
8124 use the old decl. */
8126 current_function_decl = pushdecl (decl1);
8128 push_scope ();
8129 declare_parm_level ();
8131 restype = TREE_TYPE (TREE_TYPE (current_function_decl));
8132 resdecl = build_decl (loc, RESULT_DECL, NULL_TREE, restype);
8133 DECL_ARTIFICIAL (resdecl) = 1;
8134 DECL_IGNORED_P (resdecl) = 1;
8135 DECL_RESULT (current_function_decl) = resdecl;
8137 start_fname_decls ();
8139 return 1;
8142 /* Subroutine of store_parm_decls which handles new-style function
8143 definitions (prototype format). The parms already have decls, so we
8144 need only record them as in effect and complain if any redundant
8145 old-style parm decls were written. */
8146 static void
8147 store_parm_decls_newstyle (tree fndecl, const struct c_arg_info *arg_info)
8149 tree decl;
8150 c_arg_tag *tag;
8151 unsigned ix;
8153 if (current_scope->bindings)
8155 error_at (DECL_SOURCE_LOCATION (fndecl),
8156 "old-style parameter declarations in prototyped "
8157 "function definition");
8159 /* Get rid of the old-style declarations. */
8160 pop_scope ();
8161 push_scope ();
8163 /* Don't issue this warning for nested functions, and don't issue this
8164 warning if we got here because ARG_INFO_TYPES was error_mark_node
8165 (this happens when a function definition has just an ellipsis in
8166 its parameter list). */
8167 else if (!in_system_header_at (input_location)
8168 && !current_function_scope
8169 && arg_info->types != error_mark_node)
8170 warning_at (DECL_SOURCE_LOCATION (fndecl), OPT_Wtraditional,
8171 "traditional C rejects ISO C style function definitions");
8173 /* Now make all the parameter declarations visible in the function body.
8174 We can bypass most of the grunt work of pushdecl. */
8175 for (decl = arg_info->parms; decl; decl = DECL_CHAIN (decl))
8177 DECL_CONTEXT (decl) = current_function_decl;
8178 if (DECL_NAME (decl))
8180 bind (DECL_NAME (decl), decl, current_scope,
8181 /*invisible=*/false, /*nested=*/false,
8182 UNKNOWN_LOCATION);
8183 if (!TREE_USED (decl))
8184 warn_if_shadowing (decl);
8186 else
8187 error_at (DECL_SOURCE_LOCATION (decl), "parameter name omitted");
8190 /* Record the parameter list in the function declaration. */
8191 DECL_ARGUMENTS (fndecl) = arg_info->parms;
8193 /* Now make all the ancillary declarations visible, likewise. */
8194 for (decl = arg_info->others; decl; decl = DECL_CHAIN (decl))
8196 DECL_CONTEXT (decl) = current_function_decl;
8197 if (DECL_NAME (decl))
8198 bind (DECL_NAME (decl), decl, current_scope,
8199 /*invisible=*/false,
8200 /*nested=*/(TREE_CODE (decl) == FUNCTION_DECL),
8201 UNKNOWN_LOCATION);
8204 /* And all the tag declarations. */
8205 FOR_EACH_VEC_SAFE_ELT_REVERSE (arg_info->tags, ix, tag)
8206 if (tag->id)
8207 bind (tag->id, tag->type, current_scope,
8208 /*invisible=*/false, /*nested=*/false, UNKNOWN_LOCATION);
8211 /* Subroutine of store_parm_decls which handles old-style function
8212 definitions (separate parameter list and declarations). */
8214 static void
8215 store_parm_decls_oldstyle (tree fndecl, const struct c_arg_info *arg_info)
8217 struct c_binding *b;
8218 tree parm, decl, last;
8219 tree parmids = arg_info->parms;
8220 struct pointer_set_t *seen_args = pointer_set_create ();
8222 if (!in_system_header_at (input_location))
8223 warning_at (DECL_SOURCE_LOCATION (fndecl),
8224 OPT_Wold_style_definition, "old-style function definition");
8226 /* Match each formal parameter name with its declaration. Save each
8227 decl in the appropriate TREE_PURPOSE slot of the parmids chain. */
8228 for (parm = parmids; parm; parm = TREE_CHAIN (parm))
8230 if (TREE_VALUE (parm) == 0)
8232 error_at (DECL_SOURCE_LOCATION (fndecl),
8233 "parameter name missing from parameter list");
8234 TREE_PURPOSE (parm) = 0;
8235 continue;
8238 b = I_SYMBOL_BINDING (TREE_VALUE (parm));
8239 if (b && B_IN_CURRENT_SCOPE (b))
8241 decl = b->decl;
8242 /* Skip erroneous parameters. */
8243 if (decl == error_mark_node)
8244 continue;
8245 /* If we got something other than a PARM_DECL it is an error. */
8246 if (TREE_CODE (decl) != PARM_DECL)
8247 error_at (DECL_SOURCE_LOCATION (decl),
8248 "%qD declared as a non-parameter", decl);
8249 /* If the declaration is already marked, we have a duplicate
8250 name. Complain and ignore the duplicate. */
8251 else if (pointer_set_contains (seen_args, decl))
8253 error_at (DECL_SOURCE_LOCATION (decl),
8254 "multiple parameters named %qD", decl);
8255 TREE_PURPOSE (parm) = 0;
8256 continue;
8258 /* If the declaration says "void", complain and turn it into
8259 an int. */
8260 else if (VOID_TYPE_P (TREE_TYPE (decl)))
8262 error_at (DECL_SOURCE_LOCATION (decl),
8263 "parameter %qD declared with void type", decl);
8264 TREE_TYPE (decl) = integer_type_node;
8265 DECL_ARG_TYPE (decl) = integer_type_node;
8266 layout_decl (decl, 0);
8268 warn_if_shadowing (decl);
8270 /* If no declaration found, default to int. */
8271 else
8273 /* FIXME diagnostics: This should be the location of the argument,
8274 not the FNDECL. E.g., for an old-style declaration
8276 int f10(v) { blah; }
8278 We should use the location of the V, not the F10.
8279 Unfortunately, the V is an IDENTIFIER_NODE which has no
8280 location. In the future we need locations for c_arg_info
8281 entries.
8283 See gcc.dg/Wshadow-3.c for an example of this problem. */
8284 decl = build_decl (DECL_SOURCE_LOCATION (fndecl),
8285 PARM_DECL, TREE_VALUE (parm), integer_type_node);
8286 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
8287 pushdecl (decl);
8288 warn_if_shadowing (decl);
8290 if (flag_isoc99)
8291 pedwarn (DECL_SOURCE_LOCATION (decl),
8292 0, "type of %qD defaults to %<int%>", decl);
8293 else
8294 warning_at (DECL_SOURCE_LOCATION (decl),
8295 OPT_Wmissing_parameter_type,
8296 "type of %qD defaults to %<int%>", decl);
8299 TREE_PURPOSE (parm) = decl;
8300 pointer_set_insert (seen_args, decl);
8303 /* Now examine the parms chain for incomplete declarations
8304 and declarations with no corresponding names. */
8306 for (b = current_scope->bindings; b; b = b->prev)
8308 parm = b->decl;
8309 if (TREE_CODE (parm) != PARM_DECL)
8310 continue;
8312 if (TREE_TYPE (parm) != error_mark_node
8313 && !COMPLETE_TYPE_P (TREE_TYPE (parm)))
8315 error_at (DECL_SOURCE_LOCATION (parm),
8316 "parameter %qD has incomplete type", parm);
8317 TREE_TYPE (parm) = error_mark_node;
8320 if (!pointer_set_contains (seen_args, parm))
8322 error_at (DECL_SOURCE_LOCATION (parm),
8323 "declaration for parameter %qD but no such parameter",
8324 parm);
8326 /* Pretend the parameter was not missing.
8327 This gets us to a standard state and minimizes
8328 further error messages. */
8329 parmids = chainon (parmids, tree_cons (parm, 0, 0));
8333 /* Chain the declarations together in the order of the list of
8334 names. Store that chain in the function decl, replacing the
8335 list of names. Update the current scope to match. */
8336 DECL_ARGUMENTS (fndecl) = 0;
8338 for (parm = parmids; parm; parm = TREE_CHAIN (parm))
8339 if (TREE_PURPOSE (parm))
8340 break;
8341 if (parm && TREE_PURPOSE (parm))
8343 last = TREE_PURPOSE (parm);
8344 DECL_ARGUMENTS (fndecl) = last;
8346 for (parm = TREE_CHAIN (parm); parm; parm = TREE_CHAIN (parm))
8347 if (TREE_PURPOSE (parm))
8349 DECL_CHAIN (last) = TREE_PURPOSE (parm);
8350 last = TREE_PURPOSE (parm);
8352 DECL_CHAIN (last) = 0;
8355 pointer_set_destroy (seen_args);
8357 /* If there was a previous prototype,
8358 set the DECL_ARG_TYPE of each argument according to
8359 the type previously specified, and report any mismatches. */
8361 if (current_function_prototype_arg_types)
8363 tree type;
8364 for (parm = DECL_ARGUMENTS (fndecl),
8365 type = current_function_prototype_arg_types;
8366 parm || (type && TREE_VALUE (type) != error_mark_node
8367 && (TYPE_MAIN_VARIANT (TREE_VALUE (type)) != void_type_node));
8368 parm = DECL_CHAIN (parm), type = TREE_CHAIN (type))
8370 if (parm == 0 || type == 0
8371 || TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
8373 if (current_function_prototype_built_in)
8374 warning_at (DECL_SOURCE_LOCATION (fndecl),
8375 0, "number of arguments doesn%'t match "
8376 "built-in prototype");
8377 else
8379 /* FIXME diagnostics: This should be the location of
8380 FNDECL, but there is bug when a prototype is
8381 declared inside function context, but defined
8382 outside of it (e.g., gcc.dg/pr15698-2.c). In
8383 which case FNDECL gets the location of the
8384 prototype, not the definition. */
8385 error_at (input_location,
8386 "number of arguments doesn%'t match prototype");
8388 error_at (current_function_prototype_locus,
8389 "prototype declaration");
8391 break;
8393 /* Type for passing arg must be consistent with that
8394 declared for the arg. ISO C says we take the unqualified
8395 type for parameters declared with qualified type. */
8396 if (TREE_TYPE (parm) != error_mark_node
8397 && TREE_TYPE (type) != error_mark_node
8398 && ((TYPE_ATOMIC (DECL_ARG_TYPE (parm))
8399 != TYPE_ATOMIC (TREE_VALUE (type)))
8400 || !comptypes (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (parm)),
8401 TYPE_MAIN_VARIANT (TREE_VALUE (type)))))
8403 if ((TYPE_ATOMIC (DECL_ARG_TYPE (parm))
8404 == TYPE_ATOMIC (TREE_VALUE (type)))
8405 && (TYPE_MAIN_VARIANT (TREE_TYPE (parm))
8406 == TYPE_MAIN_VARIANT (TREE_VALUE (type))))
8408 /* Adjust argument to match prototype. E.g. a previous
8409 `int foo(float);' prototype causes
8410 `int foo(x) float x; {...}' to be treated like
8411 `int foo(float x) {...}'. This is particularly
8412 useful for argument types like uid_t. */
8413 DECL_ARG_TYPE (parm) = TREE_TYPE (parm);
8415 if (targetm.calls.promote_prototypes (TREE_TYPE (current_function_decl))
8416 && INTEGRAL_TYPE_P (TREE_TYPE (parm))
8417 && TYPE_PRECISION (TREE_TYPE (parm))
8418 < TYPE_PRECISION (integer_type_node))
8419 DECL_ARG_TYPE (parm)
8420 = c_type_promotes_to (TREE_TYPE (parm));
8422 /* ??? Is it possible to get here with a
8423 built-in prototype or will it always have
8424 been diagnosed as conflicting with an
8425 old-style definition and discarded? */
8426 if (current_function_prototype_built_in)
8427 warning_at (DECL_SOURCE_LOCATION (parm),
8428 OPT_Wpedantic, "promoted argument %qD "
8429 "doesn%'t match built-in prototype", parm);
8430 else
8432 pedwarn (DECL_SOURCE_LOCATION (parm),
8433 OPT_Wpedantic, "promoted argument %qD "
8434 "doesn%'t match prototype", parm);
8435 pedwarn (current_function_prototype_locus, OPT_Wpedantic,
8436 "prototype declaration");
8439 else
8441 if (current_function_prototype_built_in)
8442 warning_at (DECL_SOURCE_LOCATION (parm),
8443 0, "argument %qD doesn%'t match "
8444 "built-in prototype", parm);
8445 else
8447 error_at (DECL_SOURCE_LOCATION (parm),
8448 "argument %qD doesn%'t match prototype", parm);
8449 error_at (current_function_prototype_locus,
8450 "prototype declaration");
8455 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = 0;
8458 /* Otherwise, create a prototype that would match. */
8460 else
8462 tree actual = 0, last = 0, type;
8464 for (parm = DECL_ARGUMENTS (fndecl); parm; parm = DECL_CHAIN (parm))
8466 type = tree_cons (NULL_TREE, DECL_ARG_TYPE (parm), NULL_TREE);
8467 if (last)
8468 TREE_CHAIN (last) = type;
8469 else
8470 actual = type;
8471 last = type;
8473 type = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
8474 if (last)
8475 TREE_CHAIN (last) = type;
8476 else
8477 actual = type;
8479 /* We are going to assign a new value for the TYPE_ACTUAL_ARG_TYPES
8480 of the type of this function, but we need to avoid having this
8481 affect the types of other similarly-typed functions, so we must
8482 first force the generation of an identical (but separate) type
8483 node for the relevant function type. The new node we create
8484 will be a variant of the main variant of the original function
8485 type. */
8487 TREE_TYPE (fndecl) = build_variant_type_copy (TREE_TYPE (fndecl));
8489 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = actual;
8493 /* Store parameter declarations passed in ARG_INFO into the current
8494 function declaration. */
8496 void
8497 store_parm_decls_from (struct c_arg_info *arg_info)
8499 current_function_arg_info = arg_info;
8500 store_parm_decls ();
8503 /* Store the parameter declarations into the current function declaration.
8504 This is called after parsing the parameter declarations, before
8505 digesting the body of the function.
8507 For an old-style definition, construct a prototype out of the old-style
8508 parameter declarations and inject it into the function's type. */
8510 void
8511 store_parm_decls (void)
8513 tree fndecl = current_function_decl;
8514 bool proto;
8516 /* The argument information block for FNDECL. */
8517 struct c_arg_info *arg_info = current_function_arg_info;
8518 current_function_arg_info = 0;
8520 /* True if this definition is written with a prototype. Note:
8521 despite C99 6.7.5.3p14, we can *not* treat an empty argument
8522 list in a function definition as equivalent to (void) -- an
8523 empty argument list specifies the function has no parameters,
8524 but only (void) sets up a prototype for future calls. */
8525 proto = arg_info->types != 0;
8527 if (proto)
8528 store_parm_decls_newstyle (fndecl, arg_info);
8529 else
8530 store_parm_decls_oldstyle (fndecl, arg_info);
8532 /* The next call to push_scope will be a function body. */
8534 next_is_function_body = true;
8536 /* Write a record describing this function definition to the prototypes
8537 file (if requested). */
8539 gen_aux_info_record (fndecl, 1, 0, proto);
8541 /* Initialize the RTL code for the function. */
8542 allocate_struct_function (fndecl, false);
8544 if (warn_unused_local_typedefs)
8545 cfun->language = ggc_alloc_cleared_language_function ();
8547 /* Begin the statement tree for this function. */
8548 DECL_SAVED_TREE (fndecl) = push_stmt_list ();
8550 /* ??? Insert the contents of the pending sizes list into the function
8551 to be evaluated. The only reason left to have this is
8552 void foo(int n, int array[n++])
8553 because we throw away the array type in favor of a pointer type, and
8554 thus won't naturally see the SAVE_EXPR containing the increment. All
8555 other pending sizes would be handled by gimplify_parameters. */
8556 if (arg_info->pending_sizes)
8557 add_stmt (arg_info->pending_sizes);
8560 /* Store PARM_DECLs in PARMS into scope temporarily. Used for
8561 c_finish_omp_declare_simd for function prototypes. No diagnostics
8562 should be done. */
8564 void
8565 temp_store_parm_decls (tree fndecl, tree parms)
8567 push_scope ();
8568 for (tree p = parms; p; p = DECL_CHAIN (p))
8570 DECL_CONTEXT (p) = fndecl;
8571 if (DECL_NAME (p))
8572 bind (DECL_NAME (p), p, current_scope,
8573 /*invisible=*/false, /*nested=*/false,
8574 UNKNOWN_LOCATION);
8578 /* Undo what temp_store_parm_decls did. */
8580 void
8581 temp_pop_parm_decls (void)
8583 /* Clear all bindings in this temporary scope, so that
8584 pop_scope doesn't create a BLOCK. */
8585 struct c_binding *b = current_scope->bindings;
8586 current_scope->bindings = NULL;
8587 for (; b; b = free_binding_and_advance (b))
8589 gcc_assert (TREE_CODE (b->decl) == PARM_DECL);
8590 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
8591 I_SYMBOL_BINDING (b->id) = b->shadowed;
8592 if (b->shadowed && b->shadowed->u.type)
8593 TREE_TYPE (b->shadowed->decl) = b->shadowed->u.type;
8595 pop_scope ();
8599 /* Finish up a function declaration and compile that function
8600 all the way to assembler language output. Then free the storage
8601 for the function definition.
8603 This is called after parsing the body of the function definition. */
8605 void
8606 finish_function (void)
8608 tree fndecl = current_function_decl;
8610 if (c_dialect_objc ())
8611 objc_finish_function ();
8613 if (TREE_CODE (fndecl) == FUNCTION_DECL
8614 && targetm.calls.promote_prototypes (TREE_TYPE (fndecl)))
8616 tree args = DECL_ARGUMENTS (fndecl);
8617 for (; args; args = DECL_CHAIN (args))
8619 tree type = TREE_TYPE (args);
8620 if (INTEGRAL_TYPE_P (type)
8621 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
8622 DECL_ARG_TYPE (args) = c_type_promotes_to (type);
8626 if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node)
8627 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
8629 /* Must mark the RESULT_DECL as being in this function. */
8631 if (DECL_RESULT (fndecl) && DECL_RESULT (fndecl) != error_mark_node)
8632 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
8634 if (MAIN_NAME_P (DECL_NAME (fndecl)) && flag_hosted
8635 && TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (fndecl)))
8636 == integer_type_node && flag_isoc99)
8638 /* Hack. We don't want the middle-end to warn that this return
8639 is unreachable, so we mark its location as special. Using
8640 UNKNOWN_LOCATION has the problem that it gets clobbered in
8641 annotate_one_with_locus. A cleaner solution might be to
8642 ensure ! should_carry_locus_p (stmt), but that needs a flag.
8644 c_finish_return (BUILTINS_LOCATION, integer_zero_node, NULL_TREE);
8647 /* Tie off the statement tree for this function. */
8648 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
8650 /* If the function has _Cilk_spawn in front of a function call inside it
8651 i.e. it is a spawning function, then add the appropriate Cilk plus
8652 functions inside. */
8653 if (fn_contains_cilk_spawn_p (cfun))
8654 cfun->cilk_frame_decl = insert_cilk_frame (fndecl);
8656 finish_fname_decls ();
8658 /* Complain if there's just no return statement. */
8659 if (warn_return_type
8660 && TREE_CODE (TREE_TYPE (TREE_TYPE (fndecl))) != VOID_TYPE
8661 && !current_function_returns_value && !current_function_returns_null
8662 /* Don't complain if we are no-return. */
8663 && !current_function_returns_abnormally
8664 /* Don't complain if we are declared noreturn. */
8665 && !TREE_THIS_VOLATILE (fndecl)
8666 /* Don't warn for main(). */
8667 && !MAIN_NAME_P (DECL_NAME (fndecl))
8668 /* Or if they didn't actually specify a return type. */
8669 && !C_FUNCTION_IMPLICIT_INT (fndecl)
8670 /* Normally, with -Wreturn-type, flow will complain, but we might
8671 optimize out static functions. */
8672 && !TREE_PUBLIC (fndecl))
8674 warning (OPT_Wreturn_type,
8675 "no return statement in function returning non-void");
8676 TREE_NO_WARNING (fndecl) = 1;
8679 /* Complain about parameters that are only set, but never otherwise used. */
8680 if (warn_unused_but_set_parameter)
8682 tree decl;
8684 for (decl = DECL_ARGUMENTS (fndecl);
8685 decl;
8686 decl = DECL_CHAIN (decl))
8687 if (TREE_USED (decl)
8688 && TREE_CODE (decl) == PARM_DECL
8689 && !DECL_READ_P (decl)
8690 && DECL_NAME (decl)
8691 && !DECL_ARTIFICIAL (decl)
8692 && !TREE_NO_WARNING (decl))
8693 warning_at (DECL_SOURCE_LOCATION (decl),
8694 OPT_Wunused_but_set_parameter,
8695 "parameter %qD set but not used", decl);
8698 /* Complain about locally defined typedefs that are not used in this
8699 function. */
8700 maybe_warn_unused_local_typedefs ();
8702 /* Store the end of the function, so that we get good line number
8703 info for the epilogue. */
8704 cfun->function_end_locus = input_location;
8706 /* Finalize the ELF visibility for the function. */
8707 c_determine_visibility (fndecl);
8709 /* For GNU C extern inline functions disregard inline limits. */
8710 if (DECL_EXTERNAL (fndecl)
8711 && DECL_DECLARED_INLINE_P (fndecl))
8712 DECL_DISREGARD_INLINE_LIMITS (fndecl) = 1;
8714 /* Genericize before inlining. Delay genericizing nested functions
8715 until their parent function is genericized. Since finalizing
8716 requires GENERIC, delay that as well. */
8718 if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node
8719 && !undef_nested_function)
8721 if (!decl_function_context (fndecl))
8723 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
8724 c_genericize (fndecl);
8726 /* ??? Objc emits functions after finalizing the compilation unit.
8727 This should be cleaned up later and this conditional removed. */
8728 if (cgraph_global_info_ready)
8730 cgraph_add_new_function (fndecl, false);
8731 return;
8733 cgraph_finalize_function (fndecl, false);
8735 else
8737 /* Register this function with cgraph just far enough to get it
8738 added to our parent's nested function list. Handy, since the
8739 C front end doesn't have such a list. */
8740 (void) cgraph_get_create_node (fndecl);
8744 if (!decl_function_context (fndecl))
8745 undef_nested_function = false;
8747 if (cfun->language != NULL)
8749 ggc_free (cfun->language);
8750 cfun->language = NULL;
8753 /* We're leaving the context of this function, so zap cfun.
8754 It's still in DECL_STRUCT_FUNCTION, and we'll restore it in
8755 tree_rest_of_compilation. */
8756 set_cfun (NULL);
8757 current_function_decl = NULL;
8760 /* Check the declarations given in a for-loop for satisfying the C99
8761 constraints. If exactly one such decl is found, return it. LOC is
8762 the location of the opening parenthesis of the for loop. The last
8763 parameter allows you to control the "for loop initial declarations
8764 are only allowed in C99 mode". Normally, you should pass
8765 flag_isoc99 as that parameter. But in some cases (Objective-C
8766 foreach loop, for example) we want to run the checks in this
8767 function even if not in C99 mode, so we allow the caller to turn
8768 off the error about not being in C99 mode.
8771 tree
8772 check_for_loop_decls (location_t loc, bool turn_off_iso_c99_error)
8774 struct c_binding *b;
8775 tree one_decl = NULL_TREE;
8776 int n_decls = 0;
8778 if (!turn_off_iso_c99_error)
8780 static bool hint = true;
8781 /* If we get here, declarations have been used in a for loop without
8782 the C99 for loop scope. This doesn't make much sense, so don't
8783 allow it. */
8784 error_at (loc, "%<for%> loop initial declarations "
8785 "are only allowed in C99 or C11 mode");
8786 if (hint)
8788 inform (loc,
8789 "use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 "
8790 "to compile your code");
8791 hint = false;
8793 return NULL_TREE;
8795 /* C99 subclause 6.8.5 paragraph 3:
8797 [#3] The declaration part of a for statement shall only
8798 declare identifiers for objects having storage class auto or
8799 register.
8801 It isn't clear whether, in this sentence, "identifiers" binds to
8802 "shall only declare" or to "objects" - that is, whether all identifiers
8803 declared must be identifiers for objects, or whether the restriction
8804 only applies to those that are. (A question on this in comp.std.c
8805 in November 2000 received no answer.) We implement the strictest
8806 interpretation, to avoid creating an extension which later causes
8807 problems. */
8809 for (b = current_scope->bindings; b; b = b->prev)
8811 tree id = b->id;
8812 tree decl = b->decl;
8814 if (!id)
8815 continue;
8817 switch (TREE_CODE (decl))
8819 case VAR_DECL:
8821 location_t decl_loc = DECL_SOURCE_LOCATION (decl);
8822 if (TREE_STATIC (decl))
8823 error_at (decl_loc,
8824 "declaration of static variable %qD in %<for%> loop "
8825 "initial declaration", decl);
8826 else if (DECL_EXTERNAL (decl))
8827 error_at (decl_loc,
8828 "declaration of %<extern%> variable %qD in %<for%> loop "
8829 "initial declaration", decl);
8831 break;
8833 case RECORD_TYPE:
8834 error_at (loc,
8835 "%<struct %E%> declared in %<for%> loop initial "
8836 "declaration", id);
8837 break;
8838 case UNION_TYPE:
8839 error_at (loc,
8840 "%<union %E%> declared in %<for%> loop initial declaration",
8841 id);
8842 break;
8843 case ENUMERAL_TYPE:
8844 error_at (loc, "%<enum %E%> declared in %<for%> loop "
8845 "initial declaration", id);
8846 break;
8847 default:
8848 error_at (loc, "declaration of non-variable "
8849 "%qD in %<for%> loop initial declaration", decl);
8852 n_decls++;
8853 one_decl = decl;
8856 return n_decls == 1 ? one_decl : NULL_TREE;
8859 /* Save and reinitialize the variables
8860 used during compilation of a C function. */
8862 void
8863 c_push_function_context (void)
8865 struct language_function *p = cfun->language;
8866 /* cfun->language might have been already allocated by the use of
8867 -Wunused-local-typedefs. In that case, just re-use it. */
8868 if (p == NULL)
8869 cfun->language = p = ggc_alloc_cleared_language_function ();
8871 p->base.x_stmt_tree = c_stmt_tree;
8872 c_stmt_tree.x_cur_stmt_list = vec_safe_copy (c_stmt_tree.x_cur_stmt_list);
8873 p->x_break_label = c_break_label;
8874 p->x_cont_label = c_cont_label;
8875 p->x_switch_stack = c_switch_stack;
8876 p->arg_info = current_function_arg_info;
8877 p->returns_value = current_function_returns_value;
8878 p->returns_null = current_function_returns_null;
8879 p->returns_abnormally = current_function_returns_abnormally;
8880 p->warn_about_return_type = warn_about_return_type;
8882 push_function_context ();
8885 /* Restore the variables used during compilation of a C function. */
8887 void
8888 c_pop_function_context (void)
8890 struct language_function *p;
8892 pop_function_context ();
8893 p = cfun->language;
8895 /* When -Wunused-local-typedefs is in effect, cfun->languages is
8896 used to store data throughout the life time of the current cfun,
8897 So don't deallocate it. */
8898 if (!warn_unused_local_typedefs)
8899 cfun->language = NULL;
8901 if (DECL_STRUCT_FUNCTION (current_function_decl) == 0
8902 && DECL_SAVED_TREE (current_function_decl) == NULL_TREE)
8904 /* Stop pointing to the local nodes about to be freed. */
8905 /* But DECL_INITIAL must remain nonzero so we know this
8906 was an actual function definition. */
8907 DECL_INITIAL (current_function_decl) = error_mark_node;
8908 DECL_ARGUMENTS (current_function_decl) = 0;
8911 c_stmt_tree = p->base.x_stmt_tree;
8912 p->base.x_stmt_tree.x_cur_stmt_list = NULL;
8913 c_break_label = p->x_break_label;
8914 c_cont_label = p->x_cont_label;
8915 c_switch_stack = p->x_switch_stack;
8916 current_function_arg_info = p->arg_info;
8917 current_function_returns_value = p->returns_value;
8918 current_function_returns_null = p->returns_null;
8919 current_function_returns_abnormally = p->returns_abnormally;
8920 warn_about_return_type = p->warn_about_return_type;
8923 /* The functions below are required for functionality of doing
8924 function at once processing in the C front end. Currently these
8925 functions are not called from anywhere in the C front end, but as
8926 these changes continue, that will change. */
8928 /* Returns the stmt_tree (if any) to which statements are currently
8929 being added. If there is no active statement-tree, NULL is
8930 returned. */
8932 stmt_tree
8933 current_stmt_tree (void)
8935 return &c_stmt_tree;
8938 /* Return the global value of T as a symbol. */
8940 tree
8941 identifier_global_value (tree t)
8943 struct c_binding *b;
8945 for (b = I_SYMBOL_BINDING (t); b; b = b->shadowed)
8946 if (B_IN_FILE_SCOPE (b) || B_IN_EXTERNAL_SCOPE (b))
8947 return b->decl;
8949 return 0;
8952 /* In C, the only C-linkage public declaration is at file scope. */
8954 tree
8955 c_linkage_bindings (tree name)
8957 return identifier_global_value (name);
8960 /* Record a builtin type for C. If NAME is non-NULL, it is the name used;
8961 otherwise the name is found in ridpointers from RID_INDEX. */
8963 void
8964 record_builtin_type (enum rid rid_index, const char *name, tree type)
8966 tree id, decl;
8967 if (name == 0)
8968 id = ridpointers[(int) rid_index];
8969 else
8970 id = get_identifier (name);
8971 decl = build_decl (UNKNOWN_LOCATION, TYPE_DECL, id, type);
8972 pushdecl (decl);
8973 if (debug_hooks->type_decl)
8974 debug_hooks->type_decl (decl, false);
8977 /* Build the void_list_node (void_type_node having been created). */
8978 tree
8979 build_void_list_node (void)
8981 tree t = build_tree_list (NULL_TREE, void_type_node);
8982 return t;
8985 /* Return a c_parm structure with the given SPECS, ATTRS and DECLARATOR. */
8987 struct c_parm *
8988 build_c_parm (struct c_declspecs *specs, tree attrs,
8989 struct c_declarator *declarator)
8991 struct c_parm *ret = XOBNEW (&parser_obstack, struct c_parm);
8992 ret->specs = specs;
8993 ret->attrs = attrs;
8994 ret->declarator = declarator;
8995 return ret;
8998 /* Return a declarator with nested attributes. TARGET is the inner
8999 declarator to which these attributes apply. ATTRS are the
9000 attributes. */
9002 struct c_declarator *
9003 build_attrs_declarator (tree attrs, struct c_declarator *target)
9005 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
9006 ret->kind = cdk_attrs;
9007 ret->declarator = target;
9008 ret->u.attrs = attrs;
9009 return ret;
9012 /* Return a declarator for a function with arguments specified by ARGS
9013 and return type specified by TARGET. */
9015 struct c_declarator *
9016 build_function_declarator (struct c_arg_info *args,
9017 struct c_declarator *target)
9019 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
9020 ret->kind = cdk_function;
9021 ret->declarator = target;
9022 ret->u.arg_info = args;
9023 return ret;
9026 /* Return a declarator for the identifier IDENT (which may be
9027 NULL_TREE for an abstract declarator). */
9029 struct c_declarator *
9030 build_id_declarator (tree ident)
9032 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
9033 ret->kind = cdk_id;
9034 ret->declarator = 0;
9035 ret->u.id = ident;
9036 /* Default value - may get reset to a more precise location. */
9037 ret->id_loc = input_location;
9038 return ret;
9041 /* Return something to represent absolute declarators containing a *.
9042 TARGET is the absolute declarator that the * contains.
9043 TYPE_QUALS_ATTRS is a structure for type qualifiers and attributes
9044 to apply to the pointer type. */
9046 struct c_declarator *
9047 make_pointer_declarator (struct c_declspecs *type_quals_attrs,
9048 struct c_declarator *target)
9050 tree attrs;
9051 int quals = 0;
9052 struct c_declarator *itarget = target;
9053 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
9054 if (type_quals_attrs)
9056 attrs = type_quals_attrs->attrs;
9057 quals = quals_from_declspecs (type_quals_attrs);
9058 if (attrs != NULL_TREE)
9059 itarget = build_attrs_declarator (attrs, target);
9061 ret->kind = cdk_pointer;
9062 ret->declarator = itarget;
9063 ret->u.pointer_quals = quals;
9064 return ret;
9067 /* Return a pointer to a structure for an empty list of declaration
9068 specifiers. */
9070 struct c_declspecs *
9071 build_null_declspecs (void)
9073 struct c_declspecs *ret = XOBNEW (&parser_obstack, struct c_declspecs);
9074 memset (&ret->locations, 0, cdw_number_of_elements);
9075 ret->type = 0;
9076 ret->expr = 0;
9077 ret->decl_attr = 0;
9078 ret->attrs = 0;
9079 ret->align_log = -1;
9080 ret->typespec_word = cts_none;
9081 ret->storage_class = csc_none;
9082 ret->expr_const_operands = true;
9083 ret->declspecs_seen_p = false;
9084 ret->typespec_kind = ctsk_none;
9085 ret->non_sc_seen_p = false;
9086 ret->typedef_p = false;
9087 ret->explicit_signed_p = false;
9088 ret->deprecated_p = false;
9089 ret->default_int_p = false;
9090 ret->long_p = false;
9091 ret->long_long_p = false;
9092 ret->short_p = false;
9093 ret->signed_p = false;
9094 ret->unsigned_p = false;
9095 ret->complex_p = false;
9096 ret->inline_p = false;
9097 ret->noreturn_p = false;
9098 ret->thread_p = false;
9099 ret->thread_gnu_p = false;
9100 ret->const_p = false;
9101 ret->volatile_p = false;
9102 ret->atomic_p = false;
9103 ret->restrict_p = false;
9104 ret->saturating_p = false;
9105 ret->alignas_p = false;
9106 ret->address_space = ADDR_SPACE_GENERIC;
9107 return ret;
9110 /* Add the address space ADDRSPACE to the declaration specifiers
9111 SPECS, returning SPECS. */
9113 struct c_declspecs *
9114 declspecs_add_addrspace (source_location location,
9115 struct c_declspecs *specs, addr_space_t as)
9117 specs->non_sc_seen_p = true;
9118 specs->declspecs_seen_p = true;
9120 if (!ADDR_SPACE_GENERIC_P (specs->address_space)
9121 && specs->address_space != as)
9122 error ("incompatible address space qualifiers %qs and %qs",
9123 c_addr_space_name (as),
9124 c_addr_space_name (specs->address_space));
9125 else
9127 specs->address_space = as;
9128 specs->locations[cdw_address_space] = location;
9130 return specs;
9133 /* Add the type qualifier QUAL to the declaration specifiers SPECS,
9134 returning SPECS. */
9136 struct c_declspecs *
9137 declspecs_add_qual (source_location loc,
9138 struct c_declspecs *specs, tree qual)
9140 enum rid i;
9141 bool dupe = false;
9142 specs->non_sc_seen_p = true;
9143 specs->declspecs_seen_p = true;
9144 gcc_assert (TREE_CODE (qual) == IDENTIFIER_NODE
9145 && C_IS_RESERVED_WORD (qual));
9146 i = C_RID_CODE (qual);
9147 switch (i)
9149 case RID_CONST:
9150 dupe = specs->const_p;
9151 specs->const_p = true;
9152 specs->locations[cdw_const] = loc;
9153 break;
9154 case RID_VOLATILE:
9155 dupe = specs->volatile_p;
9156 specs->volatile_p = true;
9157 specs->locations[cdw_volatile] = loc;
9158 break;
9159 case RID_RESTRICT:
9160 dupe = specs->restrict_p;
9161 specs->restrict_p = true;
9162 specs->locations[cdw_restrict] = loc;
9163 break;
9164 case RID_ATOMIC:
9165 dupe = specs->atomic_p;
9166 specs->atomic_p = true;
9167 break;
9168 default:
9169 gcc_unreachable ();
9171 if (dupe && !flag_isoc99)
9172 pedwarn (loc, OPT_Wpedantic, "duplicate %qE", qual);
9173 return specs;
9176 /* Add the type specifier TYPE to the declaration specifiers SPECS,
9177 returning SPECS. */
9179 struct c_declspecs *
9180 declspecs_add_type (location_t loc, struct c_declspecs *specs,
9181 struct c_typespec spec)
9183 tree type = spec.spec;
9184 specs->non_sc_seen_p = true;
9185 specs->declspecs_seen_p = true;
9186 specs->typespec_kind = spec.kind;
9187 if (TREE_DEPRECATED (type))
9188 specs->deprecated_p = true;
9190 /* Handle type specifier keywords. */
9191 if (TREE_CODE (type) == IDENTIFIER_NODE
9192 && C_IS_RESERVED_WORD (type)
9193 && C_RID_CODE (type) != RID_CXX_COMPAT_WARN)
9195 enum rid i = C_RID_CODE (type);
9196 if (specs->type)
9198 error_at (loc, "two or more data types in declaration specifiers");
9199 return specs;
9201 if ((int) i <= (int) RID_LAST_MODIFIER)
9203 /* "long", "short", "signed", "unsigned", "_Complex" or "_Sat". */
9204 bool dupe = false;
9205 switch (i)
9207 case RID_LONG:
9208 if (specs->long_long_p)
9210 error_at (loc, "%<long long long%> is too long for GCC");
9211 break;
9213 if (specs->long_p)
9215 if (specs->typespec_word == cts_double)
9217 error_at (loc,
9218 ("both %<long long%> and %<double%> in "
9219 "declaration specifiers"));
9220 break;
9222 pedwarn_c90 (loc, OPT_Wlong_long,
9223 "ISO C90 does not support %<long long%>");
9224 specs->long_long_p = 1;
9225 specs->locations[cdw_long_long] = loc;
9226 break;
9228 if (specs->short_p)
9229 error_at (loc,
9230 ("both %<long%> and %<short%> in "
9231 "declaration specifiers"));
9232 else if (specs->typespec_word == cts_auto_type)
9233 error_at (loc,
9234 ("both %<long%> and %<__auto_type%> in "
9235 "declaration specifiers"));
9236 else if (specs->typespec_word == cts_void)
9237 error_at (loc,
9238 ("both %<long%> and %<void%> in "
9239 "declaration specifiers"));
9240 else if (specs->typespec_word == cts_int128)
9241 error_at (loc,
9242 ("both %<long%> and %<__int128%> in "
9243 "declaration specifiers"));
9244 else if (specs->typespec_word == cts_bool)
9245 error_at (loc,
9246 ("both %<long%> and %<_Bool%> in "
9247 "declaration specifiers"));
9248 else if (specs->typespec_word == cts_char)
9249 error_at (loc,
9250 ("both %<long%> and %<char%> in "
9251 "declaration specifiers"));
9252 else if (specs->typespec_word == cts_float)
9253 error_at (loc,
9254 ("both %<long%> and %<float%> in "
9255 "declaration specifiers"));
9256 else if (specs->typespec_word == cts_dfloat32)
9257 error_at (loc,
9258 ("both %<long%> and %<_Decimal32%> in "
9259 "declaration specifiers"));
9260 else if (specs->typespec_word == cts_dfloat64)
9261 error_at (loc,
9262 ("both %<long%> and %<_Decimal64%> in "
9263 "declaration specifiers"));
9264 else if (specs->typespec_word == cts_dfloat128)
9265 error_at (loc,
9266 ("both %<long%> and %<_Decimal128%> in "
9267 "declaration specifiers"));
9268 else
9270 specs->long_p = true;
9271 specs->locations[cdw_long] = loc;
9273 break;
9274 case RID_SHORT:
9275 dupe = specs->short_p;
9276 if (specs->long_p)
9277 error_at (loc,
9278 ("both %<long%> and %<short%> in "
9279 "declaration specifiers"));
9280 else if (specs->typespec_word == cts_auto_type)
9281 error_at (loc,
9282 ("both %<short%> and %<__auto_type%> in "
9283 "declaration specifiers"));
9284 else if (specs->typespec_word == cts_void)
9285 error_at (loc,
9286 ("both %<short%> and %<void%> in "
9287 "declaration specifiers"));
9288 else if (specs->typespec_word == cts_int128)
9289 error_at (loc,
9290 ("both %<short%> and %<__int128%> in "
9291 "declaration specifiers"));
9292 else if (specs->typespec_word == cts_bool)
9293 error_at (loc,
9294 ("both %<short%> and %<_Bool%> in "
9295 "declaration specifiers"));
9296 else if (specs->typespec_word == cts_char)
9297 error_at (loc,
9298 ("both %<short%> and %<char%> in "
9299 "declaration specifiers"));
9300 else if (specs->typespec_word == cts_float)
9301 error_at (loc,
9302 ("both %<short%> and %<float%> in "
9303 "declaration specifiers"));
9304 else if (specs->typespec_word == cts_double)
9305 error_at (loc,
9306 ("both %<short%> and %<double%> in "
9307 "declaration specifiers"));
9308 else if (specs->typespec_word == cts_dfloat32)
9309 error_at (loc,
9310 ("both %<short%> and %<_Decimal32%> in "
9311 "declaration specifiers"));
9312 else if (specs->typespec_word == cts_dfloat64)
9313 error_at (loc,
9314 ("both %<short%> and %<_Decimal64%> in "
9315 "declaration specifiers"));
9316 else if (specs->typespec_word == cts_dfloat128)
9317 error_at (loc,
9318 ("both %<short%> and %<_Decimal128%> in "
9319 "declaration specifiers"));
9320 else
9322 specs->short_p = true;
9323 specs->locations[cdw_short] = loc;
9325 break;
9326 case RID_SIGNED:
9327 dupe = specs->signed_p;
9328 if (specs->unsigned_p)
9329 error_at (loc,
9330 ("both %<signed%> and %<unsigned%> in "
9331 "declaration specifiers"));
9332 else if (specs->typespec_word == cts_auto_type)
9333 error_at (loc,
9334 ("both %<signed%> and %<__auto_type%> in "
9335 "declaration specifiers"));
9336 else if (specs->typespec_word == cts_void)
9337 error_at (loc,
9338 ("both %<signed%> and %<void%> in "
9339 "declaration specifiers"));
9340 else if (specs->typespec_word == cts_bool)
9341 error_at (loc,
9342 ("both %<signed%> and %<_Bool%> in "
9343 "declaration specifiers"));
9344 else if (specs->typespec_word == cts_float)
9345 error_at (loc,
9346 ("both %<signed%> and %<float%> in "
9347 "declaration specifiers"));
9348 else if (specs->typespec_word == cts_double)
9349 error_at (loc,
9350 ("both %<signed%> and %<double%> in "
9351 "declaration specifiers"));
9352 else if (specs->typespec_word == cts_dfloat32)
9353 error_at (loc,
9354 ("both %<signed%> and %<_Decimal32%> in "
9355 "declaration specifiers"));
9356 else if (specs->typespec_word == cts_dfloat64)
9357 error_at (loc,
9358 ("both %<signed%> and %<_Decimal64%> in "
9359 "declaration specifiers"));
9360 else if (specs->typespec_word == cts_dfloat128)
9361 error_at (loc,
9362 ("both %<signed%> and %<_Decimal128%> in "
9363 "declaration specifiers"));
9364 else
9366 specs->signed_p = true;
9367 specs->locations[cdw_signed] = loc;
9369 break;
9370 case RID_UNSIGNED:
9371 dupe = specs->unsigned_p;
9372 if (specs->signed_p)
9373 error_at (loc,
9374 ("both %<signed%> and %<unsigned%> in "
9375 "declaration specifiers"));
9376 else if (specs->typespec_word == cts_auto_type)
9377 error_at (loc,
9378 ("both %<unsigned%> and %<__auto_type%> in "
9379 "declaration specifiers"));
9380 else if (specs->typespec_word == cts_void)
9381 error_at (loc,
9382 ("both %<unsigned%> and %<void%> in "
9383 "declaration specifiers"));
9384 else if (specs->typespec_word == cts_bool)
9385 error_at (loc,
9386 ("both %<unsigned%> and %<_Bool%> in "
9387 "declaration specifiers"));
9388 else if (specs->typespec_word == cts_float)
9389 error_at (loc,
9390 ("both %<unsigned%> and %<float%> in "
9391 "declaration specifiers"));
9392 else if (specs->typespec_word == cts_double)
9393 error_at (loc,
9394 ("both %<unsigned%> and %<double%> in "
9395 "declaration specifiers"));
9396 else if (specs->typespec_word == cts_dfloat32)
9397 error_at (loc,
9398 ("both %<unsigned%> and %<_Decimal32%> in "
9399 "declaration specifiers"));
9400 else if (specs->typespec_word == cts_dfloat64)
9401 error_at (loc,
9402 ("both %<unsigned%> and %<_Decimal64%> in "
9403 "declaration specifiers"));
9404 else if (specs->typespec_word == cts_dfloat128)
9405 error_at (loc,
9406 ("both %<unsigned%> and %<_Decimal128%> in "
9407 "declaration specifiers"));
9408 else
9410 specs->unsigned_p = true;
9411 specs->locations[cdw_unsigned] = loc;
9413 break;
9414 case RID_COMPLEX:
9415 dupe = specs->complex_p;
9416 if (!flag_isoc99 && !in_system_header_at (loc))
9417 pedwarn (loc, OPT_Wpedantic,
9418 "ISO C90 does not support complex types");
9419 if (specs->typespec_word == cts_auto_type)
9420 error_at (loc,
9421 ("both %<complex%> and %<__auto_type%> in "
9422 "declaration specifiers"));
9423 else if (specs->typespec_word == cts_void)
9424 error_at (loc,
9425 ("both %<complex%> and %<void%> in "
9426 "declaration specifiers"));
9427 else if (specs->typespec_word == cts_bool)
9428 error_at (loc,
9429 ("both %<complex%> and %<_Bool%> in "
9430 "declaration specifiers"));
9431 else if (specs->typespec_word == cts_dfloat32)
9432 error_at (loc,
9433 ("both %<complex%> and %<_Decimal32%> in "
9434 "declaration specifiers"));
9435 else if (specs->typespec_word == cts_dfloat64)
9436 error_at (loc,
9437 ("both %<complex%> and %<_Decimal64%> in "
9438 "declaration specifiers"));
9439 else if (specs->typespec_word == cts_dfloat128)
9440 error_at (loc,
9441 ("both %<complex%> and %<_Decimal128%> in "
9442 "declaration specifiers"));
9443 else if (specs->typespec_word == cts_fract)
9444 error_at (loc,
9445 ("both %<complex%> and %<_Fract%> in "
9446 "declaration specifiers"));
9447 else if (specs->typespec_word == cts_accum)
9448 error_at (loc,
9449 ("both %<complex%> and %<_Accum%> in "
9450 "declaration specifiers"));
9451 else if (specs->saturating_p)
9452 error_at (loc,
9453 ("both %<complex%> and %<_Sat%> in "
9454 "declaration specifiers"));
9455 else
9457 specs->complex_p = true;
9458 specs->locations[cdw_complex] = loc;
9460 break;
9461 case RID_SAT:
9462 dupe = specs->saturating_p;
9463 pedwarn (loc, OPT_Wpedantic,
9464 "ISO C does not support saturating types");
9465 if (specs->typespec_word == cts_int128)
9467 error_at (loc,
9468 ("both %<_Sat%> and %<__int128%> in "
9469 "declaration specifiers"));
9471 else if (specs->typespec_word == cts_auto_type)
9472 error_at (loc,
9473 ("both %<_Sat%> and %<__auto_type%> in "
9474 "declaration specifiers"));
9475 else if (specs->typespec_word == cts_void)
9476 error_at (loc,
9477 ("both %<_Sat%> and %<void%> in "
9478 "declaration specifiers"));
9479 else if (specs->typespec_word == cts_bool)
9480 error_at (loc,
9481 ("both %<_Sat%> and %<_Bool%> in "
9482 "declaration specifiers"));
9483 else if (specs->typespec_word == cts_char)
9484 error_at (loc,
9485 ("both %<_Sat%> and %<char%> in "
9486 "declaration specifiers"));
9487 else if (specs->typespec_word == cts_int)
9488 error_at (loc,
9489 ("both %<_Sat%> and %<int%> in "
9490 "declaration specifiers"));
9491 else if (specs->typespec_word == cts_float)
9492 error_at (loc,
9493 ("both %<_Sat%> and %<float%> in "
9494 "declaration specifiers"));
9495 else if (specs->typespec_word == cts_double)
9496 error_at (loc,
9497 ("both %<_Sat%> and %<double%> in "
9498 "declaration specifiers"));
9499 else if (specs->typespec_word == cts_dfloat32)
9500 error_at (loc,
9501 ("both %<_Sat%> and %<_Decimal32%> in "
9502 "declaration specifiers"));
9503 else if (specs->typespec_word == cts_dfloat64)
9504 error_at (loc,
9505 ("both %<_Sat%> and %<_Decimal64%> in "
9506 "declaration specifiers"));
9507 else if (specs->typespec_word == cts_dfloat128)
9508 error_at (loc,
9509 ("both %<_Sat%> and %<_Decimal128%> in "
9510 "declaration specifiers"));
9511 else if (specs->complex_p)
9512 error_at (loc,
9513 ("both %<_Sat%> and %<complex%> in "
9514 "declaration specifiers"));
9515 else
9517 specs->saturating_p = true;
9518 specs->locations[cdw_saturating] = loc;
9520 break;
9521 default:
9522 gcc_unreachable ();
9525 if (dupe)
9526 error_at (loc, "duplicate %qE", type);
9528 return specs;
9530 else
9532 /* "void", "_Bool", "char", "int", "float", "double", "_Decimal32",
9533 "__int128", "_Decimal64", "_Decimal128", "_Fract", "_Accum" or
9534 "__auto_type". */
9535 if (specs->typespec_word != cts_none)
9537 error_at (loc,
9538 "two or more data types in declaration specifiers");
9539 return specs;
9541 switch (i)
9543 case RID_AUTO_TYPE:
9544 if (specs->long_p)
9545 error_at (loc,
9546 ("both %<long%> and %<__auto_type%> in "
9547 "declaration specifiers"));
9548 else if (specs->short_p)
9549 error_at (loc,
9550 ("both %<short%> and %<__auto_type%> in "
9551 "declaration specifiers"));
9552 else if (specs->signed_p)
9553 error_at (loc,
9554 ("both %<signed%> and %<__auto_type%> in "
9555 "declaration specifiers"));
9556 else if (specs->unsigned_p)
9557 error_at (loc,
9558 ("both %<unsigned%> and %<__auto_type%> in "
9559 "declaration specifiers"));
9560 else if (specs->complex_p)
9561 error_at (loc,
9562 ("both %<complex%> and %<__auto_type%> in "
9563 "declaration specifiers"));
9564 else if (specs->saturating_p)
9565 error_at (loc,
9566 ("both %<_Sat%> and %<__auto_type%> in "
9567 "declaration specifiers"));
9568 else
9570 specs->typespec_word = cts_auto_type;
9571 specs->locations[cdw_typespec] = loc;
9573 return specs;
9574 case RID_INT128:
9575 if (int128_integer_type_node == NULL_TREE)
9577 error_at (loc, "%<__int128%> is not supported for this target");
9578 return specs;
9580 if (!in_system_header_at (input_location))
9581 pedwarn (loc, OPT_Wpedantic,
9582 "ISO C does not support %<__int128%> type");
9584 if (specs->long_p)
9585 error_at (loc,
9586 ("both %<__int128%> and %<long%> in "
9587 "declaration specifiers"));
9588 else if (specs->saturating_p)
9589 error_at (loc,
9590 ("both %<_Sat%> and %<__int128%> in "
9591 "declaration specifiers"));
9592 else if (specs->short_p)
9593 error_at (loc,
9594 ("both %<__int128%> and %<short%> in "
9595 "declaration specifiers"));
9596 else
9598 specs->typespec_word = cts_int128;
9599 specs->locations[cdw_typespec] = loc;
9601 return specs;
9602 case RID_VOID:
9603 if (specs->long_p)
9604 error_at (loc,
9605 ("both %<long%> and %<void%> in "
9606 "declaration specifiers"));
9607 else if (specs->short_p)
9608 error_at (loc,
9609 ("both %<short%> and %<void%> in "
9610 "declaration specifiers"));
9611 else if (specs->signed_p)
9612 error_at (loc,
9613 ("both %<signed%> and %<void%> in "
9614 "declaration specifiers"));
9615 else if (specs->unsigned_p)
9616 error_at (loc,
9617 ("both %<unsigned%> and %<void%> in "
9618 "declaration specifiers"));
9619 else if (specs->complex_p)
9620 error_at (loc,
9621 ("both %<complex%> and %<void%> in "
9622 "declaration specifiers"));
9623 else if (specs->saturating_p)
9624 error_at (loc,
9625 ("both %<_Sat%> and %<void%> in "
9626 "declaration specifiers"));
9627 else
9629 specs->typespec_word = cts_void;
9630 specs->locations[cdw_typespec] = loc;
9632 return specs;
9633 case RID_BOOL:
9634 if (specs->long_p)
9635 error_at (loc,
9636 ("both %<long%> and %<_Bool%> in "
9637 "declaration specifiers"));
9638 else if (specs->short_p)
9639 error_at (loc,
9640 ("both %<short%> and %<_Bool%> in "
9641 "declaration specifiers"));
9642 else if (specs->signed_p)
9643 error_at (loc,
9644 ("both %<signed%> and %<_Bool%> in "
9645 "declaration specifiers"));
9646 else if (specs->unsigned_p)
9647 error_at (loc,
9648 ("both %<unsigned%> and %<_Bool%> in "
9649 "declaration specifiers"));
9650 else if (specs->complex_p)
9651 error_at (loc,
9652 ("both %<complex%> and %<_Bool%> in "
9653 "declaration specifiers"));
9654 else if (specs->saturating_p)
9655 error_at (loc,
9656 ("both %<_Sat%> and %<_Bool%> in "
9657 "declaration specifiers"));
9658 else
9660 specs->typespec_word = cts_bool;
9661 specs->locations[cdw_typespec] = loc;
9663 return specs;
9664 case RID_CHAR:
9665 if (specs->long_p)
9666 error_at (loc,
9667 ("both %<long%> and %<char%> in "
9668 "declaration specifiers"));
9669 else if (specs->short_p)
9670 error_at (loc,
9671 ("both %<short%> and %<char%> in "
9672 "declaration specifiers"));
9673 else if (specs->saturating_p)
9674 error_at (loc,
9675 ("both %<_Sat%> and %<char%> in "
9676 "declaration specifiers"));
9677 else
9679 specs->typespec_word = cts_char;
9680 specs->locations[cdw_typespec] = loc;
9682 return specs;
9683 case RID_INT:
9684 if (specs->saturating_p)
9685 error_at (loc,
9686 ("both %<_Sat%> and %<int%> in "
9687 "declaration specifiers"));
9688 else
9690 specs->typespec_word = cts_int;
9691 specs->locations[cdw_typespec] = loc;
9693 return specs;
9694 case RID_FLOAT:
9695 if (specs->long_p)
9696 error_at (loc,
9697 ("both %<long%> and %<float%> in "
9698 "declaration specifiers"));
9699 else if (specs->short_p)
9700 error_at (loc,
9701 ("both %<short%> and %<float%> in "
9702 "declaration specifiers"));
9703 else if (specs->signed_p)
9704 error_at (loc,
9705 ("both %<signed%> and %<float%> in "
9706 "declaration specifiers"));
9707 else if (specs->unsigned_p)
9708 error_at (loc,
9709 ("both %<unsigned%> and %<float%> in "
9710 "declaration specifiers"));
9711 else if (specs->saturating_p)
9712 error_at (loc,
9713 ("both %<_Sat%> and %<float%> in "
9714 "declaration specifiers"));
9715 else
9717 specs->typespec_word = cts_float;
9718 specs->locations[cdw_typespec] = loc;
9720 return specs;
9721 case RID_DOUBLE:
9722 if (specs->long_long_p)
9723 error_at (loc,
9724 ("both %<long long%> and %<double%> in "
9725 "declaration specifiers"));
9726 else if (specs->short_p)
9727 error_at (loc,
9728 ("both %<short%> and %<double%> in "
9729 "declaration specifiers"));
9730 else if (specs->signed_p)
9731 error_at (loc,
9732 ("both %<signed%> and %<double%> in "
9733 "declaration specifiers"));
9734 else if (specs->unsigned_p)
9735 error_at (loc,
9736 ("both %<unsigned%> and %<double%> in "
9737 "declaration specifiers"));
9738 else if (specs->saturating_p)
9739 error_at (loc,
9740 ("both %<_Sat%> and %<double%> in "
9741 "declaration specifiers"));
9742 else
9744 specs->typespec_word = cts_double;
9745 specs->locations[cdw_typespec] = loc;
9747 return specs;
9748 case RID_DFLOAT32:
9749 case RID_DFLOAT64:
9750 case RID_DFLOAT128:
9752 const char *str;
9753 if (i == RID_DFLOAT32)
9754 str = "_Decimal32";
9755 else if (i == RID_DFLOAT64)
9756 str = "_Decimal64";
9757 else
9758 str = "_Decimal128";
9759 if (specs->long_long_p)
9760 error_at (loc,
9761 ("both %<long long%> and %<%s%> in "
9762 "declaration specifiers"),
9763 str);
9764 if (specs->long_p)
9765 error_at (loc,
9766 ("both %<long%> and %<%s%> in "
9767 "declaration specifiers"),
9768 str);
9769 else if (specs->short_p)
9770 error_at (loc,
9771 ("both %<short%> and %<%s%> in "
9772 "declaration specifiers"),
9773 str);
9774 else if (specs->signed_p)
9775 error_at (loc,
9776 ("both %<signed%> and %<%s%> in "
9777 "declaration specifiers"),
9778 str);
9779 else if (specs->unsigned_p)
9780 error_at (loc,
9781 ("both %<unsigned%> and %<%s%> in "
9782 "declaration specifiers"),
9783 str);
9784 else if (specs->complex_p)
9785 error_at (loc,
9786 ("both %<complex%> and %<%s%> in "
9787 "declaration specifiers"),
9788 str);
9789 else if (specs->saturating_p)
9790 error_at (loc,
9791 ("both %<_Sat%> and %<%s%> in "
9792 "declaration specifiers"),
9793 str);
9794 else if (i == RID_DFLOAT32)
9795 specs->typespec_word = cts_dfloat32;
9796 else if (i == RID_DFLOAT64)
9797 specs->typespec_word = cts_dfloat64;
9798 else
9799 specs->typespec_word = cts_dfloat128;
9800 specs->locations[cdw_typespec] = loc;
9802 if (!targetm.decimal_float_supported_p ())
9803 error_at (loc,
9804 ("decimal floating point not supported "
9805 "for this target"));
9806 pedwarn (loc, OPT_Wpedantic,
9807 "ISO C does not support decimal floating point");
9808 return specs;
9809 case RID_FRACT:
9810 case RID_ACCUM:
9812 const char *str;
9813 if (i == RID_FRACT)
9814 str = "_Fract";
9815 else
9816 str = "_Accum";
9817 if (specs->complex_p)
9818 error_at (loc,
9819 ("both %<complex%> and %<%s%> in "
9820 "declaration specifiers"),
9821 str);
9822 else if (i == RID_FRACT)
9823 specs->typespec_word = cts_fract;
9824 else
9825 specs->typespec_word = cts_accum;
9826 specs->locations[cdw_typespec] = loc;
9828 if (!targetm.fixed_point_supported_p ())
9829 error_at (loc,
9830 "fixed-point types not supported for this target");
9831 pedwarn (loc, OPT_Wpedantic,
9832 "ISO C does not support fixed-point types");
9833 return specs;
9834 default:
9835 /* ObjC reserved word "id", handled below. */
9836 break;
9841 /* Now we have a typedef (a TYPE_DECL node), an identifier (some
9842 form of ObjC type, cases such as "int" and "long" being handled
9843 above), a TYPE (struct, union, enum and typeof specifiers) or an
9844 ERROR_MARK. In none of these cases may there have previously
9845 been any type specifiers. */
9846 if (specs->type || specs->typespec_word != cts_none
9847 || specs->long_p || specs->short_p || specs->signed_p
9848 || specs->unsigned_p || specs->complex_p)
9849 error_at (loc, "two or more data types in declaration specifiers");
9850 else if (TREE_CODE (type) == TYPE_DECL)
9852 if (TREE_TYPE (type) == error_mark_node)
9853 ; /* Allow the type to default to int to avoid cascading errors. */
9854 else
9856 specs->type = TREE_TYPE (type);
9857 specs->decl_attr = DECL_ATTRIBUTES (type);
9858 specs->typedef_p = true;
9859 specs->explicit_signed_p = C_TYPEDEF_EXPLICITLY_SIGNED (type);
9860 specs->locations[cdw_typedef] = loc;
9862 /* If this typedef name is defined in a struct, then a C++
9863 lookup would return a different value. */
9864 if (warn_cxx_compat
9865 && I_SYMBOL_BINDING (DECL_NAME (type))->in_struct)
9866 warning_at (loc, OPT_Wc___compat,
9867 "C++ lookup of %qD would return a field, not a type",
9868 type);
9870 /* If we are parsing a struct, record that a struct field
9871 used a typedef. */
9872 if (warn_cxx_compat && struct_parse_info != NULL)
9873 struct_parse_info->typedefs_seen.safe_push (type);
9876 else if (TREE_CODE (type) == IDENTIFIER_NODE)
9878 tree t = lookup_name (type);
9879 if (!t || TREE_CODE (t) != TYPE_DECL)
9880 error_at (loc, "%qE fails to be a typedef or built in type", type);
9881 else if (TREE_TYPE (t) == error_mark_node)
9883 else
9885 specs->type = TREE_TYPE (t);
9886 specs->locations[cdw_typespec] = loc;
9889 else
9891 if (TREE_CODE (type) != ERROR_MARK && spec.kind == ctsk_typeof)
9893 specs->typedef_p = true;
9894 specs->locations[cdw_typedef] = loc;
9895 if (spec.expr)
9897 if (specs->expr)
9898 specs->expr = build2 (COMPOUND_EXPR, TREE_TYPE (spec.expr),
9899 specs->expr, spec.expr);
9900 else
9901 specs->expr = spec.expr;
9902 specs->expr_const_operands &= spec.expr_const_operands;
9905 specs->type = type;
9908 return specs;
9911 /* Add the storage class specifier or function specifier SCSPEC to the
9912 declaration specifiers SPECS, returning SPECS. */
9914 struct c_declspecs *
9915 declspecs_add_scspec (source_location loc,
9916 struct c_declspecs *specs,
9917 tree scspec)
9919 enum rid i;
9920 enum c_storage_class n = csc_none;
9921 bool dupe = false;
9922 specs->declspecs_seen_p = true;
9923 gcc_assert (TREE_CODE (scspec) == IDENTIFIER_NODE
9924 && C_IS_RESERVED_WORD (scspec));
9925 i = C_RID_CODE (scspec);
9926 if (specs->non_sc_seen_p)
9927 warning (OPT_Wold_style_declaration,
9928 "%qE is not at beginning of declaration", scspec);
9929 switch (i)
9931 case RID_INLINE:
9932 /* C99 permits duplicate inline. Although of doubtful utility,
9933 it seems simplest to permit it in gnu89 mode as well, as
9934 there is also little utility in maintaining this as a
9935 difference between gnu89 and C99 inline. */
9936 dupe = false;
9937 specs->inline_p = true;
9938 specs->locations[cdw_inline] = loc;
9939 break;
9940 case RID_NORETURN:
9941 /* Duplicate _Noreturn is permitted. */
9942 dupe = false;
9943 specs->noreturn_p = true;
9944 specs->locations[cdw_noreturn] = loc;
9945 break;
9946 case RID_THREAD:
9947 dupe = specs->thread_p;
9948 if (specs->storage_class == csc_auto)
9949 error ("%qE used with %<auto%>", scspec);
9950 else if (specs->storage_class == csc_register)
9951 error ("%qE used with %<register%>", scspec);
9952 else if (specs->storage_class == csc_typedef)
9953 error ("%qE used with %<typedef%>", scspec);
9954 else
9956 specs->thread_p = true;
9957 specs->thread_gnu_p = (strcmp (IDENTIFIER_POINTER (scspec),
9958 "__thread") == 0);
9959 /* A diagnostic is not required for the use of this
9960 identifier in the implementation namespace; only diagnose
9961 it for the C11 spelling because of existing code using
9962 the other spelling. */
9963 if (!flag_isoc11 && !specs->thread_gnu_p)
9965 if (flag_isoc99)
9966 pedwarn (loc, OPT_Wpedantic,
9967 "ISO C99 does not support %qE", scspec);
9968 else
9969 pedwarn (loc, OPT_Wpedantic,
9970 "ISO C90 does not support %qE", scspec);
9972 specs->locations[cdw_thread] = loc;
9974 break;
9975 case RID_AUTO:
9976 n = csc_auto;
9977 break;
9978 case RID_EXTERN:
9979 n = csc_extern;
9980 /* Diagnose "__thread extern". */
9981 if (specs->thread_p && specs->thread_gnu_p)
9982 error ("%<__thread%> before %<extern%>");
9983 break;
9984 case RID_REGISTER:
9985 n = csc_register;
9986 break;
9987 case RID_STATIC:
9988 n = csc_static;
9989 /* Diagnose "__thread static". */
9990 if (specs->thread_p && specs->thread_gnu_p)
9991 error ("%<__thread%> before %<static%>");
9992 break;
9993 case RID_TYPEDEF:
9994 n = csc_typedef;
9995 break;
9996 default:
9997 gcc_unreachable ();
9999 if (n != csc_none && n == specs->storage_class)
10000 dupe = true;
10001 if (dupe)
10003 if (i == RID_THREAD)
10004 error ("duplicate %<_Thread_local%> or %<__thread%>");
10005 else
10006 error ("duplicate %qE", scspec);
10008 if (n != csc_none)
10010 if (specs->storage_class != csc_none && n != specs->storage_class)
10012 error ("multiple storage classes in declaration specifiers");
10014 else
10016 specs->storage_class = n;
10017 specs->locations[cdw_storage_class] = loc;
10018 if (n != csc_extern && n != csc_static && specs->thread_p)
10020 error ("%qs used with %qE",
10021 specs->thread_gnu_p ? "__thread" : "_Thread_local",
10022 scspec);
10023 specs->thread_p = false;
10027 return specs;
10030 /* Add the attributes ATTRS to the declaration specifiers SPECS,
10031 returning SPECS. */
10033 struct c_declspecs *
10034 declspecs_add_attrs (source_location loc, struct c_declspecs *specs, tree attrs)
10036 specs->attrs = chainon (attrs, specs->attrs);
10037 specs->locations[cdw_attributes] = loc;
10038 specs->declspecs_seen_p = true;
10039 return specs;
10042 /* Add an _Alignas specifier (expression ALIGN, or type whose
10043 alignment is ALIGN) to the declaration specifiers SPECS, returning
10044 SPECS. */
10045 struct c_declspecs *
10046 declspecs_add_alignas (source_location loc,
10047 struct c_declspecs *specs, tree align)
10049 int align_log;
10050 specs->alignas_p = true;
10051 specs->locations[cdw_alignas] = loc;
10052 if (align == error_mark_node)
10053 return specs;
10054 align_log = check_user_alignment (align, true);
10055 if (align_log > specs->align_log)
10056 specs->align_log = align_log;
10057 return specs;
10060 /* Combine "long", "short", "signed", "unsigned" and "_Complex" type
10061 specifiers with any other type specifier to determine the resulting
10062 type. This is where ISO C checks on complex types are made, since
10063 "_Complex long" is a prefix of the valid ISO C type "_Complex long
10064 double". */
10066 struct c_declspecs *
10067 finish_declspecs (struct c_declspecs *specs)
10069 /* If a type was specified as a whole, we have no modifiers and are
10070 done. */
10071 if (specs->type != NULL_TREE)
10073 gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
10074 && !specs->signed_p && !specs->unsigned_p
10075 && !specs->complex_p);
10077 /* Set a dummy type. */
10078 if (TREE_CODE (specs->type) == ERROR_MARK)
10079 specs->type = integer_type_node;
10080 return specs;
10083 /* If none of "void", "_Bool", "char", "int", "float" or "double"
10084 has been specified, treat it as "int" unless "_Complex" is
10085 present and there are no other specifiers. If we just have
10086 "_Complex", it is equivalent to "_Complex double", but e.g.
10087 "_Complex short" is equivalent to "_Complex short int". */
10088 if (specs->typespec_word == cts_none)
10090 if (specs->saturating_p)
10092 error_at (specs->locations[cdw_saturating],
10093 "%<_Sat%> is used without %<_Fract%> or %<_Accum%>");
10094 if (!targetm.fixed_point_supported_p ())
10095 error_at (specs->locations[cdw_saturating],
10096 "fixed-point types not supported for this target");
10097 specs->typespec_word = cts_fract;
10099 else if (specs->long_p || specs->short_p
10100 || specs->signed_p || specs->unsigned_p)
10102 specs->typespec_word = cts_int;
10104 else if (specs->complex_p)
10106 specs->typespec_word = cts_double;
10107 pedwarn (specs->locations[cdw_complex], OPT_Wpedantic,
10108 "ISO C does not support plain %<complex%> meaning "
10109 "%<double complex%>");
10111 else
10113 specs->typespec_word = cts_int;
10114 specs->default_int_p = true;
10115 /* We don't diagnose this here because grokdeclarator will
10116 give more specific diagnostics according to whether it is
10117 a function definition. */
10121 /* If "signed" was specified, record this to distinguish "int" and
10122 "signed int" in the case of a bit-field with
10123 -funsigned-bitfields. */
10124 specs->explicit_signed_p = specs->signed_p;
10126 /* Now compute the actual type. */
10127 switch (specs->typespec_word)
10129 case cts_auto_type:
10130 gcc_assert (!specs->long_p && !specs->short_p
10131 && !specs->signed_p && !specs->unsigned_p
10132 && !specs->complex_p);
10133 /* Type to be filled in later. */
10134 break;
10135 case cts_void:
10136 gcc_assert (!specs->long_p && !specs->short_p
10137 && !specs->signed_p && !specs->unsigned_p
10138 && !specs->complex_p);
10139 specs->type = void_type_node;
10140 break;
10141 case cts_bool:
10142 gcc_assert (!specs->long_p && !specs->short_p
10143 && !specs->signed_p && !specs->unsigned_p
10144 && !specs->complex_p);
10145 specs->type = boolean_type_node;
10146 break;
10147 case cts_char:
10148 gcc_assert (!specs->long_p && !specs->short_p);
10149 gcc_assert (!(specs->signed_p && specs->unsigned_p));
10150 if (specs->signed_p)
10151 specs->type = signed_char_type_node;
10152 else if (specs->unsigned_p)
10153 specs->type = unsigned_char_type_node;
10154 else
10155 specs->type = char_type_node;
10156 if (specs->complex_p)
10158 pedwarn (specs->locations[cdw_complex], OPT_Wpedantic,
10159 "ISO C does not support complex integer types");
10160 specs->type = build_complex_type (specs->type);
10162 break;
10163 case cts_int128:
10164 gcc_assert (!specs->long_p && !specs->short_p && !specs->long_long_p);
10165 gcc_assert (!(specs->signed_p && specs->unsigned_p));
10166 specs->type = (specs->unsigned_p
10167 ? int128_unsigned_type_node
10168 : int128_integer_type_node);
10169 if (specs->complex_p)
10171 pedwarn (specs->locations[cdw_complex], OPT_Wpedantic,
10172 "ISO C does not support complex integer types");
10173 specs->type = build_complex_type (specs->type);
10175 break;
10176 case cts_int:
10177 gcc_assert (!(specs->long_p && specs->short_p));
10178 gcc_assert (!(specs->signed_p && specs->unsigned_p));
10179 if (specs->long_long_p)
10180 specs->type = (specs->unsigned_p
10181 ? long_long_unsigned_type_node
10182 : long_long_integer_type_node);
10183 else if (specs->long_p)
10184 specs->type = (specs->unsigned_p
10185 ? long_unsigned_type_node
10186 : long_integer_type_node);
10187 else if (specs->short_p)
10188 specs->type = (specs->unsigned_p
10189 ? short_unsigned_type_node
10190 : short_integer_type_node);
10191 else
10192 specs->type = (specs->unsigned_p
10193 ? unsigned_type_node
10194 : integer_type_node);
10195 if (specs->complex_p)
10197 pedwarn (specs->locations[cdw_complex], OPT_Wpedantic,
10198 "ISO C does not support complex integer types");
10199 specs->type = build_complex_type (specs->type);
10201 break;
10202 case cts_float:
10203 gcc_assert (!specs->long_p && !specs->short_p
10204 && !specs->signed_p && !specs->unsigned_p);
10205 specs->type = (specs->complex_p
10206 ? complex_float_type_node
10207 : float_type_node);
10208 break;
10209 case cts_double:
10210 gcc_assert (!specs->long_long_p && !specs->short_p
10211 && !specs->signed_p && !specs->unsigned_p);
10212 if (specs->long_p)
10214 specs->type = (specs->complex_p
10215 ? complex_long_double_type_node
10216 : long_double_type_node);
10218 else
10220 specs->type = (specs->complex_p
10221 ? complex_double_type_node
10222 : double_type_node);
10224 break;
10225 case cts_dfloat32:
10226 case cts_dfloat64:
10227 case cts_dfloat128:
10228 gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
10229 && !specs->signed_p && !specs->unsigned_p && !specs->complex_p);
10230 if (specs->typespec_word == cts_dfloat32)
10231 specs->type = dfloat32_type_node;
10232 else if (specs->typespec_word == cts_dfloat64)
10233 specs->type = dfloat64_type_node;
10234 else
10235 specs->type = dfloat128_type_node;
10236 break;
10237 case cts_fract:
10238 gcc_assert (!specs->complex_p);
10239 if (!targetm.fixed_point_supported_p ())
10240 specs->type = integer_type_node;
10241 else if (specs->saturating_p)
10243 if (specs->long_long_p)
10244 specs->type = specs->unsigned_p
10245 ? sat_unsigned_long_long_fract_type_node
10246 : sat_long_long_fract_type_node;
10247 else if (specs->long_p)
10248 specs->type = specs->unsigned_p
10249 ? sat_unsigned_long_fract_type_node
10250 : sat_long_fract_type_node;
10251 else if (specs->short_p)
10252 specs->type = specs->unsigned_p
10253 ? sat_unsigned_short_fract_type_node
10254 : sat_short_fract_type_node;
10255 else
10256 specs->type = specs->unsigned_p
10257 ? sat_unsigned_fract_type_node
10258 : sat_fract_type_node;
10260 else
10262 if (specs->long_long_p)
10263 specs->type = specs->unsigned_p
10264 ? unsigned_long_long_fract_type_node
10265 : long_long_fract_type_node;
10266 else if (specs->long_p)
10267 specs->type = specs->unsigned_p
10268 ? unsigned_long_fract_type_node
10269 : long_fract_type_node;
10270 else if (specs->short_p)
10271 specs->type = specs->unsigned_p
10272 ? unsigned_short_fract_type_node
10273 : short_fract_type_node;
10274 else
10275 specs->type = specs->unsigned_p
10276 ? unsigned_fract_type_node
10277 : fract_type_node;
10279 break;
10280 case cts_accum:
10281 gcc_assert (!specs->complex_p);
10282 if (!targetm.fixed_point_supported_p ())
10283 specs->type = integer_type_node;
10284 else if (specs->saturating_p)
10286 if (specs->long_long_p)
10287 specs->type = specs->unsigned_p
10288 ? sat_unsigned_long_long_accum_type_node
10289 : sat_long_long_accum_type_node;
10290 else if (specs->long_p)
10291 specs->type = specs->unsigned_p
10292 ? sat_unsigned_long_accum_type_node
10293 : sat_long_accum_type_node;
10294 else if (specs->short_p)
10295 specs->type = specs->unsigned_p
10296 ? sat_unsigned_short_accum_type_node
10297 : sat_short_accum_type_node;
10298 else
10299 specs->type = specs->unsigned_p
10300 ? sat_unsigned_accum_type_node
10301 : sat_accum_type_node;
10303 else
10305 if (specs->long_long_p)
10306 specs->type = specs->unsigned_p
10307 ? unsigned_long_long_accum_type_node
10308 : long_long_accum_type_node;
10309 else if (specs->long_p)
10310 specs->type = specs->unsigned_p
10311 ? unsigned_long_accum_type_node
10312 : long_accum_type_node;
10313 else if (specs->short_p)
10314 specs->type = specs->unsigned_p
10315 ? unsigned_short_accum_type_node
10316 : short_accum_type_node;
10317 else
10318 specs->type = specs->unsigned_p
10319 ? unsigned_accum_type_node
10320 : accum_type_node;
10322 break;
10323 default:
10324 gcc_unreachable ();
10327 return specs;
10330 /* A subroutine of c_write_global_declarations. Perform final processing
10331 on one file scope's declarations (or the external scope's declarations),
10332 GLOBALS. */
10334 static void
10335 c_write_global_declarations_1 (tree globals)
10337 tree decl;
10338 bool reconsider;
10340 /* Process the decls in the order they were written. */
10341 for (decl = globals; decl; decl = DECL_CHAIN (decl))
10343 /* Check for used but undefined static functions using the C
10344 standard's definition of "used", and set TREE_NO_WARNING so
10345 that check_global_declarations doesn't repeat the check. */
10346 if (TREE_CODE (decl) == FUNCTION_DECL
10347 && DECL_INITIAL (decl) == 0
10348 && DECL_EXTERNAL (decl)
10349 && !TREE_PUBLIC (decl)
10350 && C_DECL_USED (decl))
10352 pedwarn (input_location, 0, "%q+F used but never defined", decl);
10353 TREE_NO_WARNING (decl) = 1;
10356 wrapup_global_declaration_1 (decl);
10361 reconsider = false;
10362 for (decl = globals; decl; decl = DECL_CHAIN (decl))
10363 reconsider |= wrapup_global_declaration_2 (decl);
10365 while (reconsider);
10367 for (decl = globals; decl; decl = DECL_CHAIN (decl))
10368 check_global_declaration_1 (decl);
10371 /* A subroutine of c_write_global_declarations Emit debug information for each
10372 of the declarations in GLOBALS. */
10374 static void
10375 c_write_global_declarations_2 (tree globals)
10377 tree decl;
10379 for (decl = globals; decl ; decl = DECL_CHAIN (decl))
10380 debug_hooks->global_decl (decl);
10383 /* Callback to collect a source_ref from a DECL. */
10385 static void
10386 collect_source_ref_cb (tree decl)
10388 if (!DECL_IS_BUILTIN (decl))
10389 collect_source_ref (LOCATION_FILE (decl_sloc (decl, false)));
10392 /* Preserve the external declarations scope across a garbage collect. */
10393 static GTY(()) tree ext_block;
10395 /* Collect all references relevant to SOURCE_FILE. */
10397 static void
10398 collect_all_refs (const char *source_file)
10400 tree t;
10401 unsigned i;
10403 FOR_EACH_VEC_ELT (*all_translation_units, i, t)
10404 collect_ada_nodes (BLOCK_VARS (DECL_INITIAL (t)), source_file);
10406 collect_ada_nodes (BLOCK_VARS (ext_block), source_file);
10409 /* Iterate over all global declarations and call CALLBACK. */
10411 static void
10412 for_each_global_decl (void (*callback) (tree decl))
10414 tree t;
10415 tree decls;
10416 tree decl;
10417 unsigned i;
10419 FOR_EACH_VEC_ELT (*all_translation_units, i, t)
10421 decls = DECL_INITIAL (t);
10422 for (decl = BLOCK_VARS (decls); decl; decl = TREE_CHAIN (decl))
10423 callback (decl);
10426 for (decl = BLOCK_VARS (ext_block); decl; decl = TREE_CHAIN (decl))
10427 callback (decl);
10430 void
10431 c_write_global_declarations (void)
10433 tree t;
10434 unsigned i;
10436 /* We don't want to do this if generating a PCH. */
10437 if (pch_file)
10438 return;
10440 timevar_start (TV_PHASE_DEFERRED);
10442 /* Do the Objective-C stuff. This is where all the Objective-C
10443 module stuff gets generated (symtab, class/protocol/selector
10444 lists etc). */
10445 if (c_dialect_objc ())
10446 objc_write_global_declarations ();
10448 /* Close the external scope. */
10449 ext_block = pop_scope ();
10450 external_scope = 0;
10451 gcc_assert (!current_scope);
10453 /* Handle -fdump-ada-spec[-slim]. */
10454 if (flag_dump_ada_spec || flag_dump_ada_spec_slim)
10456 /* Build a table of files to generate specs for */
10457 if (flag_dump_ada_spec_slim)
10458 collect_source_ref (main_input_filename);
10459 else
10460 for_each_global_decl (collect_source_ref_cb);
10462 dump_ada_specs (collect_all_refs, NULL);
10465 if (ext_block)
10467 tree tmp = BLOCK_VARS (ext_block);
10468 int flags;
10469 FILE * stream = dump_begin (TDI_tu, &flags);
10470 if (stream && tmp)
10472 dump_node (tmp, flags & ~TDF_SLIM, stream);
10473 dump_end (TDI_tu, stream);
10477 /* Process all file scopes in this compilation, and the external_scope,
10478 through wrapup_global_declarations and check_global_declarations. */
10479 FOR_EACH_VEC_ELT (*all_translation_units, i, t)
10480 c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t)));
10481 if (ext_block)
10482 c_write_global_declarations_1 (BLOCK_VARS (ext_block));
10483 apply_for_each_ext_block (c_write_global_declarations_1);
10485 if (L_IPO_COMP_MODE)
10486 maybe_apply_pending_pragma_weaks ();
10488 timevar_stop (TV_PHASE_DEFERRED);
10489 timevar_start (TV_PHASE_OPT_GEN);
10491 /* We're done parsing; proceed to optimize and emit assembly.
10492 FIXME: shouldn't be the front end's responsibility to call this. */
10493 finalize_compilation_unit ();
10495 timevar_stop (TV_PHASE_OPT_GEN);
10496 timevar_start (TV_PHASE_DBGINFO);
10498 /* After cgraph has had a chance to emit everything that's going to
10499 be emitted, output debug information for globals. */
10500 if (!seen_error ())
10502 timevar_push (TV_SYMOUT);
10503 FOR_EACH_VEC_ELT (*all_translation_units, i, t)
10504 c_write_global_declarations_2 (BLOCK_VARS (DECL_INITIAL (t)));
10505 if (ext_block)
10506 c_write_global_declarations_2 (BLOCK_VARS (ext_block));
10507 apply_for_each_ext_block (c_write_global_declarations_2);
10508 timevar_pop (TV_SYMOUT);
10511 ext_block = NULL;
10512 timevar_stop (TV_PHASE_DBGINFO);
10516 /* LIPO support */
10518 typedef struct GTY (()) c_sb
10520 tree decl;
10521 tree id;
10522 tree decl_copy_pre; /* copy at the start of file parsing. */
10523 tree decl_copy_post; /* copy at the end of module_scope. */
10524 int invisible;
10525 } c_saved_builtin;
10527 static GTY (()) vec<c_saved_builtin, va_gc> *saved_builtins = NULL;
10529 /* Return the needed size of lang_decl structure for tree T. */
10532 c_get_lang_decl_size (tree t)
10534 if (!DECL_LANG_SPECIFIC (t))
10535 return 0;
10536 return sizeof (struct lang_decl);
10539 /* Return true if S is external or file scope. */
10541 bool
10542 c_is_global_scope (tree decl ATTRIBUTE_UNUSED, void *s)
10544 struct c_scope *scope = (struct c_scope *)s;
10546 if (scope == external_scope || scope == file_scope)
10547 return true;
10549 return false;
10552 /* Add DECL to the list of builtins. */
10554 void
10555 c_add_built_in_decl (tree decl)
10557 c_saved_builtin *sb;
10558 struct c_binding *b = NULL;
10560 if (!flag_dyn_ipa)
10561 return;
10563 if (at_eof)
10564 return;
10566 if (parser_parsing_start)
10567 return;
10569 sb = vec_safe_push (saved_builtins, c_saved_builtin ());
10570 sb->decl = decl;
10571 sb->decl_copy_pre = NULL;
10572 sb->decl_copy_post = NULL;
10573 sb->id = get_type_or_decl_name (decl);
10575 switch (TREE_CODE (decl))
10577 case TYPE_DECL:
10578 case FUNCTION_DECL:
10579 case CONST_DECL:
10580 b = I_SYMBOL_BINDING (sb->id);
10581 break;
10582 case ENUMERAL_TYPE:
10583 case UNION_TYPE:
10584 case RECORD_TYPE:
10585 b = I_TAG_BINDING (sb->id);
10586 break;
10587 default:
10588 gcc_unreachable ();
10591 gcc_assert (b && b->decl == decl
10592 && b->id == sb->id && b->depth == 0);
10593 sb->invisible = b->invisible;
10596 /* Pop the external scope at the end of parsing of a file. */
10598 static void
10599 pop_ext_scope (void)
10601 tree ext_b;
10602 if (!L_IPO_COMP_MODE)
10603 return;
10604 ext_b = pop_scope ();
10605 vec_safe_push (ext_blocks, ext_b);
10606 gcc_assert (!current_scope);
10607 external_scope = 0;
10609 /* Now remove non var_decls from BLOCK_VARS --
10610 this is needed to avoid tree-chain contamination
10611 from other modules due to builtin (shared) decls. */
10613 tree *p = &BLOCK_VARS (ext_b);
10614 tree decl = BLOCK_VARS (ext_b);
10615 for (; decl; decl = TREE_CHAIN (decl))
10617 if (TREE_CODE (decl) != VAR_DECL)
10619 gcc_assert (0);
10620 *p = TREE_CHAIN (decl);
10622 else
10623 p = &TREE_CHAIN (decl);
10628 /* Save a copy of SB->decl before file parsing start. */
10630 static void
10631 c_save_built_in_decl_pre_parsing_1 (c_saved_builtin *sb)
10633 tree decl = sb->decl;
10635 sb->decl_copy_pre = lipo_save_decl (decl);
10636 sb->decl_copy_post = NULL;
10637 return;
10640 /* Make copies of builtin decls before file parsing. */
10642 void
10643 c_save_built_in_decl_pre_parsing (void)
10645 size_t i;
10646 c_saved_builtin *bi;
10648 for (i = 0;
10649 saved_builtins->iterate (i, &bi);
10650 ++i)
10651 c_save_built_in_decl_pre_parsing_1 (bi);
10654 /* Restore builtins to their values before file parsing (
10655 the initial default value). */
10657 void
10658 c_restore_built_in_decl_pre_parsing (void)
10660 size_t i;
10661 c_saved_builtin *bi;
10663 /* Now re-bind the builtins in the external scope. */
10664 gcc_assert (current_scope && current_scope == external_scope);
10665 for (i = 0;
10666 saved_builtins->iterate (i, &bi);
10667 ++i)
10669 tree id;
10670 tree decl = bi->decl;
10671 id = bi->id;
10673 lipo_restore_decl (decl, bi->decl_copy_pre);
10674 if (id)
10675 bind (id, decl, external_scope,
10676 bi->invisible, false /*nested*/,
10677 DECL_SOURCE_LOCATION (decl));
10681 /* Save values of builtins after parsing of a file. */
10683 void
10684 c_save_built_in_decl_post_parsing (void)
10686 size_t i;
10687 c_saved_builtin *bi;
10689 for (i = 0;
10690 saved_builtins->iterate (i, &bi);
10691 ++i)
10693 /* Skip builtin decls in the predefined state.
10694 The static flag for defined builtins are not set, so
10695 do not check it. */
10696 if (DECL_ARTIFICIAL (bi->decl)
10697 || TREE_CODE (bi->decl) != FUNCTION_DECL
10698 || !DECL_STRUCT_FUNCTION (bi->decl))
10699 continue;
10700 /* Remember the defining module. */
10701 cgraph_link_node (cgraph_get_create_node (bi->decl));
10702 if (!bi->decl_copy_post)
10703 bi->decl_copy_post = lipo_save_decl (bi->decl);
10707 /* Restore builtins to their values (non-default)
10708 after parsing finishes. */
10710 void
10711 c_restore_built_in_decl_post_parsing (void)
10713 c_saved_builtin *bi;
10714 unsigned i;
10715 for (i = 0;
10716 saved_builtins->iterate (i, &bi);
10717 ++i)
10719 tree decl = bi->decl;
10720 /* Now restore the decl's state */
10721 if (bi->decl_copy_post)
10722 lipo_restore_decl (decl, bi->decl_copy_post);
10726 /* Return true if type T is compiler generated. */
10728 bool
10729 c_is_compiler_generated_type (tree t ATTRIBUTE_UNUSED)
10731 return false;
10734 /* Return 1 if lang specific attribute of T1 and T2 are
10735 equivalent. */
10738 c_cmp_lang_type (tree t1 ATTRIBUTE_UNUSED,
10739 tree t2 ATTRIBUTE_UNUSED)
10741 return 1;
10745 /* Register reserved keyword WORD as qualifier for address space AS. */
10747 void
10748 c_register_addr_space (const char *word, addr_space_t as)
10750 int rid = RID_FIRST_ADDR_SPACE + as;
10751 tree id;
10753 /* Address space qualifiers are only supported
10754 in C with GNU extensions enabled. */
10755 if (c_dialect_objc () || flag_no_asm)
10756 return;
10758 id = get_identifier (word);
10759 C_SET_RID_CODE (id, rid);
10760 C_IS_RESERVED_WORD (id) = 1;
10761 ridpointers [rid] = id;
10764 /* Return identifier to look up for omp declare reduction. */
10766 tree
10767 c_omp_reduction_id (enum tree_code reduction_code, tree reduction_id)
10769 const char *p = NULL;
10770 switch (reduction_code)
10772 case PLUS_EXPR: p = "+"; break;
10773 case MULT_EXPR: p = "*"; break;
10774 case MINUS_EXPR: p = "-"; break;
10775 case BIT_AND_EXPR: p = "&"; break;
10776 case BIT_XOR_EXPR: p = "^"; break;
10777 case BIT_IOR_EXPR: p = "|"; break;
10778 case TRUTH_ANDIF_EXPR: p = "&&"; break;
10779 case TRUTH_ORIF_EXPR: p = "||"; break;
10780 case MIN_EXPR: p = "min"; break;
10781 case MAX_EXPR: p = "max"; break;
10782 default:
10783 break;
10786 if (p == NULL)
10788 if (TREE_CODE (reduction_id) != IDENTIFIER_NODE)
10789 return error_mark_node;
10790 p = IDENTIFIER_POINTER (reduction_id);
10793 const char prefix[] = "omp declare reduction ";
10794 size_t lenp = sizeof (prefix);
10795 size_t len = strlen (p);
10796 char *name = XALLOCAVEC (char, lenp + len);
10797 memcpy (name, prefix, lenp - 1);
10798 memcpy (name + lenp - 1, p, len + 1);
10799 return get_identifier (name);
10802 /* Lookup REDUCTION_ID in the current scope, or create an artificial
10803 VAR_DECL, bind it into the current scope and return it. */
10805 tree
10806 c_omp_reduction_decl (tree reduction_id)
10808 struct c_binding *b = I_SYMBOL_BINDING (reduction_id);
10809 if (b != NULL && B_IN_CURRENT_SCOPE (b))
10810 return b->decl;
10812 tree decl = build_decl (BUILTINS_LOCATION, VAR_DECL,
10813 reduction_id, integer_type_node);
10814 DECL_ARTIFICIAL (decl) = 1;
10815 DECL_EXTERNAL (decl) = 1;
10816 TREE_STATIC (decl) = 1;
10817 TREE_PUBLIC (decl) = 0;
10818 bind (reduction_id, decl, current_scope, true, false, BUILTINS_LOCATION);
10819 return decl;
10822 /* Lookup REDUCTION_ID in the first scope where it has entry for TYPE. */
10824 tree
10825 c_omp_reduction_lookup (tree reduction_id, tree type)
10827 struct c_binding *b = I_SYMBOL_BINDING (reduction_id);
10828 while (b)
10830 tree t;
10831 for (t = DECL_INITIAL (b->decl); t; t = TREE_CHAIN (t))
10832 if (comptypes (TREE_PURPOSE (t), type))
10833 return TREE_VALUE (t);
10834 b = b->shadowed;
10836 return error_mark_node;
10839 /* Helper function called via walk_tree, to diagnose invalid
10840 #pragma omp declare reduction combiners or initializers. */
10842 tree
10843 c_check_omp_declare_reduction_r (tree *tp, int *, void *data)
10845 tree *vars = (tree *) data;
10846 if (SSA_VAR_P (*tp)
10847 && !DECL_ARTIFICIAL (*tp)
10848 && *tp != vars[0]
10849 && *tp != vars[1])
10851 location_t loc = DECL_SOURCE_LOCATION (vars[0]);
10852 if (strcmp (IDENTIFIER_POINTER (DECL_NAME (vars[0])), "omp_out") == 0)
10853 error_at (loc, "%<#pragma omp declare reduction%> combiner refers to "
10854 "variable %qD which is not %<omp_out%> nor %<omp_in%>",
10855 *tp);
10856 else
10857 error_at (loc, "%<#pragma omp declare reduction%> initializer refers "
10858 "to variable %qD which is not %<omp_priv%> nor "
10859 "%<omp_orig%>",
10860 *tp);
10861 return *tp;
10863 return NULL_TREE;
10866 #include "gt-c-c-decl.h"