Various gimple to gimple_call conversions in IPA
[official-gcc.git] / gcc / c / c-decl.c
blobe23284a6cf073d62b0d61cbe0adb76ad9af6e2f5
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 "hash-set.h"
63 #include "plugin.h"
64 #include "c-family/c-ada-spec.h"
65 #include "cilk.h"
66 #include "builtins.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 warn_defaults_to (location_t, int, const char *, ...)
542 ATTRIBUTE_GCC_DIAG(3,4);
544 /* T is a statement. Add it to the statement-tree. This is the
545 C/ObjC version--C++ has a slightly different version of this
546 function. */
548 tree
549 add_stmt (tree t)
551 enum tree_code code = TREE_CODE (t);
553 if (CAN_HAVE_LOCATION_P (t) && code != LABEL_EXPR)
555 if (!EXPR_HAS_LOCATION (t))
556 SET_EXPR_LOCATION (t, input_location);
559 if (code == LABEL_EXPR || code == CASE_LABEL_EXPR)
560 STATEMENT_LIST_HAS_LABEL (cur_stmt_list) = 1;
562 /* Add T to the statement-tree. Non-side-effect statements need to be
563 recorded during statement expressions. */
564 if (!building_stmt_list_p ())
565 push_stmt_list ();
566 append_to_statement_list_force (t, &cur_stmt_list);
568 return t;
571 /* Build a pointer type using the default pointer mode. */
573 static tree
574 c_build_pointer_type (tree to_type)
576 addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
577 : TYPE_ADDR_SPACE (to_type);
578 enum machine_mode pointer_mode;
580 if (as != ADDR_SPACE_GENERIC || c_default_pointer_mode == VOIDmode)
581 pointer_mode = targetm.addr_space.pointer_mode (as);
582 else
583 pointer_mode = c_default_pointer_mode;
584 return build_pointer_type_for_mode (to_type, pointer_mode, false);
588 /* Return true if we will want to say something if a goto statement
589 crosses DECL. */
591 static bool
592 decl_jump_unsafe (tree decl)
594 if (error_operand_p (decl))
595 return false;
597 /* Always warn about crossing variably modified types. */
598 if ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == TYPE_DECL)
599 && variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
600 return true;
602 /* Otherwise, only warn if -Wgoto-misses-init and this is an
603 initialized automatic decl. */
604 if (warn_jump_misses_init
605 && TREE_CODE (decl) == VAR_DECL
606 && !TREE_STATIC (decl)
607 && DECL_INITIAL (decl) != NULL_TREE)
608 return true;
610 return false;
614 void
615 c_print_identifier (FILE *file, tree node, int indent)
617 print_node (file, "symbol", I_SYMBOL_DECL (node), indent + 4);
618 print_node (file, "tag", I_TAG_DECL (node), indent + 4);
619 print_node (file, "label", I_LABEL_DECL (node), indent + 4);
620 if (C_IS_RESERVED_WORD (node) && C_RID_CODE (node) != RID_CXX_COMPAT_WARN)
622 tree rid = ridpointers[C_RID_CODE (node)];
623 indent_to (file, indent + 4);
624 fprintf (file, "rid " HOST_PTR_PRINTF " \"%s\"",
625 (void *) rid, IDENTIFIER_POINTER (rid));
629 /* Establish a binding between NAME, an IDENTIFIER_NODE, and DECL,
630 which may be any of several kinds of DECL or TYPE or error_mark_node,
631 in the scope SCOPE. */
632 static void
633 bind (tree name, tree decl, struct c_scope *scope, bool invisible,
634 bool nested, location_t locus)
636 struct c_binding *b, **here;
638 if (binding_freelist)
640 b = binding_freelist;
641 binding_freelist = b->prev;
643 else
644 b = ggc_alloc<c_binding> ();
646 b->shadowed = 0;
647 b->decl = decl;
648 b->id = name;
649 b->depth = scope->depth;
650 b->invisible = invisible;
651 b->nested = nested;
652 b->inner_comp = 0;
653 b->in_struct = 0;
654 b->locus = locus;
656 b->u.type = NULL;
658 b->prev = scope->bindings;
659 scope->bindings = b;
661 if (decl_jump_unsafe (decl))
662 scope->has_jump_unsafe_decl = 1;
664 if (!name)
665 return;
667 switch (TREE_CODE (decl))
669 case LABEL_DECL: here = &I_LABEL_BINDING (name); break;
670 case ENUMERAL_TYPE:
671 case UNION_TYPE:
672 case RECORD_TYPE: here = &I_TAG_BINDING (name); break;
673 case VAR_DECL:
674 case FUNCTION_DECL:
675 case TYPE_DECL:
676 case CONST_DECL:
677 case PARM_DECL:
678 case ERROR_MARK: here = &I_SYMBOL_BINDING (name); break;
680 default:
681 gcc_unreachable ();
684 /* Locate the appropriate place in the chain of shadowed decls
685 to insert this binding. Normally, scope == current_scope and
686 this does nothing. */
687 while (*here && (*here)->depth > scope->depth)
688 here = &(*here)->shadowed;
690 b->shadowed = *here;
691 *here = b;
694 /* Clear the binding structure B, stick it on the binding_freelist,
695 and return the former value of b->prev. This is used by pop_scope
696 and get_parm_info to iterate destructively over all the bindings
697 from a given scope. */
698 static struct c_binding *
699 free_binding_and_advance (struct c_binding *b)
701 struct c_binding *prev = b->prev;
703 memset (b, 0, sizeof (struct c_binding));
704 b->prev = binding_freelist;
705 binding_freelist = b;
707 return prev;
710 /* Bind a label. Like bind, but skip fields which aren't used for
711 labels, and add the LABEL_VARS value. */
712 static void
713 bind_label (tree name, tree label, struct c_scope *scope,
714 struct c_label_vars *label_vars)
716 struct c_binding *b;
718 bind (name, label, scope, /*invisible=*/false, /*nested=*/false,
719 UNKNOWN_LOCATION);
721 scope->has_label_bindings = true;
723 b = scope->bindings;
724 gcc_assert (b->decl == label);
725 label_vars->shadowed = b->u.label;
726 b->u.label = label_vars;
729 /* Hook called at end of compilation to assume 1 elt
730 for a file-scope tentative array defn that wasn't complete before. */
732 void
733 c_finish_incomplete_decl (tree decl)
735 if (TREE_CODE (decl) == VAR_DECL)
737 tree type = TREE_TYPE (decl);
738 if (type != error_mark_node
739 && TREE_CODE (type) == ARRAY_TYPE
740 && !DECL_EXTERNAL (decl)
741 && TYPE_DOMAIN (type) == 0)
743 warning_at (DECL_SOURCE_LOCATION (decl),
744 0, "array %q+D assumed to have one element", decl);
746 complete_array_type (&TREE_TYPE (decl), NULL_TREE, true);
748 relayout_decl (decl);
753 /* Record that inline function FUNC contains a reference (location
754 LOC) to static DECL (file-scope or function-local according to
755 TYPE). */
757 void
758 record_inline_static (location_t loc, tree func, tree decl,
759 enum c_inline_static_type type)
761 c_inline_static *csi = ggc_alloc<c_inline_static> ();
762 csi->location = loc;
763 csi->function = func;
764 csi->static_decl = decl;
765 csi->type = type;
766 csi->next = c_inline_statics;
767 c_inline_statics = csi;
770 /* Check for references to static declarations in inline functions at
771 the end of the translation unit and diagnose them if the functions
772 are still inline definitions. */
774 static void
775 check_inline_statics (void)
777 struct c_inline_static *csi;
778 for (csi = c_inline_statics; csi; csi = csi->next)
780 if (DECL_EXTERNAL (csi->function))
781 switch (csi->type)
783 case csi_internal:
784 pedwarn (csi->location, 0,
785 "%qD is static but used in inline function %qD "
786 "which is not static", csi->static_decl, csi->function);
787 break;
788 case csi_modifiable:
789 pedwarn (csi->location, 0,
790 "%q+D is static but declared in inline function %qD "
791 "which is not static", csi->static_decl, csi->function);
792 break;
793 default:
794 gcc_unreachable ();
797 c_inline_statics = NULL;
800 /* Fill in a c_spot_bindings structure. If DEFINING is true, set it
801 for the current state, otherwise set it to uninitialized. */
803 static void
804 set_spot_bindings (struct c_spot_bindings *p, bool defining)
806 if (defining)
808 p->scope = current_scope;
809 p->bindings_in_scope = current_scope->bindings;
811 else
813 p->scope = NULL;
814 p->bindings_in_scope = NULL;
816 p->stmt_exprs = 0;
817 p->left_stmt_expr = false;
820 /* Update spot bindings P as we pop out of SCOPE. Return true if we
821 should push decls for a label. */
823 static bool
824 update_spot_bindings (struct c_scope *scope, struct c_spot_bindings *p)
826 if (p->scope != scope)
828 /* This label or goto is defined in some other scope, or it is a
829 label which is not yet defined. There is nothing to
830 update. */
831 return false;
834 /* Adjust the spot bindings to refer to the bindings already defined
835 in the enclosing scope. */
836 p->scope = scope->outer;
837 p->bindings_in_scope = p->scope->bindings;
839 return true;
842 /* The Objective-C front-end often needs to determine the current scope. */
844 void *
845 objc_get_current_scope (void)
847 return current_scope;
850 /* The following function is used only by Objective-C. It needs to live here
851 because it accesses the innards of c_scope. */
853 void
854 objc_mark_locals_volatile (void *enclosing_blk)
856 struct c_scope *scope;
857 struct c_binding *b;
859 for (scope = current_scope;
860 scope && scope != enclosing_blk;
861 scope = scope->outer)
863 for (b = scope->bindings; b; b = b->prev)
864 objc_volatilize_decl (b->decl);
866 /* Do not climb up past the current function. */
867 if (scope->function_body)
868 break;
872 /* Return true if we are in the global binding level. */
874 bool
875 global_bindings_p (void)
877 return current_scope == file_scope;
880 void
881 keep_next_level (void)
883 keep_next_level_flag = true;
886 /* Set the flag for the FLOAT_CONST_DECIMAL64 pragma being ON. */
888 void
889 set_float_const_decimal64 (void)
891 current_scope->float_const_decimal64 = true;
894 /* Clear the flag for the FLOAT_CONST_DECIMAL64 pragma. */
896 void
897 clear_float_const_decimal64 (void)
899 current_scope->float_const_decimal64 = false;
902 /* Return nonzero if an unsuffixed float constant is _Decimal64. */
904 bool
905 float_const_decimal64_p (void)
907 return current_scope->float_const_decimal64;
910 /* Identify this scope as currently being filled with parameters. */
912 void
913 declare_parm_level (void)
915 current_scope->parm_flag = true;
918 void
919 push_scope (void)
921 if (next_is_function_body)
923 /* This is the transition from the parameters to the top level
924 of the function body. These are the same scope
925 (C99 6.2.1p4,6) so we do not push another scope structure.
926 next_is_function_body is set only by store_parm_decls, which
927 in turn is called when and only when we are about to
928 encounter the opening curly brace for the function body.
930 The outermost block of a function always gets a BLOCK node,
931 because the debugging output routines expect that each
932 function has at least one BLOCK. */
933 current_scope->parm_flag = false;
934 current_scope->function_body = true;
935 current_scope->keep = true;
936 current_scope->outer_function = current_function_scope;
937 current_function_scope = current_scope;
939 keep_next_level_flag = false;
940 next_is_function_body = false;
942 /* The FLOAT_CONST_DECIMAL64 pragma applies to nested scopes. */
943 if (current_scope->outer)
944 current_scope->float_const_decimal64
945 = current_scope->outer->float_const_decimal64;
946 else
947 current_scope->float_const_decimal64 = false;
949 else
951 struct c_scope *scope;
952 if (scope_freelist)
954 scope = scope_freelist;
955 scope_freelist = scope->outer;
957 else
958 scope = ggc_cleared_alloc<c_scope> ();
960 /* The FLOAT_CONST_DECIMAL64 pragma applies to nested scopes. */
961 if (current_scope)
962 scope->float_const_decimal64 = current_scope->float_const_decimal64;
963 else
964 scope->float_const_decimal64 = false;
966 scope->keep = keep_next_level_flag;
967 scope->outer = current_scope;
968 scope->depth = current_scope ? (current_scope->depth + 1) : 0;
970 /* Check for scope depth overflow. Unlikely (2^28 == 268,435,456) but
971 possible. */
972 if (current_scope && scope->depth == 0)
974 scope->depth--;
975 sorry ("GCC supports only %u nested scopes", scope->depth);
978 current_scope = scope;
979 keep_next_level_flag = false;
983 /* This is called when we are leaving SCOPE. For each label defined
984 in SCOPE, add any appropriate decls to its decls_in_scope fields.
985 These are the decls whose initialization will be skipped by a goto
986 later in the function. */
988 static void
989 update_label_decls (struct c_scope *scope)
991 struct c_scope *s;
993 s = scope;
994 while (s != NULL)
996 if (s->has_label_bindings)
998 struct c_binding *b;
1000 for (b = s->bindings; b != NULL; b = b->prev)
1002 struct c_label_vars *label_vars;
1003 struct c_binding *b1;
1004 bool hjud;
1005 unsigned int ix;
1006 struct c_goto_bindings *g;
1008 if (TREE_CODE (b->decl) != LABEL_DECL)
1009 continue;
1010 label_vars = b->u.label;
1012 b1 = label_vars->label_bindings.bindings_in_scope;
1013 if (label_vars->label_bindings.scope == NULL)
1014 hjud = false;
1015 else
1016 hjud = label_vars->label_bindings.scope->has_jump_unsafe_decl;
1017 if (update_spot_bindings (scope, &label_vars->label_bindings))
1019 /* This label is defined in this scope. */
1020 if (hjud)
1022 for (; b1 != NULL; b1 = b1->prev)
1024 /* A goto from later in the function to this
1025 label will never see the initialization
1026 of B1, if any. Save it to issue a
1027 warning if needed. */
1028 if (decl_jump_unsafe (b1->decl))
1029 vec_safe_push(label_vars->decls_in_scope, b1->decl);
1034 /* Update the bindings of any goto statements associated
1035 with this label. */
1036 FOR_EACH_VEC_SAFE_ELT (label_vars->gotos, ix, g)
1037 update_spot_bindings (scope, &g->goto_bindings);
1041 /* Don't search beyond the current function. */
1042 if (s == current_function_scope)
1043 break;
1045 s = s->outer;
1049 /* Set the TYPE_CONTEXT of all of TYPE's variants to CONTEXT. */
1051 static void
1052 set_type_context (tree type, tree context)
1054 for (type = TYPE_MAIN_VARIANT (type); type;
1055 type = TYPE_NEXT_VARIANT (type))
1056 TYPE_CONTEXT (type) = context;
1059 /* Exit a scope. Restore the state of the identifier-decl mappings
1060 that were in effect when this scope was entered. Return a BLOCK
1061 node containing all the DECLs in this scope that are of interest
1062 to debug info generation. */
1064 tree
1065 pop_scope (void)
1067 struct c_scope *scope = current_scope;
1068 tree block, context, p;
1069 struct c_binding *b;
1071 bool functionbody = scope->function_body;
1072 bool keep = functionbody || scope->keep || scope->bindings;
1074 update_label_decls (scope);
1076 /* If appropriate, create a BLOCK to record the decls for the life
1077 of this function. */
1078 block = 0;
1079 if (keep)
1081 block = make_node (BLOCK);
1082 BLOCK_SUBBLOCKS (block) = scope->blocks;
1083 TREE_USED (block) = 1;
1085 /* In each subblock, record that this is its superior. */
1086 for (p = scope->blocks; p; p = BLOCK_CHAIN (p))
1087 BLOCK_SUPERCONTEXT (p) = block;
1089 BLOCK_VARS (block) = 0;
1092 /* The TYPE_CONTEXTs for all of the tagged types belonging to this
1093 scope must be set so that they point to the appropriate
1094 construct, i.e. either to the current FUNCTION_DECL node, or
1095 else to the BLOCK node we just constructed.
1097 Note that for tagged types whose scope is just the formal
1098 parameter list for some function type specification, we can't
1099 properly set their TYPE_CONTEXTs here, because we don't have a
1100 pointer to the appropriate FUNCTION_TYPE node readily available
1101 to us. For those cases, the TYPE_CONTEXTs of the relevant tagged
1102 type nodes get set in `grokdeclarator' as soon as we have created
1103 the FUNCTION_TYPE node which will represent the "scope" for these
1104 "parameter list local" tagged types. */
1105 if (scope->function_body)
1106 context = current_function_decl;
1107 else if (scope == file_scope)
1109 tree file_decl = build_translation_unit_decl (NULL_TREE);
1110 context = file_decl;
1112 else
1113 context = block;
1115 /* Clear all bindings in this scope. */
1116 for (b = scope->bindings; b; b = free_binding_and_advance (b))
1118 p = b->decl;
1119 switch (TREE_CODE (p))
1121 case LABEL_DECL:
1122 /* Warnings for unused labels, errors for undefined labels. */
1123 if (TREE_USED (p) && !DECL_INITIAL (p))
1125 error ("label %q+D used but not defined", p);
1126 DECL_INITIAL (p) = error_mark_node;
1128 else
1129 warn_for_unused_label (p);
1131 /* Labels go in BLOCK_VARS. */
1132 DECL_CHAIN (p) = BLOCK_VARS (block);
1133 BLOCK_VARS (block) = p;
1134 gcc_assert (I_LABEL_BINDING (b->id) == b);
1135 I_LABEL_BINDING (b->id) = b->shadowed;
1137 /* Also pop back to the shadowed label_vars. */
1138 release_tree_vector (b->u.label->decls_in_scope);
1139 b->u.label = b->u.label->shadowed;
1140 break;
1142 case ENUMERAL_TYPE:
1143 case UNION_TYPE:
1144 case RECORD_TYPE:
1145 set_type_context (p, context);
1147 /* Types may not have tag-names, in which case the type
1148 appears in the bindings list with b->id NULL. */
1149 if (b->id)
1151 gcc_assert (I_TAG_BINDING (b->id) == b);
1152 I_TAG_BINDING (b->id) = b->shadowed;
1154 break;
1156 case FUNCTION_DECL:
1157 /* Propagate TREE_ADDRESSABLE from nested functions to their
1158 containing functions. */
1159 if (!TREE_ASM_WRITTEN (p)
1160 && DECL_INITIAL (p) != 0
1161 && TREE_ADDRESSABLE (p)
1162 && DECL_ABSTRACT_ORIGIN (p) != 0
1163 && DECL_ABSTRACT_ORIGIN (p) != p)
1164 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (p)) = 1;
1165 if (!DECL_EXTERNAL (p)
1166 && !DECL_INITIAL (p)
1167 && scope != file_scope
1168 && scope != external_scope)
1170 error ("nested function %q+D declared but never defined", p);
1171 undef_nested_function = true;
1173 else if (DECL_DECLARED_INLINE_P (p)
1174 && TREE_PUBLIC (p)
1175 && !DECL_INITIAL (p))
1177 /* C99 6.7.4p6: "a function with external linkage... declared
1178 with an inline function specifier ... shall also be defined
1179 in the same translation unit." */
1180 if (!flag_gnu89_inline
1181 && !lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (p)))
1182 pedwarn (input_location, 0,
1183 "inline function %q+D declared but never defined", p);
1184 DECL_EXTERNAL (p) = 1;
1187 goto common_symbol;
1189 case VAR_DECL:
1190 /* Warnings for unused variables. */
1191 if ((!TREE_USED (p) || !DECL_READ_P (p))
1192 && !TREE_NO_WARNING (p)
1193 && !DECL_IN_SYSTEM_HEADER (p)
1194 && DECL_NAME (p)
1195 && !DECL_ARTIFICIAL (p)
1196 && scope != file_scope
1197 && scope != external_scope)
1199 if (!TREE_USED (p))
1200 warning (OPT_Wunused_variable, "unused variable %q+D", p);
1201 else if (DECL_CONTEXT (p) == current_function_decl)
1202 warning_at (DECL_SOURCE_LOCATION (p),
1203 OPT_Wunused_but_set_variable,
1204 "variable %qD set but not used", p);
1207 if (b->inner_comp)
1209 error ("type of array %q+D completed incompatibly with"
1210 " implicit initialization", p);
1213 /* Fall through. */
1214 case TYPE_DECL:
1215 case CONST_DECL:
1216 common_symbol:
1217 /* All of these go in BLOCK_VARS, but only if this is the
1218 binding in the home scope. */
1219 if (!b->nested)
1221 DECL_CHAIN (p) = BLOCK_VARS (block);
1222 BLOCK_VARS (block) = p;
1224 else if (VAR_OR_FUNCTION_DECL_P (p) && scope != file_scope)
1226 /* For block local externs add a special
1227 DECL_EXTERNAL decl for debug info generation. */
1228 tree extp = copy_node (p);
1230 DECL_EXTERNAL (extp) = 1;
1231 TREE_STATIC (extp) = 0;
1232 TREE_PUBLIC (extp) = 1;
1233 DECL_INITIAL (extp) = NULL_TREE;
1234 DECL_LANG_SPECIFIC (extp) = NULL;
1235 DECL_CONTEXT (extp) = current_function_decl;
1236 if (TREE_CODE (p) == FUNCTION_DECL)
1238 DECL_RESULT (extp) = NULL_TREE;
1239 DECL_SAVED_TREE (extp) = NULL_TREE;
1240 DECL_STRUCT_FUNCTION (extp) = NULL;
1242 if (b->locus != UNKNOWN_LOCATION)
1243 DECL_SOURCE_LOCATION (extp) = b->locus;
1244 DECL_CHAIN (extp) = BLOCK_VARS (block);
1245 BLOCK_VARS (block) = extp;
1247 /* If this is the file scope set DECL_CONTEXT of each decl to
1248 the TRANSLATION_UNIT_DECL. This makes same_translation_unit_p
1249 work. */
1250 if (scope == file_scope)
1252 DECL_CONTEXT (p) = context;
1253 if (TREE_CODE (p) == TYPE_DECL
1254 && TREE_TYPE (p) != error_mark_node)
1255 set_type_context (TREE_TYPE (p), context);
1258 /* Fall through. */
1259 /* Parameters go in DECL_ARGUMENTS, not BLOCK_VARS, and have
1260 already been put there by store_parm_decls. Unused-
1261 parameter warnings are handled by function.c.
1262 error_mark_node obviously does not go in BLOCK_VARS and
1263 does not get unused-variable warnings. */
1264 case PARM_DECL:
1265 case ERROR_MARK:
1266 /* It is possible for a decl not to have a name. We get
1267 here with b->id NULL in this case. */
1268 if (b->id)
1270 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
1271 I_SYMBOL_BINDING (b->id) = b->shadowed;
1272 if (b->shadowed && b->shadowed->u.type)
1273 TREE_TYPE (b->shadowed->decl) = b->shadowed->u.type;
1275 break;
1277 default:
1278 gcc_unreachable ();
1283 /* Dispose of the block that we just made inside some higher level. */
1284 if ((scope->function_body || scope == file_scope) && context)
1286 DECL_INITIAL (context) = block;
1287 BLOCK_SUPERCONTEXT (block) = context;
1289 else if (scope->outer)
1291 if (block)
1292 SCOPE_LIST_APPEND (scope->outer, blocks, block);
1293 /* If we did not make a block for the scope just exited, any
1294 blocks made for inner scopes must be carried forward so they
1295 will later become subblocks of something else. */
1296 else if (scope->blocks)
1297 SCOPE_LIST_CONCAT (scope->outer, blocks, scope, blocks);
1300 /* Pop the current scope, and free the structure for reuse. */
1301 current_scope = scope->outer;
1302 if (scope->function_body)
1303 current_function_scope = scope->outer_function;
1305 memset (scope, 0, sizeof (struct c_scope));
1306 scope->outer = scope_freelist;
1307 scope_freelist = scope;
1309 return block;
1312 void
1313 push_file_scope (void)
1315 tree decl;
1317 if (file_scope)
1318 return;
1320 push_scope ();
1321 file_scope = current_scope;
1323 start_fname_decls ();
1325 for (decl = visible_builtins; decl; decl = DECL_CHAIN (decl))
1326 bind (DECL_NAME (decl), decl, file_scope,
1327 /*invisible=*/false, /*nested=*/true, DECL_SOURCE_LOCATION (decl));
1330 void
1331 pop_file_scope (void)
1333 /* In case there were missing closebraces, get us back to the global
1334 binding level. */
1335 while (current_scope != file_scope)
1336 pop_scope ();
1338 /* __FUNCTION__ is defined at file scope (""). This
1339 call may not be necessary as my tests indicate it
1340 still works without it. */
1341 finish_fname_decls ();
1343 check_inline_statics ();
1345 /* This is the point to write out a PCH if we're doing that.
1346 In that case we do not want to do anything else. */
1347 if (pch_file)
1349 c_common_write_pch ();
1350 return;
1353 /* Pop off the file scope and close this translation unit. */
1354 pop_scope ();
1355 file_scope = 0;
1357 maybe_apply_pending_pragma_weaks ();
1360 /* Adjust the bindings for the start of a statement expression. */
1362 void
1363 c_bindings_start_stmt_expr (struct c_spot_bindings* switch_bindings)
1365 struct c_scope *scope;
1367 for (scope = current_scope; scope != NULL; scope = scope->outer)
1369 struct c_binding *b;
1371 if (!scope->has_label_bindings)
1372 continue;
1374 for (b = scope->bindings; b != NULL; b = b->prev)
1376 struct c_label_vars *label_vars;
1377 unsigned int ix;
1378 struct c_goto_bindings *g;
1380 if (TREE_CODE (b->decl) != LABEL_DECL)
1381 continue;
1382 label_vars = b->u.label;
1383 ++label_vars->label_bindings.stmt_exprs;
1384 FOR_EACH_VEC_SAFE_ELT (label_vars->gotos, ix, g)
1385 ++g->goto_bindings.stmt_exprs;
1389 if (switch_bindings != NULL)
1390 ++switch_bindings->stmt_exprs;
1393 /* Adjust the bindings for the end of a statement expression. */
1395 void
1396 c_bindings_end_stmt_expr (struct c_spot_bindings *switch_bindings)
1398 struct c_scope *scope;
1400 for (scope = current_scope; scope != NULL; scope = scope->outer)
1402 struct c_binding *b;
1404 if (!scope->has_label_bindings)
1405 continue;
1407 for (b = scope->bindings; b != NULL; b = b->prev)
1409 struct c_label_vars *label_vars;
1410 unsigned int ix;
1411 struct c_goto_bindings *g;
1413 if (TREE_CODE (b->decl) != LABEL_DECL)
1414 continue;
1415 label_vars = b->u.label;
1416 --label_vars->label_bindings.stmt_exprs;
1417 if (label_vars->label_bindings.stmt_exprs < 0)
1419 label_vars->label_bindings.left_stmt_expr = true;
1420 label_vars->label_bindings.stmt_exprs = 0;
1422 FOR_EACH_VEC_SAFE_ELT (label_vars->gotos, ix, g)
1424 --g->goto_bindings.stmt_exprs;
1425 if (g->goto_bindings.stmt_exprs < 0)
1427 g->goto_bindings.left_stmt_expr = true;
1428 g->goto_bindings.stmt_exprs = 0;
1434 if (switch_bindings != NULL)
1436 --switch_bindings->stmt_exprs;
1437 gcc_assert (switch_bindings->stmt_exprs >= 0);
1441 /* Push a definition or a declaration of struct, union or enum tag "name".
1442 "type" should be the type node.
1443 We assume that the tag "name" is not already defined, and has a location
1444 of LOC.
1446 Note that the definition may really be just a forward reference.
1447 In that case, the TYPE_SIZE will be zero. */
1449 static void
1450 pushtag (location_t loc, tree name, tree type)
1452 /* Record the identifier as the type's name if it has none. */
1453 if (name && !TYPE_NAME (type))
1454 TYPE_NAME (type) = name;
1455 bind (name, type, current_scope, /*invisible=*/false, /*nested=*/false, loc);
1457 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE will be the
1458 tagged type we just added to the current scope. This fake
1459 NULL-named TYPE_DECL node helps dwarfout.c to know when it needs
1460 to output a representation of a tagged type, and it also gives
1461 us a convenient place to record the "scope start" address for the
1462 tagged type. */
1464 TYPE_STUB_DECL (type) = pushdecl (build_decl (loc,
1465 TYPE_DECL, NULL_TREE, type));
1467 /* An approximation for now, so we can tell this is a function-scope tag.
1468 This will be updated in pop_scope. */
1469 TYPE_CONTEXT (type) = DECL_CONTEXT (TYPE_STUB_DECL (type));
1471 if (warn_cxx_compat && name != NULL_TREE)
1473 struct c_binding *b = I_SYMBOL_BINDING (name);
1475 if (b != NULL
1476 && b->decl != NULL_TREE
1477 && TREE_CODE (b->decl) == TYPE_DECL
1478 && (B_IN_CURRENT_SCOPE (b)
1479 || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
1480 && (TYPE_MAIN_VARIANT (TREE_TYPE (b->decl))
1481 != TYPE_MAIN_VARIANT (type)))
1483 warning_at (loc, OPT_Wc___compat,
1484 ("using %qD as both a typedef and a tag is "
1485 "invalid in C++"),
1486 b->decl);
1487 if (b->locus != UNKNOWN_LOCATION)
1488 inform (b->locus, "originally defined here");
1493 /* Subroutine of compare_decls. Allow harmless mismatches in return
1494 and argument types provided that the type modes match. This function
1495 return a unified type given a suitable match, and 0 otherwise. */
1497 static tree
1498 match_builtin_function_types (tree newtype, tree oldtype)
1500 tree newrettype, oldrettype;
1501 tree newargs, oldargs;
1502 tree trytype, tryargs;
1504 /* Accept the return type of the new declaration if same modes. */
1505 oldrettype = TREE_TYPE (oldtype);
1506 newrettype = TREE_TYPE (newtype);
1508 if (TYPE_MODE (oldrettype) != TYPE_MODE (newrettype))
1509 return 0;
1511 oldargs = TYPE_ARG_TYPES (oldtype);
1512 newargs = TYPE_ARG_TYPES (newtype);
1513 tryargs = newargs;
1515 while (oldargs || newargs)
1517 if (!oldargs
1518 || !newargs
1519 || !TREE_VALUE (oldargs)
1520 || !TREE_VALUE (newargs)
1521 || TYPE_MODE (TREE_VALUE (oldargs))
1522 != TYPE_MODE (TREE_VALUE (newargs)))
1523 return 0;
1525 oldargs = TREE_CHAIN (oldargs);
1526 newargs = TREE_CHAIN (newargs);
1529 trytype = build_function_type (newrettype, tryargs);
1530 return build_type_attribute_variant (trytype, TYPE_ATTRIBUTES (oldtype));
1533 /* Subroutine of diagnose_mismatched_decls. Check for function type
1534 mismatch involving an empty arglist vs a nonempty one and give clearer
1535 diagnostics. */
1536 static void
1537 diagnose_arglist_conflict (tree newdecl, tree olddecl,
1538 tree newtype, tree oldtype)
1540 tree t;
1542 if (TREE_CODE (olddecl) != FUNCTION_DECL
1543 || !comptypes (TREE_TYPE (oldtype), TREE_TYPE (newtype))
1544 || !((!prototype_p (oldtype) && DECL_INITIAL (olddecl) == 0)
1545 || (!prototype_p (newtype) && DECL_INITIAL (newdecl) == 0)))
1546 return;
1548 t = TYPE_ARG_TYPES (oldtype);
1549 if (t == 0)
1550 t = TYPE_ARG_TYPES (newtype);
1551 for (; t; t = TREE_CHAIN (t))
1553 tree type = TREE_VALUE (t);
1555 if (TREE_CHAIN (t) == 0
1556 && TYPE_MAIN_VARIANT (type) != void_type_node)
1558 inform (input_location, "a parameter list with an ellipsis can%'t match "
1559 "an empty parameter name list declaration");
1560 break;
1563 if (c_type_promotes_to (type) != type)
1565 inform (input_location, "an argument type that has a default promotion can%'t match "
1566 "an empty parameter name list declaration");
1567 break;
1572 /* Another subroutine of diagnose_mismatched_decls. OLDDECL is an
1573 old-style function definition, NEWDECL is a prototype declaration.
1574 Diagnose inconsistencies in the argument list. Returns TRUE if
1575 the prototype is compatible, FALSE if not. */
1576 static bool
1577 validate_proto_after_old_defn (tree newdecl, tree newtype, tree oldtype)
1579 tree newargs, oldargs;
1580 int i;
1582 #define END_OF_ARGLIST(t) ((t) == void_type_node)
1584 oldargs = TYPE_ACTUAL_ARG_TYPES (oldtype);
1585 newargs = TYPE_ARG_TYPES (newtype);
1586 i = 1;
1588 for (;;)
1590 tree oldargtype = TREE_VALUE (oldargs);
1591 tree newargtype = TREE_VALUE (newargs);
1593 if (oldargtype == error_mark_node || newargtype == error_mark_node)
1594 return false;
1596 oldargtype = (TYPE_ATOMIC (oldargtype)
1597 ? c_build_qualified_type (TYPE_MAIN_VARIANT (oldargtype),
1598 TYPE_QUAL_ATOMIC)
1599 : TYPE_MAIN_VARIANT (oldargtype));
1600 newargtype = (TYPE_ATOMIC (newargtype)
1601 ? c_build_qualified_type (TYPE_MAIN_VARIANT (newargtype),
1602 TYPE_QUAL_ATOMIC)
1603 : TYPE_MAIN_VARIANT (newargtype));
1605 if (END_OF_ARGLIST (oldargtype) && END_OF_ARGLIST (newargtype))
1606 break;
1608 /* Reaching the end of just one list means the two decls don't
1609 agree on the number of arguments. */
1610 if (END_OF_ARGLIST (oldargtype))
1612 error ("prototype for %q+D declares more arguments "
1613 "than previous old-style definition", newdecl);
1614 return false;
1616 else if (END_OF_ARGLIST (newargtype))
1618 error ("prototype for %q+D declares fewer arguments "
1619 "than previous old-style definition", newdecl);
1620 return false;
1623 /* Type for passing arg must be consistent with that declared
1624 for the arg. */
1625 else if (!comptypes (oldargtype, newargtype))
1627 error ("prototype for %q+D declares argument %d"
1628 " with incompatible type",
1629 newdecl, i);
1630 return false;
1633 oldargs = TREE_CHAIN (oldargs);
1634 newargs = TREE_CHAIN (newargs);
1635 i++;
1638 /* If we get here, no errors were found, but do issue a warning
1639 for this poor-style construct. */
1640 warning (0, "prototype for %q+D follows non-prototype definition",
1641 newdecl);
1642 return true;
1643 #undef END_OF_ARGLIST
1646 /* Subroutine of diagnose_mismatched_decls. Report the location of DECL,
1647 first in a pair of mismatched declarations, using the diagnostic
1648 function DIAG. */
1649 static void
1650 locate_old_decl (tree decl)
1652 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_BUILT_IN (decl)
1653 && !C_DECL_DECLARED_BUILTIN (decl))
1655 else if (DECL_INITIAL (decl))
1656 inform (input_location, "previous definition of %q+D was here", decl);
1657 else if (C_DECL_IMPLICIT (decl))
1658 inform (input_location, "previous implicit declaration of %q+D was here", decl);
1659 else
1660 inform (input_location, "previous declaration of %q+D was here", decl);
1663 /* Subroutine of duplicate_decls. Compare NEWDECL to OLDDECL.
1664 Returns true if the caller should proceed to merge the two, false
1665 if OLDDECL should simply be discarded. As a side effect, issues
1666 all necessary diagnostics for invalid or poor-style combinations.
1667 If it returns true, writes the types of NEWDECL and OLDDECL to
1668 *NEWTYPEP and *OLDTYPEP - these may have been adjusted from
1669 TREE_TYPE (NEWDECL, OLDDECL) respectively. */
1671 static bool
1672 diagnose_mismatched_decls (tree newdecl, tree olddecl,
1673 tree *newtypep, tree *oldtypep)
1675 tree newtype, oldtype;
1676 bool pedwarned = false;
1677 bool warned = false;
1678 bool retval = true;
1680 #define DECL_EXTERN_INLINE(DECL) (DECL_DECLARED_INLINE_P (DECL) \
1681 && DECL_EXTERNAL (DECL))
1683 /* If we have error_mark_node for either decl or type, just discard
1684 the previous decl - we're in an error cascade already. */
1685 if (olddecl == error_mark_node || newdecl == error_mark_node)
1686 return false;
1687 *oldtypep = oldtype = TREE_TYPE (olddecl);
1688 *newtypep = newtype = TREE_TYPE (newdecl);
1689 if (oldtype == error_mark_node || newtype == error_mark_node)
1690 return false;
1692 /* Two different categories of symbol altogether. This is an error
1693 unless OLDDECL is a builtin. OLDDECL will be discarded in any case. */
1694 if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1696 if (!(TREE_CODE (olddecl) == FUNCTION_DECL
1697 && DECL_BUILT_IN (olddecl)
1698 && !C_DECL_DECLARED_BUILTIN (olddecl)))
1700 error ("%q+D redeclared as different kind of symbol", newdecl);
1701 locate_old_decl (olddecl);
1703 else if (TREE_PUBLIC (newdecl))
1704 warning (0, "built-in function %q+D declared as non-function",
1705 newdecl);
1706 else
1707 warning (OPT_Wshadow, "declaration of %q+D shadows "
1708 "a built-in function", newdecl);
1709 return false;
1712 /* Enumerators have no linkage, so may only be declared once in a
1713 given scope. */
1714 if (TREE_CODE (olddecl) == CONST_DECL)
1716 error ("redeclaration of enumerator %q+D", newdecl);
1717 locate_old_decl (olddecl);
1718 return false;
1721 if (!comptypes (oldtype, newtype))
1723 if (TREE_CODE (olddecl) == FUNCTION_DECL
1724 && DECL_BUILT_IN (olddecl) && !C_DECL_DECLARED_BUILTIN (olddecl))
1726 /* Accept harmless mismatch in function types.
1727 This is for the ffs and fprintf builtins. */
1728 tree trytype = match_builtin_function_types (newtype, oldtype);
1730 if (trytype && comptypes (newtype, trytype))
1731 *oldtypep = oldtype = trytype;
1732 else
1734 /* If types don't match for a built-in, throw away the
1735 built-in. No point in calling locate_old_decl here, it
1736 won't print anything. */
1737 warning (0, "conflicting types for built-in function %q+D",
1738 newdecl);
1739 return false;
1742 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1743 && DECL_IS_BUILTIN (olddecl))
1745 /* A conflicting function declaration for a predeclared
1746 function that isn't actually built in. Objective C uses
1747 these. The new declaration silently overrides everything
1748 but the volatility (i.e. noreturn) indication. See also
1749 below. FIXME: Make Objective C use normal builtins. */
1750 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1751 return false;
1753 /* Permit void foo (...) to match int foo (...) if the latter is
1754 the definition and implicit int was used. See
1755 c-torture/compile/920625-2.c. */
1756 else if (TREE_CODE (newdecl) == FUNCTION_DECL && DECL_INITIAL (newdecl)
1757 && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype)) == void_type_node
1758 && TYPE_MAIN_VARIANT (TREE_TYPE (newtype)) == integer_type_node
1759 && C_FUNCTION_IMPLICIT_INT (newdecl) && !DECL_INITIAL (olddecl))
1761 pedwarned = pedwarn (input_location, 0,
1762 "conflicting types for %q+D", newdecl);
1763 /* Make sure we keep void as the return type. */
1764 TREE_TYPE (newdecl) = *newtypep = newtype = oldtype;
1765 C_FUNCTION_IMPLICIT_INT (newdecl) = 0;
1767 /* Permit void foo (...) to match an earlier call to foo (...) with
1768 no declared type (thus, implicitly int). */
1769 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1770 && TYPE_MAIN_VARIANT (TREE_TYPE (newtype)) == void_type_node
1771 && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype)) == integer_type_node
1772 && C_DECL_IMPLICIT (olddecl) && !DECL_INITIAL (olddecl))
1774 pedwarned = pedwarn (input_location, 0,
1775 "conflicting types for %q+D", newdecl);
1776 /* Make sure we keep void as the return type. */
1777 TREE_TYPE (olddecl) = *oldtypep = oldtype = newtype;
1779 else
1781 int new_quals = TYPE_QUALS (newtype);
1782 int old_quals = TYPE_QUALS (oldtype);
1784 if (new_quals != old_quals)
1786 addr_space_t new_addr = DECODE_QUAL_ADDR_SPACE (new_quals);
1787 addr_space_t old_addr = DECODE_QUAL_ADDR_SPACE (old_quals);
1788 if (new_addr != old_addr)
1790 if (ADDR_SPACE_GENERIC_P (new_addr))
1791 error ("conflicting named address spaces (generic vs %s) "
1792 "for %q+D",
1793 c_addr_space_name (old_addr), newdecl);
1794 else if (ADDR_SPACE_GENERIC_P (old_addr))
1795 error ("conflicting named address spaces (%s vs generic) "
1796 "for %q+D",
1797 c_addr_space_name (new_addr), newdecl);
1798 else
1799 error ("conflicting named address spaces (%s vs %s) "
1800 "for %q+D",
1801 c_addr_space_name (new_addr),
1802 c_addr_space_name (old_addr),
1803 newdecl);
1806 if (CLEAR_QUAL_ADDR_SPACE (new_quals)
1807 != CLEAR_QUAL_ADDR_SPACE (old_quals))
1808 error ("conflicting type qualifiers for %q+D", newdecl);
1810 else
1811 error ("conflicting types for %q+D", newdecl);
1812 diagnose_arglist_conflict (newdecl, olddecl, newtype, oldtype);
1813 locate_old_decl (olddecl);
1814 return false;
1818 /* Redeclaration of a type is a constraint violation (6.7.2.3p1),
1819 but silently ignore the redeclaration if either is in a system
1820 header. (Conflicting redeclarations were handled above.) This
1821 is allowed for C11 if the types are the same, not just
1822 compatible. */
1823 if (TREE_CODE (newdecl) == TYPE_DECL)
1825 bool types_different = false;
1826 int comptypes_result;
1828 comptypes_result
1829 = comptypes_check_different_types (oldtype, newtype, &types_different);
1831 if (comptypes_result != 1 || types_different)
1833 error ("redefinition of typedef %q+D with different type", newdecl);
1834 locate_old_decl (olddecl);
1835 return false;
1838 if (DECL_IN_SYSTEM_HEADER (newdecl)
1839 || DECL_IN_SYSTEM_HEADER (olddecl)
1840 || TREE_NO_WARNING (newdecl)
1841 || TREE_NO_WARNING (olddecl))
1842 return true; /* Allow OLDDECL to continue in use. */
1844 if (variably_modified_type_p (newtype, NULL))
1846 error ("redefinition of typedef %q+D with variably modified type",
1847 newdecl);
1848 locate_old_decl (olddecl);
1850 else if (pedwarn_c99 (input_location, OPT_Wpedantic,
1851 "redefinition of typedef %q+D", newdecl))
1852 locate_old_decl (olddecl);
1854 return true;
1857 /* Function declarations can either be 'static' or 'extern' (no
1858 qualifier is equivalent to 'extern' - C99 6.2.2p5) and therefore
1859 can never conflict with each other on account of linkage
1860 (6.2.2p4). Multiple definitions are not allowed (6.9p3,5) but
1861 gnu89 mode permits two definitions if one is 'extern inline' and
1862 one is not. The non- extern-inline definition supersedes the
1863 extern-inline definition. */
1865 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1867 /* If you declare a built-in function name as static, or
1868 define the built-in with an old-style definition (so we
1869 can't validate the argument list) the built-in definition is
1870 overridden, but optionally warn this was a bad choice of name. */
1871 if (DECL_BUILT_IN (olddecl)
1872 && !C_DECL_DECLARED_BUILTIN (olddecl)
1873 && (!TREE_PUBLIC (newdecl)
1874 || (DECL_INITIAL (newdecl)
1875 && !prototype_p (TREE_TYPE (newdecl)))))
1877 warning (OPT_Wshadow, "declaration of %q+D shadows "
1878 "a built-in function", newdecl);
1879 /* Discard the old built-in function. */
1880 return false;
1883 if (DECL_INITIAL (newdecl))
1885 if (DECL_INITIAL (olddecl))
1887 /* If both decls are in the same TU and the new declaration
1888 isn't overriding an extern inline reject the new decl.
1889 In c99, no overriding is allowed in the same translation
1890 unit. */
1891 if ((!DECL_EXTERN_INLINE (olddecl)
1892 || DECL_EXTERN_INLINE (newdecl)
1893 || (!flag_gnu89_inline
1894 && (!DECL_DECLARED_INLINE_P (olddecl)
1895 || !lookup_attribute ("gnu_inline",
1896 DECL_ATTRIBUTES (olddecl)))
1897 && (!DECL_DECLARED_INLINE_P (newdecl)
1898 || !lookup_attribute ("gnu_inline",
1899 DECL_ATTRIBUTES (newdecl))))
1901 && same_translation_unit_p (newdecl, olddecl))
1903 error ("redefinition of %q+D", newdecl);
1904 locate_old_decl (olddecl);
1905 return false;
1909 /* If we have a prototype after an old-style function definition,
1910 the argument types must be checked specially. */
1911 else if (DECL_INITIAL (olddecl)
1912 && !prototype_p (oldtype) && prototype_p (newtype)
1913 && TYPE_ACTUAL_ARG_TYPES (oldtype)
1914 && !validate_proto_after_old_defn (newdecl, newtype, oldtype))
1916 locate_old_decl (olddecl);
1917 return false;
1919 /* A non-static declaration (even an "extern") followed by a
1920 static declaration is undefined behavior per C99 6.2.2p3-5,7.
1921 The same is true for a static forward declaration at block
1922 scope followed by a non-static declaration/definition at file
1923 scope. Static followed by non-static at the same scope is
1924 not undefined behavior, and is the most convenient way to get
1925 some effects (see e.g. what unwind-dw2-fde-glibc.c does to
1926 the definition of _Unwind_Find_FDE in unwind-dw2-fde.c), but
1927 we do diagnose it if -Wtraditional. */
1928 if (TREE_PUBLIC (olddecl) && !TREE_PUBLIC (newdecl))
1930 /* Two exceptions to the rule. If olddecl is an extern
1931 inline, or a predeclared function that isn't actually
1932 built in, newdecl silently overrides olddecl. The latter
1933 occur only in Objective C; see also above. (FIXME: Make
1934 Objective C use normal builtins.) */
1935 if (!DECL_IS_BUILTIN (olddecl)
1936 && !DECL_EXTERN_INLINE (olddecl))
1938 error ("static declaration of %q+D follows "
1939 "non-static declaration", newdecl);
1940 locate_old_decl (olddecl);
1942 return false;
1944 else if (TREE_PUBLIC (newdecl) && !TREE_PUBLIC (olddecl))
1946 if (DECL_CONTEXT (olddecl))
1948 error ("non-static declaration of %q+D follows "
1949 "static declaration", newdecl);
1950 locate_old_decl (olddecl);
1951 return false;
1953 else if (warn_traditional)
1955 warned |= warning (OPT_Wtraditional,
1956 "non-static declaration of %q+D "
1957 "follows static declaration", newdecl);
1961 /* Make sure gnu_inline attribute is either not present, or
1962 present on all inline decls. */
1963 if (DECL_DECLARED_INLINE_P (olddecl)
1964 && DECL_DECLARED_INLINE_P (newdecl))
1966 bool newa = lookup_attribute ("gnu_inline",
1967 DECL_ATTRIBUTES (newdecl)) != NULL;
1968 bool olda = lookup_attribute ("gnu_inline",
1969 DECL_ATTRIBUTES (olddecl)) != NULL;
1970 if (newa != olda)
1972 error_at (input_location, "%<gnu_inline%> attribute present on %q+D",
1973 newa ? newdecl : olddecl);
1974 error_at (DECL_SOURCE_LOCATION (newa ? olddecl : newdecl),
1975 "but not here");
1979 else if (TREE_CODE (newdecl) == VAR_DECL)
1981 /* Only variables can be thread-local, and all declarations must
1982 agree on this property. */
1983 if (C_DECL_THREADPRIVATE_P (olddecl) && !DECL_THREAD_LOCAL_P (newdecl))
1985 /* Nothing to check. Since OLDDECL is marked threadprivate
1986 and NEWDECL does not have a thread-local attribute, we
1987 will merge the threadprivate attribute into NEWDECL. */
1990 else if (DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl))
1992 if (DECL_THREAD_LOCAL_P (newdecl))
1993 error ("thread-local declaration of %q+D follows "
1994 "non-thread-local declaration", newdecl);
1995 else
1996 error ("non-thread-local declaration of %q+D follows "
1997 "thread-local declaration", newdecl);
1999 locate_old_decl (olddecl);
2000 return false;
2003 /* Multiple initialized definitions are not allowed (6.9p3,5). */
2004 if (DECL_INITIAL (newdecl) && DECL_INITIAL (olddecl))
2006 error ("redefinition of %q+D", newdecl);
2007 locate_old_decl (olddecl);
2008 return false;
2011 /* Objects declared at file scope: if the first declaration had
2012 external linkage (even if it was an external reference) the
2013 second must have external linkage as well, or the behavior is
2014 undefined. If the first declaration had internal linkage, then
2015 the second must too, or else be an external reference (in which
2016 case the composite declaration still has internal linkage).
2017 As for function declarations, we warn about the static-then-
2018 extern case only for -Wtraditional. See generally 6.2.2p3-5,7. */
2019 if (DECL_FILE_SCOPE_P (newdecl)
2020 && TREE_PUBLIC (newdecl) != TREE_PUBLIC (olddecl))
2022 if (DECL_EXTERNAL (newdecl))
2024 if (!DECL_FILE_SCOPE_P (olddecl))
2026 error ("extern declaration of %q+D follows "
2027 "declaration with no linkage", newdecl);
2028 locate_old_decl (olddecl);
2029 return false;
2031 else if (warn_traditional)
2033 warned |= warning (OPT_Wtraditional,
2034 "non-static declaration of %q+D "
2035 "follows static declaration", newdecl);
2038 else
2040 if (TREE_PUBLIC (newdecl))
2041 error ("non-static declaration of %q+D follows "
2042 "static declaration", newdecl);
2043 else
2044 error ("static declaration of %q+D follows "
2045 "non-static declaration", newdecl);
2047 locate_old_decl (olddecl);
2048 return false;
2051 /* Two objects with the same name declared at the same block
2052 scope must both be external references (6.7p3). */
2053 else if (!DECL_FILE_SCOPE_P (newdecl))
2055 if (DECL_EXTERNAL (newdecl))
2057 /* Extern with initializer at block scope, which will
2058 already have received an error. */
2060 else if (DECL_EXTERNAL (olddecl))
2062 error ("declaration of %q+D with no linkage follows "
2063 "extern declaration", newdecl);
2064 locate_old_decl (olddecl);
2066 else
2068 error ("redeclaration of %q+D with no linkage", newdecl);
2069 locate_old_decl (olddecl);
2072 return false;
2075 /* C++ does not permit a decl to appear multiple times at file
2076 scope. */
2077 if (warn_cxx_compat
2078 && DECL_FILE_SCOPE_P (newdecl)
2079 && !DECL_EXTERNAL (newdecl)
2080 && !DECL_EXTERNAL (olddecl))
2081 warned |= warning_at (DECL_SOURCE_LOCATION (newdecl),
2082 OPT_Wc___compat,
2083 ("duplicate declaration of %qD is "
2084 "invalid in C++"),
2085 newdecl);
2088 /* warnings */
2089 /* All decls must agree on a visibility. */
2090 if (CODE_CONTAINS_STRUCT (TREE_CODE (newdecl), TS_DECL_WITH_VIS)
2091 && DECL_VISIBILITY_SPECIFIED (newdecl) && DECL_VISIBILITY_SPECIFIED (olddecl)
2092 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2094 warned |= warning (0, "redeclaration of %q+D with different visibility "
2095 "(old visibility preserved)", newdecl);
2098 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2100 /* Diagnose inline __attribute__ ((noinline)) which is silly. */
2101 if (DECL_DECLARED_INLINE_P (newdecl)
2102 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
2103 warned |= warning (OPT_Wattributes,
2104 "inline declaration of %qD follows "
2105 "declaration with attribute noinline", newdecl);
2106 else if (DECL_DECLARED_INLINE_P (olddecl)
2107 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
2108 warned |= warning (OPT_Wattributes,
2109 "declaration of %q+D with attribute "
2110 "noinline follows inline declaration ", newdecl);
2111 else if (lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl))
2112 && lookup_attribute ("always_inline", DECL_ATTRIBUTES (olddecl)))
2113 warned |= warning (OPT_Wattributes,
2114 "declaration of %q+D with attribute "
2115 "%qs follows declaration with attribute %qs",
2116 newdecl, "noinline", "always_inline");
2117 else if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (newdecl))
2118 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
2119 warned |= warning (OPT_Wattributes,
2120 "declaration of %q+D with attribute "
2121 "%qs follows declaration with attribute %qs",
2122 newdecl, "always_inline", "noinline");
2123 else if (lookup_attribute ("cold", DECL_ATTRIBUTES (newdecl))
2124 && lookup_attribute ("hot", DECL_ATTRIBUTES (olddecl)))
2125 warned |= warning (OPT_Wattributes,
2126 "declaration of %q+D with attribute %qs follows "
2127 "declaration with attribute %qs", newdecl, "cold",
2128 "hot");
2129 else if (lookup_attribute ("hot", DECL_ATTRIBUTES (newdecl))
2130 && lookup_attribute ("cold", DECL_ATTRIBUTES (olddecl)))
2131 warned |= warning (OPT_Wattributes,
2132 "declaration of %q+D with attribute %qs follows "
2133 "declaration with attribute %qs", newdecl, "hot",
2134 "cold");
2136 else /* PARM_DECL, VAR_DECL */
2138 /* Redeclaration of a parameter is a constraint violation (this is
2139 not explicitly stated, but follows from C99 6.7p3 [no more than
2140 one declaration of the same identifier with no linkage in the
2141 same scope, except type tags] and 6.2.2p6 [parameters have no
2142 linkage]). We must check for a forward parameter declaration,
2143 indicated by TREE_ASM_WRITTEN on the old declaration - this is
2144 an extension, the mandatory diagnostic for which is handled by
2145 mark_forward_parm_decls. */
2147 if (TREE_CODE (newdecl) == PARM_DECL
2148 && (!TREE_ASM_WRITTEN (olddecl) || TREE_ASM_WRITTEN (newdecl)))
2150 error ("redefinition of parameter %q+D", newdecl);
2151 locate_old_decl (olddecl);
2152 return false;
2156 /* Optional warning for completely redundant decls. */
2157 if (!warned && !pedwarned
2158 && warn_redundant_decls
2159 /* Don't warn about a function declaration followed by a
2160 definition. */
2161 && !(TREE_CODE (newdecl) == FUNCTION_DECL
2162 && DECL_INITIAL (newdecl) && !DECL_INITIAL (olddecl))
2163 /* Don't warn about redundant redeclarations of builtins. */
2164 && !(TREE_CODE (newdecl) == FUNCTION_DECL
2165 && !DECL_BUILT_IN (newdecl)
2166 && DECL_BUILT_IN (olddecl)
2167 && !C_DECL_DECLARED_BUILTIN (olddecl))
2168 /* Don't warn about an extern followed by a definition. */
2169 && !(DECL_EXTERNAL (olddecl) && !DECL_EXTERNAL (newdecl))
2170 /* Don't warn about forward parameter decls. */
2171 && !(TREE_CODE (newdecl) == PARM_DECL
2172 && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
2173 /* Don't warn about a variable definition following a declaration. */
2174 && !(TREE_CODE (newdecl) == VAR_DECL
2175 && DECL_INITIAL (newdecl) && !DECL_INITIAL (olddecl)))
2177 warned = warning (OPT_Wredundant_decls, "redundant redeclaration of %q+D",
2178 newdecl);
2181 /* Report location of previous decl/defn. */
2182 if (warned || pedwarned)
2183 locate_old_decl (olddecl);
2185 #undef DECL_EXTERN_INLINE
2187 return retval;
2190 /* Subroutine of duplicate_decls. NEWDECL has been found to be
2191 consistent with OLDDECL, but carries new information. Merge the
2192 new information into OLDDECL. This function issues no
2193 diagnostics. */
2195 static void
2196 merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
2198 bool new_is_definition = (TREE_CODE (newdecl) == FUNCTION_DECL
2199 && DECL_INITIAL (newdecl) != 0);
2200 bool new_is_prototype = (TREE_CODE (newdecl) == FUNCTION_DECL
2201 && prototype_p (TREE_TYPE (newdecl)));
2202 bool old_is_prototype = (TREE_CODE (olddecl) == FUNCTION_DECL
2203 && prototype_p (TREE_TYPE (olddecl)));
2205 /* For real parm decl following a forward decl, rechain the old decl
2206 in its new location and clear TREE_ASM_WRITTEN (it's not a
2207 forward decl anymore). */
2208 if (TREE_CODE (newdecl) == PARM_DECL
2209 && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
2211 struct c_binding *b, **here;
2213 for (here = &current_scope->bindings; *here; here = &(*here)->prev)
2214 if ((*here)->decl == olddecl)
2215 goto found;
2216 gcc_unreachable ();
2218 found:
2219 b = *here;
2220 *here = b->prev;
2221 b->prev = current_scope->bindings;
2222 current_scope->bindings = b;
2224 TREE_ASM_WRITTEN (olddecl) = 0;
2227 DECL_ATTRIBUTES (newdecl)
2228 = targetm.merge_decl_attributes (olddecl, newdecl);
2230 /* Merge the data types specified in the two decls. */
2231 TREE_TYPE (newdecl)
2232 = TREE_TYPE (olddecl)
2233 = composite_type (newtype, oldtype);
2235 /* Lay the type out, unless already done. */
2236 if (!comptypes (oldtype, TREE_TYPE (newdecl)))
2238 if (TREE_TYPE (newdecl) != error_mark_node)
2239 layout_type (TREE_TYPE (newdecl));
2240 if (TREE_CODE (newdecl) != FUNCTION_DECL
2241 && TREE_CODE (newdecl) != TYPE_DECL
2242 && TREE_CODE (newdecl) != CONST_DECL)
2243 layout_decl (newdecl, 0);
2245 else
2247 /* Since the type is OLDDECL's, make OLDDECL's size go with. */
2248 DECL_SIZE (newdecl) = DECL_SIZE (olddecl);
2249 DECL_SIZE_UNIT (newdecl) = DECL_SIZE_UNIT (olddecl);
2250 DECL_MODE (newdecl) = DECL_MODE (olddecl);
2251 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2253 DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
2254 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2258 /* Keep the old rtl since we can safely use it. */
2259 if (HAS_RTL_P (olddecl))
2260 COPY_DECL_RTL (olddecl, newdecl);
2262 /* Merge the type qualifiers. */
2263 if (TREE_READONLY (newdecl))
2264 TREE_READONLY (olddecl) = 1;
2266 if (TREE_THIS_VOLATILE (newdecl))
2267 TREE_THIS_VOLATILE (olddecl) = 1;
2269 /* Merge deprecatedness. */
2270 if (TREE_DEPRECATED (newdecl))
2271 TREE_DEPRECATED (olddecl) = 1;
2273 /* If a decl is in a system header and the other isn't, keep the one on the
2274 system header. Otherwise, keep source location of definition rather than
2275 declaration and of prototype rather than non-prototype unless that
2276 prototype is built-in. */
2277 if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS)
2278 && DECL_IN_SYSTEM_HEADER (olddecl)
2279 && !DECL_IN_SYSTEM_HEADER (newdecl) )
2280 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2281 else if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS)
2282 && DECL_IN_SYSTEM_HEADER (newdecl)
2283 && !DECL_IN_SYSTEM_HEADER (olddecl))
2284 DECL_SOURCE_LOCATION (olddecl) = DECL_SOURCE_LOCATION (newdecl);
2285 else if ((DECL_INITIAL (newdecl) == 0 && DECL_INITIAL (olddecl) != 0)
2286 || (old_is_prototype && !new_is_prototype
2287 && !C_DECL_BUILTIN_PROTOTYPE (olddecl)))
2288 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2290 /* Merge the initialization information. */
2291 if (DECL_INITIAL (newdecl) == 0)
2292 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2294 /* Merge the threadprivate attribute. */
2295 if (TREE_CODE (olddecl) == VAR_DECL && C_DECL_THREADPRIVATE_P (olddecl))
2297 set_decl_tls_model (newdecl, DECL_TLS_MODEL (olddecl));
2298 C_DECL_THREADPRIVATE_P (newdecl) = 1;
2301 if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS))
2303 /* Merge the section attribute.
2304 We want to issue an error if the sections conflict but that
2305 must be done later in decl_attributes since we are called
2306 before attributes are assigned. */
2307 if ((DECL_EXTERNAL (olddecl) || TREE_PUBLIC (olddecl) || TREE_STATIC (olddecl))
2308 && DECL_SECTION_NAME (newdecl) == NULL
2309 && DECL_SECTION_NAME (olddecl))
2310 set_decl_section_name (newdecl, DECL_SECTION_NAME (olddecl));
2312 /* Copy the assembler name.
2313 Currently, it can only be defined in the prototype. */
2314 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2316 /* Use visibility of whichever declaration had it specified */
2317 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2319 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2320 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2323 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2325 DECL_STATIC_CONSTRUCTOR(newdecl) |= DECL_STATIC_CONSTRUCTOR(olddecl);
2326 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
2327 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2328 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2329 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2330 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
2331 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
2332 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2333 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
2334 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
2335 DECL_IS_NOVOPS (newdecl) |= DECL_IS_NOVOPS (olddecl);
2338 /* Merge the storage class information. */
2339 merge_weak (newdecl, olddecl);
2341 /* For functions, static overrides non-static. */
2342 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2344 TREE_PUBLIC (newdecl) &= TREE_PUBLIC (olddecl);
2345 /* This is since we don't automatically
2346 copy the attributes of NEWDECL into OLDDECL. */
2347 TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
2348 /* If this clears `static', clear it in the identifier too. */
2349 if (!TREE_PUBLIC (olddecl))
2350 TREE_PUBLIC (DECL_NAME (olddecl)) = 0;
2354 /* In c99, 'extern' declaration before (or after) 'inline' means this
2355 function is not DECL_EXTERNAL, unless 'gnu_inline' attribute
2356 is present. */
2357 if (TREE_CODE (newdecl) == FUNCTION_DECL
2358 && !flag_gnu89_inline
2359 && (DECL_DECLARED_INLINE_P (newdecl)
2360 || DECL_DECLARED_INLINE_P (olddecl))
2361 && (!DECL_DECLARED_INLINE_P (newdecl)
2362 || !DECL_DECLARED_INLINE_P (olddecl)
2363 || !DECL_EXTERNAL (olddecl))
2364 && DECL_EXTERNAL (newdecl)
2365 && !lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (newdecl))
2366 && !current_function_decl)
2367 DECL_EXTERNAL (newdecl) = 0;
2369 /* An inline definition following a static declaration is not
2370 DECL_EXTERNAL. */
2371 if (new_is_definition
2372 && (DECL_DECLARED_INLINE_P (newdecl)
2373 || DECL_DECLARED_INLINE_P (olddecl))
2374 && !TREE_PUBLIC (olddecl))
2375 DECL_EXTERNAL (newdecl) = 0;
2377 if (DECL_EXTERNAL (newdecl))
2379 TREE_STATIC (newdecl) = TREE_STATIC (olddecl);
2380 DECL_EXTERNAL (newdecl) = DECL_EXTERNAL (olddecl);
2382 /* An extern decl does not override previous storage class. */
2383 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2384 if (!DECL_EXTERNAL (newdecl))
2386 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
2387 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2390 else
2392 TREE_STATIC (olddecl) = TREE_STATIC (newdecl);
2393 TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
2396 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2398 /* If we're redefining a function previously defined as extern
2399 inline, make sure we emit debug info for the inline before we
2400 throw it away, in case it was inlined into a function that
2401 hasn't been written out yet. */
2402 if (new_is_definition && DECL_INITIAL (olddecl))
2403 /* The new defn must not be inline. */
2404 DECL_UNINLINABLE (newdecl) = 1;
2405 else
2407 /* If either decl says `inline', this fn is inline, unless
2408 its definition was passed already. */
2409 if (DECL_DECLARED_INLINE_P (newdecl)
2410 || DECL_DECLARED_INLINE_P (olddecl))
2411 DECL_DECLARED_INLINE_P (newdecl) = 1;
2413 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2414 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2416 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2417 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2418 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2419 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2422 if (DECL_BUILT_IN (olddecl))
2424 /* If redeclaring a builtin function, it stays built in.
2425 But it gets tagged as having been declared. */
2426 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2427 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2428 C_DECL_DECLARED_BUILTIN (newdecl) = 1;
2429 if (new_is_prototype)
2431 C_DECL_BUILTIN_PROTOTYPE (newdecl) = 0;
2432 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2434 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2435 switch (fncode)
2437 /* If a compatible prototype of these builtin functions
2438 is seen, assume the runtime implements it with the
2439 expected semantics. */
2440 case BUILT_IN_STPCPY:
2441 if (builtin_decl_explicit_p (fncode))
2442 set_builtin_decl_implicit_p (fncode, true);
2443 break;
2444 default:
2445 break;
2449 else
2450 C_DECL_BUILTIN_PROTOTYPE (newdecl)
2451 = C_DECL_BUILTIN_PROTOTYPE (olddecl);
2454 /* Preserve function specific target and optimization options */
2455 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2456 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2457 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2458 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2460 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2461 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2462 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2463 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2465 /* Also preserve various other info from the definition. */
2466 if (!new_is_definition)
2468 tree t;
2469 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2470 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2471 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2472 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2473 DECL_ARGUMENTS (newdecl) = copy_list (DECL_ARGUMENTS (olddecl));
2474 for (t = DECL_ARGUMENTS (newdecl); t ; t = DECL_CHAIN (t))
2475 DECL_CONTEXT (t) = newdecl;
2477 /* See if we've got a function to instantiate from. */
2478 if (DECL_SAVED_TREE (olddecl))
2479 DECL_ABSTRACT_ORIGIN (newdecl)
2480 = DECL_ABSTRACT_ORIGIN (olddecl);
2484 /* Merge the USED information. */
2485 if (TREE_USED (olddecl))
2486 TREE_USED (newdecl) = 1;
2487 else if (TREE_USED (newdecl))
2488 TREE_USED (olddecl) = 1;
2489 if (TREE_CODE (olddecl) == VAR_DECL || TREE_CODE (olddecl) == PARM_DECL)
2490 DECL_READ_P (newdecl) |= DECL_READ_P (olddecl);
2491 if (DECL_PRESERVE_P (olddecl))
2492 DECL_PRESERVE_P (newdecl) = 1;
2493 else if (DECL_PRESERVE_P (newdecl))
2494 DECL_PRESERVE_P (olddecl) = 1;
2496 /* Copy most of the decl-specific fields of NEWDECL into OLDDECL.
2497 But preserve OLDDECL's DECL_UID, DECL_CONTEXT and
2498 DECL_ARGUMENTS (if appropriate). */
2500 unsigned olddecl_uid = DECL_UID (olddecl);
2501 tree olddecl_context = DECL_CONTEXT (olddecl);
2502 tree olddecl_arguments = NULL;
2503 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2504 olddecl_arguments = DECL_ARGUMENTS (olddecl);
2506 memcpy ((char *) olddecl + sizeof (struct tree_common),
2507 (char *) newdecl + sizeof (struct tree_common),
2508 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2509 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2510 switch (TREE_CODE (olddecl))
2512 case FUNCTION_DECL:
2513 case VAR_DECL:
2515 struct symtab_node *snode = olddecl->decl_with_vis.symtab_node;
2517 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2518 (char *) newdecl + sizeof (struct tree_decl_common),
2519 tree_code_size (TREE_CODE (olddecl)) - sizeof (struct tree_decl_common));
2520 olddecl->decl_with_vis.symtab_node = snode;
2521 break;
2524 case FIELD_DECL:
2525 case PARM_DECL:
2526 case LABEL_DECL:
2527 case RESULT_DECL:
2528 case CONST_DECL:
2529 case TYPE_DECL:
2530 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2531 (char *) newdecl + sizeof (struct tree_decl_common),
2532 tree_code_size (TREE_CODE (olddecl)) - sizeof (struct tree_decl_common));
2533 break;
2535 default:
2537 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2538 (char *) newdecl + sizeof (struct tree_decl_common),
2539 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common));
2541 DECL_UID (olddecl) = olddecl_uid;
2542 DECL_CONTEXT (olddecl) = olddecl_context;
2543 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2544 DECL_ARGUMENTS (olddecl) = olddecl_arguments;
2547 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2548 so that encode_section_info has a chance to look at the new decl
2549 flags and attributes. */
2550 if (DECL_RTL_SET_P (olddecl)
2551 && (TREE_CODE (olddecl) == FUNCTION_DECL
2552 || (TREE_CODE (olddecl) == VAR_DECL
2553 && TREE_STATIC (olddecl))))
2554 make_decl_rtl (olddecl);
2557 /* Handle when a new declaration NEWDECL has the same name as an old
2558 one OLDDECL in the same binding contour. Prints an error message
2559 if appropriate.
2561 If safely possible, alter OLDDECL to look like NEWDECL, and return
2562 true. Otherwise, return false. */
2564 static bool
2565 duplicate_decls (tree newdecl, tree olddecl)
2567 tree newtype = NULL, oldtype = NULL;
2569 if (!diagnose_mismatched_decls (newdecl, olddecl, &newtype, &oldtype))
2571 /* Avoid `unused variable' and other warnings for OLDDECL. */
2572 TREE_NO_WARNING (olddecl) = 1;
2573 return false;
2576 merge_decls (newdecl, olddecl, newtype, oldtype);
2578 /* The NEWDECL will no longer be needed.
2580 Before releasing the node, be sure to remove function from symbol
2581 table that might have been inserted there to record comdat group.
2582 Be sure to however do not free DECL_STRUCT_FUNCTION because this
2583 structure is shared in between NEWDECL and OLDECL. */
2584 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2585 DECL_STRUCT_FUNCTION (newdecl) = NULL;
2586 if (TREE_CODE (newdecl) == FUNCTION_DECL
2587 || TREE_CODE (newdecl) == VAR_DECL)
2589 struct symtab_node *snode = symtab_node::get (newdecl);
2590 if (snode)
2591 snode->remove ();
2593 ggc_free (newdecl);
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 /* No shadow warnings for internally generated vars. */
2607 || DECL_IS_BUILTIN (new_decl)
2608 /* No shadow warnings for vars made for inlining. */
2609 || DECL_FROM_INLINE (new_decl))
2610 return;
2612 /* Is anything being shadowed? Invisible decls do not count. */
2613 for (b = I_SYMBOL_BINDING (DECL_NAME (new_decl)); b; b = b->shadowed)
2614 if (b->decl && b->decl != new_decl && !b->invisible
2615 && (b->decl == error_mark_node
2616 || diagnostic_report_warnings_p (global_dc,
2617 DECL_SOURCE_LOCATION (b->decl))))
2619 tree old_decl = b->decl;
2620 bool warned = false;
2622 if (old_decl == error_mark_node)
2624 warning (OPT_Wshadow, "declaration of %q+D shadows previous "
2625 "non-variable", new_decl);
2626 break;
2628 else if (TREE_CODE (old_decl) == PARM_DECL)
2629 warned = warning (OPT_Wshadow,
2630 "declaration of %q+D shadows a parameter",
2631 new_decl);
2632 else if (DECL_FILE_SCOPE_P (old_decl))
2634 /* Do not warn if a variable shadows a function, unless
2635 the variable is a function or a pointer-to-function. */
2636 if (TREE_CODE (old_decl) == FUNCTION_DECL
2637 && TREE_CODE (new_decl) != FUNCTION_DECL
2638 && !FUNCTION_POINTER_TYPE_P (TREE_TYPE (new_decl)))
2639 continue;
2641 warned = warning_at (DECL_SOURCE_LOCATION (new_decl), OPT_Wshadow,
2642 "declaration of %qD shadows a global "
2643 "declaration",
2644 new_decl);
2646 else if (TREE_CODE (old_decl) == FUNCTION_DECL
2647 && DECL_BUILT_IN (old_decl))
2649 warning (OPT_Wshadow, "declaration of %q+D shadows "
2650 "a built-in function", new_decl);
2651 break;
2653 else
2654 warned = warning (OPT_Wshadow, "declaration of %q+D shadows a "
2655 "previous local", new_decl);
2657 if (warned)
2658 inform (DECL_SOURCE_LOCATION (old_decl),
2659 "shadowed declaration is here");
2661 break;
2665 /* Record a decl-node X as belonging to the current lexical scope.
2666 Check for errors (such as an incompatible declaration for the same
2667 name already seen in the same scope).
2669 Returns either X or an old decl for the same name.
2670 If an old decl is returned, it may have been smashed
2671 to agree with what X says. */
2673 tree
2674 pushdecl (tree x)
2676 tree name = DECL_NAME (x);
2677 struct c_scope *scope = current_scope;
2678 struct c_binding *b;
2679 bool nested = false;
2680 location_t locus = DECL_SOURCE_LOCATION (x);
2682 /* Must set DECL_CONTEXT for everything not at file scope or
2683 DECL_FILE_SCOPE_P won't work. Local externs don't count
2684 unless they have initializers (which generate code). */
2685 if (current_function_decl
2686 && ((TREE_CODE (x) != FUNCTION_DECL && TREE_CODE (x) != VAR_DECL)
2687 || DECL_INITIAL (x) || !DECL_EXTERNAL (x)))
2688 DECL_CONTEXT (x) = current_function_decl;
2690 /* Anonymous decls are just inserted in the scope. */
2691 if (!name)
2693 bind (name, x, scope, /*invisible=*/false, /*nested=*/false,
2694 locus);
2695 return x;
2698 /* First, see if there is another declaration with the same name in
2699 the current scope. If there is, duplicate_decls may do all the
2700 work for us. If duplicate_decls returns false, that indicates
2701 two incompatible decls in the same scope; we are to silently
2702 replace the old one (duplicate_decls has issued all appropriate
2703 diagnostics). In particular, we should not consider possible
2704 duplicates in the external scope, or shadowing. */
2705 b = I_SYMBOL_BINDING (name);
2706 if (b && B_IN_SCOPE (b, scope))
2708 struct c_binding *b_ext, *b_use;
2709 tree type = TREE_TYPE (x);
2710 tree visdecl = b->decl;
2711 tree vistype = TREE_TYPE (visdecl);
2712 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
2713 && COMPLETE_TYPE_P (TREE_TYPE (x)))
2714 b->inner_comp = false;
2715 b_use = b;
2716 b_ext = b;
2717 /* If this is an external linkage declaration, we should check
2718 for compatibility with the type in the external scope before
2719 setting the type at this scope based on the visible
2720 information only. */
2721 if (TREE_PUBLIC (x) && TREE_PUBLIC (visdecl))
2723 while (b_ext && !B_IN_EXTERNAL_SCOPE (b_ext))
2724 b_ext = b_ext->shadowed;
2725 if (b_ext)
2727 b_use = b_ext;
2728 if (b_use->u.type)
2729 TREE_TYPE (b_use->decl) = b_use->u.type;
2732 if (duplicate_decls (x, b_use->decl))
2734 if (b_use != b)
2736 /* Save the updated type in the external scope and
2737 restore the proper type for this scope. */
2738 tree thistype;
2739 if (comptypes (vistype, type))
2740 thistype = composite_type (vistype, type);
2741 else
2742 thistype = TREE_TYPE (b_use->decl);
2743 b_use->u.type = TREE_TYPE (b_use->decl);
2744 if (TREE_CODE (b_use->decl) == FUNCTION_DECL
2745 && DECL_BUILT_IN (b_use->decl))
2746 thistype
2747 = build_type_attribute_variant (thistype,
2748 TYPE_ATTRIBUTES
2749 (b_use->u.type));
2750 TREE_TYPE (b_use->decl) = thistype;
2752 return b_use->decl;
2754 else
2755 goto skip_external_and_shadow_checks;
2758 /* All declarations with external linkage, and all external
2759 references, go in the external scope, no matter what scope is
2760 current. However, the binding in that scope is ignored for
2761 purposes of normal name lookup. A separate binding structure is
2762 created in the requested scope; this governs the normal
2763 visibility of the symbol.
2765 The binding in the externals scope is used exclusively for
2766 detecting duplicate declarations of the same object, no matter
2767 what scope they are in; this is what we do here. (C99 6.2.7p2:
2768 All declarations that refer to the same object or function shall
2769 have compatible type; otherwise, the behavior is undefined.) */
2770 if (DECL_EXTERNAL (x) || scope == file_scope)
2772 tree type = TREE_TYPE (x);
2773 tree vistype = 0;
2774 tree visdecl = 0;
2775 bool type_saved = false;
2776 if (b && !B_IN_EXTERNAL_SCOPE (b)
2777 && (TREE_CODE (b->decl) == FUNCTION_DECL
2778 || TREE_CODE (b->decl) == VAR_DECL)
2779 && DECL_FILE_SCOPE_P (b->decl))
2781 visdecl = b->decl;
2782 vistype = TREE_TYPE (visdecl);
2784 if (scope != file_scope
2785 && !DECL_IN_SYSTEM_HEADER (x))
2786 warning (OPT_Wnested_externs, "nested extern declaration of %qD", x);
2788 while (b && !B_IN_EXTERNAL_SCOPE (b))
2790 /* If this decl might be modified, save its type. This is
2791 done here rather than when the decl is first bound
2792 because the type may change after first binding, through
2793 being completed or through attributes being added. If we
2794 encounter multiple such decls, only the first should have
2795 its type saved; the others will already have had their
2796 proper types saved and the types will not have changed as
2797 their scopes will not have been re-entered. */
2798 if (DECL_P (b->decl) && DECL_FILE_SCOPE_P (b->decl) && !type_saved)
2800 b->u.type = TREE_TYPE (b->decl);
2801 type_saved = true;
2803 if (B_IN_FILE_SCOPE (b)
2804 && TREE_CODE (b->decl) == VAR_DECL
2805 && TREE_STATIC (b->decl)
2806 && TREE_CODE (TREE_TYPE (b->decl)) == ARRAY_TYPE
2807 && !TYPE_DOMAIN (TREE_TYPE (b->decl))
2808 && TREE_CODE (type) == ARRAY_TYPE
2809 && TYPE_DOMAIN (type)
2810 && TYPE_MAX_VALUE (TYPE_DOMAIN (type))
2811 && !integer_zerop (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
2813 /* Array type completed in inner scope, which should be
2814 diagnosed if the completion does not have size 1 and
2815 it does not get completed in the file scope. */
2816 b->inner_comp = true;
2818 b = b->shadowed;
2821 /* If a matching external declaration has been found, set its
2822 type to the composite of all the types of that declaration.
2823 After the consistency checks, it will be reset to the
2824 composite of the visible types only. */
2825 if (b && (TREE_PUBLIC (x) || same_translation_unit_p (x, b->decl))
2826 && b->u.type)
2827 TREE_TYPE (b->decl) = b->u.type;
2829 /* The point of the same_translation_unit_p check here is,
2830 we want to detect a duplicate decl for a construct like
2831 foo() { extern bar(); } ... static bar(); but not if
2832 they are in different translation units. In any case,
2833 the static does not go in the externals scope. */
2834 if (b
2835 && (TREE_PUBLIC (x) || same_translation_unit_p (x, b->decl))
2836 && duplicate_decls (x, b->decl))
2838 tree thistype;
2839 if (vistype)
2841 if (comptypes (vistype, type))
2842 thistype = composite_type (vistype, type);
2843 else
2844 thistype = TREE_TYPE (b->decl);
2846 else
2847 thistype = type;
2848 b->u.type = TREE_TYPE (b->decl);
2849 if (TREE_CODE (b->decl) == FUNCTION_DECL && DECL_BUILT_IN (b->decl))
2850 thistype
2851 = build_type_attribute_variant (thistype,
2852 TYPE_ATTRIBUTES (b->u.type));
2853 TREE_TYPE (b->decl) = thistype;
2854 bind (name, b->decl, scope, /*invisible=*/false, /*nested=*/true,
2855 locus);
2856 return b->decl;
2858 else if (TREE_PUBLIC (x))
2860 if (visdecl && !b && duplicate_decls (x, visdecl))
2862 /* An external declaration at block scope referring to a
2863 visible entity with internal linkage. The composite
2864 type will already be correct for this scope, so we
2865 just need to fall through to make the declaration in
2866 this scope. */
2867 nested = true;
2868 x = visdecl;
2870 else
2872 bind (name, x, external_scope, /*invisible=*/true,
2873 /*nested=*/false, locus);
2874 nested = true;
2879 if (TREE_CODE (x) != PARM_DECL)
2880 warn_if_shadowing (x);
2882 skip_external_and_shadow_checks:
2883 if (TREE_CODE (x) == TYPE_DECL)
2885 /* So this is a typedef, set its underlying type. */
2886 set_underlying_type (x);
2888 /* If X is a typedef defined in the current function, record it
2889 for the purpose of implementing the -Wunused-local-typedefs
2890 warning. */
2891 record_locally_defined_typedef (x);
2894 bind (name, x, scope, /*invisible=*/false, nested, locus);
2896 /* If x's type is incomplete because it's based on a
2897 structure or union which has not yet been fully declared,
2898 attach it to that structure or union type, so we can go
2899 back and complete the variable declaration later, if the
2900 structure or union gets fully declared.
2902 If the input is erroneous, we can have error_mark in the type
2903 slot (e.g. "f(void a, ...)") - that doesn't count as an
2904 incomplete type. */
2905 if (TREE_TYPE (x) != error_mark_node
2906 && !COMPLETE_TYPE_P (TREE_TYPE (x)))
2908 tree element = TREE_TYPE (x);
2910 while (TREE_CODE (element) == ARRAY_TYPE)
2911 element = TREE_TYPE (element);
2912 element = TYPE_MAIN_VARIANT (element);
2914 if ((TREE_CODE (element) == RECORD_TYPE
2915 || TREE_CODE (element) == UNION_TYPE)
2916 && (TREE_CODE (x) != TYPE_DECL
2917 || TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE)
2918 && !COMPLETE_TYPE_P (element))
2919 C_TYPE_INCOMPLETE_VARS (element)
2920 = tree_cons (NULL_TREE, x, C_TYPE_INCOMPLETE_VARS (element));
2922 return x;
2925 /* Record X as belonging to file scope.
2926 This is used only internally by the Objective-C front end,
2927 and is limited to its needs. duplicate_decls is not called;
2928 if there is any preexisting decl for this identifier, it is an ICE. */
2930 tree
2931 pushdecl_top_level (tree x)
2933 tree name;
2934 bool nested = false;
2935 gcc_assert (TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == CONST_DECL);
2937 name = DECL_NAME (x);
2939 gcc_assert (TREE_CODE (x) == CONST_DECL || !I_SYMBOL_BINDING (name));
2941 if (TREE_PUBLIC (x))
2943 bind (name, x, external_scope, /*invisible=*/true, /*nested=*/false,
2944 UNKNOWN_LOCATION);
2945 nested = true;
2947 if (file_scope)
2948 bind (name, x, file_scope, /*invisible=*/false, nested, UNKNOWN_LOCATION);
2950 return x;
2953 static void
2954 implicit_decl_warning (location_t loc, tree id, tree olddecl)
2956 if (warn_implicit_function_declaration)
2958 bool warned;
2960 if (flag_isoc99)
2961 warned = pedwarn (loc, OPT_Wimplicit_function_declaration,
2962 "implicit declaration of function %qE", id);
2963 else
2964 warned = warning_at (loc, OPT_Wimplicit_function_declaration,
2965 G_("implicit declaration of function %qE"), id);
2966 if (olddecl && warned)
2967 locate_old_decl (olddecl);
2971 /* This function represents mapping of a function code FCODE
2972 to its respective header. */
2974 static const char *
2975 header_for_builtin_fn (enum built_in_function fcode)
2977 switch (fcode)
2979 CASE_FLT_FN (BUILT_IN_ACOS):
2980 CASE_FLT_FN (BUILT_IN_ACOSH):
2981 CASE_FLT_FN (BUILT_IN_ASIN):
2982 CASE_FLT_FN (BUILT_IN_ASINH):
2983 CASE_FLT_FN (BUILT_IN_ATAN):
2984 CASE_FLT_FN (BUILT_IN_ATANH):
2985 CASE_FLT_FN (BUILT_IN_ATAN2):
2986 CASE_FLT_FN (BUILT_IN_CBRT):
2987 CASE_FLT_FN (BUILT_IN_CEIL):
2988 CASE_FLT_FN (BUILT_IN_COPYSIGN):
2989 CASE_FLT_FN (BUILT_IN_COS):
2990 CASE_FLT_FN (BUILT_IN_COSH):
2991 CASE_FLT_FN (BUILT_IN_ERF):
2992 CASE_FLT_FN (BUILT_IN_ERFC):
2993 CASE_FLT_FN (BUILT_IN_EXP):
2994 CASE_FLT_FN (BUILT_IN_EXP2):
2995 CASE_FLT_FN (BUILT_IN_EXPM1):
2996 CASE_FLT_FN (BUILT_IN_FABS):
2997 CASE_FLT_FN (BUILT_IN_FDIM):
2998 CASE_FLT_FN (BUILT_IN_FLOOR):
2999 CASE_FLT_FN (BUILT_IN_FMA):
3000 CASE_FLT_FN (BUILT_IN_FMAX):
3001 CASE_FLT_FN (BUILT_IN_FMIN):
3002 CASE_FLT_FN (BUILT_IN_FMOD):
3003 CASE_FLT_FN (BUILT_IN_FREXP):
3004 CASE_FLT_FN (BUILT_IN_HYPOT):
3005 CASE_FLT_FN (BUILT_IN_ILOGB):
3006 CASE_FLT_FN (BUILT_IN_LDEXP):
3007 CASE_FLT_FN (BUILT_IN_LGAMMA):
3008 CASE_FLT_FN (BUILT_IN_LLRINT):
3009 CASE_FLT_FN (BUILT_IN_LLROUND):
3010 CASE_FLT_FN (BUILT_IN_LOG):
3011 CASE_FLT_FN (BUILT_IN_LOG10):
3012 CASE_FLT_FN (BUILT_IN_LOG1P):
3013 CASE_FLT_FN (BUILT_IN_LOG2):
3014 CASE_FLT_FN (BUILT_IN_LOGB):
3015 CASE_FLT_FN (BUILT_IN_LRINT):
3016 CASE_FLT_FN (BUILT_IN_LROUND):
3017 CASE_FLT_FN (BUILT_IN_MODF):
3018 CASE_FLT_FN (BUILT_IN_NAN):
3019 CASE_FLT_FN (BUILT_IN_NEARBYINT):
3020 CASE_FLT_FN (BUILT_IN_NEXTAFTER):
3021 CASE_FLT_FN (BUILT_IN_NEXTTOWARD):
3022 CASE_FLT_FN (BUILT_IN_POW):
3023 CASE_FLT_FN (BUILT_IN_REMAINDER):
3024 CASE_FLT_FN (BUILT_IN_REMQUO):
3025 CASE_FLT_FN (BUILT_IN_RINT):
3026 CASE_FLT_FN (BUILT_IN_ROUND):
3027 CASE_FLT_FN (BUILT_IN_SCALBLN):
3028 CASE_FLT_FN (BUILT_IN_SCALBN):
3029 CASE_FLT_FN (BUILT_IN_SIN):
3030 CASE_FLT_FN (BUILT_IN_SINH):
3031 CASE_FLT_FN (BUILT_IN_SINCOS):
3032 CASE_FLT_FN (BUILT_IN_SQRT):
3033 CASE_FLT_FN (BUILT_IN_TAN):
3034 CASE_FLT_FN (BUILT_IN_TANH):
3035 CASE_FLT_FN (BUILT_IN_TGAMMA):
3036 CASE_FLT_FN (BUILT_IN_TRUNC):
3037 case BUILT_IN_ISINF:
3038 case BUILT_IN_ISNAN:
3039 return "<math.h>";
3040 CASE_FLT_FN (BUILT_IN_CABS):
3041 CASE_FLT_FN (BUILT_IN_CACOS):
3042 CASE_FLT_FN (BUILT_IN_CACOSH):
3043 CASE_FLT_FN (BUILT_IN_CARG):
3044 CASE_FLT_FN (BUILT_IN_CASIN):
3045 CASE_FLT_FN (BUILT_IN_CASINH):
3046 CASE_FLT_FN (BUILT_IN_CATAN):
3047 CASE_FLT_FN (BUILT_IN_CATANH):
3048 CASE_FLT_FN (BUILT_IN_CCOS):
3049 CASE_FLT_FN (BUILT_IN_CCOSH):
3050 CASE_FLT_FN (BUILT_IN_CEXP):
3051 CASE_FLT_FN (BUILT_IN_CIMAG):
3052 CASE_FLT_FN (BUILT_IN_CLOG):
3053 CASE_FLT_FN (BUILT_IN_CONJ):
3054 CASE_FLT_FN (BUILT_IN_CPOW):
3055 CASE_FLT_FN (BUILT_IN_CPROJ):
3056 CASE_FLT_FN (BUILT_IN_CREAL):
3057 CASE_FLT_FN (BUILT_IN_CSIN):
3058 CASE_FLT_FN (BUILT_IN_CSINH):
3059 CASE_FLT_FN (BUILT_IN_CSQRT):
3060 CASE_FLT_FN (BUILT_IN_CTAN):
3061 CASE_FLT_FN (BUILT_IN_CTANH):
3062 return "<complex.h>";
3063 case BUILT_IN_MEMCHR:
3064 case BUILT_IN_MEMCMP:
3065 case BUILT_IN_MEMCPY:
3066 case BUILT_IN_MEMMOVE:
3067 case BUILT_IN_MEMSET:
3068 case BUILT_IN_STRCAT:
3069 case BUILT_IN_STRCHR:
3070 case BUILT_IN_STRCMP:
3071 case BUILT_IN_STRCPY:
3072 case BUILT_IN_STRCSPN:
3073 case BUILT_IN_STRLEN:
3074 case BUILT_IN_STRNCAT:
3075 case BUILT_IN_STRNCMP:
3076 case BUILT_IN_STRNCPY:
3077 case BUILT_IN_STRPBRK:
3078 case BUILT_IN_STRRCHR:
3079 case BUILT_IN_STRSPN:
3080 case BUILT_IN_STRSTR:
3081 return "<string.h>";
3082 case BUILT_IN_FPRINTF:
3083 case BUILT_IN_PUTC:
3084 case BUILT_IN_FPUTC:
3085 case BUILT_IN_FPUTS:
3086 case BUILT_IN_FSCANF:
3087 case BUILT_IN_FWRITE:
3088 case BUILT_IN_PRINTF:
3089 case BUILT_IN_PUTCHAR:
3090 case BUILT_IN_PUTS:
3091 case BUILT_IN_SCANF:
3092 case BUILT_IN_SNPRINTF:
3093 case BUILT_IN_SPRINTF:
3094 case BUILT_IN_SSCANF:
3095 case BUILT_IN_VFPRINTF:
3096 case BUILT_IN_VFSCANF:
3097 case BUILT_IN_VPRINTF:
3098 case BUILT_IN_VSCANF:
3099 case BUILT_IN_VSNPRINTF:
3100 case BUILT_IN_VSPRINTF:
3101 case BUILT_IN_VSSCANF:
3102 return "<stdio.h>";
3103 case BUILT_IN_ISALNUM:
3104 case BUILT_IN_ISALPHA:
3105 case BUILT_IN_ISBLANK:
3106 case BUILT_IN_ISCNTRL:
3107 case BUILT_IN_ISDIGIT:
3108 case BUILT_IN_ISGRAPH:
3109 case BUILT_IN_ISLOWER:
3110 case BUILT_IN_ISPRINT:
3111 case BUILT_IN_ISPUNCT:
3112 case BUILT_IN_ISSPACE:
3113 case BUILT_IN_ISUPPER:
3114 case BUILT_IN_ISXDIGIT:
3115 case BUILT_IN_TOLOWER:
3116 case BUILT_IN_TOUPPER:
3117 return "<ctype.h>";
3118 case BUILT_IN_ISWALNUM:
3119 case BUILT_IN_ISWALPHA:
3120 case BUILT_IN_ISWBLANK:
3121 case BUILT_IN_ISWCNTRL:
3122 case BUILT_IN_ISWDIGIT:
3123 case BUILT_IN_ISWGRAPH:
3124 case BUILT_IN_ISWLOWER:
3125 case BUILT_IN_ISWPRINT:
3126 case BUILT_IN_ISWPUNCT:
3127 case BUILT_IN_ISWSPACE:
3128 case BUILT_IN_ISWUPPER:
3129 case BUILT_IN_ISWXDIGIT:
3130 case BUILT_IN_TOWLOWER:
3131 case BUILT_IN_TOWUPPER:
3132 return "<wctype.h>";
3133 case BUILT_IN_ABORT:
3134 case BUILT_IN_ABS:
3135 case BUILT_IN_CALLOC:
3136 case BUILT_IN_EXIT:
3137 case BUILT_IN_FREE:
3138 case BUILT_IN_LABS:
3139 case BUILT_IN_LLABS:
3140 case BUILT_IN_MALLOC:
3141 case BUILT_IN_REALLOC:
3142 case BUILT_IN__EXIT2:
3143 case BUILT_IN_ALIGNED_ALLOC:
3144 return "<stdlib.h>";
3145 case BUILT_IN_IMAXABS:
3146 return "<inttypes.h>";
3147 case BUILT_IN_STRFTIME:
3148 return "<time.h>";
3149 default:
3150 return NULL;
3154 /* Generate an implicit declaration for identifier FUNCTIONID at LOC as a
3155 function of type int (). */
3157 tree
3158 implicitly_declare (location_t loc, tree functionid)
3160 struct c_binding *b;
3161 tree decl = 0;
3162 tree asmspec_tree;
3164 for (b = I_SYMBOL_BINDING (functionid); b; b = b->shadowed)
3166 if (B_IN_SCOPE (b, external_scope))
3168 decl = b->decl;
3169 break;
3173 if (decl)
3175 if (decl == error_mark_node)
3176 return decl;
3178 /* FIXME: Objective-C has weird not-really-builtin functions
3179 which are supposed to be visible automatically. They wind up
3180 in the external scope because they're pushed before the file
3181 scope gets created. Catch this here and rebind them into the
3182 file scope. */
3183 if (!DECL_BUILT_IN (decl) && DECL_IS_BUILTIN (decl))
3185 bind (functionid, decl, file_scope,
3186 /*invisible=*/false, /*nested=*/true,
3187 DECL_SOURCE_LOCATION (decl));
3188 return decl;
3190 else
3192 tree newtype = default_function_type;
3193 if (b->u.type)
3194 TREE_TYPE (decl) = b->u.type;
3195 /* Implicit declaration of a function already declared
3196 (somehow) in a different scope, or as a built-in.
3197 If this is the first time this has happened, warn;
3198 then recycle the old declaration but with the new type. */
3199 if (!C_DECL_IMPLICIT (decl))
3201 implicit_decl_warning (loc, functionid, decl);
3202 C_DECL_IMPLICIT (decl) = 1;
3204 if (DECL_BUILT_IN (decl))
3206 newtype = build_type_attribute_variant (newtype,
3207 TYPE_ATTRIBUTES
3208 (TREE_TYPE (decl)));
3209 if (!comptypes (newtype, TREE_TYPE (decl)))
3211 bool warned = warning_at (loc, 0, "incompatible implicit "
3212 "declaration of built-in "
3213 "function %qD", decl);
3214 /* See if we can hint which header to include. */
3215 const char *header
3216 = header_for_builtin_fn (DECL_FUNCTION_CODE (decl));
3217 if (header != NULL && warned)
3218 inform (loc, "include %qs or provide a declaration of %qD",
3219 header, decl);
3220 newtype = TREE_TYPE (decl);
3223 else
3225 if (!comptypes (newtype, TREE_TYPE (decl)))
3227 error_at (loc, "incompatible implicit declaration of "
3228 "function %qD", decl);
3229 locate_old_decl (decl);
3232 b->u.type = TREE_TYPE (decl);
3233 TREE_TYPE (decl) = newtype;
3234 bind (functionid, decl, current_scope,
3235 /*invisible=*/false, /*nested=*/true,
3236 DECL_SOURCE_LOCATION (decl));
3237 return decl;
3241 /* Not seen before. */
3242 decl = build_decl (loc, FUNCTION_DECL, functionid, default_function_type);
3243 DECL_EXTERNAL (decl) = 1;
3244 TREE_PUBLIC (decl) = 1;
3245 C_DECL_IMPLICIT (decl) = 1;
3246 implicit_decl_warning (loc, functionid, 0);
3247 asmspec_tree = maybe_apply_renaming_pragma (decl, /*asmname=*/NULL);
3248 if (asmspec_tree)
3249 set_user_assembler_name (decl, TREE_STRING_POINTER (asmspec_tree));
3251 /* C89 says implicit declarations are in the innermost block.
3252 So we record the decl in the standard fashion. */
3253 decl = pushdecl (decl);
3255 /* No need to call objc_check_decl here - it's a function type. */
3256 rest_of_decl_compilation (decl, 0, 0);
3258 /* Write a record describing this implicit function declaration
3259 to the prototypes file (if requested). */
3260 gen_aux_info_record (decl, 0, 1, 0);
3262 /* Possibly apply some default attributes to this implicit declaration. */
3263 decl_attributes (&decl, NULL_TREE, 0);
3265 return decl;
3268 /* Issue an error message for a reference to an undeclared variable
3269 ID, including a reference to a builtin outside of function-call
3270 context. Establish a binding of the identifier to error_mark_node
3271 in an appropriate scope, which will suppress further errors for the
3272 same identifier. The error message should be given location LOC. */
3273 void
3274 undeclared_variable (location_t loc, tree id)
3276 static bool already = false;
3277 struct c_scope *scope;
3279 if (current_function_decl == 0)
3281 error_at (loc, "%qE undeclared here (not in a function)", id);
3282 scope = current_scope;
3284 else
3286 if (!objc_diagnose_private_ivar (id))
3287 error_at (loc, "%qE undeclared (first use in this function)", id);
3288 if (!already)
3290 inform (loc, "each undeclared identifier is reported only"
3291 " once for each function it appears in");
3292 already = true;
3295 /* If we are parsing old-style parameter decls, current_function_decl
3296 will be nonnull but current_function_scope will be null. */
3297 scope = current_function_scope ? current_function_scope : current_scope;
3299 bind (id, error_mark_node, scope, /*invisible=*/false, /*nested=*/false,
3300 UNKNOWN_LOCATION);
3303 /* Subroutine of lookup_label, declare_label, define_label: construct a
3304 LABEL_DECL with all the proper frills. Also create a struct
3305 c_label_vars initialized for the current scope. */
3307 static tree
3308 make_label (location_t location, tree name, bool defining,
3309 struct c_label_vars **p_label_vars)
3311 tree label = build_decl (location, LABEL_DECL, name, void_type_node);
3312 DECL_CONTEXT (label) = current_function_decl;
3313 DECL_MODE (label) = VOIDmode;
3315 c_label_vars *label_vars = ggc_alloc<c_label_vars> ();
3316 label_vars->shadowed = NULL;
3317 set_spot_bindings (&label_vars->label_bindings, defining);
3318 label_vars->decls_in_scope = make_tree_vector ();
3319 label_vars->gotos = NULL;
3320 *p_label_vars = label_vars;
3322 return label;
3325 /* Get the LABEL_DECL corresponding to identifier NAME as a label.
3326 Create one if none exists so far for the current function.
3327 This is called when a label is used in a goto expression or
3328 has its address taken. */
3330 tree
3331 lookup_label (tree name)
3333 tree label;
3334 struct c_label_vars *label_vars;
3336 if (current_function_scope == 0)
3338 error ("label %qE referenced outside of any function", name);
3339 return 0;
3342 /* Use a label already defined or ref'd with this name, but not if
3343 it is inherited from a containing function and wasn't declared
3344 using __label__. */
3345 label = I_LABEL_DECL (name);
3346 if (label && (DECL_CONTEXT (label) == current_function_decl
3347 || C_DECLARED_LABEL_FLAG (label)))
3349 /* If the label has only been declared, update its apparent
3350 location to point here, for better diagnostics if it
3351 turns out not to have been defined. */
3352 if (DECL_INITIAL (label) == NULL_TREE)
3353 DECL_SOURCE_LOCATION (label) = input_location;
3354 return label;
3357 /* No label binding for that identifier; make one. */
3358 label = make_label (input_location, name, false, &label_vars);
3360 /* Ordinary labels go in the current function scope. */
3361 bind_label (name, label, current_function_scope, label_vars);
3363 return label;
3366 /* Issue a warning about DECL for a goto statement at GOTO_LOC going
3367 to LABEL. */
3369 static void
3370 warn_about_goto (location_t goto_loc, tree label, tree decl)
3372 if (variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
3373 error_at (goto_loc,
3374 "jump into scope of identifier with variably modified type");
3375 else
3376 warning_at (goto_loc, OPT_Wjump_misses_init,
3377 "jump skips variable initialization");
3378 inform (DECL_SOURCE_LOCATION (label), "label %qD defined here", label);
3379 inform (DECL_SOURCE_LOCATION (decl), "%qD declared here", decl);
3382 /* Look up a label because of a goto statement. This is like
3383 lookup_label, but also issues any appropriate warnings. */
3385 tree
3386 lookup_label_for_goto (location_t loc, tree name)
3388 tree label;
3389 struct c_label_vars *label_vars;
3390 unsigned int ix;
3391 tree decl;
3393 label = lookup_label (name);
3394 if (label == NULL_TREE)
3395 return NULL_TREE;
3397 /* If we are jumping to a different function, we can't issue any
3398 useful warnings. */
3399 if (DECL_CONTEXT (label) != current_function_decl)
3401 gcc_assert (C_DECLARED_LABEL_FLAG (label));
3402 return label;
3405 label_vars = I_LABEL_BINDING (name)->u.label;
3407 /* If the label has not yet been defined, then push this goto on a
3408 list for possible later warnings. */
3409 if (label_vars->label_bindings.scope == NULL)
3411 c_goto_bindings *g = ggc_alloc<c_goto_bindings> ();
3413 g->loc = loc;
3414 set_spot_bindings (&g->goto_bindings, true);
3415 vec_safe_push (label_vars->gotos, g);
3416 return label;
3419 /* If there are any decls in label_vars->decls_in_scope, then this
3420 goto has missed the declaration of the decl. This happens for a
3421 case like
3422 int i = 1;
3423 lab:
3425 goto lab;
3426 Issue a warning or error. */
3427 FOR_EACH_VEC_SAFE_ELT (label_vars->decls_in_scope, ix, decl)
3428 warn_about_goto (loc, label, decl);
3430 if (label_vars->label_bindings.left_stmt_expr)
3432 error_at (loc, "jump into statement expression");
3433 inform (DECL_SOURCE_LOCATION (label), "label %qD defined here", label);
3436 return label;
3439 /* Make a label named NAME in the current function, shadowing silently
3440 any that may be inherited from containing functions or containing
3441 scopes. This is called for __label__ declarations. */
3443 tree
3444 declare_label (tree name)
3446 struct c_binding *b = I_LABEL_BINDING (name);
3447 tree label;
3448 struct c_label_vars *label_vars;
3450 /* Check to make sure that the label hasn't already been declared
3451 at this scope */
3452 if (b && B_IN_CURRENT_SCOPE (b))
3454 error ("duplicate label declaration %qE", name);
3455 locate_old_decl (b->decl);
3457 /* Just use the previous declaration. */
3458 return b->decl;
3461 label = make_label (input_location, name, false, &label_vars);
3462 C_DECLARED_LABEL_FLAG (label) = 1;
3464 /* Declared labels go in the current scope. */
3465 bind_label (name, label, current_scope, label_vars);
3467 return label;
3470 /* When we define a label, issue any appropriate warnings if there are
3471 any gotos earlier in the function which jump to this label. */
3473 static void
3474 check_earlier_gotos (tree label, struct c_label_vars* label_vars)
3476 unsigned int ix;
3477 struct c_goto_bindings *g;
3479 FOR_EACH_VEC_SAFE_ELT (label_vars->gotos, ix, g)
3481 struct c_binding *b;
3482 struct c_scope *scope;
3484 /* We have a goto to this label. The goto is going forward. In
3485 g->scope, the goto is going to skip any binding which was
3486 defined after g->bindings_in_scope. */
3487 if (g->goto_bindings.scope->has_jump_unsafe_decl)
3489 for (b = g->goto_bindings.scope->bindings;
3490 b != g->goto_bindings.bindings_in_scope;
3491 b = b->prev)
3493 if (decl_jump_unsafe (b->decl))
3494 warn_about_goto (g->loc, label, b->decl);
3498 /* We also need to warn about decls defined in any scopes
3499 between the scope of the label and the scope of the goto. */
3500 for (scope = label_vars->label_bindings.scope;
3501 scope != g->goto_bindings.scope;
3502 scope = scope->outer)
3504 gcc_assert (scope != NULL);
3505 if (scope->has_jump_unsafe_decl)
3507 if (scope == label_vars->label_bindings.scope)
3508 b = label_vars->label_bindings.bindings_in_scope;
3509 else
3510 b = scope->bindings;
3511 for (; b != NULL; b = b->prev)
3513 if (decl_jump_unsafe (b->decl))
3514 warn_about_goto (g->loc, label, b->decl);
3519 if (g->goto_bindings.stmt_exprs > 0)
3521 error_at (g->loc, "jump into statement expression");
3522 inform (DECL_SOURCE_LOCATION (label), "label %qD defined here",
3523 label);
3527 /* Now that the label is defined, we will issue warnings about
3528 subsequent gotos to this label when we see them. */
3529 vec_safe_truncate (label_vars->gotos, 0);
3530 label_vars->gotos = NULL;
3533 /* Define a label, specifying the location in the source file.
3534 Return the LABEL_DECL node for the label, if the definition is valid.
3535 Otherwise return 0. */
3537 tree
3538 define_label (location_t location, tree name)
3540 /* Find any preexisting label with this name. It is an error
3541 if that label has already been defined in this function, or
3542 if there is a containing function with a declared label with
3543 the same name. */
3544 tree label = I_LABEL_DECL (name);
3546 if (label
3547 && ((DECL_CONTEXT (label) == current_function_decl
3548 && DECL_INITIAL (label) != 0)
3549 || (DECL_CONTEXT (label) != current_function_decl
3550 && C_DECLARED_LABEL_FLAG (label))))
3552 error_at (location, "duplicate label %qD", label);
3553 locate_old_decl (label);
3554 return 0;
3556 else if (label && DECL_CONTEXT (label) == current_function_decl)
3558 struct c_label_vars *label_vars = I_LABEL_BINDING (name)->u.label;
3560 /* The label has been used or declared already in this function,
3561 but not defined. Update its location to point to this
3562 definition. */
3563 DECL_SOURCE_LOCATION (label) = location;
3564 set_spot_bindings (&label_vars->label_bindings, true);
3566 /* Issue warnings as required about any goto statements from
3567 earlier in the function. */
3568 check_earlier_gotos (label, label_vars);
3570 else
3572 struct c_label_vars *label_vars;
3574 /* No label binding for that identifier; make one. */
3575 label = make_label (location, name, true, &label_vars);
3577 /* Ordinary labels go in the current function scope. */
3578 bind_label (name, label, current_function_scope, label_vars);
3581 if (!in_system_header_at (input_location) && lookup_name (name))
3582 warning_at (location, OPT_Wtraditional,
3583 "traditional C lacks a separate namespace "
3584 "for labels, identifier %qE conflicts", name);
3586 /* Mark label as having been defined. */
3587 DECL_INITIAL (label) = error_mark_node;
3588 return label;
3591 /* Get the bindings for a new switch statement. This is used to issue
3592 warnings as appropriate for jumps from the switch to case or
3593 default labels. */
3595 struct c_spot_bindings *
3596 c_get_switch_bindings (void)
3598 struct c_spot_bindings *switch_bindings;
3600 switch_bindings = XNEW (struct c_spot_bindings);
3601 set_spot_bindings (switch_bindings, true);
3602 return switch_bindings;
3605 void
3606 c_release_switch_bindings (struct c_spot_bindings *bindings)
3608 gcc_assert (bindings->stmt_exprs == 0 && !bindings->left_stmt_expr);
3609 XDELETE (bindings);
3612 /* This is called at the point of a case or default label to issue
3613 warnings about decls as needed. It returns true if it found an
3614 error, not just a warning. */
3616 bool
3617 c_check_switch_jump_warnings (struct c_spot_bindings *switch_bindings,
3618 location_t switch_loc, location_t case_loc)
3620 bool saw_error;
3621 struct c_scope *scope;
3623 saw_error = false;
3624 for (scope = current_scope;
3625 scope != switch_bindings->scope;
3626 scope = scope->outer)
3628 struct c_binding *b;
3630 gcc_assert (scope != NULL);
3632 if (!scope->has_jump_unsafe_decl)
3633 continue;
3635 for (b = scope->bindings; b != NULL; b = b->prev)
3637 if (decl_jump_unsafe (b->decl))
3639 if (variably_modified_type_p (TREE_TYPE (b->decl), NULL_TREE))
3641 saw_error = true;
3642 error_at (case_loc,
3643 ("switch jumps into scope of identifier with "
3644 "variably modified type"));
3646 else
3647 warning_at (case_loc, OPT_Wjump_misses_init,
3648 "switch jumps over variable initialization");
3649 inform (switch_loc, "switch starts here");
3650 inform (DECL_SOURCE_LOCATION (b->decl), "%qD declared here",
3651 b->decl);
3656 if (switch_bindings->stmt_exprs > 0)
3658 saw_error = true;
3659 error_at (case_loc, "switch jumps into statement expression");
3660 inform (switch_loc, "switch starts here");
3663 return saw_error;
3666 /* Given NAME, an IDENTIFIER_NODE,
3667 return the structure (or union or enum) definition for that name.
3668 If THISLEVEL_ONLY is nonzero, searches only the current_scope.
3669 CODE says which kind of type the caller wants;
3670 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
3671 If PLOC is not NULL and this returns non-null, it sets *PLOC to the
3672 location where the tag was defined.
3673 If the wrong kind of type is found, an error is reported. */
3675 static tree
3676 lookup_tag (enum tree_code code, tree name, int thislevel_only,
3677 location_t *ploc)
3679 struct c_binding *b = I_TAG_BINDING (name);
3680 int thislevel = 0;
3682 if (!b || !b->decl)
3683 return 0;
3685 /* We only care about whether it's in this level if
3686 thislevel_only was set or it might be a type clash. */
3687 if (thislevel_only || TREE_CODE (b->decl) != code)
3689 /* For our purposes, a tag in the external scope is the same as
3690 a tag in the file scope. (Primarily relevant to Objective-C
3691 and its builtin structure tags, which get pushed before the
3692 file scope is created.) */
3693 if (B_IN_CURRENT_SCOPE (b)
3694 || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
3695 thislevel = 1;
3698 if (thislevel_only && !thislevel)
3699 return 0;
3701 if (TREE_CODE (b->decl) != code)
3703 /* Definition isn't the kind we were looking for. */
3704 pending_invalid_xref = name;
3705 pending_invalid_xref_location = input_location;
3707 /* If in the same binding level as a declaration as a tag
3708 of a different type, this must not be allowed to
3709 shadow that tag, so give the error immediately.
3710 (For example, "struct foo; union foo;" is invalid.) */
3711 if (thislevel)
3712 pending_xref_error ();
3715 if (ploc != NULL)
3716 *ploc = b->locus;
3718 return b->decl;
3721 /* Print an error message now
3722 for a recent invalid struct, union or enum cross reference.
3723 We don't print them immediately because they are not invalid
3724 when used in the `struct foo;' construct for shadowing. */
3726 void
3727 pending_xref_error (void)
3729 if (pending_invalid_xref != 0)
3730 error_at (pending_invalid_xref_location, "%qE defined as wrong kind of tag",
3731 pending_invalid_xref);
3732 pending_invalid_xref = 0;
3736 /* Look up NAME in the current scope and its superiors
3737 in the namespace of variables, functions and typedefs.
3738 Return a ..._DECL node of some kind representing its definition,
3739 or return 0 if it is undefined. */
3741 tree
3742 lookup_name (tree name)
3744 struct c_binding *b = I_SYMBOL_BINDING (name);
3745 if (b && !b->invisible)
3747 maybe_record_typedef_use (b->decl);
3748 return b->decl;
3750 return 0;
3753 /* Similar to `lookup_name' but look only at the indicated scope. */
3755 static tree
3756 lookup_name_in_scope (tree name, struct c_scope *scope)
3758 struct c_binding *b;
3760 for (b = I_SYMBOL_BINDING (name); b; b = b->shadowed)
3761 if (B_IN_SCOPE (b, scope))
3762 return b->decl;
3763 return 0;
3766 /* Create the predefined scalar types of C,
3767 and some nodes representing standard constants (0, 1, (void *) 0).
3768 Initialize the global scope.
3769 Make definitions for built-in primitive functions. */
3771 void
3772 c_init_decl_processing (void)
3774 location_t save_loc = input_location;
3776 /* Initialize reserved words for parser. */
3777 c_parse_init ();
3779 current_function_decl = 0;
3781 gcc_obstack_init (&parser_obstack);
3783 /* Make the externals scope. */
3784 push_scope ();
3785 external_scope = current_scope;
3787 /* Declarations from c_common_nodes_and_builtins must not be associated
3788 with this input file, lest we get differences between using and not
3789 using preprocessed headers. */
3790 input_location = BUILTINS_LOCATION;
3792 c_common_nodes_and_builtins ();
3794 /* In C, comparisons and TRUTH_* expressions have type int. */
3795 truthvalue_type_node = integer_type_node;
3796 truthvalue_true_node = integer_one_node;
3797 truthvalue_false_node = integer_zero_node;
3799 /* Even in C99, which has a real boolean type. */
3800 pushdecl (build_decl (UNKNOWN_LOCATION, TYPE_DECL, get_identifier ("_Bool"),
3801 boolean_type_node));
3803 input_location = save_loc;
3805 pedantic_lvalues = true;
3807 make_fname_decl = c_make_fname_decl;
3808 start_fname_decls ();
3811 /* Create the VAR_DECL at LOC for __FUNCTION__ etc. ID is the name to
3812 give the decl, NAME is the initialization string and TYPE_DEP
3813 indicates whether NAME depended on the type of the function. As we
3814 don't yet implement delayed emission of static data, we mark the
3815 decl as emitted so it is not placed in the output. Anything using
3816 it must therefore pull out the STRING_CST initializer directly.
3817 FIXME. */
3819 static tree
3820 c_make_fname_decl (location_t loc, tree id, int type_dep)
3822 const char *name = fname_as_string (type_dep);
3823 tree decl, type, init;
3824 size_t length = strlen (name);
3826 type = build_array_type (char_type_node,
3827 build_index_type (size_int (length)));
3828 type = c_build_qualified_type (type, TYPE_QUAL_CONST);
3830 decl = build_decl (loc, VAR_DECL, id, type);
3832 TREE_STATIC (decl) = 1;
3833 TREE_READONLY (decl) = 1;
3834 DECL_ARTIFICIAL (decl) = 1;
3836 init = build_string (length + 1, name);
3837 free (CONST_CAST (char *, name));
3838 TREE_TYPE (init) = type;
3839 DECL_INITIAL (decl) = init;
3841 TREE_USED (decl) = 1;
3843 if (current_function_decl
3844 /* For invalid programs like this:
3846 void foo()
3847 const char* p = __FUNCTION__;
3849 the __FUNCTION__ is believed to appear in K&R style function
3850 parameter declarator. In that case we still don't have
3851 function_scope. */
3852 && (!seen_error () || current_function_scope))
3854 DECL_CONTEXT (decl) = current_function_decl;
3855 bind (id, decl, current_function_scope,
3856 /*invisible=*/false, /*nested=*/false, UNKNOWN_LOCATION);
3859 finish_decl (decl, loc, init, NULL_TREE, NULL_TREE);
3861 return decl;
3864 tree
3865 c_builtin_function (tree decl)
3867 tree type = TREE_TYPE (decl);
3868 tree id = DECL_NAME (decl);
3870 const char *name = IDENTIFIER_POINTER (id);
3871 C_DECL_BUILTIN_PROTOTYPE (decl) = prototype_p (type);
3873 /* Should never be called on a symbol with a preexisting meaning. */
3874 gcc_assert (!I_SYMBOL_BINDING (id));
3876 bind (id, decl, external_scope, /*invisible=*/true, /*nested=*/false,
3877 UNKNOWN_LOCATION);
3879 /* Builtins in the implementation namespace are made visible without
3880 needing to be explicitly declared. See push_file_scope. */
3881 if (name[0] == '_' && (name[1] == '_' || ISUPPER (name[1])))
3883 DECL_CHAIN (decl) = visible_builtins;
3884 visible_builtins = decl;
3887 return decl;
3890 tree
3891 c_builtin_function_ext_scope (tree decl)
3893 tree type = TREE_TYPE (decl);
3894 tree id = DECL_NAME (decl);
3896 const char *name = IDENTIFIER_POINTER (id);
3897 C_DECL_BUILTIN_PROTOTYPE (decl) = prototype_p (type);
3899 if (external_scope)
3900 bind (id, decl, external_scope, /*invisible=*/false, /*nested=*/false,
3901 UNKNOWN_LOCATION);
3903 /* Builtins in the implementation namespace are made visible without
3904 needing to be explicitly declared. See push_file_scope. */
3905 if (name[0] == '_' && (name[1] == '_' || ISUPPER (name[1])))
3907 DECL_CHAIN (decl) = visible_builtins;
3908 visible_builtins = decl;
3911 return decl;
3914 /* Called when a declaration is seen that contains no names to declare.
3915 If its type is a reference to a structure, union or enum inherited
3916 from a containing scope, shadow that tag name for the current scope
3917 with a forward reference.
3918 If its type defines a new named structure or union
3919 or defines an enum, it is valid but we need not do anything here.
3920 Otherwise, it is an error. */
3922 void
3923 shadow_tag (const struct c_declspecs *declspecs)
3925 shadow_tag_warned (declspecs, 0);
3928 /* WARNED is 1 if we have done a pedwarn, 2 if we have done a warning,
3929 but no pedwarn. */
3930 void
3931 shadow_tag_warned (const struct c_declspecs *declspecs, int warned)
3933 bool found_tag = false;
3935 if (declspecs->type && !declspecs->default_int_p && !declspecs->typedef_p)
3937 tree value = declspecs->type;
3938 enum tree_code code = TREE_CODE (value);
3940 if (code == RECORD_TYPE || code == UNION_TYPE || code == ENUMERAL_TYPE)
3941 /* Used to test also that TYPE_SIZE (value) != 0.
3942 That caused warning for `struct foo;' at top level in the file. */
3944 tree name = TYPE_NAME (value);
3945 tree t;
3947 found_tag = true;
3949 if (declspecs->restrict_p)
3951 error ("invalid use of %<restrict%>");
3952 warned = 1;
3955 if (name == 0)
3957 if (warned != 1 && code != ENUMERAL_TYPE)
3958 /* Empty unnamed enum OK */
3960 pedwarn (input_location, 0,
3961 "unnamed struct/union that defines no instances");
3962 warned = 1;
3965 else if (declspecs->typespec_kind != ctsk_tagdef
3966 && declspecs->typespec_kind != ctsk_tagfirstref
3967 && declspecs->storage_class != csc_none)
3969 if (warned != 1)
3970 pedwarn (input_location, 0,
3971 "empty declaration with storage class specifier "
3972 "does not redeclare tag");
3973 warned = 1;
3974 pending_xref_error ();
3976 else if (declspecs->typespec_kind != ctsk_tagdef
3977 && declspecs->typespec_kind != ctsk_tagfirstref
3978 && (declspecs->const_p
3979 || declspecs->volatile_p
3980 || declspecs->atomic_p
3981 || declspecs->restrict_p
3982 || declspecs->address_space))
3984 if (warned != 1)
3985 pedwarn (input_location, 0,
3986 "empty declaration with type qualifier "
3987 "does not redeclare tag");
3988 warned = 1;
3989 pending_xref_error ();
3991 else if (declspecs->typespec_kind != ctsk_tagdef
3992 && declspecs->typespec_kind != ctsk_tagfirstref
3993 && declspecs->alignas_p)
3995 if (warned != 1)
3996 pedwarn (input_location, 0,
3997 "empty declaration with %<_Alignas%> "
3998 "does not redeclare tag");
3999 warned = 1;
4000 pending_xref_error ();
4002 else
4004 pending_invalid_xref = 0;
4005 t = lookup_tag (code, name, 1, NULL);
4007 if (t == 0)
4009 t = make_node (code);
4010 pushtag (input_location, name, t);
4014 else
4016 if (warned != 1 && !in_system_header_at (input_location))
4018 pedwarn (input_location, 0,
4019 "useless type name in empty declaration");
4020 warned = 1;
4024 else if (warned != 1 && !in_system_header_at (input_location)
4025 && declspecs->typedef_p)
4027 pedwarn (input_location, 0, "useless type name in empty declaration");
4028 warned = 1;
4031 pending_invalid_xref = 0;
4033 if (declspecs->inline_p)
4035 error ("%<inline%> in empty declaration");
4036 warned = 1;
4039 if (declspecs->noreturn_p)
4041 error ("%<_Noreturn%> in empty declaration");
4042 warned = 1;
4045 if (current_scope == file_scope && declspecs->storage_class == csc_auto)
4047 error ("%<auto%> in file-scope empty declaration");
4048 warned = 1;
4051 if (current_scope == file_scope && declspecs->storage_class == csc_register)
4053 error ("%<register%> in file-scope empty declaration");
4054 warned = 1;
4057 if (!warned && !in_system_header_at (input_location)
4058 && declspecs->storage_class != csc_none)
4060 warning (0, "useless storage class specifier in empty declaration");
4061 warned = 2;
4064 if (!warned && !in_system_header_at (input_location) && declspecs->thread_p)
4066 warning (0, "useless %qs in empty declaration",
4067 declspecs->thread_gnu_p ? "__thread" : "_Thread_local");
4068 warned = 2;
4071 if (!warned
4072 && !in_system_header_at (input_location)
4073 && (declspecs->const_p
4074 || declspecs->volatile_p
4075 || declspecs->atomic_p
4076 || declspecs->restrict_p
4077 || declspecs->address_space))
4079 warning (0, "useless type qualifier in empty declaration");
4080 warned = 2;
4083 if (!warned && !in_system_header_at (input_location)
4084 && declspecs->alignas_p)
4086 warning (0, "useless %<_Alignas%> in empty declaration");
4087 warned = 2;
4090 if (warned != 1)
4092 if (!found_tag)
4093 pedwarn (input_location, 0, "empty declaration");
4098 /* Return the qualifiers from SPECS as a bitwise OR of TYPE_QUAL_*
4099 bits. SPECS represents declaration specifiers that the grammar
4100 only permits to contain type qualifiers and attributes. */
4103 quals_from_declspecs (const struct c_declspecs *specs)
4105 int quals = ((specs->const_p ? TYPE_QUAL_CONST : 0)
4106 | (specs->volatile_p ? TYPE_QUAL_VOLATILE : 0)
4107 | (specs->restrict_p ? TYPE_QUAL_RESTRICT : 0)
4108 | (specs->atomic_p ? TYPE_QUAL_ATOMIC : 0)
4109 | (ENCODE_QUAL_ADDR_SPACE (specs->address_space)));
4110 gcc_assert (!specs->type
4111 && !specs->decl_attr
4112 && specs->typespec_word == cts_none
4113 && specs->storage_class == csc_none
4114 && !specs->typedef_p
4115 && !specs->explicit_signed_p
4116 && !specs->deprecated_p
4117 && !specs->long_p
4118 && !specs->long_long_p
4119 && !specs->short_p
4120 && !specs->signed_p
4121 && !specs->unsigned_p
4122 && !specs->complex_p
4123 && !specs->inline_p
4124 && !specs->noreturn_p
4125 && !specs->thread_p);
4126 return quals;
4129 /* Construct an array declarator. LOC is the location of the
4130 beginning of the array (usually the opening brace). EXPR is the
4131 expression inside [], or NULL_TREE. QUALS are the type qualifiers
4132 inside the [] (to be applied to the pointer to which a parameter
4133 array is converted). STATIC_P is true if "static" is inside the
4134 [], false otherwise. VLA_UNSPEC_P is true if the array is [*], a
4135 VLA of unspecified length which is nevertheless a complete type,
4136 false otherwise. The field for the contained declarator is left to
4137 be filled in by set_array_declarator_inner. */
4139 struct c_declarator *
4140 build_array_declarator (location_t loc,
4141 tree expr, struct c_declspecs *quals, bool static_p,
4142 bool vla_unspec_p)
4144 struct c_declarator *declarator = XOBNEW (&parser_obstack,
4145 struct c_declarator);
4146 declarator->id_loc = loc;
4147 declarator->kind = cdk_array;
4148 declarator->declarator = 0;
4149 declarator->u.array.dimen = expr;
4150 if (quals)
4152 declarator->u.array.attrs = quals->attrs;
4153 declarator->u.array.quals = quals_from_declspecs (quals);
4155 else
4157 declarator->u.array.attrs = NULL_TREE;
4158 declarator->u.array.quals = 0;
4160 declarator->u.array.static_p = static_p;
4161 declarator->u.array.vla_unspec_p = vla_unspec_p;
4162 if (static_p || quals != NULL)
4163 pedwarn_c90 (loc, OPT_Wpedantic,
4164 "ISO C90 does not support %<static%> or type "
4165 "qualifiers in parameter array declarators");
4166 if (vla_unspec_p)
4167 pedwarn_c90 (loc, OPT_Wpedantic,
4168 "ISO C90 does not support %<[*]%> array declarators");
4169 if (vla_unspec_p)
4171 if (!current_scope->parm_flag)
4173 /* C99 6.7.5.2p4 */
4174 error_at (loc, "%<[*]%> not allowed in other than "
4175 "function prototype scope");
4176 declarator->u.array.vla_unspec_p = false;
4177 return NULL;
4179 current_scope->had_vla_unspec = true;
4181 return declarator;
4184 /* Set the contained declarator of an array declarator. DECL is the
4185 declarator, as constructed by build_array_declarator; INNER is what
4186 appears on the left of the []. */
4188 struct c_declarator *
4189 set_array_declarator_inner (struct c_declarator *decl,
4190 struct c_declarator *inner)
4192 decl->declarator = inner;
4193 return decl;
4196 /* INIT is a constructor that forms DECL's initializer. If the final
4197 element initializes a flexible array field, add the size of that
4198 initializer to DECL's size. */
4200 static void
4201 add_flexible_array_elts_to_size (tree decl, tree init)
4203 tree elt, type;
4205 if (vec_safe_is_empty (CONSTRUCTOR_ELTS (init)))
4206 return;
4208 elt = CONSTRUCTOR_ELTS (init)->last ().value;
4209 type = TREE_TYPE (elt);
4210 if (TREE_CODE (type) == ARRAY_TYPE
4211 && TYPE_SIZE (type) == NULL_TREE
4212 && TYPE_DOMAIN (type) != NULL_TREE
4213 && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL_TREE)
4215 complete_array_type (&type, elt, false);
4216 DECL_SIZE (decl)
4217 = size_binop (PLUS_EXPR, DECL_SIZE (decl), TYPE_SIZE (type));
4218 DECL_SIZE_UNIT (decl)
4219 = size_binop (PLUS_EXPR, DECL_SIZE_UNIT (decl), TYPE_SIZE_UNIT (type));
4223 /* Decode a "typename", such as "int **", returning a ..._TYPE node.
4224 Set *EXPR, if EXPR not NULL, to any expression to be evaluated
4225 before the type name, and set *EXPR_CONST_OPERANDS, if
4226 EXPR_CONST_OPERANDS not NULL, to indicate whether the type name may
4227 appear in a constant expression. */
4229 tree
4230 groktypename (struct c_type_name *type_name, tree *expr,
4231 bool *expr_const_operands)
4233 tree type;
4234 tree attrs = type_name->specs->attrs;
4236 type_name->specs->attrs = NULL_TREE;
4238 type = grokdeclarator (type_name->declarator, type_name->specs, TYPENAME,
4239 false, NULL, &attrs, expr, expr_const_operands,
4240 DEPRECATED_NORMAL);
4242 /* Apply attributes. */
4243 decl_attributes (&type, attrs, 0);
4245 return type;
4248 /* Wrapper for decl_attributes that adds some implicit attributes
4249 to VAR_DECLs or FUNCTION_DECLs. */
4251 static tree
4252 c_decl_attributes (tree *node, tree attributes, int flags)
4254 /* Add implicit "omp declare target" attribute if requested. */
4255 if (current_omp_declare_target_attribute
4256 && ((TREE_CODE (*node) == VAR_DECL && TREE_STATIC (*node))
4257 || TREE_CODE (*node) == FUNCTION_DECL))
4259 if (TREE_CODE (*node) == VAR_DECL
4260 && ((DECL_CONTEXT (*node)
4261 && TREE_CODE (DECL_CONTEXT (*node)) == FUNCTION_DECL)
4262 || (current_function_decl && !DECL_EXTERNAL (*node))))
4263 error ("%q+D in block scope inside of declare target directive",
4264 *node);
4265 else if (TREE_CODE (*node) == VAR_DECL
4266 && !lang_hooks.types.omp_mappable_type (TREE_TYPE (*node)))
4267 error ("%q+D in declare target directive does not have mappable type",
4268 *node);
4269 else
4270 attributes = tree_cons (get_identifier ("omp declare target"),
4271 NULL_TREE, attributes);
4273 return decl_attributes (node, attributes, flags);
4277 /* Decode a declarator in an ordinary declaration or data definition.
4278 This is called as soon as the type information and variable name
4279 have been parsed, before parsing the initializer if any.
4280 Here we create the ..._DECL node, fill in its type,
4281 and put it on the list of decls for the current context.
4282 The ..._DECL node is returned as the value.
4284 Exception: for arrays where the length is not specified,
4285 the type is left null, to be filled in by `finish_decl'.
4287 Function definitions do not come here; they go to start_function
4288 instead. However, external and forward declarations of functions
4289 do go through here. Structure field declarations are done by
4290 grokfield and not through here. */
4292 tree
4293 start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs,
4294 bool initialized, tree attributes)
4296 tree decl;
4297 tree tem;
4298 tree expr = NULL_TREE;
4299 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
4301 /* An object declared as __attribute__((deprecated)) suppresses
4302 warnings of uses of other deprecated items. */
4303 if (lookup_attribute ("deprecated", attributes))
4304 deprecated_state = DEPRECATED_SUPPRESS;
4306 decl = grokdeclarator (declarator, declspecs,
4307 NORMAL, initialized, NULL, &attributes, &expr, NULL,
4308 deprecated_state);
4309 if (!decl)
4310 return 0;
4312 if (expr)
4313 add_stmt (fold_convert (void_type_node, expr));
4315 if (TREE_CODE (decl) != FUNCTION_DECL && MAIN_NAME_P (DECL_NAME (decl)))
4316 warning (OPT_Wmain, "%q+D is usually a function", decl);
4318 if (initialized)
4319 /* Is it valid for this decl to have an initializer at all?
4320 If not, set INITIALIZED to zero, which will indirectly
4321 tell 'finish_decl' to ignore the initializer once it is parsed. */
4322 switch (TREE_CODE (decl))
4324 case TYPE_DECL:
4325 error ("typedef %qD is initialized (use __typeof__ instead)", decl);
4326 initialized = 0;
4327 break;
4329 case FUNCTION_DECL:
4330 error ("function %qD is initialized like a variable", decl);
4331 initialized = 0;
4332 break;
4334 case PARM_DECL:
4335 /* DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. */
4336 error ("parameter %qD is initialized", decl);
4337 initialized = 0;
4338 break;
4340 default:
4341 /* Don't allow initializations for incomplete types except for
4342 arrays which might be completed by the initialization. */
4344 /* This can happen if the array size is an undefined macro.
4345 We already gave a warning, so we don't need another one. */
4346 if (TREE_TYPE (decl) == error_mark_node)
4347 initialized = 0;
4348 else if (COMPLETE_TYPE_P (TREE_TYPE (decl)))
4350 /* A complete type is ok if size is fixed. */
4352 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (decl))) != INTEGER_CST
4353 || C_DECL_VARIABLE_SIZE (decl))
4355 error ("variable-sized object may not be initialized");
4356 initialized = 0;
4359 else if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE)
4361 error ("variable %qD has initializer but incomplete type", decl);
4362 initialized = 0;
4364 else if (C_DECL_VARIABLE_SIZE (decl))
4366 /* Although C99 is unclear about whether incomplete arrays
4367 of VLAs themselves count as VLAs, it does not make
4368 sense to permit them to be initialized given that
4369 ordinary VLAs may not be initialized. */
4370 error ("variable-sized object may not be initialized");
4371 initialized = 0;
4375 if (initialized)
4377 if (current_scope == file_scope)
4378 TREE_STATIC (decl) = 1;
4380 /* Tell 'pushdecl' this is an initialized decl
4381 even though we don't yet have the initializer expression.
4382 Also tell 'finish_decl' it may store the real initializer. */
4383 DECL_INITIAL (decl) = error_mark_node;
4386 /* If this is a function declaration, write a record describing it to the
4387 prototypes file (if requested). */
4389 if (TREE_CODE (decl) == FUNCTION_DECL)
4390 gen_aux_info_record (decl, 0, 0, prototype_p (TREE_TYPE (decl)));
4392 /* ANSI specifies that a tentative definition which is not merged with
4393 a non-tentative definition behaves exactly like a definition with an
4394 initializer equal to zero. (Section 3.7.2)
4396 -fno-common gives strict ANSI behavior, though this tends to break
4397 a large body of code that grew up without this rule.
4399 Thread-local variables are never common, since there's no entrenched
4400 body of code to break, and it allows more efficient variable references
4401 in the presence of dynamic linking. */
4403 if (TREE_CODE (decl) == VAR_DECL
4404 && !initialized
4405 && TREE_PUBLIC (decl)
4406 && !DECL_THREAD_LOCAL_P (decl)
4407 && !flag_no_common)
4408 DECL_COMMON (decl) = 1;
4410 /* Set attributes here so if duplicate decl, will have proper attributes. */
4411 c_decl_attributes (&decl, attributes, 0);
4413 /* Handle gnu_inline attribute. */
4414 if (declspecs->inline_p
4415 && !flag_gnu89_inline
4416 && TREE_CODE (decl) == FUNCTION_DECL
4417 && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl))
4418 || current_function_decl))
4420 if (declspecs->storage_class == csc_auto && current_scope != file_scope)
4422 else if (declspecs->storage_class != csc_static)
4423 DECL_EXTERNAL (decl) = !DECL_EXTERNAL (decl);
4426 if (TREE_CODE (decl) == FUNCTION_DECL
4427 && targetm.calls.promote_prototypes (TREE_TYPE (decl)))
4429 struct c_declarator *ce = declarator;
4431 if (ce->kind == cdk_pointer)
4432 ce = declarator->declarator;
4433 if (ce->kind == cdk_function)
4435 tree args = ce->u.arg_info->parms;
4436 for (; args; args = DECL_CHAIN (args))
4438 tree type = TREE_TYPE (args);
4439 if (type && INTEGRAL_TYPE_P (type)
4440 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
4441 DECL_ARG_TYPE (args) = c_type_promotes_to (type);
4446 if (TREE_CODE (decl) == FUNCTION_DECL
4447 && DECL_DECLARED_INLINE_P (decl)
4448 && DECL_UNINLINABLE (decl)
4449 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4450 warning (OPT_Wattributes, "inline function %q+D given attribute noinline",
4451 decl);
4453 /* C99 6.7.4p3: An inline definition of a function with external
4454 linkage shall not contain a definition of a modifiable object
4455 with static storage duration... */
4456 if (TREE_CODE (decl) == VAR_DECL
4457 && current_scope != file_scope
4458 && TREE_STATIC (decl)
4459 && !TREE_READONLY (decl)
4460 && DECL_DECLARED_INLINE_P (current_function_decl)
4461 && DECL_EXTERNAL (current_function_decl))
4462 record_inline_static (input_location, current_function_decl,
4463 decl, csi_modifiable);
4465 if (c_dialect_objc ()
4466 && (TREE_CODE (decl) == VAR_DECL
4467 || TREE_CODE (decl) == FUNCTION_DECL))
4468 objc_check_global_decl (decl);
4470 /* Add this decl to the current scope.
4471 TEM may equal DECL or it may be a previous decl of the same name. */
4472 tem = pushdecl (decl);
4474 if (initialized && DECL_EXTERNAL (tem))
4476 DECL_EXTERNAL (tem) = 0;
4477 TREE_STATIC (tem) = 1;
4480 return tem;
4483 /* Subroutine of finish_decl. TYPE is the type of an uninitialized object
4484 DECL or the non-array element type if DECL is an uninitialized array.
4485 If that type has a const member, diagnose this. */
4487 static void
4488 diagnose_uninitialized_cst_member (tree decl, tree type)
4490 tree field;
4491 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
4493 tree field_type;
4494 if (TREE_CODE (field) != FIELD_DECL)
4495 continue;
4496 field_type = strip_array_types (TREE_TYPE (field));
4498 if (TYPE_QUALS (field_type) & TYPE_QUAL_CONST)
4500 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wc___compat,
4501 "uninitialized const member in %qT is invalid in C++",
4502 strip_array_types (TREE_TYPE (decl)));
4503 inform (DECL_SOURCE_LOCATION (field), "%qD should be initialized", field);
4506 if (TREE_CODE (field_type) == RECORD_TYPE
4507 || TREE_CODE (field_type) == UNION_TYPE)
4508 diagnose_uninitialized_cst_member (decl, field_type);
4512 /* Finish processing of a declaration;
4513 install its initial value.
4514 If ORIGTYPE is not NULL_TREE, it is the original type of INIT.
4515 If the length of an array type is not known before,
4516 it must be determined now, from the initial value, or it is an error.
4518 INIT_LOC is the location of the initial value. */
4520 void
4521 finish_decl (tree decl, location_t init_loc, tree init,
4522 tree origtype, tree asmspec_tree)
4524 tree type;
4525 bool was_incomplete = (DECL_SIZE (decl) == 0);
4526 const char *asmspec = 0;
4528 /* If a name was specified, get the string. */
4529 if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
4530 && DECL_FILE_SCOPE_P (decl))
4531 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
4532 if (asmspec_tree)
4533 asmspec = TREE_STRING_POINTER (asmspec_tree);
4535 if (TREE_CODE (decl) == VAR_DECL
4536 && TREE_STATIC (decl)
4537 && global_bindings_p ())
4538 /* So decl is a global variable. Record the types it uses
4539 so that we can decide later to emit debug info for them. */
4540 record_types_used_by_current_var_decl (decl);
4542 /* If `start_decl' didn't like having an initialization, ignore it now. */
4543 if (init != 0 && DECL_INITIAL (decl) == 0)
4544 init = 0;
4546 /* Don't crash if parm is initialized. */
4547 if (TREE_CODE (decl) == PARM_DECL)
4548 init = 0;
4550 if (init)
4551 store_init_value (init_loc, decl, init, origtype);
4553 if (c_dialect_objc () && (TREE_CODE (decl) == VAR_DECL
4554 || TREE_CODE (decl) == FUNCTION_DECL
4555 || TREE_CODE (decl) == FIELD_DECL))
4556 objc_check_decl (decl);
4558 type = TREE_TYPE (decl);
4560 /* Deduce size of array from initialization, if not already known. */
4561 if (TREE_CODE (type) == ARRAY_TYPE
4562 && TYPE_DOMAIN (type) == 0
4563 && TREE_CODE (decl) != TYPE_DECL)
4565 bool do_default
4566 = (TREE_STATIC (decl)
4567 /* Even if pedantic, an external linkage array
4568 may have incomplete type at first. */
4569 ? pedantic && !TREE_PUBLIC (decl)
4570 : !DECL_EXTERNAL (decl));
4571 int failure
4572 = complete_array_type (&TREE_TYPE (decl), DECL_INITIAL (decl),
4573 do_default);
4575 /* Get the completed type made by complete_array_type. */
4576 type = TREE_TYPE (decl);
4578 switch (failure)
4580 case 1:
4581 error ("initializer fails to determine size of %q+D", decl);
4582 break;
4584 case 2:
4585 if (do_default)
4586 error ("array size missing in %q+D", decl);
4587 /* If a `static' var's size isn't known,
4588 make it extern as well as static, so it does not get
4589 allocated.
4590 If it is not `static', then do not mark extern;
4591 finish_incomplete_decl will give it a default size
4592 and it will get allocated. */
4593 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4594 DECL_EXTERNAL (decl) = 1;
4595 break;
4597 case 3:
4598 error ("zero or negative size array %q+D", decl);
4599 break;
4601 case 0:
4602 /* For global variables, update the copy of the type that
4603 exists in the binding. */
4604 if (TREE_PUBLIC (decl))
4606 struct c_binding *b_ext = I_SYMBOL_BINDING (DECL_NAME (decl));
4607 while (b_ext && !B_IN_EXTERNAL_SCOPE (b_ext))
4608 b_ext = b_ext->shadowed;
4609 if (b_ext)
4611 if (b_ext->u.type && comptypes (b_ext->u.type, type))
4612 b_ext->u.type = composite_type (b_ext->u.type, type);
4613 else
4614 b_ext->u.type = type;
4617 break;
4619 default:
4620 gcc_unreachable ();
4623 if (DECL_INITIAL (decl))
4624 TREE_TYPE (DECL_INITIAL (decl)) = type;
4626 relayout_decl (decl);
4629 if (TREE_CODE (decl) == VAR_DECL)
4631 if (init && TREE_CODE (init) == CONSTRUCTOR)
4632 add_flexible_array_elts_to_size (decl, init);
4634 if (DECL_SIZE (decl) == 0 && TREE_TYPE (decl) != error_mark_node
4635 && COMPLETE_TYPE_P (TREE_TYPE (decl)))
4636 layout_decl (decl, 0);
4638 if (DECL_SIZE (decl) == 0
4639 /* Don't give an error if we already gave one earlier. */
4640 && TREE_TYPE (decl) != error_mark_node
4641 && (TREE_STATIC (decl)
4642 /* A static variable with an incomplete type
4643 is an error if it is initialized.
4644 Also if it is not file scope.
4645 Otherwise, let it through, but if it is not `extern'
4646 then it may cause an error message later. */
4647 ? (DECL_INITIAL (decl) != 0
4648 || !DECL_FILE_SCOPE_P (decl))
4649 /* An automatic variable with an incomplete type
4650 is an error. */
4651 : !DECL_EXTERNAL (decl)))
4653 error ("storage size of %q+D isn%'t known", decl);
4654 TREE_TYPE (decl) = error_mark_node;
4657 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4658 && DECL_SIZE (decl) != 0)
4660 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4661 constant_expression_warning (DECL_SIZE (decl));
4662 else
4664 error ("storage size of %q+D isn%'t constant", decl);
4665 TREE_TYPE (decl) = error_mark_node;
4669 if (TREE_USED (type))
4671 TREE_USED (decl) = 1;
4672 DECL_READ_P (decl) = 1;
4676 /* If this is a function and an assembler name is specified, reset DECL_RTL
4677 so we can give it its new name. Also, update builtin_decl if it
4678 was a normal built-in. */
4679 if (TREE_CODE (decl) == FUNCTION_DECL && asmspec)
4681 if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
4682 set_builtin_user_assembler_name (decl, asmspec);
4683 set_user_assembler_name (decl, asmspec);
4686 /* If #pragma weak was used, mark the decl weak now. */
4687 maybe_apply_pragma_weak (decl);
4689 /* Output the assembler code and/or RTL code for variables and functions,
4690 unless the type is an undefined structure or union.
4691 If not, it will get done when the type is completed. */
4693 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
4695 /* Determine the ELF visibility. */
4696 if (TREE_PUBLIC (decl))
4697 c_determine_visibility (decl);
4699 /* This is a no-op in c-lang.c or something real in objc-act.c. */
4700 if (c_dialect_objc ())
4701 objc_check_decl (decl);
4703 if (asmspec)
4705 /* If this is not a static variable, issue a warning.
4706 It doesn't make any sense to give an ASMSPEC for an
4707 ordinary, non-register local variable. Historically,
4708 GCC has accepted -- but ignored -- the ASMSPEC in
4709 this case. */
4710 if (!DECL_FILE_SCOPE_P (decl)
4711 && TREE_CODE (decl) == VAR_DECL
4712 && !C_DECL_REGISTER (decl)
4713 && !TREE_STATIC (decl))
4714 warning (0, "ignoring asm-specifier for non-static local "
4715 "variable %q+D", decl);
4716 else
4717 set_user_assembler_name (decl, asmspec);
4720 if (DECL_FILE_SCOPE_P (decl))
4722 if (DECL_INITIAL (decl) == NULL_TREE
4723 || DECL_INITIAL (decl) == error_mark_node)
4724 /* Don't output anything
4725 when a tentative file-scope definition is seen.
4726 But at end of compilation, do output code for them. */
4727 DECL_DEFER_OUTPUT (decl) = 1;
4728 if (asmspec && C_DECL_REGISTER (decl))
4729 DECL_HARD_REGISTER (decl) = 1;
4730 rest_of_decl_compilation (decl, true, 0);
4732 else
4734 /* In conjunction with an ASMSPEC, the `register'
4735 keyword indicates that we should place the variable
4736 in a particular register. */
4737 if (asmspec && C_DECL_REGISTER (decl))
4739 DECL_HARD_REGISTER (decl) = 1;
4740 /* This cannot be done for a structure with volatile
4741 fields, on which DECL_REGISTER will have been
4742 reset. */
4743 if (!DECL_REGISTER (decl))
4744 error ("cannot put object with volatile field into register");
4747 if (TREE_CODE (decl) != FUNCTION_DECL)
4749 /* If we're building a variable sized type, and we might be
4750 reachable other than via the top of the current binding
4751 level, then create a new BIND_EXPR so that we deallocate
4752 the object at the right time. */
4753 /* Note that DECL_SIZE can be null due to errors. */
4754 if (DECL_SIZE (decl)
4755 && !TREE_CONSTANT (DECL_SIZE (decl))
4756 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
4758 tree bind;
4759 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
4760 TREE_SIDE_EFFECTS (bind) = 1;
4761 add_stmt (bind);
4762 BIND_EXPR_BODY (bind) = push_stmt_list ();
4764 add_stmt (build_stmt (DECL_SOURCE_LOCATION (decl),
4765 DECL_EXPR, decl));
4770 if (!DECL_FILE_SCOPE_P (decl))
4772 /* Recompute the RTL of a local array now
4773 if it used to be an incomplete type. */
4774 if (was_incomplete
4775 && !TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
4777 /* If we used it already as memory, it must stay in memory. */
4778 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
4779 /* If it's still incomplete now, no init will save it. */
4780 if (DECL_SIZE (decl) == 0)
4781 DECL_INITIAL (decl) = 0;
4786 if (TREE_CODE (decl) == TYPE_DECL)
4788 if (!DECL_FILE_SCOPE_P (decl)
4789 && variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
4790 add_stmt (build_stmt (DECL_SOURCE_LOCATION (decl), DECL_EXPR, decl));
4792 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl), 0);
4795 /* Install a cleanup (aka destructor) if one was given. */
4796 if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
4798 tree attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
4799 if (attr)
4801 tree cleanup_id = TREE_VALUE (TREE_VALUE (attr));
4802 tree cleanup_decl = lookup_name (cleanup_id);
4803 tree cleanup;
4804 vec<tree, va_gc> *v;
4806 /* Build "cleanup(&decl)" for the destructor. */
4807 cleanup = build_unary_op (input_location, ADDR_EXPR, decl, 0);
4808 vec_alloc (v, 1);
4809 v->quick_push (cleanup);
4810 cleanup = c_build_function_call_vec (DECL_SOURCE_LOCATION (decl),
4811 vNULL, cleanup_decl, v, NULL);
4812 vec_free (v);
4814 /* Don't warn about decl unused; the cleanup uses it. */
4815 TREE_USED (decl) = 1;
4816 TREE_USED (cleanup_decl) = 1;
4817 DECL_READ_P (decl) = 1;
4819 push_cleanup (decl, cleanup, false);
4823 if (warn_cxx_compat
4824 && TREE_CODE (decl) == VAR_DECL
4825 && !DECL_EXTERNAL (decl)
4826 && DECL_INITIAL (decl) == NULL_TREE)
4828 type = strip_array_types (type);
4829 if (TREE_READONLY (decl))
4830 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wc___compat,
4831 "uninitialized const %qD is invalid in C++", decl);
4832 else if ((TREE_CODE (type) == RECORD_TYPE
4833 || TREE_CODE (type) == UNION_TYPE)
4834 && C_TYPE_FIELDS_READONLY (type))
4835 diagnose_uninitialized_cst_member (decl, type);
4838 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
4841 /* Given a parsed parameter declaration, decode it into a PARM_DECL.
4842 EXPR is NULL or a pointer to an expression that needs to be
4843 evaluated for the side effects of array size expressions in the
4844 parameters. */
4846 tree
4847 grokparm (const struct c_parm *parm, tree *expr)
4849 tree attrs = parm->attrs;
4850 tree decl = grokdeclarator (parm->declarator, parm->specs, PARM, false,
4851 NULL, &attrs, expr, NULL, DEPRECATED_NORMAL);
4853 decl_attributes (&decl, attrs, 0);
4855 return decl;
4858 /* Given a parsed parameter declaration, decode it into a PARM_DECL
4859 and push that on the current scope. EXPR is a pointer to an
4860 expression that needs to be evaluated for the side effects of array
4861 size expressions in the parameters. */
4863 void
4864 push_parm_decl (const struct c_parm *parm, tree *expr)
4866 tree attrs = parm->attrs;
4867 tree decl;
4869 decl = grokdeclarator (parm->declarator, parm->specs, PARM, false, NULL,
4870 &attrs, expr, NULL, DEPRECATED_NORMAL);
4871 decl_attributes (&decl, attrs, 0);
4873 decl = pushdecl (decl);
4875 finish_decl (decl, input_location, NULL_TREE, NULL_TREE, NULL_TREE);
4878 /* Mark all the parameter declarations to date as forward decls.
4879 Also diagnose use of this extension. */
4881 void
4882 mark_forward_parm_decls (void)
4884 struct c_binding *b;
4886 if (pedantic && !current_scope->warned_forward_parm_decls)
4888 pedwarn (input_location, OPT_Wpedantic,
4889 "ISO C forbids forward parameter declarations");
4890 current_scope->warned_forward_parm_decls = true;
4893 for (b = current_scope->bindings; b; b = b->prev)
4894 if (TREE_CODE (b->decl) == PARM_DECL)
4895 TREE_ASM_WRITTEN (b->decl) = 1;
4898 /* Build a COMPOUND_LITERAL_EXPR. TYPE is the type given in the compound
4899 literal, which may be an incomplete array type completed by the
4900 initializer; INIT is a CONSTRUCTOR at LOC that initializes the compound
4901 literal. NON_CONST is true if the initializers contain something
4902 that cannot occur in a constant expression. */
4904 tree
4905 build_compound_literal (location_t loc, tree type, tree init, bool non_const)
4907 /* We do not use start_decl here because we have a type, not a declarator;
4908 and do not use finish_decl because the decl should be stored inside
4909 the COMPOUND_LITERAL_EXPR rather than added elsewhere as a DECL_EXPR. */
4910 tree decl;
4911 tree complit;
4912 tree stmt;
4914 if (type == error_mark_node
4915 || init == error_mark_node)
4916 return error_mark_node;
4918 decl = build_decl (loc, VAR_DECL, NULL_TREE, type);
4919 DECL_EXTERNAL (decl) = 0;
4920 TREE_PUBLIC (decl) = 0;
4921 TREE_STATIC (decl) = (current_scope == file_scope);
4922 DECL_CONTEXT (decl) = current_function_decl;
4923 TREE_USED (decl) = 1;
4924 DECL_READ_P (decl) = 1;
4925 TREE_TYPE (decl) = type;
4926 TREE_READONLY (decl) = (TYPE_READONLY (type)
4927 || (TREE_CODE (type) == ARRAY_TYPE
4928 && TYPE_READONLY (TREE_TYPE (type))));
4929 store_init_value (loc, decl, init, NULL_TREE);
4931 if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
4933 int failure = complete_array_type (&TREE_TYPE (decl),
4934 DECL_INITIAL (decl), true);
4935 /* If complete_array_type returns 3, it means that the
4936 initial value of the compound literal is empty. Allow it. */
4937 gcc_assert (failure == 0 || failure == 3);
4939 type = TREE_TYPE (decl);
4940 TREE_TYPE (DECL_INITIAL (decl)) = type;
4943 if (type == error_mark_node || !COMPLETE_TYPE_P (type))
4945 c_incomplete_type_error (NULL_TREE, type);
4946 return error_mark_node;
4949 stmt = build_stmt (DECL_SOURCE_LOCATION (decl), DECL_EXPR, decl);
4950 complit = build1 (COMPOUND_LITERAL_EXPR, type, stmt);
4951 TREE_SIDE_EFFECTS (complit) = 1;
4953 layout_decl (decl, 0);
4955 if (TREE_STATIC (decl))
4957 /* This decl needs a name for the assembler output. */
4958 set_compound_literal_name (decl);
4959 DECL_DEFER_OUTPUT (decl) = 1;
4960 DECL_COMDAT (decl) = 1;
4961 DECL_ARTIFICIAL (decl) = 1;
4962 DECL_IGNORED_P (decl) = 1;
4963 pushdecl (decl);
4964 rest_of_decl_compilation (decl, 1, 0);
4967 if (non_const)
4969 complit = build2 (C_MAYBE_CONST_EXPR, type, NULL, complit);
4970 C_MAYBE_CONST_EXPR_NON_CONST (complit) = 1;
4973 return complit;
4976 /* Check the type of a compound literal. Here we just check that it
4977 is valid for C++. */
4979 void
4980 check_compound_literal_type (location_t loc, struct c_type_name *type_name)
4982 if (warn_cxx_compat
4983 && (type_name->specs->typespec_kind == ctsk_tagdef
4984 || type_name->specs->typespec_kind == ctsk_tagfirstref))
4985 warning_at (loc, OPT_Wc___compat,
4986 "defining a type in a compound literal is invalid in C++");
4989 /* Determine whether TYPE is a structure with a flexible array member,
4990 or a union containing such a structure (possibly recursively). */
4992 static bool
4993 flexible_array_type_p (tree type)
4995 tree x;
4996 switch (TREE_CODE (type))
4998 case RECORD_TYPE:
4999 x = TYPE_FIELDS (type);
5000 if (x == NULL_TREE)
5001 return false;
5002 while (DECL_CHAIN (x) != NULL_TREE)
5003 x = DECL_CHAIN (x);
5004 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
5005 && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
5006 && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
5007 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
5008 return true;
5009 return false;
5010 case UNION_TYPE:
5011 for (x = TYPE_FIELDS (type); x != NULL_TREE; x = DECL_CHAIN (x))
5013 if (flexible_array_type_p (TREE_TYPE (x)))
5014 return true;
5016 return false;
5017 default:
5018 return false;
5022 /* Performs sanity checks on the TYPE and WIDTH of the bit-field NAME,
5023 replacing with appropriate values if they are invalid. */
5024 static void
5025 check_bitfield_type_and_width (tree *type, tree *width, tree orig_name)
5027 tree type_mv;
5028 unsigned int max_width;
5029 unsigned HOST_WIDE_INT w;
5030 const char *name = (orig_name
5031 ? identifier_to_locale (IDENTIFIER_POINTER (orig_name))
5032 : _("<anonymous>"));
5034 /* Detect and ignore out of range field width and process valid
5035 field widths. */
5036 if (!INTEGRAL_TYPE_P (TREE_TYPE (*width)))
5038 error ("bit-field %qs width not an integer constant", name);
5039 *width = integer_one_node;
5041 else
5043 if (TREE_CODE (*width) != INTEGER_CST)
5045 *width = c_fully_fold (*width, false, NULL);
5046 if (TREE_CODE (*width) == INTEGER_CST)
5047 pedwarn (input_location, OPT_Wpedantic,
5048 "bit-field %qs width not an integer constant expression",
5049 name);
5051 if (TREE_CODE (*width) != INTEGER_CST)
5053 error ("bit-field %qs width not an integer constant", name);
5054 *width = integer_one_node;
5056 constant_expression_warning (*width);
5057 if (tree_int_cst_sgn (*width) < 0)
5059 error ("negative width in bit-field %qs", name);
5060 *width = integer_one_node;
5062 else if (integer_zerop (*width) && orig_name)
5064 error ("zero width for bit-field %qs", name);
5065 *width = integer_one_node;
5069 /* Detect invalid bit-field type. */
5070 if (TREE_CODE (*type) != INTEGER_TYPE
5071 && TREE_CODE (*type) != BOOLEAN_TYPE
5072 && TREE_CODE (*type) != ENUMERAL_TYPE)
5074 error ("bit-field %qs has invalid type", name);
5075 *type = unsigned_type_node;
5078 type_mv = TYPE_MAIN_VARIANT (*type);
5079 if (!in_system_header_at (input_location)
5080 && type_mv != integer_type_node
5081 && type_mv != unsigned_type_node
5082 && type_mv != boolean_type_node)
5083 pedwarn_c90 (input_location, OPT_Wpedantic,
5084 "type of bit-field %qs is a GCC extension", name);
5086 max_width = TYPE_PRECISION (*type);
5088 if (0 < compare_tree_int (*width, max_width))
5090 error ("width of %qs exceeds its type", name);
5091 w = max_width;
5092 *width = build_int_cst (integer_type_node, w);
5094 else
5095 w = tree_to_uhwi (*width);
5097 if (TREE_CODE (*type) == ENUMERAL_TYPE)
5099 struct lang_type *lt = TYPE_LANG_SPECIFIC (*type);
5100 if (!lt
5101 || w < tree_int_cst_min_precision (lt->enum_min, TYPE_SIGN (*type))
5102 || w < tree_int_cst_min_precision (lt->enum_max, TYPE_SIGN (*type)))
5103 warning (0, "%qs is narrower than values of its type", name);
5109 /* Print warning about variable length array if necessary. */
5111 static void
5112 warn_variable_length_array (tree name, tree size)
5114 if (TREE_CONSTANT (size))
5116 if (name)
5117 pedwarn_c90 (input_location, OPT_Wvla,
5118 "ISO C90 forbids array %qE whose size "
5119 "can%'t be evaluated", name);
5120 else
5121 pedwarn_c90 (input_location, OPT_Wvla, "ISO C90 forbids array "
5122 "whose size can%'t be evaluated");
5124 else
5126 if (name)
5127 pedwarn_c90 (input_location, OPT_Wvla,
5128 "ISO C90 forbids variable length array %qE", name);
5129 else
5130 pedwarn_c90 (input_location, OPT_Wvla, "ISO C90 forbids variable "
5131 "length array");
5135 /* Print warning about defaulting to int if necessary. */
5137 static void
5138 warn_defaults_to (location_t location, int opt, const char *gmsgid, ...)
5140 diagnostic_info diagnostic;
5141 va_list ap;
5143 va_start (ap, gmsgid);
5144 diagnostic_set_info (&diagnostic, gmsgid, &ap, location,
5145 flag_isoc99 ? DK_PEDWARN : DK_WARNING);
5146 diagnostic.option_index = opt;
5147 report_diagnostic (&diagnostic);
5148 va_end (ap);
5151 /* Given declspecs and a declarator,
5152 determine the name and type of the object declared
5153 and construct a ..._DECL node for it.
5154 (In one case we can return a ..._TYPE node instead.
5155 For invalid input we sometimes return 0.)
5157 DECLSPECS is a c_declspecs structure for the declaration specifiers.
5159 DECL_CONTEXT says which syntactic context this declaration is in:
5160 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
5161 FUNCDEF for a function definition. Like NORMAL but a few different
5162 error messages in each case. Return value may be zero meaning
5163 this definition is too screwy to try to parse.
5164 PARM for a parameter declaration (either within a function prototype
5165 or before a function body). Make a PARM_DECL, or return void_type_node.
5166 TYPENAME if for a typename (in a cast or sizeof).
5167 Don't make a DECL node; just return the ..._TYPE node.
5168 FIELD for a struct or union field; make a FIELD_DECL.
5169 INITIALIZED is true if the decl has an initializer.
5170 WIDTH is non-NULL for bit-fields, and is a pointer to an INTEGER_CST node
5171 representing the width of the bit-field.
5172 DECL_ATTRS points to the list of attributes that should be added to this
5173 decl. Any nested attributes that belong on the decl itself will be
5174 added to this list.
5175 If EXPR is not NULL, any expressions that need to be evaluated as
5176 part of evaluating variably modified types will be stored in *EXPR.
5177 If EXPR_CONST_OPERANDS is not NULL, *EXPR_CONST_OPERANDS will be
5178 set to indicate whether operands in *EXPR can be used in constant
5179 expressions.
5180 DEPRECATED_STATE is a deprecated_states value indicating whether
5181 deprecation warnings should be suppressed.
5183 In the TYPENAME case, DECLARATOR is really an absolute declarator.
5184 It may also be so in the PARM case, for a prototype where the
5185 argument type is specified but not the name.
5187 This function is where the complicated C meanings of `static'
5188 and `extern' are interpreted. */
5190 static tree
5191 grokdeclarator (const struct c_declarator *declarator,
5192 struct c_declspecs *declspecs,
5193 enum decl_context decl_context, bool initialized, tree *width,
5194 tree *decl_attrs, tree *expr, bool *expr_const_operands,
5195 enum deprecated_states deprecated_state)
5197 tree type = declspecs->type;
5198 bool threadp = declspecs->thread_p;
5199 enum c_storage_class storage_class = declspecs->storage_class;
5200 int constp;
5201 int restrictp;
5202 int volatilep;
5203 int atomicp;
5204 int type_quals = TYPE_UNQUALIFIED;
5205 tree name = NULL_TREE;
5206 bool funcdef_flag = false;
5207 bool funcdef_syntax = false;
5208 bool size_varies = false;
5209 tree decl_attr = declspecs->decl_attr;
5210 int array_ptr_quals = TYPE_UNQUALIFIED;
5211 tree array_ptr_attrs = NULL_TREE;
5212 int array_parm_static = 0;
5213 bool array_parm_vla_unspec_p = false;
5214 tree returned_attrs = NULL_TREE;
5215 bool bitfield = width != NULL;
5216 tree element_type;
5217 struct c_arg_info *arg_info = 0;
5218 addr_space_t as1, as2, address_space;
5219 location_t loc = UNKNOWN_LOCATION;
5220 const char *errmsg;
5221 tree expr_dummy;
5222 bool expr_const_operands_dummy;
5223 enum c_declarator_kind first_non_attr_kind;
5224 unsigned int alignas_align = 0;
5226 if (TREE_CODE (type) == ERROR_MARK)
5227 return error_mark_node;
5228 if (expr == NULL)
5229 expr = &expr_dummy;
5230 if (expr_const_operands == NULL)
5231 expr_const_operands = &expr_const_operands_dummy;
5233 *expr = declspecs->expr;
5234 *expr_const_operands = declspecs->expr_const_operands;
5236 if (decl_context == FUNCDEF)
5237 funcdef_flag = true, decl_context = NORMAL;
5239 /* Look inside a declarator for the name being declared
5240 and get it as an IDENTIFIER_NODE, for an error message. */
5242 const struct c_declarator *decl = declarator;
5244 first_non_attr_kind = cdk_attrs;
5245 while (decl)
5246 switch (decl->kind)
5248 case cdk_array:
5249 loc = decl->id_loc;
5250 /* FALL THRU. */
5252 case cdk_function:
5253 case cdk_pointer:
5254 funcdef_syntax = (decl->kind == cdk_function);
5255 decl = decl->declarator;
5256 if (first_non_attr_kind == cdk_attrs)
5257 first_non_attr_kind = decl->kind;
5258 break;
5260 case cdk_attrs:
5261 decl = decl->declarator;
5262 break;
5264 case cdk_id:
5265 loc = decl->id_loc;
5266 if (decl->u.id)
5267 name = decl->u.id;
5268 if (first_non_attr_kind == cdk_attrs)
5269 first_non_attr_kind = decl->kind;
5270 decl = 0;
5271 break;
5273 default:
5274 gcc_unreachable ();
5276 if (name == 0)
5278 gcc_assert (decl_context == PARM
5279 || decl_context == TYPENAME
5280 || (decl_context == FIELD
5281 && declarator->kind == cdk_id));
5282 gcc_assert (!initialized);
5286 /* A function definition's declarator must have the form of
5287 a function declarator. */
5289 if (funcdef_flag && !funcdef_syntax)
5290 return 0;
5292 /* If this looks like a function definition, make it one,
5293 even if it occurs where parms are expected.
5294 Then store_parm_decls will reject it and not use it as a parm. */
5295 if (decl_context == NORMAL && !funcdef_flag && current_scope->parm_flag)
5296 decl_context = PARM;
5298 if (declspecs->deprecated_p && deprecated_state != DEPRECATED_SUPPRESS)
5299 warn_deprecated_use (declspecs->type, declspecs->decl_attr);
5301 if ((decl_context == NORMAL || decl_context == FIELD)
5302 && current_scope == file_scope
5303 && variably_modified_type_p (type, NULL_TREE))
5305 if (name)
5306 error_at (loc, "variably modified %qE at file scope", name);
5307 else
5308 error_at (loc, "variably modified field at file scope");
5309 type = integer_type_node;
5312 size_varies = C_TYPE_VARIABLE_SIZE (type) != 0;
5314 /* Diagnose defaulting to "int". */
5316 if (declspecs->default_int_p && !in_system_header_at (input_location))
5318 /* Issue a warning if this is an ISO C 99 program or if
5319 -Wreturn-type and this is a function, or if -Wimplicit;
5320 prefer the former warning since it is more explicit. */
5321 if ((warn_implicit_int || warn_return_type || flag_isoc99)
5322 && funcdef_flag)
5323 warn_about_return_type = 1;
5324 else
5326 if (name)
5327 warn_defaults_to (loc, flag_isoc99 ? 0 : OPT_Wimplicit_int,
5328 "type defaults to %<int%> in declaration "
5329 "of %qE", name);
5330 else
5331 warn_defaults_to (loc, flag_isoc99 ? 0 : OPT_Wimplicit_int,
5332 "type defaults to %<int%> in type name");
5336 /* Adjust the type if a bit-field is being declared,
5337 -funsigned-bitfields applied and the type is not explicitly
5338 "signed". */
5339 if (bitfield && !flag_signed_bitfields && !declspecs->explicit_signed_p
5340 && TREE_CODE (type) == INTEGER_TYPE)
5341 type = unsigned_type_for (type);
5343 /* Figure out the type qualifiers for the declaration. There are
5344 two ways a declaration can become qualified. One is something
5345 like `const int i' where the `const' is explicit. Another is
5346 something like `typedef const int CI; CI i' where the type of the
5347 declaration contains the `const'. A third possibility is that
5348 there is a type qualifier on the element type of a typedefed
5349 array type, in which case we should extract that qualifier so
5350 that c_apply_type_quals_to_decl receives the full list of
5351 qualifiers to work with (C90 is not entirely clear about whether
5352 duplicate qualifiers should be diagnosed in this case, but it
5353 seems most appropriate to do so). */
5354 element_type = strip_array_types (type);
5355 constp = declspecs->const_p + TYPE_READONLY (element_type);
5356 restrictp = declspecs->restrict_p + TYPE_RESTRICT (element_type);
5357 volatilep = declspecs->volatile_p + TYPE_VOLATILE (element_type);
5358 atomicp = declspecs->atomic_p + TYPE_ATOMIC (element_type);
5359 as1 = declspecs->address_space;
5360 as2 = TYPE_ADDR_SPACE (element_type);
5361 address_space = ADDR_SPACE_GENERIC_P (as1)? as2 : as1;
5363 if (constp > 1)
5364 pedwarn_c90 (loc, OPT_Wpedantic, "duplicate %<const%>");
5365 if (restrictp > 1)
5366 pedwarn_c90 (loc, OPT_Wpedantic, "duplicate %<restrict%>");
5367 if (volatilep > 1)
5368 pedwarn_c90 (loc, OPT_Wpedantic, "duplicate %<volatile%>");
5369 if (atomicp > 1)
5370 pedwarn_c90 (loc, OPT_Wpedantic, "duplicate %<_Atomic%>");
5372 if (!ADDR_SPACE_GENERIC_P (as1) && !ADDR_SPACE_GENERIC_P (as2) && as1 != as2)
5373 error_at (loc, "conflicting named address spaces (%s vs %s)",
5374 c_addr_space_name (as1), c_addr_space_name (as2));
5376 if ((TREE_CODE (type) == ARRAY_TYPE
5377 || first_non_attr_kind == cdk_array)
5378 && TYPE_QUALS (element_type))
5379 type = TYPE_MAIN_VARIANT (type);
5380 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
5381 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
5382 | (volatilep ? TYPE_QUAL_VOLATILE : 0)
5383 | (atomicp ? TYPE_QUAL_ATOMIC : 0)
5384 | ENCODE_QUAL_ADDR_SPACE (address_space));
5386 /* Applying the _Atomic qualifier to an array type (through the use
5387 of typedefs or typeof) must be detected here. If the qualifier
5388 is introduced later, any appearance of applying it to an array is
5389 actually applying it to an element of that array. */
5390 if (atomicp && TREE_CODE (type) == ARRAY_TYPE)
5391 error_at (loc, "%<_Atomic%>-qualified array type");
5393 /* Warn about storage classes that are invalid for certain
5394 kinds of declarations (parameters, typenames, etc.). */
5396 if (funcdef_flag
5397 && (threadp
5398 || storage_class == csc_auto
5399 || storage_class == csc_register
5400 || storage_class == csc_typedef))
5402 if (storage_class == csc_auto)
5403 pedwarn (loc,
5404 (current_scope == file_scope) ? 0 : OPT_Wpedantic,
5405 "function definition declared %<auto%>");
5406 if (storage_class == csc_register)
5407 error_at (loc, "function definition declared %<register%>");
5408 if (storage_class == csc_typedef)
5409 error_at (loc, "function definition declared %<typedef%>");
5410 if (threadp)
5411 error_at (loc, "function definition declared %qs",
5412 declspecs->thread_gnu_p ? "__thread" : "_Thread_local");
5413 threadp = false;
5414 if (storage_class == csc_auto
5415 || storage_class == csc_register
5416 || storage_class == csc_typedef)
5417 storage_class = csc_none;
5419 else if (decl_context != NORMAL && (storage_class != csc_none || threadp))
5421 if (decl_context == PARM && storage_class == csc_register)
5423 else
5425 switch (decl_context)
5427 case FIELD:
5428 if (name)
5429 error_at (loc, "storage class specified for structure "
5430 "field %qE", name);
5431 else
5432 error_at (loc, "storage class specified for structure field");
5433 break;
5434 case PARM:
5435 if (name)
5436 error_at (loc, "storage class specified for parameter %qE",
5437 name);
5438 else
5439 error_at (loc, "storage class specified for unnamed parameter");
5440 break;
5441 default:
5442 error_at (loc, "storage class specified for typename");
5443 break;
5445 storage_class = csc_none;
5446 threadp = false;
5449 else if (storage_class == csc_extern
5450 && initialized
5451 && !funcdef_flag)
5453 /* 'extern' with initialization is invalid if not at file scope. */
5454 if (current_scope == file_scope)
5456 /* It is fine to have 'extern const' when compiling at C
5457 and C++ intersection. */
5458 if (!(warn_cxx_compat && constp))
5459 warning_at (loc, 0, "%qE initialized and declared %<extern%>",
5460 name);
5462 else
5463 error_at (loc, "%qE has both %<extern%> and initializer", name);
5465 else if (current_scope == file_scope)
5467 if (storage_class == csc_auto)
5468 error_at (loc, "file-scope declaration of %qE specifies %<auto%>",
5469 name);
5470 if (pedantic && storage_class == csc_register)
5471 pedwarn (input_location, OPT_Wpedantic,
5472 "file-scope declaration of %qE specifies %<register%>", name);
5474 else
5476 if (storage_class == csc_extern && funcdef_flag)
5477 error_at (loc, "nested function %qE declared %<extern%>", name);
5478 else if (threadp && storage_class == csc_none)
5480 error_at (loc, "function-scope %qE implicitly auto and declared "
5481 "%qs", name,
5482 declspecs->thread_gnu_p ? "__thread" : "_Thread_local");
5483 threadp = false;
5487 /* Now figure out the structure of the declarator proper.
5488 Descend through it, creating more complex types, until we reach
5489 the declared identifier (or NULL_TREE, in an absolute declarator).
5490 At each stage we maintain an unqualified version of the type
5491 together with any qualifiers that should be applied to it with
5492 c_build_qualified_type; this way, array types including
5493 multidimensional array types are first built up in unqualified
5494 form and then the qualified form is created with
5495 TYPE_MAIN_VARIANT pointing to the unqualified form. */
5497 while (declarator && declarator->kind != cdk_id)
5499 if (type == error_mark_node)
5501 declarator = declarator->declarator;
5502 continue;
5505 /* Each level of DECLARATOR is either a cdk_array (for ...[..]),
5506 a cdk_pointer (for *...),
5507 a cdk_function (for ...(...)),
5508 a cdk_attrs (for nested attributes),
5509 or a cdk_id (for the name being declared
5510 or the place in an absolute declarator
5511 where the name was omitted).
5512 For the last case, we have just exited the loop.
5514 At this point, TYPE is the type of elements of an array,
5515 or for a function to return, or for a pointer to point to.
5516 After this sequence of ifs, TYPE is the type of the
5517 array or function or pointer, and DECLARATOR has had its
5518 outermost layer removed. */
5520 if (array_ptr_quals != TYPE_UNQUALIFIED
5521 || array_ptr_attrs != NULL_TREE
5522 || array_parm_static)
5524 /* Only the innermost declarator (making a parameter be of
5525 array type which is converted to pointer type)
5526 may have static or type qualifiers. */
5527 error_at (loc, "static or type qualifiers in non-parameter array declarator");
5528 array_ptr_quals = TYPE_UNQUALIFIED;
5529 array_ptr_attrs = NULL_TREE;
5530 array_parm_static = 0;
5533 switch (declarator->kind)
5535 case cdk_attrs:
5537 /* A declarator with embedded attributes. */
5538 tree attrs = declarator->u.attrs;
5539 const struct c_declarator *inner_decl;
5540 int attr_flags = 0;
5541 declarator = declarator->declarator;
5542 inner_decl = declarator;
5543 while (inner_decl->kind == cdk_attrs)
5544 inner_decl = inner_decl->declarator;
5545 if (inner_decl->kind == cdk_id)
5546 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
5547 else if (inner_decl->kind == cdk_function)
5548 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
5549 else if (inner_decl->kind == cdk_array)
5550 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
5551 returned_attrs = decl_attributes (&type,
5552 chainon (returned_attrs, attrs),
5553 attr_flags);
5554 break;
5556 case cdk_array:
5558 tree itype = NULL_TREE;
5559 tree size = declarator->u.array.dimen;
5560 /* The index is a signed object `sizetype' bits wide. */
5561 tree index_type = c_common_signed_type (sizetype);
5563 array_ptr_quals = declarator->u.array.quals;
5564 array_ptr_attrs = declarator->u.array.attrs;
5565 array_parm_static = declarator->u.array.static_p;
5566 array_parm_vla_unspec_p = declarator->u.array.vla_unspec_p;
5568 declarator = declarator->declarator;
5570 /* Check for some types that there cannot be arrays of. */
5572 if (VOID_TYPE_P (type))
5574 if (name)
5575 error_at (loc, "declaration of %qE as array of voids", name);
5576 else
5577 error_at (loc, "declaration of type name as array of voids");
5578 type = error_mark_node;
5581 if (TREE_CODE (type) == FUNCTION_TYPE)
5583 if (name)
5584 error_at (loc, "declaration of %qE as array of functions",
5585 name);
5586 else
5587 error_at (loc, "declaration of type name as array of "
5588 "functions");
5589 type = error_mark_node;
5592 if (pedantic && !in_system_header_at (input_location)
5593 && flexible_array_type_p (type))
5594 pedwarn (loc, OPT_Wpedantic,
5595 "invalid use of structure with flexible array member");
5597 if (size == error_mark_node)
5598 type = error_mark_node;
5600 if (type == error_mark_node)
5601 continue;
5603 /* If size was specified, set ITYPE to a range-type for
5604 that size. Otherwise, ITYPE remains null. finish_decl
5605 may figure it out from an initial value. */
5607 if (size)
5609 bool size_maybe_const = true;
5610 bool size_int_const = (TREE_CODE (size) == INTEGER_CST
5611 && !TREE_OVERFLOW (size));
5612 bool this_size_varies = false;
5614 /* Strip NON_LVALUE_EXPRs since we aren't using as an
5615 lvalue. */
5616 STRIP_TYPE_NOPS (size);
5618 if (!INTEGRAL_TYPE_P (TREE_TYPE (size)))
5620 if (name)
5621 error_at (loc, "size of array %qE has non-integer type",
5622 name);
5623 else
5624 error_at (loc,
5625 "size of unnamed array has non-integer type");
5626 size = integer_one_node;
5629 size = c_fully_fold (size, false, &size_maybe_const);
5631 if (pedantic && size_maybe_const && integer_zerop (size))
5633 if (name)
5634 pedwarn (loc, OPT_Wpedantic,
5635 "ISO C forbids zero-size array %qE", name);
5636 else
5637 pedwarn (loc, OPT_Wpedantic,
5638 "ISO C forbids zero-size array");
5641 if (TREE_CODE (size) == INTEGER_CST && size_maybe_const)
5643 constant_expression_warning (size);
5644 if (tree_int_cst_sgn (size) < 0)
5646 if (name)
5647 error_at (loc, "size of array %qE is negative", name);
5648 else
5649 error_at (loc, "size of unnamed array is negative");
5650 size = integer_one_node;
5652 /* Handle a size folded to an integer constant but
5653 not an integer constant expression. */
5654 if (!size_int_const)
5656 /* If this is a file scope declaration of an
5657 ordinary identifier, this is invalid code;
5658 diagnosing it here and not subsequently
5659 treating the type as variable-length avoids
5660 more confusing diagnostics later. */
5661 if ((decl_context == NORMAL || decl_context == FIELD)
5662 && current_scope == file_scope)
5663 pedwarn (input_location, 0,
5664 "variably modified %qE at file scope",
5665 name);
5666 else
5667 this_size_varies = size_varies = true;
5668 warn_variable_length_array (name, size);
5671 else if ((decl_context == NORMAL || decl_context == FIELD)
5672 && current_scope == file_scope)
5674 error_at (loc, "variably modified %qE at file scope", name);
5675 size = integer_one_node;
5677 else
5679 /* Make sure the array size remains visibly
5680 nonconstant even if it is (eg) a const variable
5681 with known value. */
5682 this_size_varies = size_varies = true;
5683 warn_variable_length_array (name, size);
5684 if (flag_sanitize & SANITIZE_VLA
5685 && decl_context == NORMAL
5686 && current_function_decl != NULL_TREE
5687 && !lookup_attribute ("no_sanitize_undefined",
5688 DECL_ATTRIBUTES
5689 (current_function_decl)))
5691 /* Evaluate the array size only once. */
5692 size = c_save_expr (size);
5693 size = c_fully_fold (size, false, NULL);
5694 size = fold_build2 (COMPOUND_EXPR, TREE_TYPE (size),
5695 ubsan_instrument_vla (loc, size),
5696 size);
5700 if (integer_zerop (size) && !this_size_varies)
5702 /* A zero-length array cannot be represented with
5703 an unsigned index type, which is what we'll
5704 get with build_index_type. Create an
5705 open-ended range instead. */
5706 itype = build_range_type (sizetype, size, NULL_TREE);
5708 else
5710 /* Arrange for the SAVE_EXPR on the inside of the
5711 MINUS_EXPR, which allows the -1 to get folded
5712 with the +1 that happens when building TYPE_SIZE. */
5713 if (size_varies)
5714 size = save_expr (size);
5715 if (this_size_varies && TREE_CODE (size) == INTEGER_CST)
5716 size = build2 (COMPOUND_EXPR, TREE_TYPE (size),
5717 integer_zero_node, size);
5719 /* Compute the maximum valid index, that is, size
5720 - 1. Do the calculation in index_type, so that
5721 if it is a variable the computations will be
5722 done in the proper mode. */
5723 itype = fold_build2_loc (loc, MINUS_EXPR, index_type,
5724 convert (index_type, size),
5725 convert (index_type,
5726 size_one_node));
5728 /* The above overflows when size does not fit
5729 in index_type.
5730 ??? While a size of INT_MAX+1 technically shouldn't
5731 cause an overflow (because we subtract 1), handling
5732 this case seems like an unnecessary complication. */
5733 if (TREE_CODE (size) == INTEGER_CST
5734 && !int_fits_type_p (size, index_type))
5736 if (name)
5737 error_at (loc, "size of array %qE is too large",
5738 name);
5739 else
5740 error_at (loc, "size of unnamed array is too large");
5741 type = error_mark_node;
5742 continue;
5745 itype = build_index_type (itype);
5747 if (this_size_varies)
5749 if (*expr)
5750 *expr = build2 (COMPOUND_EXPR, TREE_TYPE (size),
5751 *expr, size);
5752 else
5753 *expr = size;
5754 *expr_const_operands &= size_maybe_const;
5757 else if (decl_context == FIELD)
5759 bool flexible_array_member = false;
5760 if (array_parm_vla_unspec_p)
5761 /* Field names can in fact have function prototype
5762 scope so [*] is disallowed here through making
5763 the field variably modified, not through being
5764 something other than a declaration with function
5765 prototype scope. */
5766 size_varies = true;
5767 else
5769 const struct c_declarator *t = declarator;
5770 while (t->kind == cdk_attrs)
5771 t = t->declarator;
5772 flexible_array_member = (t->kind == cdk_id);
5774 if (flexible_array_member
5775 && !in_system_header_at (input_location))
5776 pedwarn_c90 (loc, OPT_Wpedantic, "ISO C90 does not "
5777 "support flexible array members");
5779 /* ISO C99 Flexible array members are effectively
5780 identical to GCC's zero-length array extension. */
5781 if (flexible_array_member || array_parm_vla_unspec_p)
5782 itype = build_range_type (sizetype, size_zero_node,
5783 NULL_TREE);
5785 else if (decl_context == PARM)
5787 if (array_parm_vla_unspec_p)
5789 itype = build_range_type (sizetype, size_zero_node, NULL_TREE);
5790 size_varies = true;
5793 else if (decl_context == TYPENAME)
5795 if (array_parm_vla_unspec_p)
5797 /* C99 6.7.5.2p4 */
5798 warning (0, "%<[*]%> not in a declaration");
5799 /* We use this to avoid messing up with incomplete
5800 array types of the same type, that would
5801 otherwise be modified below. */
5802 itype = build_range_type (sizetype, size_zero_node,
5803 NULL_TREE);
5804 size_varies = true;
5808 /* Complain about arrays of incomplete types. */
5809 if (!COMPLETE_TYPE_P (type))
5811 error_at (loc, "array type has incomplete element type");
5812 type = error_mark_node;
5814 else
5815 /* When itype is NULL, a shared incomplete array type is
5816 returned for all array of a given type. Elsewhere we
5817 make sure we don't complete that type before copying
5818 it, but here we want to make sure we don't ever
5819 modify the shared type, so we gcc_assert (itype)
5820 below. */
5822 addr_space_t as = DECODE_QUAL_ADDR_SPACE (type_quals);
5823 if (!ADDR_SPACE_GENERIC_P (as) && as != TYPE_ADDR_SPACE (type))
5824 type = build_qualified_type (type,
5825 ENCODE_QUAL_ADDR_SPACE (as));
5827 type = build_array_type (type, itype);
5830 if (type != error_mark_node)
5832 if (size_varies)
5834 /* It is ok to modify type here even if itype is
5835 NULL: if size_varies, we're in a
5836 multi-dimensional array and the inner type has
5837 variable size, so the enclosing shared array type
5838 must too. */
5839 if (size && TREE_CODE (size) == INTEGER_CST)
5840 type
5841 = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
5842 C_TYPE_VARIABLE_SIZE (type) = 1;
5845 /* The GCC extension for zero-length arrays differs from
5846 ISO flexible array members in that sizeof yields
5847 zero. */
5848 if (size && integer_zerop (size))
5850 gcc_assert (itype);
5851 type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
5852 TYPE_SIZE (type) = bitsize_zero_node;
5853 TYPE_SIZE_UNIT (type) = size_zero_node;
5854 SET_TYPE_STRUCTURAL_EQUALITY (type);
5856 if (array_parm_vla_unspec_p)
5858 gcc_assert (itype);
5859 /* The type is complete. C99 6.7.5.2p4 */
5860 type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
5861 TYPE_SIZE (type) = bitsize_zero_node;
5862 TYPE_SIZE_UNIT (type) = size_zero_node;
5863 SET_TYPE_STRUCTURAL_EQUALITY (type);
5867 if (decl_context != PARM
5868 && (array_ptr_quals != TYPE_UNQUALIFIED
5869 || array_ptr_attrs != NULL_TREE
5870 || array_parm_static))
5872 error_at (loc, "static or type qualifiers in non-parameter array declarator");
5873 array_ptr_quals = TYPE_UNQUALIFIED;
5874 array_ptr_attrs = NULL_TREE;
5875 array_parm_static = 0;
5877 break;
5879 case cdk_function:
5881 /* Say it's a definition only for the declarator closest
5882 to the identifier, apart possibly from some
5883 attributes. */
5884 bool really_funcdef = false;
5885 tree arg_types;
5886 if (funcdef_flag)
5888 const struct c_declarator *t = declarator->declarator;
5889 while (t->kind == cdk_attrs)
5890 t = t->declarator;
5891 really_funcdef = (t->kind == cdk_id);
5894 /* Declaring a function type. Make sure we have a valid
5895 type for the function to return. */
5896 if (type == error_mark_node)
5897 continue;
5899 size_varies = false;
5901 /* Warn about some types functions can't return. */
5902 if (TREE_CODE (type) == FUNCTION_TYPE)
5904 if (name)
5905 error_at (loc, "%qE declared as function returning a "
5906 "function", name);
5907 else
5908 error_at (loc, "type name declared as function "
5909 "returning a function");
5910 type = integer_type_node;
5912 if (TREE_CODE (type) == ARRAY_TYPE)
5914 if (name)
5915 error_at (loc, "%qE declared as function returning an array",
5916 name);
5917 else
5918 error_at (loc, "type name declared as function returning "
5919 "an array");
5920 type = integer_type_node;
5922 errmsg = targetm.invalid_return_type (type);
5923 if (errmsg)
5925 error (errmsg);
5926 type = integer_type_node;
5929 /* Construct the function type and go to the next
5930 inner layer of declarator. */
5931 arg_info = declarator->u.arg_info;
5932 arg_types = grokparms (arg_info, really_funcdef);
5934 /* Type qualifiers before the return type of the function
5935 qualify the return type, not the function type. */
5936 if (type_quals)
5938 /* Type qualifiers on a function return type are
5939 normally permitted by the standard but have no
5940 effect, so give a warning at -Wreturn-type.
5941 Qualifiers on a void return type are banned on
5942 function definitions in ISO C; GCC used to used
5943 them for noreturn functions. */
5944 if (VOID_TYPE_P (type) && really_funcdef)
5945 pedwarn (loc, 0,
5946 "function definition has qualified void return type");
5947 else
5948 warning_at (loc, OPT_Wignored_qualifiers,
5949 "type qualifiers ignored on function return type");
5951 type = c_build_qualified_type (type, type_quals);
5953 type_quals = TYPE_UNQUALIFIED;
5955 type = build_function_type (type, arg_types);
5956 declarator = declarator->declarator;
5958 /* Set the TYPE_CONTEXTs for each tagged type which is local to
5959 the formal parameter list of this FUNCTION_TYPE to point to
5960 the FUNCTION_TYPE node itself. */
5962 c_arg_tag *tag;
5963 unsigned ix;
5965 FOR_EACH_VEC_SAFE_ELT_REVERSE (arg_info->tags, ix, tag)
5966 TYPE_CONTEXT (tag->type) = type;
5968 break;
5970 case cdk_pointer:
5972 /* Merge any constancy or volatility into the target type
5973 for the pointer. */
5974 if ((type_quals & TYPE_QUAL_ATOMIC)
5975 && TREE_CODE (type) == FUNCTION_TYPE)
5977 error_at (loc,
5978 "%<_Atomic%>-qualified function type");
5979 type_quals &= ~TYPE_QUAL_ATOMIC;
5981 else if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
5982 && type_quals)
5983 pedwarn (loc, OPT_Wpedantic,
5984 "ISO C forbids qualified function types");
5985 if (type_quals)
5986 type = c_build_qualified_type (type, type_quals);
5987 size_varies = false;
5989 /* When the pointed-to type involves components of variable size,
5990 care must be taken to ensure that the size evaluation code is
5991 emitted early enough to dominate all the possible later uses
5992 and late enough for the variables on which it depends to have
5993 been assigned.
5995 This is expected to happen automatically when the pointed-to
5996 type has a name/declaration of it's own, but special attention
5997 is required if the type is anonymous.
5999 We handle the NORMAL and FIELD contexts here by attaching an
6000 artificial TYPE_DECL to such pointed-to type. This forces the
6001 sizes evaluation at a safe point and ensures it is not deferred
6002 until e.g. within a deeper conditional context.
6004 We expect nothing to be needed here for PARM or TYPENAME.
6005 Pushing a TYPE_DECL at this point for TYPENAME would actually
6006 be incorrect, as we might be in the middle of an expression
6007 with side effects on the pointed-to type size "arguments" prior
6008 to the pointer declaration point and the fake TYPE_DECL in the
6009 enclosing context would force the size evaluation prior to the
6010 side effects. */
6012 if (!TYPE_NAME (type)
6013 && (decl_context == NORMAL || decl_context == FIELD)
6014 && variably_modified_type_p (type, NULL_TREE))
6016 tree decl = build_decl (loc, TYPE_DECL, NULL_TREE, type);
6017 DECL_ARTIFICIAL (decl) = 1;
6018 pushdecl (decl);
6019 finish_decl (decl, loc, NULL_TREE, NULL_TREE, NULL_TREE);
6020 TYPE_NAME (type) = decl;
6023 type = c_build_pointer_type (type);
6025 /* Process type qualifiers (such as const or volatile)
6026 that were given inside the `*'. */
6027 type_quals = declarator->u.pointer_quals;
6029 declarator = declarator->declarator;
6030 break;
6032 default:
6033 gcc_unreachable ();
6036 *decl_attrs = chainon (returned_attrs, *decl_attrs);
6038 /* Now TYPE has the actual type, apart from any qualifiers in
6039 TYPE_QUALS. */
6041 /* Warn about address space used for things other than static memory or
6042 pointers. */
6043 address_space = DECODE_QUAL_ADDR_SPACE (type_quals);
6044 if (!ADDR_SPACE_GENERIC_P (address_space))
6046 if (decl_context == NORMAL)
6048 switch (storage_class)
6050 case csc_auto:
6051 error ("%qs combined with %<auto%> qualifier for %qE",
6052 c_addr_space_name (address_space), name);
6053 break;
6054 case csc_register:
6055 error ("%qs combined with %<register%> qualifier for %qE",
6056 c_addr_space_name (address_space), name);
6057 break;
6058 case csc_none:
6059 if (current_function_scope)
6061 error ("%qs specified for auto variable %qE",
6062 c_addr_space_name (address_space), name);
6063 break;
6065 break;
6066 case csc_static:
6067 case csc_extern:
6068 case csc_typedef:
6069 break;
6070 default:
6071 gcc_unreachable ();
6074 else if (decl_context == PARM && TREE_CODE (type) != ARRAY_TYPE)
6076 if (name)
6077 error ("%qs specified for parameter %qE",
6078 c_addr_space_name (address_space), name);
6079 else
6080 error ("%qs specified for unnamed parameter",
6081 c_addr_space_name (address_space));
6083 else if (decl_context == FIELD)
6085 if (name)
6086 error ("%qs specified for structure field %qE",
6087 c_addr_space_name (address_space), name);
6088 else
6089 error ("%qs specified for structure field",
6090 c_addr_space_name (address_space));
6094 /* Check the type and width of a bit-field. */
6095 if (bitfield)
6097 check_bitfield_type_and_width (&type, width, name);
6098 /* C11 makes it implementation-defined (6.7.2.1#5) whether
6099 atomic types are permitted for bit-fields; we have no code to
6100 make bit-field accesses atomic, so disallow them. */
6101 if (type_quals & TYPE_QUAL_ATOMIC)
6103 if (name)
6104 error ("bit-field %qE has atomic type", name);
6105 else
6106 error ("bit-field has atomic type");
6107 type_quals &= ~TYPE_QUAL_ATOMIC;
6111 /* Reject invalid uses of _Alignas. */
6112 if (declspecs->alignas_p)
6114 if (storage_class == csc_typedef)
6115 error_at (loc, "alignment specified for typedef %qE", name);
6116 else if (storage_class == csc_register)
6117 error_at (loc, "alignment specified for %<register%> object %qE",
6118 name);
6119 else if (decl_context == PARM)
6121 if (name)
6122 error_at (loc, "alignment specified for parameter %qE", name);
6123 else
6124 error_at (loc, "alignment specified for unnamed parameter");
6126 else if (bitfield)
6128 if (name)
6129 error_at (loc, "alignment specified for bit-field %qE", name);
6130 else
6131 error_at (loc, "alignment specified for unnamed bit-field");
6133 else if (TREE_CODE (type) == FUNCTION_TYPE)
6134 error_at (loc, "alignment specified for function %qE", name);
6135 else if (declspecs->align_log != -1)
6137 alignas_align = 1U << declspecs->align_log;
6138 if (alignas_align < min_align_of_type (type))
6140 if (name)
6141 error_at (loc, "%<_Alignas%> specifiers cannot reduce "
6142 "alignment of %qE", name);
6143 else
6144 error_at (loc, "%<_Alignas%> specifiers cannot reduce "
6145 "alignment of unnamed field");
6146 alignas_align = 0;
6151 /* Did array size calculations overflow or does the array cover more
6152 than half of the address-space? */
6153 if (TREE_CODE (type) == ARRAY_TYPE
6154 && COMPLETE_TYPE_P (type)
6155 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
6156 && ! valid_constant_size_p (TYPE_SIZE_UNIT (type)))
6158 if (name)
6159 error_at (loc, "size of array %qE is too large", name);
6160 else
6161 error_at (loc, "size of unnamed array is too large");
6162 /* If we proceed with the array type as it is, we'll eventually
6163 crash in tree_to_[su]hwi(). */
6164 type = error_mark_node;
6167 /* If this is declaring a typedef name, return a TYPE_DECL. */
6169 if (storage_class == csc_typedef)
6171 tree decl;
6172 if ((type_quals & TYPE_QUAL_ATOMIC)
6173 && TREE_CODE (type) == FUNCTION_TYPE)
6175 error_at (loc,
6176 "%<_Atomic%>-qualified function type");
6177 type_quals &= ~TYPE_QUAL_ATOMIC;
6179 else if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
6180 && type_quals)
6181 pedwarn (loc, OPT_Wpedantic,
6182 "ISO C forbids qualified function types");
6183 if (type_quals)
6184 type = c_build_qualified_type (type, type_quals);
6185 decl = build_decl (declarator->id_loc,
6186 TYPE_DECL, declarator->u.id, type);
6187 if (declspecs->explicit_signed_p)
6188 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
6189 if (declspecs->inline_p)
6190 pedwarn (loc, 0,"typedef %q+D declared %<inline%>", decl);
6191 if (declspecs->noreturn_p)
6192 pedwarn (loc, 0,"typedef %q+D declared %<_Noreturn%>", decl);
6194 if (warn_cxx_compat && declarator->u.id != NULL_TREE)
6196 struct c_binding *b = I_TAG_BINDING (declarator->u.id);
6198 if (b != NULL
6199 && b->decl != NULL_TREE
6200 && (B_IN_CURRENT_SCOPE (b)
6201 || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
6202 && TYPE_MAIN_VARIANT (b->decl) != TYPE_MAIN_VARIANT (type))
6204 warning_at (declarator->id_loc, OPT_Wc___compat,
6205 ("using %qD as both a typedef and a tag is "
6206 "invalid in C++"),
6207 decl);
6208 if (b->locus != UNKNOWN_LOCATION)
6209 inform (b->locus, "originally defined here");
6213 return decl;
6216 /* If this is a type name (such as, in a cast or sizeof),
6217 compute the type and return it now. */
6219 if (decl_context == TYPENAME)
6221 /* Note that the grammar rejects storage classes in typenames
6222 and fields. */
6223 gcc_assert (storage_class == csc_none && !threadp
6224 && !declspecs->inline_p && !declspecs->noreturn_p);
6225 if ((type_quals & TYPE_QUAL_ATOMIC)
6226 && TREE_CODE (type) == FUNCTION_TYPE)
6228 error_at (loc,
6229 "%<_Atomic%>-qualified function type");
6230 type_quals &= ~TYPE_QUAL_ATOMIC;
6232 else if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
6233 && type_quals)
6234 pedwarn (loc, OPT_Wpedantic,
6235 "ISO C forbids const or volatile function types");
6236 if (type_quals)
6237 type = c_build_qualified_type (type, type_quals);
6238 return type;
6241 if (pedantic && decl_context == FIELD
6242 && variably_modified_type_p (type, NULL_TREE))
6244 /* C99 6.7.2.1p8 */
6245 pedwarn (loc, OPT_Wpedantic, "a member of a structure or union cannot "
6246 "have a variably modified type");
6249 /* Aside from typedefs and type names (handle above),
6250 `void' at top level (not within pointer)
6251 is allowed only in public variables.
6252 We don't complain about parms either, but that is because
6253 a better error message can be made later. */
6255 if (VOID_TYPE_P (type) && decl_context != PARM
6256 && !((decl_context != FIELD && TREE_CODE (type) != FUNCTION_TYPE)
6257 && (storage_class == csc_extern
6258 || (current_scope == file_scope
6259 && !(storage_class == csc_static
6260 || storage_class == csc_register)))))
6262 error_at (loc, "variable or field %qE declared void", name);
6263 type = integer_type_node;
6266 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
6267 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
6270 tree decl;
6272 if (decl_context == PARM)
6274 tree promoted_type;
6275 bool array_parameter_p = false;
6277 /* A parameter declared as an array of T is really a pointer to T.
6278 One declared as a function is really a pointer to a function. */
6280 if (TREE_CODE (type) == ARRAY_TYPE)
6282 /* Transfer const-ness of array into that of type pointed to. */
6283 type = TREE_TYPE (type);
6284 if (type_quals)
6285 type = c_build_qualified_type (type, type_quals);
6286 type = c_build_pointer_type (type);
6287 type_quals = array_ptr_quals;
6288 if (type_quals)
6289 type = c_build_qualified_type (type, type_quals);
6291 /* We don't yet implement attributes in this context. */
6292 if (array_ptr_attrs != NULL_TREE)
6293 warning_at (loc, OPT_Wattributes,
6294 "attributes in parameter array declarator ignored");
6296 size_varies = false;
6297 array_parameter_p = true;
6299 else if (TREE_CODE (type) == FUNCTION_TYPE)
6301 if (type_quals & TYPE_QUAL_ATOMIC)
6303 error_at (loc,
6304 "%<_Atomic%>-qualified function type");
6305 type_quals &= ~TYPE_QUAL_ATOMIC;
6307 else if (type_quals)
6308 pedwarn (loc, OPT_Wpedantic,
6309 "ISO C forbids qualified function types");
6310 if (type_quals)
6311 type = c_build_qualified_type (type, type_quals);
6312 type = c_build_pointer_type (type);
6313 type_quals = TYPE_UNQUALIFIED;
6315 else if (type_quals)
6316 type = c_build_qualified_type (type, type_quals);
6318 decl = build_decl (declarator->id_loc,
6319 PARM_DECL, declarator->u.id, type);
6320 if (size_varies)
6321 C_DECL_VARIABLE_SIZE (decl) = 1;
6322 C_ARRAY_PARAMETER (decl) = array_parameter_p;
6324 /* Compute the type actually passed in the parmlist,
6325 for the case where there is no prototype.
6326 (For example, shorts and chars are passed as ints.)
6327 When there is a prototype, this is overridden later. */
6329 if (type == error_mark_node)
6330 promoted_type = type;
6331 else
6332 promoted_type = c_type_promotes_to (type);
6334 DECL_ARG_TYPE (decl) = promoted_type;
6335 if (declspecs->inline_p)
6336 pedwarn (loc, 0, "parameter %q+D declared %<inline%>", decl);
6337 if (declspecs->noreturn_p)
6338 pedwarn (loc, 0, "parameter %q+D declared %<_Noreturn%>", decl);
6340 else if (decl_context == FIELD)
6342 /* Note that the grammar rejects storage classes in typenames
6343 and fields. */
6344 gcc_assert (storage_class == csc_none && !threadp
6345 && !declspecs->inline_p && !declspecs->noreturn_p);
6347 /* Structure field. It may not be a function. */
6349 if (TREE_CODE (type) == FUNCTION_TYPE)
6351 error_at (loc, "field %qE declared as a function", name);
6352 type = build_pointer_type (type);
6354 else if (TREE_CODE (type) != ERROR_MARK
6355 && !COMPLETE_OR_UNBOUND_ARRAY_TYPE_P (type))
6357 if (name)
6358 error_at (loc, "field %qE has incomplete type", name);
6359 else
6360 error_at (loc, "unnamed field has incomplete type");
6361 type = error_mark_node;
6363 type = c_build_qualified_type (type, type_quals);
6364 decl = build_decl (declarator->id_loc,
6365 FIELD_DECL, declarator->u.id, type);
6366 DECL_NONADDRESSABLE_P (decl) = bitfield;
6367 if (bitfield && !declarator->u.id)
6368 TREE_NO_WARNING (decl) = 1;
6370 if (size_varies)
6371 C_DECL_VARIABLE_SIZE (decl) = 1;
6373 else if (TREE_CODE (type) == FUNCTION_TYPE)
6375 if (storage_class == csc_register || threadp)
6377 error_at (loc, "invalid storage class for function %qE", name);
6379 else if (current_scope != file_scope)
6381 /* Function declaration not at file scope. Storage
6382 classes other than `extern' are not allowed, C99
6383 6.7.1p5, and `extern' makes no difference. However,
6384 GCC allows 'auto', perhaps with 'inline', to support
6385 nested functions. */
6386 if (storage_class == csc_auto)
6387 pedwarn (loc, OPT_Wpedantic,
6388 "invalid storage class for function %qE", name);
6389 else if (storage_class == csc_static)
6391 error_at (loc, "invalid storage class for function %qE", name);
6392 if (funcdef_flag)
6393 storage_class = declspecs->storage_class = csc_none;
6394 else
6395 return 0;
6399 decl = build_decl (declarator->id_loc,
6400 FUNCTION_DECL, declarator->u.id, type);
6401 decl = build_decl_attribute_variant (decl, decl_attr);
6403 if (type_quals & TYPE_QUAL_ATOMIC)
6405 error_at (loc,
6406 "%<_Atomic%>-qualified function type");
6407 type_quals &= ~TYPE_QUAL_ATOMIC;
6409 else if (pedantic && type_quals && !DECL_IN_SYSTEM_HEADER (decl))
6410 pedwarn (loc, OPT_Wpedantic,
6411 "ISO C forbids qualified function types");
6413 /* Every function declaration is an external reference
6414 (DECL_EXTERNAL) except for those which are not at file
6415 scope and are explicitly declared "auto". This is
6416 forbidden by standard C (C99 6.7.1p5) and is interpreted by
6417 GCC to signify a forward declaration of a nested function. */
6418 if (storage_class == csc_auto && current_scope != file_scope)
6419 DECL_EXTERNAL (decl) = 0;
6420 /* In C99, a function which is declared 'inline' with 'extern'
6421 is not an external reference (which is confusing). It
6422 means that the later definition of the function must be output
6423 in this file, C99 6.7.4p6. In GNU C89, a function declared
6424 'extern inline' is an external reference. */
6425 else if (declspecs->inline_p && storage_class != csc_static)
6426 DECL_EXTERNAL (decl) = ((storage_class == csc_extern)
6427 == flag_gnu89_inline);
6428 else
6429 DECL_EXTERNAL (decl) = !initialized;
6431 /* Record absence of global scope for `static' or `auto'. */
6432 TREE_PUBLIC (decl)
6433 = !(storage_class == csc_static || storage_class == csc_auto);
6435 /* For a function definition, record the argument information
6436 block where store_parm_decls will look for it. */
6437 if (funcdef_flag)
6438 current_function_arg_info = arg_info;
6440 if (declspecs->default_int_p)
6441 C_FUNCTION_IMPLICIT_INT (decl) = 1;
6443 /* Record presence of `inline' and `_Noreturn', if it is
6444 reasonable. */
6445 if (flag_hosted && MAIN_NAME_P (declarator->u.id))
6447 if (declspecs->inline_p)
6448 pedwarn (loc, 0, "cannot inline function %<main%>");
6449 if (declspecs->noreturn_p)
6450 pedwarn (loc, 0, "%<main%> declared %<_Noreturn%>");
6452 else
6454 if (declspecs->inline_p)
6455 /* Record that the function is declared `inline'. */
6456 DECL_DECLARED_INLINE_P (decl) = 1;
6457 if (declspecs->noreturn_p)
6459 if (flag_isoc99)
6460 pedwarn_c99 (loc, OPT_Wpedantic,
6461 "ISO C99 does not support %<_Noreturn%>");
6462 else
6463 pedwarn_c99 (loc, OPT_Wpedantic,
6464 "ISO C90 does not support %<_Noreturn%>");
6465 TREE_THIS_VOLATILE (decl) = 1;
6469 else
6471 /* It's a variable. */
6472 /* An uninitialized decl with `extern' is a reference. */
6473 int extern_ref = !initialized && storage_class == csc_extern;
6475 type = c_build_qualified_type (type, type_quals);
6477 /* C99 6.2.2p7: It is invalid (compile-time undefined
6478 behavior) to create an 'extern' declaration for a
6479 variable if there is a global declaration that is
6480 'static' and the global declaration is not visible.
6481 (If the static declaration _is_ currently visible,
6482 the 'extern' declaration is taken to refer to that decl.) */
6483 if (extern_ref && current_scope != file_scope)
6485 tree global_decl = identifier_global_value (declarator->u.id);
6486 tree visible_decl = lookup_name (declarator->u.id);
6488 if (global_decl
6489 && global_decl != visible_decl
6490 && TREE_CODE (global_decl) == VAR_DECL
6491 && !TREE_PUBLIC (global_decl))
6492 error_at (loc, "variable previously declared %<static%> "
6493 "redeclared %<extern%>");
6496 decl = build_decl (declarator->id_loc,
6497 VAR_DECL, declarator->u.id, type);
6498 if (size_varies)
6499 C_DECL_VARIABLE_SIZE (decl) = 1;
6501 if (declspecs->inline_p)
6502 pedwarn (loc, 0, "variable %q+D declared %<inline%>", decl);
6503 if (declspecs->noreturn_p)
6504 pedwarn (loc, 0, "variable %q+D declared %<_Noreturn%>", decl);
6506 /* At file scope, an initialized extern declaration may follow
6507 a static declaration. In that case, DECL_EXTERNAL will be
6508 reset later in start_decl. */
6509 DECL_EXTERNAL (decl) = (storage_class == csc_extern);
6511 /* At file scope, the presence of a `static' or `register' storage
6512 class specifier, or the absence of all storage class specifiers
6513 makes this declaration a definition (perhaps tentative). Also,
6514 the absence of `static' makes it public. */
6515 if (current_scope == file_scope)
6517 TREE_PUBLIC (decl) = storage_class != csc_static;
6518 TREE_STATIC (decl) = !extern_ref;
6520 /* Not at file scope, only `static' makes a static definition. */
6521 else
6523 TREE_STATIC (decl) = (storage_class == csc_static);
6524 TREE_PUBLIC (decl) = extern_ref;
6527 if (threadp)
6528 set_decl_tls_model (decl, decl_default_tls_model (decl));
6531 if ((storage_class == csc_extern
6532 || (storage_class == csc_none
6533 && TREE_CODE (type) == FUNCTION_TYPE
6534 && !funcdef_flag))
6535 && variably_modified_type_p (type, NULL_TREE))
6537 /* C99 6.7.5.2p2 */
6538 if (TREE_CODE (type) == FUNCTION_TYPE)
6539 error_at (loc, "non-nested function with variably modified type");
6540 else
6541 error_at (loc, "object with variably modified type must have "
6542 "no linkage");
6545 /* Record `register' declaration for warnings on &
6546 and in case doing stupid register allocation. */
6548 if (storage_class == csc_register)
6550 C_DECL_REGISTER (decl) = 1;
6551 DECL_REGISTER (decl) = 1;
6554 /* Record constancy and volatility. */
6555 c_apply_type_quals_to_decl (type_quals, decl);
6557 /* Apply _Alignas specifiers. */
6558 if (alignas_align)
6560 DECL_ALIGN (decl) = alignas_align * BITS_PER_UNIT;
6561 DECL_USER_ALIGN (decl) = 1;
6564 /* If a type has volatile components, it should be stored in memory.
6565 Otherwise, the fact that those components are volatile
6566 will be ignored, and would even crash the compiler.
6567 Of course, this only makes sense on VAR,PARM, and RESULT decl's. */
6568 if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl))
6569 && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
6570 || TREE_CODE (decl) == RESULT_DECL))
6572 /* It is not an error for a structure with volatile fields to
6573 be declared register, but reset DECL_REGISTER since it
6574 cannot actually go in a register. */
6575 int was_reg = C_DECL_REGISTER (decl);
6576 C_DECL_REGISTER (decl) = 0;
6577 DECL_REGISTER (decl) = 0;
6578 c_mark_addressable (decl);
6579 C_DECL_REGISTER (decl) = was_reg;
6582 /* This is the earliest point at which we might know the assembler
6583 name of a variable. Thus, if it's known before this, die horribly. */
6584 gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl));
6586 if (warn_cxx_compat
6587 && TREE_CODE (decl) == VAR_DECL
6588 && TREE_PUBLIC (decl)
6589 && TREE_STATIC (decl)
6590 && (TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
6591 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
6592 || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
6593 && TYPE_NAME (TREE_TYPE (decl)) == NULL_TREE)
6594 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wc___compat,
6595 ("non-local variable %qD with anonymous type is "
6596 "questionable in C++"),
6597 decl);
6599 return decl;
6603 /* Decode the parameter-list info for a function type or function definition.
6604 The argument is the value returned by `get_parm_info' (or made in c-parse.c
6605 if there is an identifier list instead of a parameter decl list).
6606 These two functions are separate because when a function returns
6607 or receives functions then each is called multiple times but the order
6608 of calls is different. The last call to `grokparms' is always the one
6609 that contains the formal parameter names of a function definition.
6611 Return a list of arg types to use in the FUNCTION_TYPE for this function.
6613 FUNCDEF_FLAG is true for a function definition, false for
6614 a mere declaration. A nonempty identifier-list gets an error message
6615 when FUNCDEF_FLAG is false. */
6617 static tree
6618 grokparms (struct c_arg_info *arg_info, bool funcdef_flag)
6620 tree arg_types = arg_info->types;
6622 if (funcdef_flag && arg_info->had_vla_unspec)
6624 /* A function definition isn't function prototype scope C99 6.2.1p4. */
6625 /* C99 6.7.5.2p4 */
6626 error ("%<[*]%> not allowed in other than function prototype scope");
6629 if (arg_types == 0 && !funcdef_flag
6630 && !in_system_header_at (input_location))
6631 warning (OPT_Wstrict_prototypes,
6632 "function declaration isn%'t a prototype");
6634 if (arg_types == error_mark_node)
6635 return 0; /* don't set TYPE_ARG_TYPES in this case */
6637 else if (arg_types && TREE_CODE (TREE_VALUE (arg_types)) == IDENTIFIER_NODE)
6639 if (!funcdef_flag)
6641 pedwarn (input_location, 0, "parameter names (without types) in function declaration");
6642 arg_info->parms = NULL_TREE;
6644 else
6645 arg_info->parms = arg_info->types;
6647 arg_info->types = 0;
6648 return 0;
6650 else
6652 tree parm, type, typelt;
6653 unsigned int parmno;
6654 const char *errmsg;
6656 /* If there is a parameter of incomplete type in a definition,
6657 this is an error. In a declaration this is valid, and a
6658 struct or union type may be completed later, before any calls
6659 or definition of the function. In the case where the tag was
6660 first declared within the parameter list, a warning has
6661 already been given. If a parameter has void type, then
6662 however the function cannot be defined or called, so
6663 warn. */
6665 for (parm = arg_info->parms, typelt = arg_types, parmno = 1;
6666 parm;
6667 parm = DECL_CHAIN (parm), typelt = TREE_CHAIN (typelt), parmno++)
6669 type = TREE_VALUE (typelt);
6670 if (type == error_mark_node)
6671 continue;
6673 if (!COMPLETE_TYPE_P (type))
6675 if (funcdef_flag)
6677 if (DECL_NAME (parm))
6678 error_at (input_location,
6679 "parameter %u (%q+D) has incomplete type",
6680 parmno, parm);
6681 else
6682 error_at (DECL_SOURCE_LOCATION (parm),
6683 "parameter %u has incomplete type",
6684 parmno);
6686 TREE_VALUE (typelt) = error_mark_node;
6687 TREE_TYPE (parm) = error_mark_node;
6688 arg_types = NULL_TREE;
6690 else if (VOID_TYPE_P (type))
6692 if (DECL_NAME (parm))
6693 warning_at (input_location, 0,
6694 "parameter %u (%q+D) has void type",
6695 parmno, parm);
6696 else
6697 warning_at (DECL_SOURCE_LOCATION (parm), 0,
6698 "parameter %u has void type",
6699 parmno);
6703 errmsg = targetm.invalid_parameter_type (type);
6704 if (errmsg)
6706 error (errmsg);
6707 TREE_VALUE (typelt) = error_mark_node;
6708 TREE_TYPE (parm) = error_mark_node;
6709 arg_types = NULL_TREE;
6712 if (DECL_NAME (parm) && TREE_USED (parm))
6713 warn_if_shadowing (parm);
6715 return arg_types;
6719 /* Allocate and initialize a c_arg_info structure from the parser's
6720 obstack. */
6722 struct c_arg_info *
6723 build_arg_info (void)
6725 struct c_arg_info *ret = XOBNEW (&parser_obstack, struct c_arg_info);
6726 ret->parms = NULL_TREE;
6727 ret->tags = NULL;
6728 ret->types = NULL_TREE;
6729 ret->others = NULL_TREE;
6730 ret->pending_sizes = NULL;
6731 ret->had_vla_unspec = 0;
6732 return ret;
6735 /* Take apart the current scope and return a c_arg_info structure with
6736 info on a parameter list just parsed.
6738 This structure is later fed to 'grokparms' and 'store_parm_decls'.
6740 ELLIPSIS being true means the argument list ended in '...' so don't
6741 append a sentinel (void_list_node) to the end of the type-list.
6743 EXPR is NULL or an expression that needs to be evaluated for the
6744 side effects of array size expressions in the parameters. */
6746 struct c_arg_info *
6747 get_parm_info (bool ellipsis, tree expr)
6749 struct c_binding *b = current_scope->bindings;
6750 struct c_arg_info *arg_info = build_arg_info ();
6752 tree parms = 0;
6753 vec<c_arg_tag, va_gc> *tags = NULL;
6754 tree types = 0;
6755 tree others = 0;
6757 static bool explained_incomplete_types = false;
6758 bool gave_void_only_once_err = false;
6760 arg_info->had_vla_unspec = current_scope->had_vla_unspec;
6762 /* The bindings in this scope must not get put into a block.
6763 We will take care of deleting the binding nodes. */
6764 current_scope->bindings = 0;
6766 /* This function is only called if there was *something* on the
6767 parameter list. */
6768 gcc_assert (b);
6770 /* A parameter list consisting solely of 'void' indicates that the
6771 function takes no arguments. But if the 'void' is qualified
6772 (by 'const' or 'volatile'), or has a storage class specifier
6773 ('register'), then the behavior is undefined; issue an error.
6774 Typedefs for 'void' are OK (see DR#157). */
6775 if (b->prev == 0 /* one binding */
6776 && TREE_CODE (b->decl) == PARM_DECL /* which is a parameter */
6777 && !DECL_NAME (b->decl) /* anonymous */
6778 && VOID_TYPE_P (TREE_TYPE (b->decl))) /* of void type */
6780 if (TYPE_QUALS (TREE_TYPE (b->decl)) != TYPE_UNQUALIFIED
6781 || C_DECL_REGISTER (b->decl))
6782 error ("%<void%> as only parameter may not be qualified");
6784 /* There cannot be an ellipsis. */
6785 if (ellipsis)
6786 error ("%<void%> must be the only parameter");
6788 arg_info->types = void_list_node;
6789 return arg_info;
6792 if (!ellipsis)
6793 types = void_list_node;
6795 /* Break up the bindings list into parms, tags, types, and others;
6796 apply sanity checks; purge the name-to-decl bindings. */
6797 while (b)
6799 tree decl = b->decl;
6800 tree type = TREE_TYPE (decl);
6801 c_arg_tag tag;
6802 const char *keyword;
6804 switch (TREE_CODE (decl))
6806 case PARM_DECL:
6807 if (b->id)
6809 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
6810 I_SYMBOL_BINDING (b->id) = b->shadowed;
6813 /* Check for forward decls that never got their actual decl. */
6814 if (TREE_ASM_WRITTEN (decl))
6815 error ("parameter %q+D has just a forward declaration", decl);
6816 /* Check for (..., void, ...) and issue an error. */
6817 else if (VOID_TYPE_P (type) && !DECL_NAME (decl))
6819 if (!gave_void_only_once_err)
6821 error ("%<void%> must be the only parameter");
6822 gave_void_only_once_err = true;
6825 else
6827 /* Valid parameter, add it to the list. */
6828 DECL_CHAIN (decl) = parms;
6829 parms = decl;
6831 /* Since there is a prototype, args are passed in their
6832 declared types. The back end may override this later. */
6833 DECL_ARG_TYPE (decl) = type;
6834 types = tree_cons (0, type, types);
6836 break;
6838 case ENUMERAL_TYPE: keyword = "enum"; goto tag;
6839 case UNION_TYPE: keyword = "union"; goto tag;
6840 case RECORD_TYPE: keyword = "struct"; goto tag;
6841 tag:
6842 /* Types may not have tag-names, in which case the type
6843 appears in the bindings list with b->id NULL. */
6844 if (b->id)
6846 gcc_assert (I_TAG_BINDING (b->id) == b);
6847 I_TAG_BINDING (b->id) = b->shadowed;
6850 /* Warn about any struct, union or enum tags defined in a
6851 parameter list. The scope of such types is limited to
6852 the parameter list, which is rarely if ever desirable
6853 (it's impossible to call such a function with type-
6854 correct arguments). An anonymous union parm type is
6855 meaningful as a GNU extension, so don't warn for that. */
6856 if (TREE_CODE (decl) != UNION_TYPE || b->id != 0)
6858 if (b->id)
6859 /* The %s will be one of 'struct', 'union', or 'enum'. */
6860 warning (0, "%<%s %E%> declared inside parameter list",
6861 keyword, b->id);
6862 else
6863 /* The %s will be one of 'struct', 'union', or 'enum'. */
6864 warning (0, "anonymous %s declared inside parameter list",
6865 keyword);
6867 if (!explained_incomplete_types)
6869 warning (0, "its scope is only this definition or declaration,"
6870 " which is probably not what you want");
6871 explained_incomplete_types = true;
6875 tag.id = b->id;
6876 tag.type = decl;
6877 vec_safe_push (tags, tag);
6878 break;
6880 case CONST_DECL:
6881 case TYPE_DECL:
6882 case FUNCTION_DECL:
6883 /* CONST_DECLs appear here when we have an embedded enum,
6884 and TYPE_DECLs appear here when we have an embedded struct
6885 or union. No warnings for this - we already warned about the
6886 type itself. FUNCTION_DECLs appear when there is an implicit
6887 function declaration in the parameter list. */
6889 /* When we reinsert this decl in the function body, we need
6890 to reconstruct whether it was marked as nested. */
6891 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
6892 ? b->nested
6893 : !b->nested);
6894 DECL_CHAIN (decl) = others;
6895 others = decl;
6896 /* fall through */
6898 case ERROR_MARK:
6899 /* error_mark_node appears here when we have an undeclared
6900 variable. Just throw it away. */
6901 if (b->id)
6903 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
6904 I_SYMBOL_BINDING (b->id) = b->shadowed;
6906 break;
6908 /* Other things that might be encountered. */
6909 case LABEL_DECL:
6910 case VAR_DECL:
6911 default:
6912 gcc_unreachable ();
6915 b = free_binding_and_advance (b);
6918 arg_info->parms = parms;
6919 arg_info->tags = tags;
6920 arg_info->types = types;
6921 arg_info->others = others;
6922 arg_info->pending_sizes = expr;
6923 return arg_info;
6926 /* Get the struct, enum or union (CODE says which) with tag NAME.
6927 Define the tag as a forward-reference with location LOC if it is
6928 not defined. Return a c_typespec structure for the type
6929 specifier. */
6931 struct c_typespec
6932 parser_xref_tag (location_t loc, enum tree_code code, tree name)
6934 struct c_typespec ret;
6935 tree ref;
6936 location_t refloc;
6938 ret.expr = NULL_TREE;
6939 ret.expr_const_operands = true;
6941 /* If a cross reference is requested, look up the type
6942 already defined for this tag and return it. */
6944 ref = lookup_tag (code, name, 0, &refloc);
6945 /* If this is the right type of tag, return what we found.
6946 (This reference will be shadowed by shadow_tag later if appropriate.)
6947 If this is the wrong type of tag, do not return it. If it was the
6948 wrong type in the same scope, we will have had an error
6949 message already; if in a different scope and declaring
6950 a name, pending_xref_error will give an error message; but if in a
6951 different scope and not declaring a name, this tag should
6952 shadow the previous declaration of a different type of tag, and
6953 this would not work properly if we return the reference found.
6954 (For example, with "struct foo" in an outer scope, "union foo;"
6955 must shadow that tag with a new one of union type.) */
6956 ret.kind = (ref ? ctsk_tagref : ctsk_tagfirstref);
6957 if (ref && TREE_CODE (ref) == code)
6959 if (C_TYPE_DEFINED_IN_STRUCT (ref)
6960 && loc != UNKNOWN_LOCATION
6961 && warn_cxx_compat)
6963 switch (code)
6965 case ENUMERAL_TYPE:
6966 warning_at (loc, OPT_Wc___compat,
6967 ("enum type defined in struct or union "
6968 "is not visible in C++"));
6969 inform (refloc, "enum type defined here");
6970 break;
6971 case RECORD_TYPE:
6972 warning_at (loc, OPT_Wc___compat,
6973 ("struct defined in struct or union "
6974 "is not visible in C++"));
6975 inform (refloc, "struct defined here");
6976 break;
6977 case UNION_TYPE:
6978 warning_at (loc, OPT_Wc___compat,
6979 ("union defined in struct or union "
6980 "is not visible in C++"));
6981 inform (refloc, "union defined here");
6982 break;
6983 default:
6984 gcc_unreachable();
6988 ret.spec = ref;
6989 return ret;
6992 /* If no such tag is yet defined, create a forward-reference node
6993 and record it as the "definition".
6994 When a real declaration of this type is found,
6995 the forward-reference will be altered into a real type. */
6997 ref = make_node (code);
6998 if (code == ENUMERAL_TYPE)
7000 /* Give the type a default layout like unsigned int
7001 to avoid crashing if it does not get defined. */
7002 SET_TYPE_MODE (ref, TYPE_MODE (unsigned_type_node));
7003 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
7004 TYPE_USER_ALIGN (ref) = 0;
7005 TYPE_UNSIGNED (ref) = 1;
7006 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
7007 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
7008 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
7011 pushtag (loc, name, ref);
7013 ret.spec = ref;
7014 return ret;
7017 /* Get the struct, enum or union (CODE says which) with tag NAME.
7018 Define the tag as a forward-reference if it is not defined.
7019 Return a tree for the type. */
7021 tree
7022 xref_tag (enum tree_code code, tree name)
7024 return parser_xref_tag (input_location, code, name).spec;
7027 /* Make sure that the tag NAME is defined *in the current scope*
7028 at least as a forward reference.
7029 LOC is the location of the struct's definition.
7030 CODE says which kind of tag NAME ought to be.
7032 This stores the current value of the file static STRUCT_PARSE_INFO
7033 in *ENCLOSING_STRUCT_PARSE_INFO, and points STRUCT_PARSE_INFO at a
7034 new c_struct_parse_info structure. The old value of
7035 STRUCT_PARSE_INFO is restored in finish_struct. */
7037 tree
7038 start_struct (location_t loc, enum tree_code code, tree name,
7039 struct c_struct_parse_info **enclosing_struct_parse_info)
7041 /* If there is already a tag defined at this scope
7042 (as a forward reference), just return it. */
7044 tree ref = NULL_TREE;
7045 location_t refloc = UNKNOWN_LOCATION;
7047 if (name != NULL_TREE)
7048 ref = lookup_tag (code, name, 1, &refloc);
7049 if (ref && TREE_CODE (ref) == code)
7051 if (TYPE_SIZE (ref))
7053 if (code == UNION_TYPE)
7054 error_at (loc, "redefinition of %<union %E%>", name);
7055 else
7056 error_at (loc, "redefinition of %<struct %E%>", name);
7057 if (refloc != UNKNOWN_LOCATION)
7058 inform (refloc, "originally defined here");
7059 /* Don't create structures using a name already in use. */
7060 ref = NULL_TREE;
7062 else if (C_TYPE_BEING_DEFINED (ref))
7064 if (code == UNION_TYPE)
7065 error_at (loc, "nested redefinition of %<union %E%>", name);
7066 else
7067 error_at (loc, "nested redefinition of %<struct %E%>", name);
7068 /* Don't bother to report "originally defined here" for a
7069 nested redefinition; the original definition should be
7070 obvious. */
7071 /* Don't create structures that contain themselves. */
7072 ref = NULL_TREE;
7076 /* Otherwise create a forward-reference just so the tag is in scope. */
7078 if (ref == NULL_TREE || TREE_CODE (ref) != code)
7080 ref = make_node (code);
7081 pushtag (loc, name, ref);
7084 C_TYPE_BEING_DEFINED (ref) = 1;
7085 TYPE_PACKED (ref) = flag_pack_struct;
7087 *enclosing_struct_parse_info = struct_parse_info;
7088 struct_parse_info = XNEW (struct c_struct_parse_info);
7089 struct_parse_info->struct_types.create (0);
7090 struct_parse_info->fields.create (0);
7091 struct_parse_info->typedefs_seen.create (0);
7093 /* FIXME: This will issue a warning for a use of a type defined
7094 within a statement expr used within sizeof, et. al. This is not
7095 terribly serious as C++ doesn't permit statement exprs within
7096 sizeof anyhow. */
7097 if (warn_cxx_compat && (in_sizeof || in_typeof || in_alignof))
7098 warning_at (loc, OPT_Wc___compat,
7099 "defining type in %qs expression is invalid in C++",
7100 (in_sizeof
7101 ? "sizeof"
7102 : (in_typeof ? "typeof" : "alignof")));
7104 return ref;
7107 /* Process the specs, declarator and width (NULL if omitted)
7108 of a structure component, returning a FIELD_DECL node.
7109 WIDTH is non-NULL for bit-fields only, and is an INTEGER_CST node.
7110 DECL_ATTRS is as for grokdeclarator.
7112 LOC is the location of the structure component.
7114 This is done during the parsing of the struct declaration.
7115 The FIELD_DECL nodes are chained together and the lot of them
7116 are ultimately passed to `build_struct' to make the RECORD_TYPE node. */
7118 tree
7119 grokfield (location_t loc,
7120 struct c_declarator *declarator, struct c_declspecs *declspecs,
7121 tree width, tree *decl_attrs)
7123 tree value;
7125 if (declarator->kind == cdk_id && declarator->u.id == NULL_TREE
7126 && width == NULL_TREE)
7128 /* This is an unnamed decl.
7130 If we have something of the form "union { list } ;" then this
7131 is the anonymous union extension. Similarly for struct.
7133 If this is something of the form "struct foo;", then
7134 If MS or Plan 9 extensions are enabled, this is handled as
7135 an anonymous struct.
7136 Otherwise this is a forward declaration of a structure tag.
7138 If this is something of the form "foo;" and foo is a TYPE_DECL, then
7139 If foo names a structure or union without a tag, then this
7140 is an anonymous struct (this is permitted by C11).
7141 If MS or Plan 9 extensions are enabled and foo names a
7142 structure, then again this is an anonymous struct.
7143 Otherwise this is an error.
7145 Oh what a horrid tangled web we weave. I wonder if MS consciously
7146 took this from Plan 9 or if it was an accident of implementation
7147 that took root before someone noticed the bug... */
7149 tree type = declspecs->type;
7150 bool type_ok = (TREE_CODE (type) == RECORD_TYPE
7151 || TREE_CODE (type) == UNION_TYPE);
7152 bool ok = false;
7154 if (type_ok
7155 && (flag_ms_extensions
7156 || flag_plan9_extensions
7157 || !declspecs->typedef_p))
7159 if (flag_ms_extensions || flag_plan9_extensions)
7160 ok = true;
7161 else if (TYPE_NAME (type) == NULL)
7162 ok = true;
7163 else
7164 ok = false;
7166 if (!ok)
7168 pedwarn (loc, 0, "declaration does not declare anything");
7169 return NULL_TREE;
7171 if (flag_isoc99)
7172 pedwarn_c99 (loc, OPT_Wpedantic,
7173 "ISO C99 doesn%'t support unnamed structs/unions");
7174 else
7175 pedwarn_c99 (loc, OPT_Wpedantic,
7176 "ISO C90 doesn%'t support unnamed structs/unions");
7179 value = grokdeclarator (declarator, declspecs, FIELD, false,
7180 width ? &width : NULL, decl_attrs, NULL, NULL,
7181 DEPRECATED_NORMAL);
7183 finish_decl (value, loc, NULL_TREE, NULL_TREE, NULL_TREE);
7184 DECL_INITIAL (value) = width;
7186 if (warn_cxx_compat && DECL_NAME (value) != NULL_TREE)
7188 /* If we currently have a binding for this field, set the
7189 in_struct field in the binding, so that we warn about lookups
7190 which find it. */
7191 struct c_binding *b = I_SYMBOL_BINDING (DECL_NAME (value));
7192 if (b != NULL)
7194 /* If the in_struct field is not yet set, push it on a list
7195 to be cleared when this struct is finished. */
7196 if (!b->in_struct)
7198 struct_parse_info->fields.safe_push (b);
7199 b->in_struct = 1;
7204 return value;
7207 /* Subroutine of detect_field_duplicates: return whether X and Y,
7208 which are both fields in the same struct, have duplicate field
7209 names. */
7211 static bool
7212 is_duplicate_field (tree x, tree y)
7214 if (DECL_NAME (x) != NULL_TREE && DECL_NAME (x) == DECL_NAME (y))
7215 return true;
7217 /* When using -fplan9-extensions, an anonymous field whose name is a
7218 typedef can duplicate a field name. */
7219 if (flag_plan9_extensions
7220 && (DECL_NAME (x) == NULL_TREE || DECL_NAME (y) == NULL_TREE))
7222 tree xt, xn, yt, yn;
7224 xt = TREE_TYPE (x);
7225 if (DECL_NAME (x) != NULL_TREE)
7226 xn = DECL_NAME (x);
7227 else if ((TREE_CODE (xt) == RECORD_TYPE || TREE_CODE (xt) == UNION_TYPE)
7228 && TYPE_NAME (xt) != NULL_TREE
7229 && TREE_CODE (TYPE_NAME (xt)) == TYPE_DECL)
7230 xn = DECL_NAME (TYPE_NAME (xt));
7231 else
7232 xn = NULL_TREE;
7234 yt = TREE_TYPE (y);
7235 if (DECL_NAME (y) != NULL_TREE)
7236 yn = DECL_NAME (y);
7237 else if ((TREE_CODE (yt) == RECORD_TYPE || TREE_CODE (yt) == UNION_TYPE)
7238 && TYPE_NAME (yt) != NULL_TREE
7239 && TREE_CODE (TYPE_NAME (yt)) == TYPE_DECL)
7240 yn = DECL_NAME (TYPE_NAME (yt));
7241 else
7242 yn = NULL_TREE;
7244 if (xn != NULL_TREE && xn == yn)
7245 return true;
7248 return false;
7251 /* Subroutine of detect_field_duplicates: add the fields of FIELDLIST
7252 to HTAB, giving errors for any duplicates. */
7254 static void
7255 detect_field_duplicates_hash (tree fieldlist,
7256 hash_table<pointer_hash <tree_node> > *htab)
7258 tree x, y;
7259 tree_node **slot;
7261 for (x = fieldlist; x ; x = DECL_CHAIN (x))
7262 if ((y = DECL_NAME (x)) != 0)
7264 slot = htab->find_slot (y, INSERT);
7265 if (*slot)
7267 error ("duplicate member %q+D", x);
7268 DECL_NAME (x) = NULL_TREE;
7270 *slot = y;
7272 else if (TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
7273 || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE)
7275 detect_field_duplicates_hash (TYPE_FIELDS (TREE_TYPE (x)), htab);
7277 /* When using -fplan9-extensions, an anonymous field whose
7278 name is a typedef can duplicate a field name. */
7279 if (flag_plan9_extensions
7280 && TYPE_NAME (TREE_TYPE (x)) != NULL_TREE
7281 && TREE_CODE (TYPE_NAME (TREE_TYPE (x))) == TYPE_DECL)
7283 tree xn = DECL_NAME (TYPE_NAME (TREE_TYPE (x)));
7284 slot = htab->find_slot (xn, INSERT);
7285 if (*slot)
7286 error ("duplicate member %q+D", TYPE_NAME (TREE_TYPE (x)));
7287 *slot = xn;
7292 /* Generate an error for any duplicate field names in FIELDLIST. Munge
7293 the list such that this does not present a problem later. */
7295 static void
7296 detect_field_duplicates (tree fieldlist)
7298 tree x, y;
7299 int timeout = 10;
7301 /* If the struct is the list of instance variables of an Objective-C
7302 class, then we need to check all the instance variables of
7303 superclasses when checking for duplicates (since you can't have
7304 an instance variable in a subclass with the same name as an
7305 instance variable in a superclass). We pass on this job to the
7306 Objective-C compiler. objc_detect_field_duplicates() will return
7307 false if we are not checking the list of instance variables and
7308 the C frontend should proceed with the standard field duplicate
7309 checks. If we are checking the list of instance variables, the
7310 ObjC frontend will do the check, emit the errors if needed, and
7311 then return true. */
7312 if (c_dialect_objc ())
7313 if (objc_detect_field_duplicates (false))
7314 return;
7316 /* First, see if there are more than "a few" fields.
7317 This is trivially true if there are zero or one fields. */
7318 if (!fieldlist || !DECL_CHAIN (fieldlist))
7319 return;
7320 x = fieldlist;
7321 do {
7322 timeout--;
7323 if (DECL_NAME (x) == NULL_TREE
7324 && (TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
7325 || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE))
7326 timeout = 0;
7327 x = DECL_CHAIN (x);
7328 } while (timeout > 0 && x);
7330 /* If there were "few" fields and no anonymous structures or unions,
7331 avoid the overhead of allocating a hash table. Instead just do
7332 the nested traversal thing. */
7333 if (timeout > 0)
7335 for (x = DECL_CHAIN (fieldlist); x; x = DECL_CHAIN (x))
7336 /* When using -fplan9-extensions, we can have duplicates
7337 between typedef names and fields. */
7338 if (DECL_NAME (x)
7339 || (flag_plan9_extensions
7340 && DECL_NAME (x) == NULL_TREE
7341 && (TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
7342 || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE)
7343 && TYPE_NAME (TREE_TYPE (x)) != NULL_TREE
7344 && TREE_CODE (TYPE_NAME (TREE_TYPE (x))) == TYPE_DECL))
7346 for (y = fieldlist; y != x; y = TREE_CHAIN (y))
7347 if (is_duplicate_field (y, x))
7349 error ("duplicate member %q+D", x);
7350 DECL_NAME (x) = NULL_TREE;
7354 else
7356 hash_table<pointer_hash <tree_node> > htab (37);
7357 detect_field_duplicates_hash (fieldlist, &htab);
7361 /* Finish up struct info used by -Wc++-compat. */
7363 static void
7364 warn_cxx_compat_finish_struct (tree fieldlist)
7366 unsigned int ix;
7367 tree x;
7368 struct c_binding *b;
7370 /* Set the C_TYPE_DEFINED_IN_STRUCT flag for each type defined in
7371 the current struct. We do this now at the end of the struct
7372 because the flag is used to issue visibility warnings, and we
7373 only want to issue those warnings if the type is referenced
7374 outside of the struct declaration. */
7375 FOR_EACH_VEC_ELT (struct_parse_info->struct_types, ix, x)
7376 C_TYPE_DEFINED_IN_STRUCT (x) = 1;
7378 /* The TYPEDEFS_SEEN field of STRUCT_PARSE_INFO is a list of
7379 typedefs used when declaring fields in this struct. If the name
7380 of any of the fields is also a typedef name then the struct would
7381 not parse in C++, because the C++ lookup rules say that the
7382 typedef name would be looked up in the context of the struct, and
7383 would thus be the field rather than the typedef. */
7384 if (!struct_parse_info->typedefs_seen.is_empty ()
7385 && fieldlist != NULL_TREE)
7387 /* Use a hash_set<tree> using the name of the typedef. We can use
7388 a hash_set<tree> because identifiers are interned. */
7389 hash_set<tree> tset;
7391 FOR_EACH_VEC_ELT (struct_parse_info->typedefs_seen, ix, x)
7392 tset.add (DECL_NAME (x));
7394 for (x = fieldlist; x != NULL_TREE; x = DECL_CHAIN (x))
7396 if (DECL_NAME (x) != NULL_TREE
7397 && tset.contains (DECL_NAME (x)))
7399 warning_at (DECL_SOURCE_LOCATION (x), OPT_Wc___compat,
7400 ("using %qD as both field and typedef name is "
7401 "invalid in C++"),
7403 /* FIXME: It would be nice to report the location where
7404 the typedef name is used. */
7409 /* For each field which has a binding and which was not defined in
7410 an enclosing struct, clear the in_struct field. */
7411 FOR_EACH_VEC_ELT (struct_parse_info->fields, ix, b)
7412 b->in_struct = 0;
7415 /* Fill in the fields of a RECORD_TYPE or UNION_TYPE node, T.
7416 LOC is the location of the RECORD_TYPE or UNION_TYPE's definition.
7417 FIELDLIST is a chain of FIELD_DECL nodes for the fields.
7418 ATTRIBUTES are attributes to be applied to the structure.
7420 ENCLOSING_STRUCT_PARSE_INFO is the value of STRUCT_PARSE_INFO when
7421 the struct was started. */
7423 tree
7424 finish_struct (location_t loc, tree t, tree fieldlist, tree attributes,
7425 struct c_struct_parse_info *enclosing_struct_parse_info)
7427 tree x;
7428 bool toplevel = file_scope == current_scope;
7429 int saw_named_field;
7431 /* If this type was previously laid out as a forward reference,
7432 make sure we lay it out again. */
7434 TYPE_SIZE (t) = 0;
7436 decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
7438 if (pedantic)
7440 for (x = fieldlist; x; x = DECL_CHAIN (x))
7442 if (DECL_NAME (x) != 0)
7443 break;
7444 if (flag_isoc11
7445 && (TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
7446 || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE))
7447 break;
7450 if (x == 0)
7452 if (TREE_CODE (t) == UNION_TYPE)
7454 if (fieldlist)
7455 pedwarn (loc, OPT_Wpedantic, "union has no named members");
7456 else
7457 pedwarn (loc, OPT_Wpedantic, "union has no members");
7459 else
7461 if (fieldlist)
7462 pedwarn (loc, OPT_Wpedantic, "struct has no named members");
7463 else
7464 pedwarn (loc, OPT_Wpedantic, "struct has no members");
7469 /* Install struct as DECL_CONTEXT of each field decl.
7470 Also process specified field sizes, found in the DECL_INITIAL,
7471 storing 0 there after the type has been changed to precision equal
7472 to its width, rather than the precision of the specified standard
7473 type. (Correct layout requires the original type to have been preserved
7474 until now.) */
7476 saw_named_field = 0;
7477 for (x = fieldlist; x; x = DECL_CHAIN (x))
7479 if (TREE_TYPE (x) == error_mark_node)
7480 continue;
7482 DECL_CONTEXT (x) = t;
7484 /* If any field is const, the structure type is pseudo-const. */
7485 if (TREE_READONLY (x))
7486 C_TYPE_FIELDS_READONLY (t) = 1;
7487 else
7489 /* A field that is pseudo-const makes the structure likewise. */
7490 tree t1 = strip_array_types (TREE_TYPE (x));
7491 if ((TREE_CODE (t1) == RECORD_TYPE || TREE_CODE (t1) == UNION_TYPE)
7492 && C_TYPE_FIELDS_READONLY (t1))
7493 C_TYPE_FIELDS_READONLY (t) = 1;
7496 /* Any field that is volatile means variables of this type must be
7497 treated in some ways as volatile. */
7498 if (TREE_THIS_VOLATILE (x))
7499 C_TYPE_FIELDS_VOLATILE (t) = 1;
7501 /* Any field of nominal variable size implies structure is too. */
7502 if (C_DECL_VARIABLE_SIZE (x))
7503 C_TYPE_VARIABLE_SIZE (t) = 1;
7505 if (DECL_INITIAL (x))
7507 unsigned HOST_WIDE_INT width = tree_to_uhwi (DECL_INITIAL (x));
7508 DECL_SIZE (x) = bitsize_int (width);
7509 DECL_BIT_FIELD (x) = 1;
7510 SET_DECL_C_BIT_FIELD (x);
7513 if (TYPE_PACKED (t)
7514 && (DECL_BIT_FIELD (x)
7515 || TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT))
7516 DECL_PACKED (x) = 1;
7518 /* Detect flexible array member in an invalid context. */
7519 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
7520 && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
7521 && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
7522 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
7524 if (TREE_CODE (t) == UNION_TYPE)
7526 error_at (DECL_SOURCE_LOCATION (x),
7527 "flexible array member in union");
7528 TREE_TYPE (x) = error_mark_node;
7530 else if (DECL_CHAIN (x) != NULL_TREE)
7532 error_at (DECL_SOURCE_LOCATION (x),
7533 "flexible array member not at end of struct");
7534 TREE_TYPE (x) = error_mark_node;
7536 else if (!saw_named_field)
7538 error_at (DECL_SOURCE_LOCATION (x),
7539 "flexible array member in otherwise empty struct");
7540 TREE_TYPE (x) = error_mark_node;
7544 if (pedantic && TREE_CODE (t) == RECORD_TYPE
7545 && flexible_array_type_p (TREE_TYPE (x)))
7546 pedwarn (DECL_SOURCE_LOCATION (x), OPT_Wpedantic,
7547 "invalid use of structure with flexible array member");
7549 if (DECL_NAME (x)
7550 || TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
7551 || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE)
7552 saw_named_field = 1;
7555 detect_field_duplicates (fieldlist);
7557 /* Now we have the nearly final fieldlist. Record it,
7558 then lay out the structure or union (including the fields). */
7560 TYPE_FIELDS (t) = fieldlist;
7562 layout_type (t);
7564 if (TYPE_SIZE_UNIT (t)
7565 && TREE_CODE (TYPE_SIZE_UNIT (t)) == INTEGER_CST
7566 && !TREE_OVERFLOW (TYPE_SIZE_UNIT (t))
7567 && !valid_constant_size_p (TYPE_SIZE_UNIT (t)))
7568 error ("type %qT is too large", t);
7570 /* Give bit-fields their proper types. */
7572 tree *fieldlistp = &fieldlist;
7573 while (*fieldlistp)
7574 if (TREE_CODE (*fieldlistp) == FIELD_DECL && DECL_INITIAL (*fieldlistp)
7575 && TREE_TYPE (*fieldlistp) != error_mark_node)
7577 unsigned HOST_WIDE_INT width
7578 = tree_to_uhwi (DECL_INITIAL (*fieldlistp));
7579 tree type = TREE_TYPE (*fieldlistp);
7580 if (width != TYPE_PRECISION (type))
7582 TREE_TYPE (*fieldlistp)
7583 = c_build_bitfield_integer_type (width, TYPE_UNSIGNED (type));
7584 DECL_MODE (*fieldlistp) = TYPE_MODE (TREE_TYPE (*fieldlistp));
7586 DECL_INITIAL (*fieldlistp) = 0;
7588 else
7589 fieldlistp = &DECL_CHAIN (*fieldlistp);
7592 /* Now we have the truly final field list.
7593 Store it in this type and in the variants. */
7595 TYPE_FIELDS (t) = fieldlist;
7597 /* If there are lots of fields, sort so we can look through them fast.
7598 We arbitrarily consider 16 or more elts to be "a lot". */
7601 int len = 0;
7603 for (x = fieldlist; x; x = DECL_CHAIN (x))
7605 if (len > 15 || DECL_NAME (x) == NULL)
7606 break;
7607 len += 1;
7610 if (len > 15)
7612 tree *field_array;
7613 struct lang_type *space;
7614 struct sorted_fields_type *space2;
7616 len += list_length (x);
7618 /* Use the same allocation policy here that make_node uses, to
7619 ensure that this lives as long as the rest of the struct decl.
7620 All decls in an inline function need to be saved. */
7622 space = ggc_cleared_alloc<struct lang_type> ();
7623 space2 = (sorted_fields_type *) ggc_internal_alloc
7624 (sizeof (struct sorted_fields_type) + len * sizeof (tree));
7626 len = 0;
7627 space->s = space2;
7628 field_array = &space2->elts[0];
7629 for (x = fieldlist; x; x = DECL_CHAIN (x))
7631 field_array[len++] = x;
7633 /* If there is anonymous struct or union, break out of the loop. */
7634 if (DECL_NAME (x) == NULL)
7635 break;
7637 /* Found no anonymous struct/union. Add the TYPE_LANG_SPECIFIC. */
7638 if (x == NULL)
7640 TYPE_LANG_SPECIFIC (t) = space;
7641 TYPE_LANG_SPECIFIC (t)->s->len = len;
7642 field_array = TYPE_LANG_SPECIFIC (t)->s->elts;
7643 qsort (field_array, len, sizeof (tree), field_decl_cmp);
7648 for (x = TYPE_MAIN_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
7650 TYPE_FIELDS (x) = TYPE_FIELDS (t);
7651 TYPE_LANG_SPECIFIC (x) = TYPE_LANG_SPECIFIC (t);
7652 C_TYPE_FIELDS_READONLY (x) = C_TYPE_FIELDS_READONLY (t);
7653 C_TYPE_FIELDS_VOLATILE (x) = C_TYPE_FIELDS_VOLATILE (t);
7654 C_TYPE_VARIABLE_SIZE (x) = C_TYPE_VARIABLE_SIZE (t);
7657 /* If this was supposed to be a transparent union, but we can't
7658 make it one, warn and turn off the flag. */
7659 if (TREE_CODE (t) == UNION_TYPE
7660 && TYPE_TRANSPARENT_AGGR (t)
7661 && (!TYPE_FIELDS (t) || TYPE_MODE (t) != DECL_MODE (TYPE_FIELDS (t))))
7663 TYPE_TRANSPARENT_AGGR (t) = 0;
7664 warning_at (loc, 0, "union cannot be made transparent");
7667 /* If this structure or union completes the type of any previous
7668 variable declaration, lay it out and output its rtl. */
7669 for (x = C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t));
7671 x = TREE_CHAIN (x))
7673 tree decl = TREE_VALUE (x);
7674 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
7675 layout_array_type (TREE_TYPE (decl));
7676 if (TREE_CODE (decl) != TYPE_DECL)
7678 layout_decl (decl, 0);
7679 if (c_dialect_objc ())
7680 objc_check_decl (decl);
7681 rest_of_decl_compilation (decl, toplevel, 0);
7684 C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t)) = 0;
7686 /* Update type location to the one of the definition, instead of e.g.
7687 a forward declaration. */
7688 if (TYPE_STUB_DECL (t))
7689 DECL_SOURCE_LOCATION (TYPE_STUB_DECL (t)) = loc;
7691 /* Finish debugging output for this type. */
7692 rest_of_type_compilation (t, toplevel);
7694 /* If we're inside a function proper, i.e. not file-scope and not still
7695 parsing parameters, then arrange for the size of a variable sized type
7696 to be bound now. */
7697 if (building_stmt_list_p () && variably_modified_type_p (t, NULL_TREE))
7698 add_stmt (build_stmt (loc,
7699 DECL_EXPR, build_decl (loc, TYPE_DECL, NULL, t)));
7701 if (warn_cxx_compat)
7702 warn_cxx_compat_finish_struct (fieldlist);
7704 struct_parse_info->struct_types.release ();
7705 struct_parse_info->fields.release ();
7706 struct_parse_info->typedefs_seen.release ();
7707 XDELETE (struct_parse_info);
7709 struct_parse_info = enclosing_struct_parse_info;
7711 /* If this struct is defined inside a struct, add it to
7712 struct_types. */
7713 if (warn_cxx_compat
7714 && struct_parse_info != NULL
7715 && !in_sizeof && !in_typeof && !in_alignof)
7716 struct_parse_info->struct_types.safe_push (t);
7718 return t;
7721 /* Lay out the type T, and its element type, and so on. */
7723 static void
7724 layout_array_type (tree t)
7726 if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
7727 layout_array_type (TREE_TYPE (t));
7728 layout_type (t);
7731 /* Begin compiling the definition of an enumeration type.
7732 NAME is its name (or null if anonymous).
7733 LOC is the enum's location.
7734 Returns the type object, as yet incomplete.
7735 Also records info about it so that build_enumerator
7736 may be used to declare the individual values as they are read. */
7738 tree
7739 start_enum (location_t loc, struct c_enum_contents *the_enum, tree name)
7741 tree enumtype = NULL_TREE;
7742 location_t enumloc = UNKNOWN_LOCATION;
7744 /* If this is the real definition for a previous forward reference,
7745 fill in the contents in the same object that used to be the
7746 forward reference. */
7748 if (name != NULL_TREE)
7749 enumtype = lookup_tag (ENUMERAL_TYPE, name, 1, &enumloc);
7751 if (enumtype == 0 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
7753 enumtype = make_node (ENUMERAL_TYPE);
7754 pushtag (loc, name, enumtype);
7757 if (C_TYPE_BEING_DEFINED (enumtype))
7758 error_at (loc, "nested redefinition of %<enum %E%>", name);
7760 C_TYPE_BEING_DEFINED (enumtype) = 1;
7762 if (TYPE_VALUES (enumtype) != 0)
7764 /* This enum is a named one that has been declared already. */
7765 error_at (loc, "redeclaration of %<enum %E%>", name);
7766 if (enumloc != UNKNOWN_LOCATION)
7767 inform (enumloc, "originally defined here");
7769 /* Completely replace its old definition.
7770 The old enumerators remain defined, however. */
7771 TYPE_VALUES (enumtype) = 0;
7774 the_enum->enum_next_value = integer_zero_node;
7775 the_enum->enum_overflow = 0;
7777 if (flag_short_enums)
7778 TYPE_PACKED (enumtype) = 1;
7780 /* FIXME: This will issue a warning for a use of a type defined
7781 within sizeof in a statement expr. This is not terribly serious
7782 as C++ doesn't permit statement exprs within sizeof anyhow. */
7783 if (warn_cxx_compat && (in_sizeof || in_typeof || in_alignof))
7784 warning_at (loc, OPT_Wc___compat,
7785 "defining type in %qs expression is invalid in C++",
7786 (in_sizeof
7787 ? "sizeof"
7788 : (in_typeof ? "typeof" : "alignof")));
7790 return enumtype;
7793 /* After processing and defining all the values of an enumeration type,
7794 install their decls in the enumeration type and finish it off.
7795 ENUMTYPE is the type object, VALUES a list of decl-value pairs,
7796 and ATTRIBUTES are the specified attributes.
7797 Returns ENUMTYPE. */
7799 tree
7800 finish_enum (tree enumtype, tree values, tree attributes)
7802 tree pair, tem;
7803 tree minnode = 0, maxnode = 0;
7804 int precision;
7805 signop sign;
7806 bool toplevel = (file_scope == current_scope);
7807 struct lang_type *lt;
7809 decl_attributes (&enumtype, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
7811 /* Calculate the maximum value of any enumerator in this type. */
7813 if (values == error_mark_node)
7814 minnode = maxnode = integer_zero_node;
7815 else
7817 minnode = maxnode = TREE_VALUE (values);
7818 for (pair = TREE_CHAIN (values); pair; pair = TREE_CHAIN (pair))
7820 tree value = TREE_VALUE (pair);
7821 if (tree_int_cst_lt (maxnode, value))
7822 maxnode = value;
7823 if (tree_int_cst_lt (value, minnode))
7824 minnode = value;
7828 /* Construct the final type of this enumeration. It is the same
7829 as one of the integral types - the narrowest one that fits, except
7830 that normally we only go as narrow as int - and signed iff any of
7831 the values are negative. */
7832 sign = (tree_int_cst_sgn (minnode) >= 0) ? UNSIGNED : SIGNED;
7833 precision = MAX (tree_int_cst_min_precision (minnode, sign),
7834 tree_int_cst_min_precision (maxnode, sign));
7836 if (TYPE_PACKED (enumtype) || precision > TYPE_PRECISION (integer_type_node))
7838 tem = c_common_type_for_size (precision, sign == UNSIGNED ? 1 : 0);
7839 if (tem == NULL)
7841 warning (0, "enumeration values exceed range of largest integer");
7842 tem = long_long_integer_type_node;
7845 else
7846 tem = sign == UNSIGNED ? unsigned_type_node : integer_type_node;
7848 TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (tem);
7849 TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (tem);
7850 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (tem);
7851 TYPE_SIZE (enumtype) = 0;
7853 /* If the precision of the type was specific with an attribute and it
7854 was too small, give an error. Otherwise, use it. */
7855 if (TYPE_PRECISION (enumtype))
7857 if (precision > TYPE_PRECISION (enumtype))
7858 error ("specified mode too small for enumeral values");
7860 else
7861 TYPE_PRECISION (enumtype) = TYPE_PRECISION (tem);
7863 layout_type (enumtype);
7865 if (values != error_mark_node)
7867 /* Change the type of the enumerators to be the enum type. We
7868 need to do this irrespective of the size of the enum, for
7869 proper type checking. Replace the DECL_INITIALs of the
7870 enumerators, and the value slots of the list, with copies
7871 that have the enum type; they cannot be modified in place
7872 because they may be shared (e.g. integer_zero_node) Finally,
7873 change the purpose slots to point to the names of the decls. */
7874 for (pair = values; pair; pair = TREE_CHAIN (pair))
7876 tree enu = TREE_PURPOSE (pair);
7877 tree ini = DECL_INITIAL (enu);
7879 TREE_TYPE (enu) = enumtype;
7881 /* The ISO C Standard mandates enumerators to have type int,
7882 even though the underlying type of an enum type is
7883 unspecified. However, GCC allows enumerators of any
7884 integer type as an extensions. build_enumerator()
7885 converts any enumerators that fit in an int to type int,
7886 to avoid promotions to unsigned types when comparing
7887 integers with enumerators that fit in the int range.
7888 When -pedantic is given, build_enumerator() would have
7889 already warned about those that don't fit. Here we
7890 convert the rest to the enumerator type. */
7891 if (TREE_TYPE (ini) != integer_type_node)
7892 ini = convert (enumtype, ini);
7894 DECL_INITIAL (enu) = ini;
7895 TREE_PURPOSE (pair) = DECL_NAME (enu);
7896 TREE_VALUE (pair) = ini;
7899 TYPE_VALUES (enumtype) = values;
7902 /* Record the min/max values so that we can warn about bit-field
7903 enumerations that are too small for the values. */
7904 lt = ggc_cleared_alloc<struct lang_type> ();
7905 lt->enum_min = minnode;
7906 lt->enum_max = maxnode;
7907 TYPE_LANG_SPECIFIC (enumtype) = lt;
7909 /* Fix up all variant types of this enum type. */
7910 for (tem = TYPE_MAIN_VARIANT (enumtype); tem; tem = TYPE_NEXT_VARIANT (tem))
7912 if (tem == enumtype)
7913 continue;
7914 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
7915 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
7916 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
7917 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
7918 TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
7919 SET_TYPE_MODE (tem, TYPE_MODE (enumtype));
7920 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
7921 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
7922 TYPE_USER_ALIGN (tem) = TYPE_USER_ALIGN (enumtype);
7923 TYPE_UNSIGNED (tem) = TYPE_UNSIGNED (enumtype);
7924 TYPE_LANG_SPECIFIC (tem) = TYPE_LANG_SPECIFIC (enumtype);
7927 /* Finish debugging output for this type. */
7928 rest_of_type_compilation (enumtype, toplevel);
7930 /* If this enum is defined inside a struct, add it to
7931 struct_types. */
7932 if (warn_cxx_compat
7933 && struct_parse_info != NULL
7934 && !in_sizeof && !in_typeof && !in_alignof)
7935 struct_parse_info->struct_types.safe_push (enumtype);
7937 return enumtype;
7940 /* Build and install a CONST_DECL for one value of the
7941 current enumeration type (one that was begun with start_enum).
7942 DECL_LOC is the location of the enumerator.
7943 LOC is the location of the '=' operator if any, DECL_LOC otherwise.
7944 Return a tree-list containing the CONST_DECL and its value.
7945 Assignment of sequential values by default is handled here. */
7947 tree
7948 build_enumerator (location_t decl_loc, location_t loc,
7949 struct c_enum_contents *the_enum, tree name, tree value)
7951 tree decl, type;
7953 /* Validate and default VALUE. */
7955 if (value != 0)
7957 /* Don't issue more errors for error_mark_node (i.e. an
7958 undeclared identifier) - just ignore the value expression. */
7959 if (value == error_mark_node)
7960 value = 0;
7961 else if (!INTEGRAL_TYPE_P (TREE_TYPE (value)))
7963 error_at (loc, "enumerator value for %qE is not an integer constant",
7964 name);
7965 value = 0;
7967 else
7969 if (TREE_CODE (value) != INTEGER_CST)
7971 value = c_fully_fold (value, false, NULL);
7972 if (TREE_CODE (value) == INTEGER_CST)
7973 pedwarn (loc, OPT_Wpedantic,
7974 "enumerator value for %qE is not an integer "
7975 "constant expression", name);
7977 if (TREE_CODE (value) != INTEGER_CST)
7979 error ("enumerator value for %qE is not an integer constant",
7980 name);
7981 value = 0;
7983 else
7985 value = default_conversion (value);
7986 constant_expression_warning (value);
7991 /* Default based on previous value. */
7992 /* It should no longer be possible to have NON_LVALUE_EXPR
7993 in the default. */
7994 if (value == 0)
7996 value = the_enum->enum_next_value;
7997 if (the_enum->enum_overflow)
7998 error_at (loc, "overflow in enumeration values");
8000 /* Even though the underlying type of an enum is unspecified, the
8001 type of enumeration constants is explicitly defined as int
8002 (6.4.4.3/2 in the C99 Standard). GCC allows any integer type as
8003 an extension. */
8004 else if (!int_fits_type_p (value, integer_type_node))
8005 pedwarn (loc, OPT_Wpedantic,
8006 "ISO C restricts enumerator values to range of %<int%>");
8008 /* The ISO C Standard mandates enumerators to have type int, even
8009 though the underlying type of an enum type is unspecified.
8010 However, GCC allows enumerators of any integer type as an
8011 extensions. Here we convert any enumerators that fit in an int
8012 to type int, to avoid promotions to unsigned types when comparing
8013 integers with enumerators that fit in the int range. When
8014 -pedantic is given, we would have already warned about those that
8015 don't fit. We have to do this here rather than in finish_enum
8016 because this value may be used to define more enumerators. */
8017 if (int_fits_type_p (value, integer_type_node))
8018 value = convert (integer_type_node, value);
8020 /* Set basis for default for next value. */
8021 the_enum->enum_next_value
8022 = build_binary_op (EXPR_LOC_OR_LOC (value, input_location),
8023 PLUS_EXPR, value, integer_one_node, 0);
8024 the_enum->enum_overflow = tree_int_cst_lt (the_enum->enum_next_value, value);
8026 /* Now create a declaration for the enum value name. */
8028 type = TREE_TYPE (value);
8029 type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
8030 TYPE_PRECISION (integer_type_node)),
8031 (TYPE_PRECISION (type)
8032 >= TYPE_PRECISION (integer_type_node)
8033 && TYPE_UNSIGNED (type)));
8035 decl = build_decl (decl_loc, CONST_DECL, name, type);
8036 DECL_INITIAL (decl) = convert (type, value);
8037 pushdecl (decl);
8039 return tree_cons (decl, value, NULL_TREE);
8043 /* Create the FUNCTION_DECL for a function definition.
8044 DECLSPECS, DECLARATOR and ATTRIBUTES are the parts of
8045 the declaration; they describe the function's name and the type it returns,
8046 but twisted together in a fashion that parallels the syntax of C.
8048 This function creates a binding context for the function body
8049 as well as setting up the FUNCTION_DECL in current_function_decl.
8051 Returns 1 on success. If the DECLARATOR is not suitable for a function
8052 (it defines a datum instead), we return 0, which tells
8053 yyparse to report a parse error. */
8056 start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
8057 tree attributes)
8059 tree decl1, old_decl;
8060 tree restype, resdecl;
8061 location_t loc;
8063 current_function_returns_value = 0; /* Assume, until we see it does. */
8064 current_function_returns_null = 0;
8065 current_function_returns_abnormally = 0;
8066 warn_about_return_type = 0;
8067 c_switch_stack = NULL;
8069 /* Indicate no valid break/continue context by setting these variables
8070 to some non-null, non-label value. We'll notice and emit the proper
8071 error message in c_finish_bc_stmt. */
8072 c_break_label = c_cont_label = size_zero_node;
8074 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, true, NULL,
8075 &attributes, NULL, NULL, DEPRECATED_NORMAL);
8077 /* If the declarator is not suitable for a function definition,
8078 cause a syntax error. */
8079 if (decl1 == 0
8080 || TREE_CODE (decl1) != FUNCTION_DECL)
8081 return 0;
8083 loc = DECL_SOURCE_LOCATION (decl1);
8085 c_decl_attributes (&decl1, attributes, 0);
8087 if (DECL_DECLARED_INLINE_P (decl1)
8088 && DECL_UNINLINABLE (decl1)
8089 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl1)))
8090 warning_at (loc, OPT_Wattributes,
8091 "inline function %qD given attribute noinline",
8092 decl1);
8094 /* Handle gnu_inline attribute. */
8095 if (declspecs->inline_p
8096 && !flag_gnu89_inline
8097 && TREE_CODE (decl1) == FUNCTION_DECL
8098 && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl1))
8099 || current_function_decl))
8101 if (declspecs->storage_class != csc_static)
8102 DECL_EXTERNAL (decl1) = !DECL_EXTERNAL (decl1);
8105 announce_function (decl1);
8107 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl1))))
8109 error_at (loc, "return type is an incomplete type");
8110 /* Make it return void instead. */
8111 TREE_TYPE (decl1)
8112 = build_function_type (void_type_node,
8113 TYPE_ARG_TYPES (TREE_TYPE (decl1)));
8116 if (warn_about_return_type)
8117 warn_defaults_to (loc, flag_isoc99 ? 0
8118 : (warn_return_type ? OPT_Wreturn_type
8119 : OPT_Wimplicit_int),
8120 "return type defaults to %<int%>");
8122 /* Make the init_value nonzero so pushdecl knows this is not tentative.
8123 error_mark_node is replaced below (in pop_scope) with the BLOCK. */
8124 DECL_INITIAL (decl1) = error_mark_node;
8126 /* A nested function is not global. */
8127 if (current_function_decl != 0)
8128 TREE_PUBLIC (decl1) = 0;
8130 /* If this definition isn't a prototype and we had a prototype declaration
8131 before, copy the arg type info from that prototype. */
8132 old_decl = lookup_name_in_scope (DECL_NAME (decl1), current_scope);
8133 if (old_decl && TREE_CODE (old_decl) != FUNCTION_DECL)
8134 old_decl = 0;
8135 current_function_prototype_locus = UNKNOWN_LOCATION;
8136 current_function_prototype_built_in = false;
8137 current_function_prototype_arg_types = NULL_TREE;
8138 if (!prototype_p (TREE_TYPE (decl1)))
8140 if (old_decl != 0 && TREE_CODE (TREE_TYPE (old_decl)) == FUNCTION_TYPE
8141 && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
8142 TREE_TYPE (TREE_TYPE (old_decl))))
8144 TREE_TYPE (decl1) = composite_type (TREE_TYPE (old_decl),
8145 TREE_TYPE (decl1));
8146 current_function_prototype_locus = DECL_SOURCE_LOCATION (old_decl);
8147 current_function_prototype_built_in
8148 = C_DECL_BUILTIN_PROTOTYPE (old_decl);
8149 current_function_prototype_arg_types
8150 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
8152 if (TREE_PUBLIC (decl1))
8154 /* If there is an external prototype declaration of this
8155 function, record its location but do not copy information
8156 to this decl. This may be an invisible declaration
8157 (built-in or in a scope which has finished) or simply
8158 have more refined argument types than any declaration
8159 found above. */
8160 struct c_binding *b;
8161 for (b = I_SYMBOL_BINDING (DECL_NAME (decl1)); b; b = b->shadowed)
8162 if (B_IN_SCOPE (b, external_scope))
8163 break;
8164 if (b)
8166 tree ext_decl, ext_type;
8167 ext_decl = b->decl;
8168 ext_type = b->u.type ? b->u.type : TREE_TYPE (ext_decl);
8169 if (TREE_CODE (ext_type) == FUNCTION_TYPE
8170 && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
8171 TREE_TYPE (ext_type)))
8173 current_function_prototype_locus
8174 = DECL_SOURCE_LOCATION (ext_decl);
8175 current_function_prototype_built_in
8176 = C_DECL_BUILTIN_PROTOTYPE (ext_decl);
8177 current_function_prototype_arg_types
8178 = TYPE_ARG_TYPES (ext_type);
8184 /* Optionally warn of old-fashioned def with no previous prototype. */
8185 if (warn_strict_prototypes
8186 && old_decl != error_mark_node
8187 && !prototype_p (TREE_TYPE (decl1))
8188 && C_DECL_ISNT_PROTOTYPE (old_decl))
8189 warning_at (loc, OPT_Wstrict_prototypes,
8190 "function declaration isn%'t a prototype");
8191 /* Optionally warn of any global def with no previous prototype. */
8192 else if (warn_missing_prototypes
8193 && old_decl != error_mark_node
8194 && TREE_PUBLIC (decl1)
8195 && !MAIN_NAME_P (DECL_NAME (decl1))
8196 && C_DECL_ISNT_PROTOTYPE (old_decl)
8197 && !DECL_DECLARED_INLINE_P (decl1))
8198 warning_at (loc, OPT_Wmissing_prototypes,
8199 "no previous prototype for %qD", decl1);
8200 /* Optionally warn of any def with no previous prototype
8201 if the function has already been used. */
8202 else if (warn_missing_prototypes
8203 && old_decl != 0
8204 && old_decl != error_mark_node
8205 && TREE_USED (old_decl)
8206 && !prototype_p (TREE_TYPE (old_decl)))
8207 warning_at (loc, OPT_Wmissing_prototypes,
8208 "%qD was used with no prototype before its definition", decl1);
8209 /* Optionally warn of any global def with no previous declaration. */
8210 else if (warn_missing_declarations
8211 && TREE_PUBLIC (decl1)
8212 && old_decl == 0
8213 && !MAIN_NAME_P (DECL_NAME (decl1)))
8214 warning_at (loc, OPT_Wmissing_declarations,
8215 "no previous declaration for %qD",
8216 decl1);
8217 /* Optionally warn of any def with no previous declaration
8218 if the function has already been used. */
8219 else if (warn_missing_declarations
8220 && old_decl != 0
8221 && old_decl != error_mark_node
8222 && TREE_USED (old_decl)
8223 && C_DECL_IMPLICIT (old_decl))
8224 warning_at (loc, OPT_Wmissing_declarations,
8225 "%qD was used with no declaration before its definition", decl1);
8227 /* This function exists in static storage.
8228 (This does not mean `static' in the C sense!) */
8229 TREE_STATIC (decl1) = 1;
8231 /* This is the earliest point at which we might know the assembler
8232 name of the function. Thus, if it's set before this, die horribly. */
8233 gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl1));
8235 /* If #pragma weak was used, mark the decl weak now. */
8236 if (current_scope == file_scope)
8237 maybe_apply_pragma_weak (decl1);
8239 /* Warn for unlikely, improbable, or stupid declarations of `main'. */
8240 if (warn_main && MAIN_NAME_P (DECL_NAME (decl1)))
8242 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1)))
8243 != integer_type_node)
8244 pedwarn (loc, OPT_Wmain, "return type of %qD is not %<int%>", decl1);
8245 else if (TYPE_ATOMIC (TREE_TYPE (TREE_TYPE (decl1))))
8246 pedwarn (loc, OPT_Wmain, "%<_Atomic%>-qualified return type of %qD",
8247 decl1);
8249 check_main_parameter_types (decl1);
8251 if (!TREE_PUBLIC (decl1))
8252 pedwarn (loc, OPT_Wmain,
8253 "%qD is normally a non-static function", decl1);
8256 /* Record the decl so that the function name is defined.
8257 If we already have a decl for this name, and it is a FUNCTION_DECL,
8258 use the old decl. */
8260 current_function_decl = pushdecl (decl1);
8262 push_scope ();
8263 declare_parm_level ();
8265 restype = TREE_TYPE (TREE_TYPE (current_function_decl));
8266 resdecl = build_decl (loc, RESULT_DECL, NULL_TREE, restype);
8267 DECL_ARTIFICIAL (resdecl) = 1;
8268 DECL_IGNORED_P (resdecl) = 1;
8269 DECL_RESULT (current_function_decl) = resdecl;
8271 start_fname_decls ();
8273 return 1;
8276 /* Subroutine of store_parm_decls which handles new-style function
8277 definitions (prototype format). The parms already have decls, so we
8278 need only record them as in effect and complain if any redundant
8279 old-style parm decls were written. */
8280 static void
8281 store_parm_decls_newstyle (tree fndecl, const struct c_arg_info *arg_info)
8283 tree decl;
8284 c_arg_tag *tag;
8285 unsigned ix;
8287 if (current_scope->bindings)
8289 error_at (DECL_SOURCE_LOCATION (fndecl),
8290 "old-style parameter declarations in prototyped "
8291 "function definition");
8293 /* Get rid of the old-style declarations. */
8294 pop_scope ();
8295 push_scope ();
8297 /* Don't issue this warning for nested functions, and don't issue this
8298 warning if we got here because ARG_INFO_TYPES was error_mark_node
8299 (this happens when a function definition has just an ellipsis in
8300 its parameter list). */
8301 else if (!in_system_header_at (input_location)
8302 && !current_function_scope
8303 && arg_info->types != error_mark_node)
8304 warning_at (DECL_SOURCE_LOCATION (fndecl), OPT_Wtraditional,
8305 "traditional C rejects ISO C style function definitions");
8307 /* Now make all the parameter declarations visible in the function body.
8308 We can bypass most of the grunt work of pushdecl. */
8309 for (decl = arg_info->parms; decl; decl = DECL_CHAIN (decl))
8311 DECL_CONTEXT (decl) = current_function_decl;
8312 if (DECL_NAME (decl))
8314 bind (DECL_NAME (decl), decl, current_scope,
8315 /*invisible=*/false, /*nested=*/false,
8316 UNKNOWN_LOCATION);
8317 if (!TREE_USED (decl))
8318 warn_if_shadowing (decl);
8320 else
8321 error_at (DECL_SOURCE_LOCATION (decl), "parameter name omitted");
8324 /* Record the parameter list in the function declaration. */
8325 DECL_ARGUMENTS (fndecl) = arg_info->parms;
8327 /* Now make all the ancillary declarations visible, likewise. */
8328 for (decl = arg_info->others; decl; decl = DECL_CHAIN (decl))
8330 DECL_CONTEXT (decl) = current_function_decl;
8331 if (DECL_NAME (decl))
8332 bind (DECL_NAME (decl), decl, current_scope,
8333 /*invisible=*/false,
8334 /*nested=*/(TREE_CODE (decl) == FUNCTION_DECL),
8335 UNKNOWN_LOCATION);
8338 /* And all the tag declarations. */
8339 FOR_EACH_VEC_SAFE_ELT_REVERSE (arg_info->tags, ix, tag)
8340 if (tag->id)
8341 bind (tag->id, tag->type, current_scope,
8342 /*invisible=*/false, /*nested=*/false, UNKNOWN_LOCATION);
8345 /* Subroutine of store_parm_decls which handles old-style function
8346 definitions (separate parameter list and declarations). */
8348 static void
8349 store_parm_decls_oldstyle (tree fndecl, const struct c_arg_info *arg_info)
8351 struct c_binding *b;
8352 tree parm, decl, last;
8353 tree parmids = arg_info->parms;
8354 hash_set<tree> seen_args;
8356 if (!in_system_header_at (input_location))
8357 warning_at (DECL_SOURCE_LOCATION (fndecl),
8358 OPT_Wold_style_definition, "old-style function definition");
8360 /* Match each formal parameter name with its declaration. Save each
8361 decl in the appropriate TREE_PURPOSE slot of the parmids chain. */
8362 for (parm = parmids; parm; parm = TREE_CHAIN (parm))
8364 if (TREE_VALUE (parm) == 0)
8366 error_at (DECL_SOURCE_LOCATION (fndecl),
8367 "parameter name missing from parameter list");
8368 TREE_PURPOSE (parm) = 0;
8369 continue;
8372 b = I_SYMBOL_BINDING (TREE_VALUE (parm));
8373 if (b && B_IN_CURRENT_SCOPE (b))
8375 decl = b->decl;
8376 /* Skip erroneous parameters. */
8377 if (decl == error_mark_node)
8378 continue;
8379 /* If we got something other than a PARM_DECL it is an error. */
8380 if (TREE_CODE (decl) != PARM_DECL)
8381 error_at (DECL_SOURCE_LOCATION (decl),
8382 "%qD declared as a non-parameter", decl);
8383 /* If the declaration is already marked, we have a duplicate
8384 name. Complain and ignore the duplicate. */
8385 else if (seen_args.contains (decl))
8387 error_at (DECL_SOURCE_LOCATION (decl),
8388 "multiple parameters named %qD", decl);
8389 TREE_PURPOSE (parm) = 0;
8390 continue;
8392 /* If the declaration says "void", complain and turn it into
8393 an int. */
8394 else if (VOID_TYPE_P (TREE_TYPE (decl)))
8396 error_at (DECL_SOURCE_LOCATION (decl),
8397 "parameter %qD declared with void type", decl);
8398 TREE_TYPE (decl) = integer_type_node;
8399 DECL_ARG_TYPE (decl) = integer_type_node;
8400 layout_decl (decl, 0);
8402 warn_if_shadowing (decl);
8404 /* If no declaration found, default to int. */
8405 else
8407 /* FIXME diagnostics: This should be the location of the argument,
8408 not the FNDECL. E.g., for an old-style declaration
8410 int f10(v) { blah; }
8412 We should use the location of the V, not the F10.
8413 Unfortunately, the V is an IDENTIFIER_NODE which has no
8414 location. In the future we need locations for c_arg_info
8415 entries.
8417 See gcc.dg/Wshadow-3.c for an example of this problem. */
8418 decl = build_decl (DECL_SOURCE_LOCATION (fndecl),
8419 PARM_DECL, TREE_VALUE (parm), integer_type_node);
8420 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
8421 pushdecl (decl);
8422 warn_if_shadowing (decl);
8424 if (flag_isoc99)
8425 pedwarn (DECL_SOURCE_LOCATION (decl),
8426 0, "type of %qD defaults to %<int%>", decl);
8427 else
8428 warning_at (DECL_SOURCE_LOCATION (decl),
8429 OPT_Wmissing_parameter_type,
8430 "type of %qD defaults to %<int%>", decl);
8433 TREE_PURPOSE (parm) = decl;
8434 seen_args.add (decl);
8437 /* Now examine the parms chain for incomplete declarations
8438 and declarations with no corresponding names. */
8440 for (b = current_scope->bindings; b; b = b->prev)
8442 parm = b->decl;
8443 if (TREE_CODE (parm) != PARM_DECL)
8444 continue;
8446 if (TREE_TYPE (parm) != error_mark_node
8447 && !COMPLETE_TYPE_P (TREE_TYPE (parm)))
8449 error_at (DECL_SOURCE_LOCATION (parm),
8450 "parameter %qD has incomplete type", parm);
8451 TREE_TYPE (parm) = error_mark_node;
8454 if (!seen_args.contains (parm))
8456 error_at (DECL_SOURCE_LOCATION (parm),
8457 "declaration for parameter %qD but no such parameter",
8458 parm);
8460 /* Pretend the parameter was not missing.
8461 This gets us to a standard state and minimizes
8462 further error messages. */
8463 parmids = chainon (parmids, tree_cons (parm, 0, 0));
8467 /* Chain the declarations together in the order of the list of
8468 names. Store that chain in the function decl, replacing the
8469 list of names. Update the current scope to match. */
8470 DECL_ARGUMENTS (fndecl) = 0;
8472 for (parm = parmids; parm; parm = TREE_CHAIN (parm))
8473 if (TREE_PURPOSE (parm))
8474 break;
8475 if (parm && TREE_PURPOSE (parm))
8477 last = TREE_PURPOSE (parm);
8478 DECL_ARGUMENTS (fndecl) = last;
8480 for (parm = TREE_CHAIN (parm); parm; parm = TREE_CHAIN (parm))
8481 if (TREE_PURPOSE (parm))
8483 DECL_CHAIN (last) = TREE_PURPOSE (parm);
8484 last = TREE_PURPOSE (parm);
8486 DECL_CHAIN (last) = 0;
8489 /* If there was a previous prototype,
8490 set the DECL_ARG_TYPE of each argument according to
8491 the type previously specified, and report any mismatches. */
8493 if (current_function_prototype_arg_types)
8495 tree type;
8496 for (parm = DECL_ARGUMENTS (fndecl),
8497 type = current_function_prototype_arg_types;
8498 parm || (type && TREE_VALUE (type) != error_mark_node
8499 && (TYPE_MAIN_VARIANT (TREE_VALUE (type)) != void_type_node));
8500 parm = DECL_CHAIN (parm), type = TREE_CHAIN (type))
8502 if (parm == 0 || type == 0
8503 || TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
8505 if (current_function_prototype_built_in)
8506 warning_at (DECL_SOURCE_LOCATION (fndecl),
8507 0, "number of arguments doesn%'t match "
8508 "built-in prototype");
8509 else
8511 /* FIXME diagnostics: This should be the location of
8512 FNDECL, but there is bug when a prototype is
8513 declared inside function context, but defined
8514 outside of it (e.g., gcc.dg/pr15698-2.c). In
8515 which case FNDECL gets the location of the
8516 prototype, not the definition. */
8517 error_at (input_location,
8518 "number of arguments doesn%'t match prototype");
8520 error_at (current_function_prototype_locus,
8521 "prototype declaration");
8523 break;
8525 /* Type for passing arg must be consistent with that
8526 declared for the arg. ISO C says we take the unqualified
8527 type for parameters declared with qualified type. */
8528 if (TREE_TYPE (parm) != error_mark_node
8529 && TREE_TYPE (type) != error_mark_node
8530 && ((TYPE_ATOMIC (DECL_ARG_TYPE (parm))
8531 != TYPE_ATOMIC (TREE_VALUE (type)))
8532 || !comptypes (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (parm)),
8533 TYPE_MAIN_VARIANT (TREE_VALUE (type)))))
8535 if ((TYPE_ATOMIC (DECL_ARG_TYPE (parm))
8536 == TYPE_ATOMIC (TREE_VALUE (type)))
8537 && (TYPE_MAIN_VARIANT (TREE_TYPE (parm))
8538 == TYPE_MAIN_VARIANT (TREE_VALUE (type))))
8540 /* Adjust argument to match prototype. E.g. a previous
8541 `int foo(float);' prototype causes
8542 `int foo(x) float x; {...}' to be treated like
8543 `int foo(float x) {...}'. This is particularly
8544 useful for argument types like uid_t. */
8545 DECL_ARG_TYPE (parm) = TREE_TYPE (parm);
8547 if (targetm.calls.promote_prototypes (TREE_TYPE (current_function_decl))
8548 && INTEGRAL_TYPE_P (TREE_TYPE (parm))
8549 && TYPE_PRECISION (TREE_TYPE (parm))
8550 < TYPE_PRECISION (integer_type_node))
8551 DECL_ARG_TYPE (parm)
8552 = c_type_promotes_to (TREE_TYPE (parm));
8554 /* ??? Is it possible to get here with a
8555 built-in prototype or will it always have
8556 been diagnosed as conflicting with an
8557 old-style definition and discarded? */
8558 if (current_function_prototype_built_in)
8559 warning_at (DECL_SOURCE_LOCATION (parm),
8560 OPT_Wpedantic, "promoted argument %qD "
8561 "doesn%'t match built-in prototype", parm);
8562 else
8564 pedwarn (DECL_SOURCE_LOCATION (parm),
8565 OPT_Wpedantic, "promoted argument %qD "
8566 "doesn%'t match prototype", parm);
8567 pedwarn (current_function_prototype_locus, OPT_Wpedantic,
8568 "prototype declaration");
8571 else
8573 if (current_function_prototype_built_in)
8574 warning_at (DECL_SOURCE_LOCATION (parm),
8575 0, "argument %qD doesn%'t match "
8576 "built-in prototype", parm);
8577 else
8579 error_at (DECL_SOURCE_LOCATION (parm),
8580 "argument %qD doesn%'t match prototype", parm);
8581 error_at (current_function_prototype_locus,
8582 "prototype declaration");
8587 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = 0;
8590 /* Otherwise, create a prototype that would match. */
8592 else
8594 tree actual = 0, last = 0, type;
8596 for (parm = DECL_ARGUMENTS (fndecl); parm; parm = DECL_CHAIN (parm))
8598 type = tree_cons (NULL_TREE, DECL_ARG_TYPE (parm), NULL_TREE);
8599 if (last)
8600 TREE_CHAIN (last) = type;
8601 else
8602 actual = type;
8603 last = type;
8605 type = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
8606 if (last)
8607 TREE_CHAIN (last) = type;
8608 else
8609 actual = type;
8611 /* We are going to assign a new value for the TYPE_ACTUAL_ARG_TYPES
8612 of the type of this function, but we need to avoid having this
8613 affect the types of other similarly-typed functions, so we must
8614 first force the generation of an identical (but separate) type
8615 node for the relevant function type. The new node we create
8616 will be a variant of the main variant of the original function
8617 type. */
8619 TREE_TYPE (fndecl) = build_variant_type_copy (TREE_TYPE (fndecl));
8621 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = actual;
8625 /* Store parameter declarations passed in ARG_INFO into the current
8626 function declaration. */
8628 void
8629 store_parm_decls_from (struct c_arg_info *arg_info)
8631 current_function_arg_info = arg_info;
8632 store_parm_decls ();
8635 /* Store the parameter declarations into the current function declaration.
8636 This is called after parsing the parameter declarations, before
8637 digesting the body of the function.
8639 For an old-style definition, construct a prototype out of the old-style
8640 parameter declarations and inject it into the function's type. */
8642 void
8643 store_parm_decls (void)
8645 tree fndecl = current_function_decl;
8646 bool proto;
8648 /* The argument information block for FNDECL. */
8649 struct c_arg_info *arg_info = current_function_arg_info;
8650 current_function_arg_info = 0;
8652 /* True if this definition is written with a prototype. Note:
8653 despite C99 6.7.5.3p14, we can *not* treat an empty argument
8654 list in a function definition as equivalent to (void) -- an
8655 empty argument list specifies the function has no parameters,
8656 but only (void) sets up a prototype for future calls. */
8657 proto = arg_info->types != 0;
8659 if (proto)
8660 store_parm_decls_newstyle (fndecl, arg_info);
8661 else
8662 store_parm_decls_oldstyle (fndecl, arg_info);
8664 /* The next call to push_scope will be a function body. */
8666 next_is_function_body = true;
8668 /* Write a record describing this function definition to the prototypes
8669 file (if requested). */
8671 gen_aux_info_record (fndecl, 1, 0, proto);
8673 /* Initialize the RTL code for the function. */
8674 allocate_struct_function (fndecl, false);
8676 if (warn_unused_local_typedefs)
8677 cfun->language = ggc_cleared_alloc<language_function> ();
8679 /* Begin the statement tree for this function. */
8680 DECL_SAVED_TREE (fndecl) = push_stmt_list ();
8682 /* ??? Insert the contents of the pending sizes list into the function
8683 to be evaluated. The only reason left to have this is
8684 void foo(int n, int array[n++])
8685 because we throw away the array type in favor of a pointer type, and
8686 thus won't naturally see the SAVE_EXPR containing the increment. All
8687 other pending sizes would be handled by gimplify_parameters. */
8688 if (arg_info->pending_sizes)
8689 add_stmt (arg_info->pending_sizes);
8692 /* Store PARM_DECLs in PARMS into scope temporarily. Used for
8693 c_finish_omp_declare_simd for function prototypes. No diagnostics
8694 should be done. */
8696 void
8697 temp_store_parm_decls (tree fndecl, tree parms)
8699 push_scope ();
8700 for (tree p = parms; p; p = DECL_CHAIN (p))
8702 DECL_CONTEXT (p) = fndecl;
8703 if (DECL_NAME (p))
8704 bind (DECL_NAME (p), p, current_scope,
8705 /*invisible=*/false, /*nested=*/false,
8706 UNKNOWN_LOCATION);
8710 /* Undo what temp_store_parm_decls did. */
8712 void
8713 temp_pop_parm_decls (void)
8715 /* Clear all bindings in this temporary scope, so that
8716 pop_scope doesn't create a BLOCK. */
8717 struct c_binding *b = current_scope->bindings;
8718 current_scope->bindings = NULL;
8719 for (; b; b = free_binding_and_advance (b))
8721 gcc_assert (TREE_CODE (b->decl) == PARM_DECL);
8722 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
8723 I_SYMBOL_BINDING (b->id) = b->shadowed;
8724 if (b->shadowed && b->shadowed->u.type)
8725 TREE_TYPE (b->shadowed->decl) = b->shadowed->u.type;
8727 pop_scope ();
8731 /* Finish up a function declaration and compile that function
8732 all the way to assembler language output. Then free the storage
8733 for the function definition.
8735 This is called after parsing the body of the function definition. */
8737 void
8738 finish_function (void)
8740 tree fndecl = current_function_decl;
8742 if (c_dialect_objc ())
8743 objc_finish_function ();
8745 if (TREE_CODE (fndecl) == FUNCTION_DECL
8746 && targetm.calls.promote_prototypes (TREE_TYPE (fndecl)))
8748 tree args = DECL_ARGUMENTS (fndecl);
8749 for (; args; args = DECL_CHAIN (args))
8751 tree type = TREE_TYPE (args);
8752 if (INTEGRAL_TYPE_P (type)
8753 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
8754 DECL_ARG_TYPE (args) = c_type_promotes_to (type);
8758 if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node)
8759 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
8761 /* Must mark the RESULT_DECL as being in this function. */
8763 if (DECL_RESULT (fndecl) && DECL_RESULT (fndecl) != error_mark_node)
8764 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
8766 if (MAIN_NAME_P (DECL_NAME (fndecl)) && flag_hosted
8767 && TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (fndecl)))
8768 == integer_type_node && flag_isoc99)
8770 /* Hack. We don't want the middle-end to warn that this return
8771 is unreachable, so we mark its location as special. Using
8772 UNKNOWN_LOCATION has the problem that it gets clobbered in
8773 annotate_one_with_locus. A cleaner solution might be to
8774 ensure ! should_carry_locus_p (stmt), but that needs a flag.
8776 c_finish_return (BUILTINS_LOCATION, integer_zero_node, NULL_TREE);
8779 /* Tie off the statement tree for this function. */
8780 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
8782 /* If the function has _Cilk_spawn in front of a function call inside it
8783 i.e. it is a spawning function, then add the appropriate Cilk plus
8784 functions inside. */
8785 if (fn_contains_cilk_spawn_p (cfun))
8786 cfun->cilk_frame_decl = insert_cilk_frame (fndecl);
8788 finish_fname_decls ();
8790 /* Complain if there's just no return statement. */
8791 if (warn_return_type
8792 && TREE_CODE (TREE_TYPE (TREE_TYPE (fndecl))) != VOID_TYPE
8793 && !current_function_returns_value && !current_function_returns_null
8794 /* Don't complain if we are no-return. */
8795 && !current_function_returns_abnormally
8796 /* Don't complain if we are declared noreturn. */
8797 && !TREE_THIS_VOLATILE (fndecl)
8798 /* Don't warn for main(). */
8799 && !MAIN_NAME_P (DECL_NAME (fndecl))
8800 /* Or if they didn't actually specify a return type. */
8801 && !C_FUNCTION_IMPLICIT_INT (fndecl)
8802 /* Normally, with -Wreturn-type, flow will complain, but we might
8803 optimize out static functions. */
8804 && !TREE_PUBLIC (fndecl))
8806 warning (OPT_Wreturn_type,
8807 "no return statement in function returning non-void");
8808 TREE_NO_WARNING (fndecl) = 1;
8811 /* Complain about parameters that are only set, but never otherwise used. */
8812 if (warn_unused_but_set_parameter)
8814 tree decl;
8816 for (decl = DECL_ARGUMENTS (fndecl);
8817 decl;
8818 decl = DECL_CHAIN (decl))
8819 if (TREE_USED (decl)
8820 && TREE_CODE (decl) == PARM_DECL
8821 && !DECL_READ_P (decl)
8822 && DECL_NAME (decl)
8823 && !DECL_ARTIFICIAL (decl)
8824 && !TREE_NO_WARNING (decl))
8825 warning_at (DECL_SOURCE_LOCATION (decl),
8826 OPT_Wunused_but_set_parameter,
8827 "parameter %qD set but not used", decl);
8830 /* Complain about locally defined typedefs that are not used in this
8831 function. */
8832 maybe_warn_unused_local_typedefs ();
8834 /* Store the end of the function, so that we get good line number
8835 info for the epilogue. */
8836 cfun->function_end_locus = input_location;
8838 /* Finalize the ELF visibility for the function. */
8839 c_determine_visibility (fndecl);
8841 /* For GNU C extern inline functions disregard inline limits. */
8842 if (DECL_EXTERNAL (fndecl)
8843 && DECL_DECLARED_INLINE_P (fndecl))
8844 DECL_DISREGARD_INLINE_LIMITS (fndecl) = 1;
8846 /* Genericize before inlining. Delay genericizing nested functions
8847 until their parent function is genericized. Since finalizing
8848 requires GENERIC, delay that as well. */
8850 if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node
8851 && !undef_nested_function)
8853 if (!decl_function_context (fndecl))
8855 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
8856 c_genericize (fndecl);
8858 /* ??? Objc emits functions after finalizing the compilation unit.
8859 This should be cleaned up later and this conditional removed. */
8860 if (symtab->global_info_ready)
8862 cgraph_node::add_new_function (fndecl, false);
8863 return;
8865 cgraph_node::finalize_function (fndecl, false);
8867 else
8869 /* Register this function with cgraph just far enough to get it
8870 added to our parent's nested function list. Handy, since the
8871 C front end doesn't have such a list. */
8872 (void) cgraph_node::get_create (fndecl);
8876 if (!decl_function_context (fndecl))
8877 undef_nested_function = false;
8879 if (cfun->language != NULL)
8881 ggc_free (cfun->language);
8882 cfun->language = NULL;
8885 /* We're leaving the context of this function, so zap cfun.
8886 It's still in DECL_STRUCT_FUNCTION, and we'll restore it in
8887 tree_rest_of_compilation. */
8888 set_cfun (NULL);
8889 current_function_decl = NULL;
8892 /* Check the declarations given in a for-loop for satisfying the C99
8893 constraints. If exactly one such decl is found, return it. LOC is
8894 the location of the opening parenthesis of the for loop. The last
8895 parameter allows you to control the "for loop initial declarations
8896 are only allowed in C99 mode". Normally, you should pass
8897 flag_isoc99 as that parameter. But in some cases (Objective-C
8898 foreach loop, for example) we want to run the checks in this
8899 function even if not in C99 mode, so we allow the caller to turn
8900 off the error about not being in C99 mode.
8903 tree
8904 check_for_loop_decls (location_t loc, bool turn_off_iso_c99_error)
8906 struct c_binding *b;
8907 tree one_decl = NULL_TREE;
8908 int n_decls = 0;
8910 if (!turn_off_iso_c99_error)
8912 static bool hint = true;
8913 /* If we get here, declarations have been used in a for loop without
8914 the C99 for loop scope. This doesn't make much sense, so don't
8915 allow it. */
8916 error_at (loc, "%<for%> loop initial declarations "
8917 "are only allowed in C99 or C11 mode");
8918 if (hint)
8920 inform (loc,
8921 "use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 "
8922 "to compile your code");
8923 hint = false;
8925 return NULL_TREE;
8927 /* C99 subclause 6.8.5 paragraph 3:
8929 [#3] The declaration part of a for statement shall only
8930 declare identifiers for objects having storage class auto or
8931 register.
8933 It isn't clear whether, in this sentence, "identifiers" binds to
8934 "shall only declare" or to "objects" - that is, whether all identifiers
8935 declared must be identifiers for objects, or whether the restriction
8936 only applies to those that are. (A question on this in comp.std.c
8937 in November 2000 received no answer.) We implement the strictest
8938 interpretation, to avoid creating an extension which later causes
8939 problems. */
8941 for (b = current_scope->bindings; b; b = b->prev)
8943 tree id = b->id;
8944 tree decl = b->decl;
8946 if (!id)
8947 continue;
8949 switch (TREE_CODE (decl))
8951 case VAR_DECL:
8953 location_t decl_loc = DECL_SOURCE_LOCATION (decl);
8954 if (TREE_STATIC (decl))
8955 error_at (decl_loc,
8956 "declaration of static variable %qD in %<for%> loop "
8957 "initial declaration", decl);
8958 else if (DECL_EXTERNAL (decl))
8959 error_at (decl_loc,
8960 "declaration of %<extern%> variable %qD in %<for%> loop "
8961 "initial declaration", decl);
8963 break;
8965 case RECORD_TYPE:
8966 error_at (loc,
8967 "%<struct %E%> declared in %<for%> loop initial "
8968 "declaration", id);
8969 break;
8970 case UNION_TYPE:
8971 error_at (loc,
8972 "%<union %E%> declared in %<for%> loop initial declaration",
8973 id);
8974 break;
8975 case ENUMERAL_TYPE:
8976 error_at (loc, "%<enum %E%> declared in %<for%> loop "
8977 "initial declaration", id);
8978 break;
8979 default:
8980 error_at (loc, "declaration of non-variable "
8981 "%qD in %<for%> loop initial declaration", decl);
8984 n_decls++;
8985 one_decl = decl;
8988 return n_decls == 1 ? one_decl : NULL_TREE;
8991 /* Save and reinitialize the variables
8992 used during compilation of a C function. */
8994 void
8995 c_push_function_context (void)
8997 struct language_function *p = cfun->language;
8998 /* cfun->language might have been already allocated by the use of
8999 -Wunused-local-typedefs. In that case, just re-use it. */
9000 if (p == NULL)
9001 cfun->language = p = ggc_cleared_alloc<language_function> ();
9003 p->base.x_stmt_tree = c_stmt_tree;
9004 c_stmt_tree.x_cur_stmt_list = vec_safe_copy (c_stmt_tree.x_cur_stmt_list);
9005 p->x_break_label = c_break_label;
9006 p->x_cont_label = c_cont_label;
9007 p->x_switch_stack = c_switch_stack;
9008 p->arg_info = current_function_arg_info;
9009 p->returns_value = current_function_returns_value;
9010 p->returns_null = current_function_returns_null;
9011 p->returns_abnormally = current_function_returns_abnormally;
9012 p->warn_about_return_type = warn_about_return_type;
9014 push_function_context ();
9017 /* Restore the variables used during compilation of a C function. */
9019 void
9020 c_pop_function_context (void)
9022 struct language_function *p;
9024 pop_function_context ();
9025 p = cfun->language;
9027 /* When -Wunused-local-typedefs is in effect, cfun->languages is
9028 used to store data throughout the life time of the current cfun,
9029 So don't deallocate it. */
9030 if (!warn_unused_local_typedefs)
9031 cfun->language = NULL;
9033 if (DECL_STRUCT_FUNCTION (current_function_decl) == 0
9034 && DECL_SAVED_TREE (current_function_decl) == NULL_TREE)
9036 /* Stop pointing to the local nodes about to be freed. */
9037 /* But DECL_INITIAL must remain nonzero so we know this
9038 was an actual function definition. */
9039 DECL_INITIAL (current_function_decl) = error_mark_node;
9040 DECL_ARGUMENTS (current_function_decl) = 0;
9043 c_stmt_tree = p->base.x_stmt_tree;
9044 p->base.x_stmt_tree.x_cur_stmt_list = NULL;
9045 c_break_label = p->x_break_label;
9046 c_cont_label = p->x_cont_label;
9047 c_switch_stack = p->x_switch_stack;
9048 current_function_arg_info = p->arg_info;
9049 current_function_returns_value = p->returns_value;
9050 current_function_returns_null = p->returns_null;
9051 current_function_returns_abnormally = p->returns_abnormally;
9052 warn_about_return_type = p->warn_about_return_type;
9055 /* The functions below are required for functionality of doing
9056 function at once processing in the C front end. Currently these
9057 functions are not called from anywhere in the C front end, but as
9058 these changes continue, that will change. */
9060 /* Returns the stmt_tree (if any) to which statements are currently
9061 being added. If there is no active statement-tree, NULL is
9062 returned. */
9064 stmt_tree
9065 current_stmt_tree (void)
9067 return &c_stmt_tree;
9070 /* Return the global value of T as a symbol. */
9072 tree
9073 identifier_global_value (tree t)
9075 struct c_binding *b;
9077 for (b = I_SYMBOL_BINDING (t); b; b = b->shadowed)
9078 if (B_IN_FILE_SCOPE (b) || B_IN_EXTERNAL_SCOPE (b))
9079 return b->decl;
9081 return 0;
9084 /* In C, the only C-linkage public declaration is at file scope. */
9086 tree
9087 c_linkage_bindings (tree name)
9089 return identifier_global_value (name);
9092 /* Record a builtin type for C. If NAME is non-NULL, it is the name used;
9093 otherwise the name is found in ridpointers from RID_INDEX. */
9095 void
9096 record_builtin_type (enum rid rid_index, const char *name, tree type)
9098 tree id, decl;
9099 if (name == 0)
9100 id = ridpointers[(int) rid_index];
9101 else
9102 id = get_identifier (name);
9103 decl = build_decl (UNKNOWN_LOCATION, TYPE_DECL, id, type);
9104 pushdecl (decl);
9105 if (debug_hooks->type_decl)
9106 debug_hooks->type_decl (decl, false);
9109 /* Build the void_list_node (void_type_node having been created). */
9110 tree
9111 build_void_list_node (void)
9113 tree t = build_tree_list (NULL_TREE, void_type_node);
9114 return t;
9117 /* Return a c_parm structure with the given SPECS, ATTRS and DECLARATOR. */
9119 struct c_parm *
9120 build_c_parm (struct c_declspecs *specs, tree attrs,
9121 struct c_declarator *declarator)
9123 struct c_parm *ret = XOBNEW (&parser_obstack, struct c_parm);
9124 ret->specs = specs;
9125 ret->attrs = attrs;
9126 ret->declarator = declarator;
9127 return ret;
9130 /* Return a declarator with nested attributes. TARGET is the inner
9131 declarator to which these attributes apply. ATTRS are the
9132 attributes. */
9134 struct c_declarator *
9135 build_attrs_declarator (tree attrs, struct c_declarator *target)
9137 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
9138 ret->kind = cdk_attrs;
9139 ret->declarator = target;
9140 ret->u.attrs = attrs;
9141 return ret;
9144 /* Return a declarator for a function with arguments specified by ARGS
9145 and return type specified by TARGET. */
9147 struct c_declarator *
9148 build_function_declarator (struct c_arg_info *args,
9149 struct c_declarator *target)
9151 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
9152 ret->kind = cdk_function;
9153 ret->declarator = target;
9154 ret->u.arg_info = args;
9155 return ret;
9158 /* Return a declarator for the identifier IDENT (which may be
9159 NULL_TREE for an abstract declarator). */
9161 struct c_declarator *
9162 build_id_declarator (tree ident)
9164 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
9165 ret->kind = cdk_id;
9166 ret->declarator = 0;
9167 ret->u.id = ident;
9168 /* Default value - may get reset to a more precise location. */
9169 ret->id_loc = input_location;
9170 return ret;
9173 /* Return something to represent absolute declarators containing a *.
9174 TARGET is the absolute declarator that the * contains.
9175 TYPE_QUALS_ATTRS is a structure for type qualifiers and attributes
9176 to apply to the pointer type. */
9178 struct c_declarator *
9179 make_pointer_declarator (struct c_declspecs *type_quals_attrs,
9180 struct c_declarator *target)
9182 tree attrs;
9183 int quals = 0;
9184 struct c_declarator *itarget = target;
9185 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
9186 if (type_quals_attrs)
9188 attrs = type_quals_attrs->attrs;
9189 quals = quals_from_declspecs (type_quals_attrs);
9190 if (attrs != NULL_TREE)
9191 itarget = build_attrs_declarator (attrs, target);
9193 ret->kind = cdk_pointer;
9194 ret->declarator = itarget;
9195 ret->u.pointer_quals = quals;
9196 return ret;
9199 /* Return a pointer to a structure for an empty list of declaration
9200 specifiers. */
9202 struct c_declspecs *
9203 build_null_declspecs (void)
9205 struct c_declspecs *ret = XOBNEW (&parser_obstack, struct c_declspecs);
9206 memset (&ret->locations, 0, cdw_number_of_elements);
9207 ret->type = 0;
9208 ret->expr = 0;
9209 ret->decl_attr = 0;
9210 ret->attrs = 0;
9211 ret->align_log = -1;
9212 ret->typespec_word = cts_none;
9213 ret->storage_class = csc_none;
9214 ret->expr_const_operands = true;
9215 ret->declspecs_seen_p = false;
9216 ret->typespec_kind = ctsk_none;
9217 ret->non_sc_seen_p = false;
9218 ret->typedef_p = false;
9219 ret->explicit_signed_p = false;
9220 ret->deprecated_p = false;
9221 ret->default_int_p = false;
9222 ret->long_p = false;
9223 ret->long_long_p = false;
9224 ret->short_p = false;
9225 ret->signed_p = false;
9226 ret->unsigned_p = false;
9227 ret->complex_p = false;
9228 ret->inline_p = false;
9229 ret->noreturn_p = false;
9230 ret->thread_p = false;
9231 ret->thread_gnu_p = false;
9232 ret->const_p = false;
9233 ret->volatile_p = false;
9234 ret->atomic_p = false;
9235 ret->restrict_p = false;
9236 ret->saturating_p = false;
9237 ret->alignas_p = false;
9238 ret->address_space = ADDR_SPACE_GENERIC;
9239 return ret;
9242 /* Add the address space ADDRSPACE to the declaration specifiers
9243 SPECS, returning SPECS. */
9245 struct c_declspecs *
9246 declspecs_add_addrspace (source_location location,
9247 struct c_declspecs *specs, addr_space_t as)
9249 specs->non_sc_seen_p = true;
9250 specs->declspecs_seen_p = true;
9252 if (!ADDR_SPACE_GENERIC_P (specs->address_space)
9253 && specs->address_space != as)
9254 error ("incompatible address space qualifiers %qs and %qs",
9255 c_addr_space_name (as),
9256 c_addr_space_name (specs->address_space));
9257 else
9259 specs->address_space = as;
9260 specs->locations[cdw_address_space] = location;
9262 return specs;
9265 /* Add the type qualifier QUAL to the declaration specifiers SPECS,
9266 returning SPECS. */
9268 struct c_declspecs *
9269 declspecs_add_qual (source_location loc,
9270 struct c_declspecs *specs, tree qual)
9272 enum rid i;
9273 bool dupe = false;
9274 specs->non_sc_seen_p = true;
9275 specs->declspecs_seen_p = true;
9276 gcc_assert (TREE_CODE (qual) == IDENTIFIER_NODE
9277 && C_IS_RESERVED_WORD (qual));
9278 i = C_RID_CODE (qual);
9279 switch (i)
9281 case RID_CONST:
9282 dupe = specs->const_p;
9283 specs->const_p = true;
9284 specs->locations[cdw_const] = loc;
9285 break;
9286 case RID_VOLATILE:
9287 dupe = specs->volatile_p;
9288 specs->volatile_p = true;
9289 specs->locations[cdw_volatile] = loc;
9290 break;
9291 case RID_RESTRICT:
9292 dupe = specs->restrict_p;
9293 specs->restrict_p = true;
9294 specs->locations[cdw_restrict] = loc;
9295 break;
9296 case RID_ATOMIC:
9297 dupe = specs->atomic_p;
9298 specs->atomic_p = true;
9299 break;
9300 default:
9301 gcc_unreachable ();
9303 if (dupe)
9304 pedwarn_c90 (loc, OPT_Wpedantic, "duplicate %qE", qual);
9305 return specs;
9308 /* Add the type specifier TYPE to the declaration specifiers SPECS,
9309 returning SPECS. */
9311 struct c_declspecs *
9312 declspecs_add_type (location_t loc, struct c_declspecs *specs,
9313 struct c_typespec spec)
9315 tree type = spec.spec;
9316 specs->non_sc_seen_p = true;
9317 specs->declspecs_seen_p = true;
9318 specs->typespec_kind = spec.kind;
9319 if (TREE_DEPRECATED (type))
9320 specs->deprecated_p = true;
9322 /* Handle type specifier keywords. */
9323 if (TREE_CODE (type) == IDENTIFIER_NODE
9324 && C_IS_RESERVED_WORD (type)
9325 && C_RID_CODE (type) != RID_CXX_COMPAT_WARN)
9327 enum rid i = C_RID_CODE (type);
9328 if (specs->type)
9330 error_at (loc, "two or more data types in declaration specifiers");
9331 return specs;
9333 if ((int) i <= (int) RID_LAST_MODIFIER)
9335 /* "long", "short", "signed", "unsigned", "_Complex" or "_Sat". */
9336 bool dupe = false;
9337 switch (i)
9339 case RID_LONG:
9340 if (specs->long_long_p)
9342 error_at (loc, "%<long long long%> is too long for GCC");
9343 break;
9345 if (specs->long_p)
9347 if (specs->typespec_word == cts_double)
9349 error_at (loc,
9350 ("both %<long long%> and %<double%> in "
9351 "declaration specifiers"));
9352 break;
9354 pedwarn_c90 (loc, OPT_Wlong_long,
9355 "ISO C90 does not support %<long long%>");
9356 specs->long_long_p = 1;
9357 specs->locations[cdw_long_long] = loc;
9358 break;
9360 if (specs->short_p)
9361 error_at (loc,
9362 ("both %<long%> and %<short%> in "
9363 "declaration specifiers"));
9364 else if (specs->typespec_word == cts_auto_type)
9365 error_at (loc,
9366 ("both %<long%> and %<__auto_type%> in "
9367 "declaration specifiers"));
9368 else if (specs->typespec_word == cts_void)
9369 error_at (loc,
9370 ("both %<long%> and %<void%> in "
9371 "declaration specifiers"));
9372 else if (specs->typespec_word == cts_int128)
9373 error_at (loc,
9374 ("both %<long%> and %<__int128%> in "
9375 "declaration specifiers"));
9376 else if (specs->typespec_word == cts_bool)
9377 error_at (loc,
9378 ("both %<long%> and %<_Bool%> in "
9379 "declaration specifiers"));
9380 else if (specs->typespec_word == cts_char)
9381 error_at (loc,
9382 ("both %<long%> and %<char%> in "
9383 "declaration specifiers"));
9384 else if (specs->typespec_word == cts_float)
9385 error_at (loc,
9386 ("both %<long%> and %<float%> in "
9387 "declaration specifiers"));
9388 else if (specs->typespec_word == cts_dfloat32)
9389 error_at (loc,
9390 ("both %<long%> and %<_Decimal32%> in "
9391 "declaration specifiers"));
9392 else if (specs->typespec_word == cts_dfloat64)
9393 error_at (loc,
9394 ("both %<long%> and %<_Decimal64%> in "
9395 "declaration specifiers"));
9396 else if (specs->typespec_word == cts_dfloat128)
9397 error_at (loc,
9398 ("both %<long%> and %<_Decimal128%> in "
9399 "declaration specifiers"));
9400 else
9402 specs->long_p = true;
9403 specs->locations[cdw_long] = loc;
9405 break;
9406 case RID_SHORT:
9407 dupe = specs->short_p;
9408 if (specs->long_p)
9409 error_at (loc,
9410 ("both %<long%> and %<short%> in "
9411 "declaration specifiers"));
9412 else if (specs->typespec_word == cts_auto_type)
9413 error_at (loc,
9414 ("both %<short%> and %<__auto_type%> in "
9415 "declaration specifiers"));
9416 else if (specs->typespec_word == cts_void)
9417 error_at (loc,
9418 ("both %<short%> and %<void%> in "
9419 "declaration specifiers"));
9420 else if (specs->typespec_word == cts_int128)
9421 error_at (loc,
9422 ("both %<short%> and %<__int128%> in "
9423 "declaration specifiers"));
9424 else if (specs->typespec_word == cts_bool)
9425 error_at (loc,
9426 ("both %<short%> and %<_Bool%> in "
9427 "declaration specifiers"));
9428 else if (specs->typespec_word == cts_char)
9429 error_at (loc,
9430 ("both %<short%> and %<char%> in "
9431 "declaration specifiers"));
9432 else if (specs->typespec_word == cts_float)
9433 error_at (loc,
9434 ("both %<short%> and %<float%> in "
9435 "declaration specifiers"));
9436 else if (specs->typespec_word == cts_double)
9437 error_at (loc,
9438 ("both %<short%> and %<double%> in "
9439 "declaration specifiers"));
9440 else if (specs->typespec_word == cts_dfloat32)
9441 error_at (loc,
9442 ("both %<short%> and %<_Decimal32%> in "
9443 "declaration specifiers"));
9444 else if (specs->typespec_word == cts_dfloat64)
9445 error_at (loc,
9446 ("both %<short%> and %<_Decimal64%> in "
9447 "declaration specifiers"));
9448 else if (specs->typespec_word == cts_dfloat128)
9449 error_at (loc,
9450 ("both %<short%> and %<_Decimal128%> in "
9451 "declaration specifiers"));
9452 else
9454 specs->short_p = true;
9455 specs->locations[cdw_short] = loc;
9457 break;
9458 case RID_SIGNED:
9459 dupe = specs->signed_p;
9460 if (specs->unsigned_p)
9461 error_at (loc,
9462 ("both %<signed%> and %<unsigned%> in "
9463 "declaration specifiers"));
9464 else if (specs->typespec_word == cts_auto_type)
9465 error_at (loc,
9466 ("both %<signed%> and %<__auto_type%> in "
9467 "declaration specifiers"));
9468 else if (specs->typespec_word == cts_void)
9469 error_at (loc,
9470 ("both %<signed%> and %<void%> in "
9471 "declaration specifiers"));
9472 else if (specs->typespec_word == cts_bool)
9473 error_at (loc,
9474 ("both %<signed%> and %<_Bool%> in "
9475 "declaration specifiers"));
9476 else if (specs->typespec_word == cts_float)
9477 error_at (loc,
9478 ("both %<signed%> and %<float%> in "
9479 "declaration specifiers"));
9480 else if (specs->typespec_word == cts_double)
9481 error_at (loc,
9482 ("both %<signed%> and %<double%> in "
9483 "declaration specifiers"));
9484 else if (specs->typespec_word == cts_dfloat32)
9485 error_at (loc,
9486 ("both %<signed%> and %<_Decimal32%> in "
9487 "declaration specifiers"));
9488 else if (specs->typespec_word == cts_dfloat64)
9489 error_at (loc,
9490 ("both %<signed%> and %<_Decimal64%> in "
9491 "declaration specifiers"));
9492 else if (specs->typespec_word == cts_dfloat128)
9493 error_at (loc,
9494 ("both %<signed%> and %<_Decimal128%> in "
9495 "declaration specifiers"));
9496 else
9498 specs->signed_p = true;
9499 specs->locations[cdw_signed] = loc;
9501 break;
9502 case RID_UNSIGNED:
9503 dupe = specs->unsigned_p;
9504 if (specs->signed_p)
9505 error_at (loc,
9506 ("both %<signed%> and %<unsigned%> in "
9507 "declaration specifiers"));
9508 else if (specs->typespec_word == cts_auto_type)
9509 error_at (loc,
9510 ("both %<unsigned%> and %<__auto_type%> in "
9511 "declaration specifiers"));
9512 else if (specs->typespec_word == cts_void)
9513 error_at (loc,
9514 ("both %<unsigned%> and %<void%> in "
9515 "declaration specifiers"));
9516 else if (specs->typespec_word == cts_bool)
9517 error_at (loc,
9518 ("both %<unsigned%> and %<_Bool%> in "
9519 "declaration specifiers"));
9520 else if (specs->typespec_word == cts_float)
9521 error_at (loc,
9522 ("both %<unsigned%> and %<float%> in "
9523 "declaration specifiers"));
9524 else if (specs->typespec_word == cts_double)
9525 error_at (loc,
9526 ("both %<unsigned%> and %<double%> in "
9527 "declaration specifiers"));
9528 else if (specs->typespec_word == cts_dfloat32)
9529 error_at (loc,
9530 ("both %<unsigned%> and %<_Decimal32%> in "
9531 "declaration specifiers"));
9532 else if (specs->typespec_word == cts_dfloat64)
9533 error_at (loc,
9534 ("both %<unsigned%> and %<_Decimal64%> in "
9535 "declaration specifiers"));
9536 else if (specs->typespec_word == cts_dfloat128)
9537 error_at (loc,
9538 ("both %<unsigned%> and %<_Decimal128%> in "
9539 "declaration specifiers"));
9540 else
9542 specs->unsigned_p = true;
9543 specs->locations[cdw_unsigned] = loc;
9545 break;
9546 case RID_COMPLEX:
9547 dupe = specs->complex_p;
9548 if (!in_system_header_at (loc))
9549 pedwarn_c90 (loc, OPT_Wpedantic,
9550 "ISO C90 does not support complex types");
9551 if (specs->typespec_word == cts_auto_type)
9552 error_at (loc,
9553 ("both %<complex%> and %<__auto_type%> in "
9554 "declaration specifiers"));
9555 else if (specs->typespec_word == cts_void)
9556 error_at (loc,
9557 ("both %<complex%> and %<void%> in "
9558 "declaration specifiers"));
9559 else if (specs->typespec_word == cts_bool)
9560 error_at (loc,
9561 ("both %<complex%> and %<_Bool%> in "
9562 "declaration specifiers"));
9563 else if (specs->typespec_word == cts_dfloat32)
9564 error_at (loc,
9565 ("both %<complex%> and %<_Decimal32%> in "
9566 "declaration specifiers"));
9567 else if (specs->typespec_word == cts_dfloat64)
9568 error_at (loc,
9569 ("both %<complex%> and %<_Decimal64%> in "
9570 "declaration specifiers"));
9571 else if (specs->typespec_word == cts_dfloat128)
9572 error_at (loc,
9573 ("both %<complex%> and %<_Decimal128%> in "
9574 "declaration specifiers"));
9575 else if (specs->typespec_word == cts_fract)
9576 error_at (loc,
9577 ("both %<complex%> and %<_Fract%> in "
9578 "declaration specifiers"));
9579 else if (specs->typespec_word == cts_accum)
9580 error_at (loc,
9581 ("both %<complex%> and %<_Accum%> in "
9582 "declaration specifiers"));
9583 else if (specs->saturating_p)
9584 error_at (loc,
9585 ("both %<complex%> and %<_Sat%> in "
9586 "declaration specifiers"));
9587 else
9589 specs->complex_p = true;
9590 specs->locations[cdw_complex] = loc;
9592 break;
9593 case RID_SAT:
9594 dupe = specs->saturating_p;
9595 pedwarn (loc, OPT_Wpedantic,
9596 "ISO C does not support saturating types");
9597 if (specs->typespec_word == cts_int128)
9599 error_at (loc,
9600 ("both %<_Sat%> and %<__int128%> in "
9601 "declaration specifiers"));
9603 else if (specs->typespec_word == cts_auto_type)
9604 error_at (loc,
9605 ("both %<_Sat%> and %<__auto_type%> in "
9606 "declaration specifiers"));
9607 else if (specs->typespec_word == cts_void)
9608 error_at (loc,
9609 ("both %<_Sat%> and %<void%> in "
9610 "declaration specifiers"));
9611 else if (specs->typespec_word == cts_bool)
9612 error_at (loc,
9613 ("both %<_Sat%> and %<_Bool%> in "
9614 "declaration specifiers"));
9615 else if (specs->typespec_word == cts_char)
9616 error_at (loc,
9617 ("both %<_Sat%> and %<char%> in "
9618 "declaration specifiers"));
9619 else if (specs->typespec_word == cts_int)
9620 error_at (loc,
9621 ("both %<_Sat%> and %<int%> in "
9622 "declaration specifiers"));
9623 else if (specs->typespec_word == cts_float)
9624 error_at (loc,
9625 ("both %<_Sat%> and %<float%> in "
9626 "declaration specifiers"));
9627 else if (specs->typespec_word == cts_double)
9628 error_at (loc,
9629 ("both %<_Sat%> and %<double%> in "
9630 "declaration specifiers"));
9631 else if (specs->typespec_word == cts_dfloat32)
9632 error_at (loc,
9633 ("both %<_Sat%> and %<_Decimal32%> in "
9634 "declaration specifiers"));
9635 else if (specs->typespec_word == cts_dfloat64)
9636 error_at (loc,
9637 ("both %<_Sat%> and %<_Decimal64%> in "
9638 "declaration specifiers"));
9639 else if (specs->typespec_word == cts_dfloat128)
9640 error_at (loc,
9641 ("both %<_Sat%> and %<_Decimal128%> in "
9642 "declaration specifiers"));
9643 else if (specs->complex_p)
9644 error_at (loc,
9645 ("both %<_Sat%> and %<complex%> in "
9646 "declaration specifiers"));
9647 else
9649 specs->saturating_p = true;
9650 specs->locations[cdw_saturating] = loc;
9652 break;
9653 default:
9654 gcc_unreachable ();
9657 if (dupe)
9658 error_at (loc, "duplicate %qE", type);
9660 return specs;
9662 else
9664 /* "void", "_Bool", "char", "int", "float", "double", "_Decimal32",
9665 "__int128", "_Decimal64", "_Decimal128", "_Fract", "_Accum" or
9666 "__auto_type". */
9667 if (specs->typespec_word != cts_none)
9669 error_at (loc,
9670 "two or more data types in declaration specifiers");
9671 return specs;
9673 switch (i)
9675 case RID_AUTO_TYPE:
9676 if (specs->long_p)
9677 error_at (loc,
9678 ("both %<long%> and %<__auto_type%> in "
9679 "declaration specifiers"));
9680 else if (specs->short_p)
9681 error_at (loc,
9682 ("both %<short%> and %<__auto_type%> in "
9683 "declaration specifiers"));
9684 else if (specs->signed_p)
9685 error_at (loc,
9686 ("both %<signed%> and %<__auto_type%> in "
9687 "declaration specifiers"));
9688 else if (specs->unsigned_p)
9689 error_at (loc,
9690 ("both %<unsigned%> and %<__auto_type%> in "
9691 "declaration specifiers"));
9692 else if (specs->complex_p)
9693 error_at (loc,
9694 ("both %<complex%> and %<__auto_type%> in "
9695 "declaration specifiers"));
9696 else if (specs->saturating_p)
9697 error_at (loc,
9698 ("both %<_Sat%> and %<__auto_type%> in "
9699 "declaration specifiers"));
9700 else
9702 specs->typespec_word = cts_auto_type;
9703 specs->locations[cdw_typespec] = loc;
9705 return specs;
9706 case RID_INT128:
9707 if (int128_integer_type_node == NULL_TREE)
9709 error_at (loc, "%<__int128%> is not supported for this target");
9710 return specs;
9712 if (!in_system_header_at (input_location))
9713 pedwarn (loc, OPT_Wpedantic,
9714 "ISO C does not support %<__int128%> type");
9716 if (specs->long_p)
9717 error_at (loc,
9718 ("both %<__int128%> and %<long%> in "
9719 "declaration specifiers"));
9720 else if (specs->saturating_p)
9721 error_at (loc,
9722 ("both %<_Sat%> and %<__int128%> in "
9723 "declaration specifiers"));
9724 else if (specs->short_p)
9725 error_at (loc,
9726 ("both %<__int128%> and %<short%> in "
9727 "declaration specifiers"));
9728 else
9730 specs->typespec_word = cts_int128;
9731 specs->locations[cdw_typespec] = loc;
9733 return specs;
9734 case RID_VOID:
9735 if (specs->long_p)
9736 error_at (loc,
9737 ("both %<long%> and %<void%> in "
9738 "declaration specifiers"));
9739 else if (specs->short_p)
9740 error_at (loc,
9741 ("both %<short%> and %<void%> in "
9742 "declaration specifiers"));
9743 else if (specs->signed_p)
9744 error_at (loc,
9745 ("both %<signed%> and %<void%> in "
9746 "declaration specifiers"));
9747 else if (specs->unsigned_p)
9748 error_at (loc,
9749 ("both %<unsigned%> and %<void%> in "
9750 "declaration specifiers"));
9751 else if (specs->complex_p)
9752 error_at (loc,
9753 ("both %<complex%> and %<void%> in "
9754 "declaration specifiers"));
9755 else if (specs->saturating_p)
9756 error_at (loc,
9757 ("both %<_Sat%> and %<void%> in "
9758 "declaration specifiers"));
9759 else
9761 specs->typespec_word = cts_void;
9762 specs->locations[cdw_typespec] = loc;
9764 return specs;
9765 case RID_BOOL:
9766 if (!in_system_header_at (loc))
9767 pedwarn_c90 (loc, OPT_Wpedantic,
9768 "ISO C90 does not support boolean types");
9769 if (specs->long_p)
9770 error_at (loc,
9771 ("both %<long%> and %<_Bool%> in "
9772 "declaration specifiers"));
9773 else if (specs->short_p)
9774 error_at (loc,
9775 ("both %<short%> and %<_Bool%> in "
9776 "declaration specifiers"));
9777 else if (specs->signed_p)
9778 error_at (loc,
9779 ("both %<signed%> and %<_Bool%> in "
9780 "declaration specifiers"));
9781 else if (specs->unsigned_p)
9782 error_at (loc,
9783 ("both %<unsigned%> and %<_Bool%> in "
9784 "declaration specifiers"));
9785 else if (specs->complex_p)
9786 error_at (loc,
9787 ("both %<complex%> and %<_Bool%> in "
9788 "declaration specifiers"));
9789 else if (specs->saturating_p)
9790 error_at (loc,
9791 ("both %<_Sat%> and %<_Bool%> in "
9792 "declaration specifiers"));
9793 else
9795 specs->typespec_word = cts_bool;
9796 specs->locations[cdw_typespec] = loc;
9798 return specs;
9799 case RID_CHAR:
9800 if (specs->long_p)
9801 error_at (loc,
9802 ("both %<long%> and %<char%> in "
9803 "declaration specifiers"));
9804 else if (specs->short_p)
9805 error_at (loc,
9806 ("both %<short%> and %<char%> in "
9807 "declaration specifiers"));
9808 else if (specs->saturating_p)
9809 error_at (loc,
9810 ("both %<_Sat%> and %<char%> in "
9811 "declaration specifiers"));
9812 else
9814 specs->typespec_word = cts_char;
9815 specs->locations[cdw_typespec] = loc;
9817 return specs;
9818 case RID_INT:
9819 if (specs->saturating_p)
9820 error_at (loc,
9821 ("both %<_Sat%> and %<int%> in "
9822 "declaration specifiers"));
9823 else
9825 specs->typespec_word = cts_int;
9826 specs->locations[cdw_typespec] = loc;
9828 return specs;
9829 case RID_FLOAT:
9830 if (specs->long_p)
9831 error_at (loc,
9832 ("both %<long%> and %<float%> in "
9833 "declaration specifiers"));
9834 else if (specs->short_p)
9835 error_at (loc,
9836 ("both %<short%> and %<float%> in "
9837 "declaration specifiers"));
9838 else if (specs->signed_p)
9839 error_at (loc,
9840 ("both %<signed%> and %<float%> in "
9841 "declaration specifiers"));
9842 else if (specs->unsigned_p)
9843 error_at (loc,
9844 ("both %<unsigned%> and %<float%> in "
9845 "declaration specifiers"));
9846 else if (specs->saturating_p)
9847 error_at (loc,
9848 ("both %<_Sat%> and %<float%> in "
9849 "declaration specifiers"));
9850 else
9852 specs->typespec_word = cts_float;
9853 specs->locations[cdw_typespec] = loc;
9855 return specs;
9856 case RID_DOUBLE:
9857 if (specs->long_long_p)
9858 error_at (loc,
9859 ("both %<long long%> and %<double%> in "
9860 "declaration specifiers"));
9861 else if (specs->short_p)
9862 error_at (loc,
9863 ("both %<short%> and %<double%> in "
9864 "declaration specifiers"));
9865 else if (specs->signed_p)
9866 error_at (loc,
9867 ("both %<signed%> and %<double%> in "
9868 "declaration specifiers"));
9869 else if (specs->unsigned_p)
9870 error_at (loc,
9871 ("both %<unsigned%> and %<double%> in "
9872 "declaration specifiers"));
9873 else if (specs->saturating_p)
9874 error_at (loc,
9875 ("both %<_Sat%> and %<double%> in "
9876 "declaration specifiers"));
9877 else
9879 specs->typespec_word = cts_double;
9880 specs->locations[cdw_typespec] = loc;
9882 return specs;
9883 case RID_DFLOAT32:
9884 case RID_DFLOAT64:
9885 case RID_DFLOAT128:
9887 const char *str;
9888 if (i == RID_DFLOAT32)
9889 str = "_Decimal32";
9890 else if (i == RID_DFLOAT64)
9891 str = "_Decimal64";
9892 else
9893 str = "_Decimal128";
9894 if (specs->long_long_p)
9895 error_at (loc,
9896 ("both %<long long%> and %<%s%> in "
9897 "declaration specifiers"),
9898 str);
9899 if (specs->long_p)
9900 error_at (loc,
9901 ("both %<long%> and %<%s%> in "
9902 "declaration specifiers"),
9903 str);
9904 else if (specs->short_p)
9905 error_at (loc,
9906 ("both %<short%> and %<%s%> in "
9907 "declaration specifiers"),
9908 str);
9909 else if (specs->signed_p)
9910 error_at (loc,
9911 ("both %<signed%> and %<%s%> in "
9912 "declaration specifiers"),
9913 str);
9914 else if (specs->unsigned_p)
9915 error_at (loc,
9916 ("both %<unsigned%> and %<%s%> in "
9917 "declaration specifiers"),
9918 str);
9919 else if (specs->complex_p)
9920 error_at (loc,
9921 ("both %<complex%> and %<%s%> in "
9922 "declaration specifiers"),
9923 str);
9924 else if (specs->saturating_p)
9925 error_at (loc,
9926 ("both %<_Sat%> and %<%s%> in "
9927 "declaration specifiers"),
9928 str);
9929 else if (i == RID_DFLOAT32)
9930 specs->typespec_word = cts_dfloat32;
9931 else if (i == RID_DFLOAT64)
9932 specs->typespec_word = cts_dfloat64;
9933 else
9934 specs->typespec_word = cts_dfloat128;
9935 specs->locations[cdw_typespec] = loc;
9937 if (!targetm.decimal_float_supported_p ())
9938 error_at (loc,
9939 ("decimal floating point not supported "
9940 "for this target"));
9941 pedwarn (loc, OPT_Wpedantic,
9942 "ISO C does not support decimal floating point");
9943 return specs;
9944 case RID_FRACT:
9945 case RID_ACCUM:
9947 const char *str;
9948 if (i == RID_FRACT)
9949 str = "_Fract";
9950 else
9951 str = "_Accum";
9952 if (specs->complex_p)
9953 error_at (loc,
9954 ("both %<complex%> and %<%s%> in "
9955 "declaration specifiers"),
9956 str);
9957 else if (i == RID_FRACT)
9958 specs->typespec_word = cts_fract;
9959 else
9960 specs->typespec_word = cts_accum;
9961 specs->locations[cdw_typespec] = loc;
9963 if (!targetm.fixed_point_supported_p ())
9964 error_at (loc,
9965 "fixed-point types not supported for this target");
9966 pedwarn (loc, OPT_Wpedantic,
9967 "ISO C does not support fixed-point types");
9968 return specs;
9969 default:
9970 /* ObjC reserved word "id", handled below. */
9971 break;
9976 /* Now we have a typedef (a TYPE_DECL node), an identifier (some
9977 form of ObjC type, cases such as "int" and "long" being handled
9978 above), a TYPE (struct, union, enum and typeof specifiers) or an
9979 ERROR_MARK. In none of these cases may there have previously
9980 been any type specifiers. */
9981 if (specs->type || specs->typespec_word != cts_none
9982 || specs->long_p || specs->short_p || specs->signed_p
9983 || specs->unsigned_p || specs->complex_p)
9984 error_at (loc, "two or more data types in declaration specifiers");
9985 else if (TREE_CODE (type) == TYPE_DECL)
9987 if (TREE_TYPE (type) == error_mark_node)
9988 ; /* Allow the type to default to int to avoid cascading errors. */
9989 else
9991 specs->type = TREE_TYPE (type);
9992 specs->decl_attr = DECL_ATTRIBUTES (type);
9993 specs->typedef_p = true;
9994 specs->explicit_signed_p = C_TYPEDEF_EXPLICITLY_SIGNED (type);
9995 specs->locations[cdw_typedef] = loc;
9997 /* If this typedef name is defined in a struct, then a C++
9998 lookup would return a different value. */
9999 if (warn_cxx_compat
10000 && I_SYMBOL_BINDING (DECL_NAME (type))->in_struct)
10001 warning_at (loc, OPT_Wc___compat,
10002 "C++ lookup of %qD would return a field, not a type",
10003 type);
10005 /* If we are parsing a struct, record that a struct field
10006 used a typedef. */
10007 if (warn_cxx_compat && struct_parse_info != NULL)
10008 struct_parse_info->typedefs_seen.safe_push (type);
10011 else if (TREE_CODE (type) == IDENTIFIER_NODE)
10013 tree t = lookup_name (type);
10014 if (!t || TREE_CODE (t) != TYPE_DECL)
10015 error_at (loc, "%qE fails to be a typedef or built in type", type);
10016 else if (TREE_TYPE (t) == error_mark_node)
10018 else
10020 specs->type = TREE_TYPE (t);
10021 specs->locations[cdw_typespec] = loc;
10024 else
10026 if (TREE_CODE (type) != ERROR_MARK && spec.kind == ctsk_typeof)
10028 specs->typedef_p = true;
10029 specs->locations[cdw_typedef] = loc;
10030 if (spec.expr)
10032 if (specs->expr)
10033 specs->expr = build2 (COMPOUND_EXPR, TREE_TYPE (spec.expr),
10034 specs->expr, spec.expr);
10035 else
10036 specs->expr = spec.expr;
10037 specs->expr_const_operands &= spec.expr_const_operands;
10040 specs->type = type;
10043 return specs;
10046 /* Add the storage class specifier or function specifier SCSPEC to the
10047 declaration specifiers SPECS, returning SPECS. */
10049 struct c_declspecs *
10050 declspecs_add_scspec (source_location loc,
10051 struct c_declspecs *specs,
10052 tree scspec)
10054 enum rid i;
10055 enum c_storage_class n = csc_none;
10056 bool dupe = false;
10057 specs->declspecs_seen_p = true;
10058 gcc_assert (TREE_CODE (scspec) == IDENTIFIER_NODE
10059 && C_IS_RESERVED_WORD (scspec));
10060 i = C_RID_CODE (scspec);
10061 if (specs->non_sc_seen_p)
10062 warning (OPT_Wold_style_declaration,
10063 "%qE is not at beginning of declaration", scspec);
10064 switch (i)
10066 case RID_INLINE:
10067 /* C99 permits duplicate inline. Although of doubtful utility,
10068 it seems simplest to permit it in gnu89 mode as well, as
10069 there is also little utility in maintaining this as a
10070 difference between gnu89 and C99 inline. */
10071 dupe = false;
10072 specs->inline_p = true;
10073 specs->locations[cdw_inline] = loc;
10074 break;
10075 case RID_NORETURN:
10076 /* Duplicate _Noreturn is permitted. */
10077 dupe = false;
10078 specs->noreturn_p = true;
10079 specs->locations[cdw_noreturn] = loc;
10080 break;
10081 case RID_THREAD:
10082 dupe = specs->thread_p;
10083 if (specs->storage_class == csc_auto)
10084 error ("%qE used with %<auto%>", scspec);
10085 else if (specs->storage_class == csc_register)
10086 error ("%qE used with %<register%>", scspec);
10087 else if (specs->storage_class == csc_typedef)
10088 error ("%qE used with %<typedef%>", scspec);
10089 else
10091 specs->thread_p = true;
10092 specs->thread_gnu_p = (strcmp (IDENTIFIER_POINTER (scspec),
10093 "__thread") == 0);
10094 /* A diagnostic is not required for the use of this
10095 identifier in the implementation namespace; only diagnose
10096 it for the C11 spelling because of existing code using
10097 the other spelling. */
10098 if (!specs->thread_gnu_p)
10100 if (flag_isoc99)
10101 pedwarn_c99 (loc, OPT_Wpedantic,
10102 "ISO C99 does not support %qE", scspec);
10103 else
10104 pedwarn_c99 (loc, OPT_Wpedantic,
10105 "ISO C90 does not support %qE", scspec);
10107 specs->locations[cdw_thread] = loc;
10109 break;
10110 case RID_AUTO:
10111 n = csc_auto;
10112 break;
10113 case RID_EXTERN:
10114 n = csc_extern;
10115 /* Diagnose "__thread extern". */
10116 if (specs->thread_p && specs->thread_gnu_p)
10117 error ("%<__thread%> before %<extern%>");
10118 break;
10119 case RID_REGISTER:
10120 n = csc_register;
10121 break;
10122 case RID_STATIC:
10123 n = csc_static;
10124 /* Diagnose "__thread static". */
10125 if (specs->thread_p && specs->thread_gnu_p)
10126 error ("%<__thread%> before %<static%>");
10127 break;
10128 case RID_TYPEDEF:
10129 n = csc_typedef;
10130 break;
10131 default:
10132 gcc_unreachable ();
10134 if (n != csc_none && n == specs->storage_class)
10135 dupe = true;
10136 if (dupe)
10138 if (i == RID_THREAD)
10139 error ("duplicate %<_Thread_local%> or %<__thread%>");
10140 else
10141 error ("duplicate %qE", scspec);
10143 if (n != csc_none)
10145 if (specs->storage_class != csc_none && n != specs->storage_class)
10147 error ("multiple storage classes in declaration specifiers");
10149 else
10151 specs->storage_class = n;
10152 specs->locations[cdw_storage_class] = loc;
10153 if (n != csc_extern && n != csc_static && specs->thread_p)
10155 error ("%qs used with %qE",
10156 specs->thread_gnu_p ? "__thread" : "_Thread_local",
10157 scspec);
10158 specs->thread_p = false;
10162 return specs;
10165 /* Add the attributes ATTRS to the declaration specifiers SPECS,
10166 returning SPECS. */
10168 struct c_declspecs *
10169 declspecs_add_attrs (source_location loc, struct c_declspecs *specs, tree attrs)
10171 specs->attrs = chainon (attrs, specs->attrs);
10172 specs->locations[cdw_attributes] = loc;
10173 specs->declspecs_seen_p = true;
10174 return specs;
10177 /* Add an _Alignas specifier (expression ALIGN, or type whose
10178 alignment is ALIGN) to the declaration specifiers SPECS, returning
10179 SPECS. */
10180 struct c_declspecs *
10181 declspecs_add_alignas (source_location loc,
10182 struct c_declspecs *specs, tree align)
10184 int align_log;
10185 specs->alignas_p = true;
10186 specs->locations[cdw_alignas] = loc;
10187 if (align == error_mark_node)
10188 return specs;
10189 align_log = check_user_alignment (align, true);
10190 if (align_log > specs->align_log)
10191 specs->align_log = align_log;
10192 return specs;
10195 /* Combine "long", "short", "signed", "unsigned" and "_Complex" type
10196 specifiers with any other type specifier to determine the resulting
10197 type. This is where ISO C checks on complex types are made, since
10198 "_Complex long" is a prefix of the valid ISO C type "_Complex long
10199 double". */
10201 struct c_declspecs *
10202 finish_declspecs (struct c_declspecs *specs)
10204 /* If a type was specified as a whole, we have no modifiers and are
10205 done. */
10206 if (specs->type != NULL_TREE)
10208 gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
10209 && !specs->signed_p && !specs->unsigned_p
10210 && !specs->complex_p);
10212 /* Set a dummy type. */
10213 if (TREE_CODE (specs->type) == ERROR_MARK)
10214 specs->type = integer_type_node;
10215 return specs;
10218 /* If none of "void", "_Bool", "char", "int", "float" or "double"
10219 has been specified, treat it as "int" unless "_Complex" is
10220 present and there are no other specifiers. If we just have
10221 "_Complex", it is equivalent to "_Complex double", but e.g.
10222 "_Complex short" is equivalent to "_Complex short int". */
10223 if (specs->typespec_word == cts_none)
10225 if (specs->saturating_p)
10227 error_at (specs->locations[cdw_saturating],
10228 "%<_Sat%> is used without %<_Fract%> or %<_Accum%>");
10229 if (!targetm.fixed_point_supported_p ())
10230 error_at (specs->locations[cdw_saturating],
10231 "fixed-point types not supported for this target");
10232 specs->typespec_word = cts_fract;
10234 else if (specs->long_p || specs->short_p
10235 || specs->signed_p || specs->unsigned_p)
10237 specs->typespec_word = cts_int;
10239 else if (specs->complex_p)
10241 specs->typespec_word = cts_double;
10242 pedwarn (specs->locations[cdw_complex], OPT_Wpedantic,
10243 "ISO C does not support plain %<complex%> meaning "
10244 "%<double complex%>");
10246 else
10248 specs->typespec_word = cts_int;
10249 specs->default_int_p = true;
10250 /* We don't diagnose this here because grokdeclarator will
10251 give more specific diagnostics according to whether it is
10252 a function definition. */
10256 /* If "signed" was specified, record this to distinguish "int" and
10257 "signed int" in the case of a bit-field with
10258 -funsigned-bitfields. */
10259 specs->explicit_signed_p = specs->signed_p;
10261 /* Now compute the actual type. */
10262 switch (specs->typespec_word)
10264 case cts_auto_type:
10265 gcc_assert (!specs->long_p && !specs->short_p
10266 && !specs->signed_p && !specs->unsigned_p
10267 && !specs->complex_p);
10268 /* Type to be filled in later. */
10269 break;
10270 case cts_void:
10271 gcc_assert (!specs->long_p && !specs->short_p
10272 && !specs->signed_p && !specs->unsigned_p
10273 && !specs->complex_p);
10274 specs->type = void_type_node;
10275 break;
10276 case cts_bool:
10277 gcc_assert (!specs->long_p && !specs->short_p
10278 && !specs->signed_p && !specs->unsigned_p
10279 && !specs->complex_p);
10280 specs->type = boolean_type_node;
10281 break;
10282 case cts_char:
10283 gcc_assert (!specs->long_p && !specs->short_p);
10284 gcc_assert (!(specs->signed_p && specs->unsigned_p));
10285 if (specs->signed_p)
10286 specs->type = signed_char_type_node;
10287 else if (specs->unsigned_p)
10288 specs->type = unsigned_char_type_node;
10289 else
10290 specs->type = char_type_node;
10291 if (specs->complex_p)
10293 pedwarn (specs->locations[cdw_complex], OPT_Wpedantic,
10294 "ISO C does not support complex integer types");
10295 specs->type = build_complex_type (specs->type);
10297 break;
10298 case cts_int128:
10299 gcc_assert (!specs->long_p && !specs->short_p && !specs->long_long_p);
10300 gcc_assert (!(specs->signed_p && specs->unsigned_p));
10301 specs->type = (specs->unsigned_p
10302 ? int128_unsigned_type_node
10303 : int128_integer_type_node);
10304 if (specs->complex_p)
10306 pedwarn (specs->locations[cdw_complex], OPT_Wpedantic,
10307 "ISO C does not support complex integer types");
10308 specs->type = build_complex_type (specs->type);
10310 break;
10311 case cts_int:
10312 gcc_assert (!(specs->long_p && specs->short_p));
10313 gcc_assert (!(specs->signed_p && specs->unsigned_p));
10314 if (specs->long_long_p)
10315 specs->type = (specs->unsigned_p
10316 ? long_long_unsigned_type_node
10317 : long_long_integer_type_node);
10318 else if (specs->long_p)
10319 specs->type = (specs->unsigned_p
10320 ? long_unsigned_type_node
10321 : long_integer_type_node);
10322 else if (specs->short_p)
10323 specs->type = (specs->unsigned_p
10324 ? short_unsigned_type_node
10325 : short_integer_type_node);
10326 else
10327 specs->type = (specs->unsigned_p
10328 ? unsigned_type_node
10329 : integer_type_node);
10330 if (specs->complex_p)
10332 pedwarn (specs->locations[cdw_complex], OPT_Wpedantic,
10333 "ISO C does not support complex integer types");
10334 specs->type = build_complex_type (specs->type);
10336 break;
10337 case cts_float:
10338 gcc_assert (!specs->long_p && !specs->short_p
10339 && !specs->signed_p && !specs->unsigned_p);
10340 specs->type = (specs->complex_p
10341 ? complex_float_type_node
10342 : float_type_node);
10343 break;
10344 case cts_double:
10345 gcc_assert (!specs->long_long_p && !specs->short_p
10346 && !specs->signed_p && !specs->unsigned_p);
10347 if (specs->long_p)
10349 specs->type = (specs->complex_p
10350 ? complex_long_double_type_node
10351 : long_double_type_node);
10353 else
10355 specs->type = (specs->complex_p
10356 ? complex_double_type_node
10357 : double_type_node);
10359 break;
10360 case cts_dfloat32:
10361 case cts_dfloat64:
10362 case cts_dfloat128:
10363 gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
10364 && !specs->signed_p && !specs->unsigned_p && !specs->complex_p);
10365 if (specs->typespec_word == cts_dfloat32)
10366 specs->type = dfloat32_type_node;
10367 else if (specs->typespec_word == cts_dfloat64)
10368 specs->type = dfloat64_type_node;
10369 else
10370 specs->type = dfloat128_type_node;
10371 break;
10372 case cts_fract:
10373 gcc_assert (!specs->complex_p);
10374 if (!targetm.fixed_point_supported_p ())
10375 specs->type = integer_type_node;
10376 else if (specs->saturating_p)
10378 if (specs->long_long_p)
10379 specs->type = specs->unsigned_p
10380 ? sat_unsigned_long_long_fract_type_node
10381 : sat_long_long_fract_type_node;
10382 else if (specs->long_p)
10383 specs->type = specs->unsigned_p
10384 ? sat_unsigned_long_fract_type_node
10385 : sat_long_fract_type_node;
10386 else if (specs->short_p)
10387 specs->type = specs->unsigned_p
10388 ? sat_unsigned_short_fract_type_node
10389 : sat_short_fract_type_node;
10390 else
10391 specs->type = specs->unsigned_p
10392 ? sat_unsigned_fract_type_node
10393 : sat_fract_type_node;
10395 else
10397 if (specs->long_long_p)
10398 specs->type = specs->unsigned_p
10399 ? unsigned_long_long_fract_type_node
10400 : long_long_fract_type_node;
10401 else if (specs->long_p)
10402 specs->type = specs->unsigned_p
10403 ? unsigned_long_fract_type_node
10404 : long_fract_type_node;
10405 else if (specs->short_p)
10406 specs->type = specs->unsigned_p
10407 ? unsigned_short_fract_type_node
10408 : short_fract_type_node;
10409 else
10410 specs->type = specs->unsigned_p
10411 ? unsigned_fract_type_node
10412 : fract_type_node;
10414 break;
10415 case cts_accum:
10416 gcc_assert (!specs->complex_p);
10417 if (!targetm.fixed_point_supported_p ())
10418 specs->type = integer_type_node;
10419 else if (specs->saturating_p)
10421 if (specs->long_long_p)
10422 specs->type = specs->unsigned_p
10423 ? sat_unsigned_long_long_accum_type_node
10424 : sat_long_long_accum_type_node;
10425 else if (specs->long_p)
10426 specs->type = specs->unsigned_p
10427 ? sat_unsigned_long_accum_type_node
10428 : sat_long_accum_type_node;
10429 else if (specs->short_p)
10430 specs->type = specs->unsigned_p
10431 ? sat_unsigned_short_accum_type_node
10432 : sat_short_accum_type_node;
10433 else
10434 specs->type = specs->unsigned_p
10435 ? sat_unsigned_accum_type_node
10436 : sat_accum_type_node;
10438 else
10440 if (specs->long_long_p)
10441 specs->type = specs->unsigned_p
10442 ? unsigned_long_long_accum_type_node
10443 : long_long_accum_type_node;
10444 else if (specs->long_p)
10445 specs->type = specs->unsigned_p
10446 ? unsigned_long_accum_type_node
10447 : long_accum_type_node;
10448 else if (specs->short_p)
10449 specs->type = specs->unsigned_p
10450 ? unsigned_short_accum_type_node
10451 : short_accum_type_node;
10452 else
10453 specs->type = specs->unsigned_p
10454 ? unsigned_accum_type_node
10455 : accum_type_node;
10457 break;
10458 default:
10459 gcc_unreachable ();
10462 return specs;
10465 /* A subroutine of c_write_global_declarations. Perform final processing
10466 on one file scope's declarations (or the external scope's declarations),
10467 GLOBALS. */
10469 static void
10470 c_write_global_declarations_1 (tree globals)
10472 tree decl;
10473 bool reconsider;
10475 /* Process the decls in the order they were written. */
10476 for (decl = globals; decl; decl = DECL_CHAIN (decl))
10478 /* Check for used but undefined static functions using the C
10479 standard's definition of "used", and set TREE_NO_WARNING so
10480 that check_global_declarations doesn't repeat the check. */
10481 if (TREE_CODE (decl) == FUNCTION_DECL
10482 && DECL_INITIAL (decl) == 0
10483 && DECL_EXTERNAL (decl)
10484 && !TREE_PUBLIC (decl)
10485 && C_DECL_USED (decl))
10487 pedwarn (input_location, 0, "%q+F used but never defined", decl);
10488 TREE_NO_WARNING (decl) = 1;
10491 wrapup_global_declaration_1 (decl);
10496 reconsider = false;
10497 for (decl = globals; decl; decl = DECL_CHAIN (decl))
10498 reconsider |= wrapup_global_declaration_2 (decl);
10500 while (reconsider);
10502 for (decl = globals; decl; decl = DECL_CHAIN (decl))
10503 check_global_declaration_1 (decl);
10506 /* A subroutine of c_write_global_declarations Emit debug information for each
10507 of the declarations in GLOBALS. */
10509 static void
10510 c_write_global_declarations_2 (tree globals)
10512 tree decl;
10514 for (decl = globals; decl ; decl = DECL_CHAIN (decl))
10515 debug_hooks->global_decl (decl);
10518 /* Callback to collect a source_ref from a DECL. */
10520 static void
10521 collect_source_ref_cb (tree decl)
10523 if (!DECL_IS_BUILTIN (decl))
10524 collect_source_ref (LOCATION_FILE (decl_sloc (decl, false)));
10527 /* Preserve the external declarations scope across a garbage collect. */
10528 static GTY(()) tree ext_block;
10530 /* Collect all references relevant to SOURCE_FILE. */
10532 static void
10533 collect_all_refs (const char *source_file)
10535 tree t;
10536 unsigned i;
10538 FOR_EACH_VEC_ELT (*all_translation_units, i, t)
10539 collect_ada_nodes (BLOCK_VARS (DECL_INITIAL (t)), source_file);
10541 collect_ada_nodes (BLOCK_VARS (ext_block), source_file);
10544 /* Iterate over all global declarations and call CALLBACK. */
10546 static void
10547 for_each_global_decl (void (*callback) (tree decl))
10549 tree t;
10550 tree decls;
10551 tree decl;
10552 unsigned i;
10554 FOR_EACH_VEC_ELT (*all_translation_units, i, t)
10556 decls = DECL_INITIAL (t);
10557 for (decl = BLOCK_VARS (decls); decl; decl = TREE_CHAIN (decl))
10558 callback (decl);
10561 for (decl = BLOCK_VARS (ext_block); decl; decl = TREE_CHAIN (decl))
10562 callback (decl);
10565 void
10566 c_write_global_declarations (void)
10568 tree t;
10569 unsigned i;
10571 /* We don't want to do this if generating a PCH. */
10572 if (pch_file)
10573 return;
10575 timevar_start (TV_PHASE_DEFERRED);
10577 /* Do the Objective-C stuff. This is where all the Objective-C
10578 module stuff gets generated (symtab, class/protocol/selector
10579 lists etc). */
10580 if (c_dialect_objc ())
10581 objc_write_global_declarations ();
10583 /* Close the external scope. */
10584 ext_block = pop_scope ();
10585 external_scope = 0;
10586 gcc_assert (!current_scope);
10588 /* Handle -fdump-ada-spec[-slim]. */
10589 if (flag_dump_ada_spec || flag_dump_ada_spec_slim)
10591 /* Build a table of files to generate specs for */
10592 if (flag_dump_ada_spec_slim)
10593 collect_source_ref (main_input_filename);
10594 else
10595 for_each_global_decl (collect_source_ref_cb);
10597 dump_ada_specs (collect_all_refs, NULL);
10600 if (ext_block)
10602 tree tmp = BLOCK_VARS (ext_block);
10603 int flags;
10604 FILE * stream = dump_begin (TDI_tu, &flags);
10605 if (stream && tmp)
10607 dump_node (tmp, flags & ~TDF_SLIM, stream);
10608 dump_end (TDI_tu, stream);
10612 /* Process all file scopes in this compilation, and the external_scope,
10613 through wrapup_global_declarations and check_global_declarations. */
10614 FOR_EACH_VEC_ELT (*all_translation_units, i, t)
10615 c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t)));
10616 c_write_global_declarations_1 (BLOCK_VARS (ext_block));
10618 timevar_stop (TV_PHASE_DEFERRED);
10619 timevar_start (TV_PHASE_OPT_GEN);
10621 /* We're done parsing; proceed to optimize and emit assembly.
10622 FIXME: shouldn't be the front end's responsibility to call this. */
10623 symtab->finalize_compilation_unit ();
10625 timevar_stop (TV_PHASE_OPT_GEN);
10626 timevar_start (TV_PHASE_DBGINFO);
10628 /* After cgraph has had a chance to emit everything that's going to
10629 be emitted, output debug information for globals. */
10630 if (!seen_error ())
10632 timevar_push (TV_SYMOUT);
10633 FOR_EACH_VEC_ELT (*all_translation_units, i, t)
10634 c_write_global_declarations_2 (BLOCK_VARS (DECL_INITIAL (t)));
10635 c_write_global_declarations_2 (BLOCK_VARS (ext_block));
10636 timevar_pop (TV_SYMOUT);
10639 ext_block = NULL;
10640 timevar_stop (TV_PHASE_DBGINFO);
10643 /* Register reserved keyword WORD as qualifier for address space AS. */
10645 void
10646 c_register_addr_space (const char *word, addr_space_t as)
10648 int rid = RID_FIRST_ADDR_SPACE + as;
10649 tree id;
10651 /* Address space qualifiers are only supported
10652 in C with GNU extensions enabled. */
10653 if (c_dialect_objc () || flag_no_asm)
10654 return;
10656 id = get_identifier (word);
10657 C_SET_RID_CODE (id, rid);
10658 C_IS_RESERVED_WORD (id) = 1;
10659 ridpointers [rid] = id;
10662 /* Return identifier to look up for omp declare reduction. */
10664 tree
10665 c_omp_reduction_id (enum tree_code reduction_code, tree reduction_id)
10667 const char *p = NULL;
10668 switch (reduction_code)
10670 case PLUS_EXPR: p = "+"; break;
10671 case MULT_EXPR: p = "*"; break;
10672 case MINUS_EXPR: p = "-"; break;
10673 case BIT_AND_EXPR: p = "&"; break;
10674 case BIT_XOR_EXPR: p = "^"; break;
10675 case BIT_IOR_EXPR: p = "|"; break;
10676 case TRUTH_ANDIF_EXPR: p = "&&"; break;
10677 case TRUTH_ORIF_EXPR: p = "||"; break;
10678 case MIN_EXPR: p = "min"; break;
10679 case MAX_EXPR: p = "max"; break;
10680 default:
10681 break;
10684 if (p == NULL)
10686 if (TREE_CODE (reduction_id) != IDENTIFIER_NODE)
10687 return error_mark_node;
10688 p = IDENTIFIER_POINTER (reduction_id);
10691 const char prefix[] = "omp declare reduction ";
10692 size_t lenp = sizeof (prefix);
10693 size_t len = strlen (p);
10694 char *name = XALLOCAVEC (char, lenp + len);
10695 memcpy (name, prefix, lenp - 1);
10696 memcpy (name + lenp - 1, p, len + 1);
10697 return get_identifier (name);
10700 /* Lookup REDUCTION_ID in the current scope, or create an artificial
10701 VAR_DECL, bind it into the current scope and return it. */
10703 tree
10704 c_omp_reduction_decl (tree reduction_id)
10706 struct c_binding *b = I_SYMBOL_BINDING (reduction_id);
10707 if (b != NULL && B_IN_CURRENT_SCOPE (b))
10708 return b->decl;
10710 tree decl = build_decl (BUILTINS_LOCATION, VAR_DECL,
10711 reduction_id, integer_type_node);
10712 DECL_ARTIFICIAL (decl) = 1;
10713 DECL_EXTERNAL (decl) = 1;
10714 TREE_STATIC (decl) = 1;
10715 TREE_PUBLIC (decl) = 0;
10716 bind (reduction_id, decl, current_scope, true, false, BUILTINS_LOCATION);
10717 return decl;
10720 /* Lookup REDUCTION_ID in the first scope where it has entry for TYPE. */
10722 tree
10723 c_omp_reduction_lookup (tree reduction_id, tree type)
10725 struct c_binding *b = I_SYMBOL_BINDING (reduction_id);
10726 while (b)
10728 tree t;
10729 for (t = DECL_INITIAL (b->decl); t; t = TREE_CHAIN (t))
10730 if (comptypes (TREE_PURPOSE (t), type))
10731 return TREE_VALUE (t);
10732 b = b->shadowed;
10734 return error_mark_node;
10737 /* Helper function called via walk_tree, to diagnose invalid
10738 #pragma omp declare reduction combiners or initializers. */
10740 tree
10741 c_check_omp_declare_reduction_r (tree *tp, int *, void *data)
10743 tree *vars = (tree *) data;
10744 if (SSA_VAR_P (*tp)
10745 && !DECL_ARTIFICIAL (*tp)
10746 && *tp != vars[0]
10747 && *tp != vars[1])
10749 location_t loc = DECL_SOURCE_LOCATION (vars[0]);
10750 if (strcmp (IDENTIFIER_POINTER (DECL_NAME (vars[0])), "omp_out") == 0)
10751 error_at (loc, "%<#pragma omp declare reduction%> combiner refers to "
10752 "variable %qD which is not %<omp_out%> nor %<omp_in%>",
10753 *tp);
10754 else
10755 error_at (loc, "%<#pragma omp declare reduction%> initializer refers "
10756 "to variable %qD which is not %<omp_priv%> nor "
10757 "%<omp_orig%>",
10758 *tp);
10759 return *tp;
10761 return NULL_TREE;
10764 #include "gt-c-c-decl.h"