* toplev.h (floor_log2): If GCC_VERSION >= 3004, declare as static
[official-gcc.git] / gcc / c-decl.c
blobc2c2a890c9d83c58aabff2f162a354fb4ffec8ce
1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
4 Free Software Foundation, Inc.
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
22 /* Process declarations and symbol lookup for C front end.
23 Also constructs types; the standard scalar types at initialization,
24 and structure, union, array and enum types when they are declared. */
26 /* ??? not all decl nodes are given the most useful possible
27 line numbers. For example, the CONST_DECLs for enum values. */
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "input.h"
33 #include "tm.h"
34 #include "intl.h"
35 #include "tree.h"
36 #include "tree-inline.h"
37 #include "rtl.h"
38 #include "flags.h"
39 #include "function.h"
40 #include "output.h"
41 #include "expr.h"
42 #include "c-tree.h"
43 #include "toplev.h"
44 #include "ggc.h"
45 #include "tm_p.h"
46 #include "cpplib.h"
47 #include "target.h"
48 #include "debug.h"
49 #include "opts.h"
50 #include "timevar.h"
51 #include "c-common.h"
52 #include "c-pragma.h"
53 #include "langhooks.h"
54 #include "tree-mudflap.h"
55 #include "gimple.h"
56 #include "tree-iterator.h"
57 #include "diagnostic.h"
58 #include "tree-dump.h"
59 #include "cgraph.h"
60 #include "hashtab.h"
61 #include "libfuncs.h"
62 #include "except.h"
63 #include "langhooks-def.h"
64 #include "pointer-set.h"
65 #include "gimple.h"
66 #include "plugin.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 /* True means we've initialized exception handling. */
95 bool c_eh_initialized_p;
97 /* The file and line that the prototype came from if this is an
98 old-style definition; used for diagnostics in
99 store_parm_decls_oldstyle. */
101 static location_t current_function_prototype_locus;
103 /* Whether this prototype was built-in. */
105 static bool current_function_prototype_built_in;
107 /* The argument type information of this prototype. */
109 static tree current_function_prototype_arg_types;
111 /* The argument information structure for the function currently being
112 defined. */
114 static struct c_arg_info *current_function_arg_info;
116 /* The obstack on which parser and related data structures, which are
117 not live beyond their top-level declaration or definition, are
118 allocated. */
119 struct obstack parser_obstack;
121 /* The current statement tree. */
123 static GTY(()) struct stmt_tree_s c_stmt_tree;
125 /* State saving variables. */
126 tree c_break_label;
127 tree c_cont_label;
129 /* True if we are currently parsing the fields of a struct or
130 union. */
132 static bool in_struct;
134 /* A list of types defined in the current struct or union. */
136 static VEC(tree,heap) *struct_types;
138 /* Linked list of TRANSLATION_UNIT_DECLS for the translation units
139 included in this invocation. Note that the current translation
140 unit is not included in this list. */
142 static GTY(()) tree all_translation_units;
144 /* A list of decls to be made automatically visible in each file scope. */
145 static GTY(()) tree visible_builtins;
147 /* Set to 0 at beginning of a function definition, set to 1 if
148 a return statement that specifies a return value is seen. */
150 int current_function_returns_value;
152 /* Set to 0 at beginning of a function definition, set to 1 if
153 a return statement with no argument is seen. */
155 int current_function_returns_null;
157 /* Set to 0 at beginning of a function definition, set to 1 if
158 a call to a noreturn function is seen. */
160 int current_function_returns_abnormally;
162 /* Set to nonzero by `grokdeclarator' for a function
163 whose return type is defaulted, if warnings for this are desired. */
165 static int warn_about_return_type;
167 /* Nonzero when the current toplevel function contains a declaration
168 of a nested function which is never defined. */
170 static bool undef_nested_function;
172 /* True means global_bindings_p should return false even if the scope stack
173 says we are in file scope. */
174 bool c_override_global_bindings_to_false;
177 /* Each c_binding structure describes one binding of an identifier to
178 a decl. All the decls in a scope - irrespective of namespace - are
179 chained together by the ->prev field, which (as the name implies)
180 runs in reverse order. All the decls in a given namespace bound to
181 a given identifier are chained by the ->shadowed field, which runs
182 from inner to outer scopes.
184 The ->decl field usually points to a DECL node, but there are two
185 exceptions. In the namespace of type tags, the bound entity is a
186 RECORD_TYPE, UNION_TYPE, or ENUMERAL_TYPE node. If an undeclared
187 identifier is encountered, it is bound to error_mark_node to
188 suppress further errors about that identifier in the current
189 function.
191 The ->u.type field stores the type of the declaration in this scope;
192 if NULL, the type is the type of the ->decl field. This is only of
193 relevance for objects with external or internal linkage which may
194 be redeclared in inner scopes, forming composite types that only
195 persist for the duration of those scopes. In the external scope,
196 this stores the composite of all the types declared for this
197 object, visible or not. The ->inner_comp field (used only at file
198 scope) stores whether an incomplete array type at file scope was
199 completed at an inner scope to an array size other than 1.
201 The ->u.label field is used for labels. It points to a structure
202 which stores additional information used for warnings.
204 The depth field is copied from the scope structure that holds this
205 decl. It is used to preserve the proper ordering of the ->shadowed
206 field (see bind()) and also for a handful of special-case checks.
207 Finally, the invisible bit is true for a decl which should be
208 ignored for purposes of normal name lookup, and the nested bit is
209 true for a decl that's been bound a second time in an inner scope;
210 in all such cases, the binding in the outer scope will have its
211 invisible bit true. */
213 struct GTY((chain_next ("%h.prev"))) c_binding {
214 union GTY(()) { /* first so GTY desc can use decl */
215 tree GTY((tag ("0"))) type; /* the type in this scope */
216 struct c_label_vars * GTY((tag ("1"))) label; /* for warnings */
217 } GTY((desc ("TREE_CODE (%0.decl) == LABEL_DECL"))) u;
218 tree decl; /* the decl bound */
219 tree id; /* the identifier it's bound to */
220 struct c_binding *prev; /* the previous decl in this scope */
221 struct c_binding *shadowed; /* the innermost decl shadowed by this one */
222 unsigned int depth : 28; /* depth of this scope */
223 BOOL_BITFIELD invisible : 1; /* normal lookup should ignore this binding */
224 BOOL_BITFIELD nested : 1; /* do not set DECL_CONTEXT when popping */
225 BOOL_BITFIELD inner_comp : 1; /* incomplete array completed in inner scope */
226 /* one free bit */
227 location_t locus; /* location for nested bindings */
229 #define B_IN_SCOPE(b1, b2) ((b1)->depth == (b2)->depth)
230 #define B_IN_CURRENT_SCOPE(b) ((b)->depth == current_scope->depth)
231 #define B_IN_FILE_SCOPE(b) ((b)->depth == 1 /*file_scope->depth*/)
232 #define B_IN_EXTERNAL_SCOPE(b) ((b)->depth == 0 /*external_scope->depth*/)
234 #define I_SYMBOL_BINDING(node) \
235 (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->symbol_binding)
236 #define I_SYMBOL_DECL(node) \
237 (I_SYMBOL_BINDING(node) ? I_SYMBOL_BINDING(node)->decl : 0)
239 #define I_TAG_BINDING(node) \
240 (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->tag_binding)
241 #define I_TAG_DECL(node) \
242 (I_TAG_BINDING(node) ? I_TAG_BINDING(node)->decl : 0)
244 #define I_LABEL_BINDING(node) \
245 (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->label_binding)
246 #define I_LABEL_DECL(node) \
247 (I_LABEL_BINDING(node) ? I_LABEL_BINDING(node)->decl : 0)
249 /* Each C symbol points to three linked lists of c_binding structures.
250 These describe the values of the identifier in the three different
251 namespaces defined by the language. */
253 struct GTY(()) lang_identifier {
254 struct c_common_identifier common_id;
255 struct c_binding *symbol_binding; /* vars, funcs, constants, typedefs */
256 struct c_binding *tag_binding; /* struct/union/enum tags */
257 struct c_binding *label_binding; /* labels */
260 /* Validate c-lang.c's assumptions. */
261 extern char C_SIZEOF_STRUCT_LANG_IDENTIFIER_isnt_accurate
262 [(sizeof(struct lang_identifier) == C_SIZEOF_STRUCT_LANG_IDENTIFIER) ? 1 : -1];
264 /* The resulting tree type. */
266 union GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"),
267 chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE ? (union lang_tree_node *) TYPE_NEXT_VARIANT (&%h.generic) : ((union lang_tree_node *) TREE_CHAIN (&%h.generic))"))) lang_tree_node
269 union tree_node GTY ((tag ("0"),
270 desc ("tree_node_structure (&%h)")))
271 generic;
272 struct lang_identifier GTY ((tag ("1"))) identifier;
275 /* Track bindings and other things that matter for goto warnings. For
276 efficiency, we do not gather all the decls at the point of
277 definition. Instead, we point into the bindings structure. As
278 scopes are popped, we update these structures and gather the decls
279 that matter at that time. */
281 struct GTY(()) c_spot_bindings {
282 /* The currently open scope which holds bindings defined when the
283 label was defined or the goto statement was found. */
284 struct c_scope *scope;
285 /* The bindings in the scope field which were defined at the point
286 of the label or goto. This lets us look at older or newer
287 bindings in the scope, as appropriate. */
288 struct c_binding *bindings_in_scope;
289 /* The number of statement expressions that have started since this
290 label or goto statement was defined. This is zero if we are at
291 the same statement expression level. It is positive if we are in
292 a statement expression started since this spot. It is negative
293 if this spot was in a statement expression and we have left
294 it. */
295 int stmt_exprs;
296 /* Whether we started in a statement expression but are no longer in
297 it. This is set to true if stmt_exprs ever goes negative. */
298 bool left_stmt_expr;
301 /* This structure is used to keep track of bindings seen when a goto
302 statement is defined. This is only used if we see the goto
303 statement before we see the label. */
305 struct GTY(()) c_goto_bindings {
306 /* The location of the goto statement. */
307 location_t loc;
308 /* The bindings of the goto statement. */
309 struct c_spot_bindings goto_bindings;
312 typedef struct c_goto_bindings *c_goto_bindings_p;
313 DEF_VEC_P(c_goto_bindings_p);
314 DEF_VEC_ALLOC_P(c_goto_bindings_p,gc);
316 /* The additional information we keep track of for a label binding.
317 These fields are updated as scopes are popped. */
319 struct GTY(()) c_label_vars {
320 /* The shadowed c_label_vars, when one label shadows another (which
321 can only happen using a __label__ declaration). */
322 struct c_label_vars *shadowed;
323 /* The bindings when the label was defined. */
324 struct c_spot_bindings label_bindings;
325 /* A list of decls that we care about: decls about which we should
326 warn if a goto branches to this label from later in the function.
327 Decls are added to this list as scopes are popped. We only add
328 the decls that matter. */
329 VEC(tree,gc) *decls_in_scope;
330 /* A list of goto statements to this label. This is only used for
331 goto statements seen before the label was defined, so that we can
332 issue appropriate warnings for them. */
333 VEC(c_goto_bindings_p,gc) *gotos;
336 /* Each c_scope structure describes the complete contents of one
337 scope. Four scopes are distinguished specially: the innermost or
338 current scope, the innermost function scope, the file scope (always
339 the second to outermost) and the outermost or external scope.
341 Most declarations are recorded in the current scope.
343 All normal label declarations are recorded in the innermost
344 function scope, as are bindings of undeclared identifiers to
345 error_mark_node. (GCC permits nested functions as an extension,
346 hence the 'innermost' qualifier.) Explicitly declared labels
347 (using the __label__ extension) appear in the current scope.
349 Being in the file scope (current_scope == file_scope) causes
350 special behavior in several places below. Also, under some
351 conditions the Objective-C front end records declarations in the
352 file scope even though that isn't the current scope.
354 All declarations with external linkage are recorded in the external
355 scope, even if they aren't visible there; this models the fact that
356 such declarations are visible to the entire program, and (with a
357 bit of cleverness, see pushdecl) allows diagnosis of some violations
358 of C99 6.2.2p7 and 6.2.7p2:
360 If, within the same translation unit, the same identifier appears
361 with both internal and external linkage, the behavior is
362 undefined.
364 All declarations that refer to the same object or function shall
365 have compatible type; otherwise, the behavior is undefined.
367 Initially only the built-in declarations, which describe compiler
368 intrinsic functions plus a subset of the standard library, are in
369 this scope.
371 The order of the blocks list matters, and it is frequently appended
372 to. To avoid having to walk all the way to the end of the list on
373 each insertion, or reverse the list later, we maintain a pointer to
374 the last list entry. (FIXME: It should be feasible to use a reversed
375 list here.)
377 The bindings list is strictly in reverse order of declarations;
378 pop_scope relies on this. */
381 struct GTY((chain_next ("%h.outer"))) c_scope {
382 /* The scope containing this one. */
383 struct c_scope *outer;
385 /* The next outermost function scope. */
386 struct c_scope *outer_function;
388 /* All bindings in this scope. */
389 struct c_binding *bindings;
391 /* For each scope (except the global one), a chain of BLOCK nodes
392 for all the scopes that were entered and exited one level down. */
393 tree blocks;
394 tree blocks_last;
396 /* The depth of this scope. Used to keep the ->shadowed chain of
397 bindings sorted innermost to outermost. */
398 unsigned int depth : 28;
400 /* True if we are currently filling this scope with parameter
401 declarations. */
402 BOOL_BITFIELD parm_flag : 1;
404 /* True if we saw [*] in this scope. Used to give an error messages
405 if these appears in a function definition. */
406 BOOL_BITFIELD had_vla_unspec : 1;
408 /* True if we already complained about forward parameter decls
409 in this scope. This prevents double warnings on
410 foo (int a; int b; ...) */
411 BOOL_BITFIELD warned_forward_parm_decls : 1;
413 /* True if this is the outermost block scope of a function body.
414 This scope contains the parameters, the local variables declared
415 in the outermost block, and all the labels (except those in
416 nested functions, or declared at block scope with __label__). */
417 BOOL_BITFIELD function_body : 1;
419 /* True means make a BLOCK for this scope no matter what. */
420 BOOL_BITFIELD keep : 1;
422 /* True means that an unsuffixed float constant is _Decimal64. */
423 BOOL_BITFIELD float_const_decimal64 : 1;
425 /* True if this scope has any label bindings. This is used to speed
426 up searching for labels when popping scopes, particularly since
427 labels are normally only found at function scope. */
428 BOOL_BITFIELD has_label_bindings : 1;
431 /* The scope currently in effect. */
433 static GTY(()) struct c_scope *current_scope;
435 /* The innermost function scope. Ordinary (not explicitly declared)
436 labels, bindings to error_mark_node, and the lazily-created
437 bindings of __func__ and its friends get this scope. */
439 static GTY(()) struct c_scope *current_function_scope;
441 /* The C file scope. This is reset for each input translation unit. */
443 static GTY(()) struct c_scope *file_scope;
445 /* The outermost scope. This is used for all declarations with
446 external linkage, and only these, hence the name. */
448 static GTY(()) struct c_scope *external_scope;
450 /* A chain of c_scope structures awaiting reuse. */
452 static GTY((deletable)) struct c_scope *scope_freelist;
454 /* A chain of c_binding structures awaiting reuse. */
456 static GTY((deletable)) struct c_binding *binding_freelist;
458 /* Append VAR to LIST in scope SCOPE. */
459 #define SCOPE_LIST_APPEND(scope, list, decl) do { \
460 struct c_scope *s_ = (scope); \
461 tree d_ = (decl); \
462 if (s_->list##_last) \
463 BLOCK_CHAIN (s_->list##_last) = d_; \
464 else \
465 s_->list = d_; \
466 s_->list##_last = d_; \
467 } while (0)
469 /* Concatenate FROM in scope FSCOPE onto TO in scope TSCOPE. */
470 #define SCOPE_LIST_CONCAT(tscope, to, fscope, from) do { \
471 struct c_scope *t_ = (tscope); \
472 struct c_scope *f_ = (fscope); \
473 if (t_->to##_last) \
474 BLOCK_CHAIN (t_->to##_last) = f_->from; \
475 else \
476 t_->to = f_->from; \
477 t_->to##_last = f_->from##_last; \
478 } while (0)
480 /* A c_inline_static structure stores details of a static identifier
481 referenced in a definition of a function that may be an inline
482 definition if no subsequent declaration of that function uses
483 "extern" or does not use "inline". */
485 struct GTY((chain_next ("%h.next"))) c_inline_static {
486 /* The location for a diagnostic. */
487 location_t location;
489 /* The function that may be an inline definition. */
490 tree function;
492 /* The object or function referenced. */
493 tree static_decl;
495 /* What sort of reference this is. */
496 enum c_inline_static_type type;
498 /* The next such structure or NULL. */
499 struct c_inline_static *next;
502 /* List of static identifiers used or referenced in functions that may
503 be inline definitions. */
504 static GTY(()) struct c_inline_static *c_inline_statics;
506 /* True means unconditionally make a BLOCK for the next scope pushed. */
508 static bool keep_next_level_flag;
510 /* True means the next call to push_scope will be the outermost scope
511 of a function body, so do not push a new scope, merely cease
512 expecting parameter decls. */
514 static bool next_is_function_body;
516 /* Forward declarations. */
517 static tree lookup_name_in_scope (tree, struct c_scope *);
518 static tree c_make_fname_decl (location_t, tree, int);
519 static tree grokdeclarator (const struct c_declarator *,
520 struct c_declspecs *,
521 enum decl_context, bool, tree *, tree *, tree *,
522 bool *, enum deprecated_states);
523 static tree grokparms (struct c_arg_info *, bool);
524 static void layout_array_type (tree);
526 /* T is a statement. Add it to the statement-tree. This is the
527 C/ObjC version--C++ has a slightly different version of this
528 function. */
530 tree
531 add_stmt (tree t)
533 enum tree_code code = TREE_CODE (t);
535 if (CAN_HAVE_LOCATION_P (t) && code != LABEL_EXPR)
537 if (!EXPR_HAS_LOCATION (t))
538 SET_EXPR_LOCATION (t, input_location);
541 if (code == LABEL_EXPR || code == CASE_LABEL_EXPR)
542 STATEMENT_LIST_HAS_LABEL (cur_stmt_list) = 1;
544 /* Add T to the statement-tree. Non-side-effect statements need to be
545 recorded during statement expressions. */
546 append_to_statement_list_force (t, &cur_stmt_list);
548 return t;
552 void
553 c_print_identifier (FILE *file, tree node, int indent)
555 print_node (file, "symbol", I_SYMBOL_DECL (node), indent + 4);
556 print_node (file, "tag", I_TAG_DECL (node), indent + 4);
557 print_node (file, "label", I_LABEL_DECL (node), indent + 4);
558 if (C_IS_RESERVED_WORD (node) && C_RID_CODE (node) != RID_CXX_COMPAT_WARN)
560 tree rid = ridpointers[C_RID_CODE (node)];
561 indent_to (file, indent + 4);
562 fprintf (file, "rid %p \"%s\"",
563 (void *) rid, IDENTIFIER_POINTER (rid));
567 /* Establish a binding between NAME, an IDENTIFIER_NODE, and DECL,
568 which may be any of several kinds of DECL or TYPE or error_mark_node,
569 in the scope SCOPE. */
570 static void
571 bind (tree name, tree decl, struct c_scope *scope, bool invisible,
572 bool nested, location_t locus)
574 struct c_binding *b, **here;
576 if (binding_freelist)
578 b = binding_freelist;
579 binding_freelist = b->prev;
581 else
582 b = GGC_NEW (struct c_binding);
584 b->shadowed = 0;
585 b->decl = decl;
586 b->id = name;
587 b->depth = scope->depth;
588 b->invisible = invisible;
589 b->nested = nested;
590 b->inner_comp = 0;
591 b->locus = locus;
593 b->u.type = NULL;
595 b->prev = scope->bindings;
596 scope->bindings = b;
598 if (!name)
599 return;
601 switch (TREE_CODE (decl))
603 case LABEL_DECL: here = &I_LABEL_BINDING (name); break;
604 case ENUMERAL_TYPE:
605 case UNION_TYPE:
606 case RECORD_TYPE: here = &I_TAG_BINDING (name); break;
607 case VAR_DECL:
608 case FUNCTION_DECL:
609 case TYPE_DECL:
610 case CONST_DECL:
611 case PARM_DECL:
612 case ERROR_MARK: here = &I_SYMBOL_BINDING (name); break;
614 default:
615 gcc_unreachable ();
618 /* Locate the appropriate place in the chain of shadowed decls
619 to insert this binding. Normally, scope == current_scope and
620 this does nothing. */
621 while (*here && (*here)->depth > scope->depth)
622 here = &(*here)->shadowed;
624 b->shadowed = *here;
625 *here = b;
628 /* Clear the binding structure B, stick it on the binding_freelist,
629 and return the former value of b->prev. This is used by pop_scope
630 and get_parm_info to iterate destructively over all the bindings
631 from a given scope. */
632 static struct c_binding *
633 free_binding_and_advance (struct c_binding *b)
635 struct c_binding *prev = b->prev;
637 memset (b, 0, sizeof (struct c_binding));
638 b->prev = binding_freelist;
639 binding_freelist = b;
641 return prev;
644 /* Bind a label. Like bind, but skip fields which aren't used for
645 labels, and add the LABEL_VARS value. */
646 static void
647 bind_label (tree name, tree label, struct c_scope *scope,
648 struct c_label_vars *label_vars)
650 struct c_binding *b;
652 bind (name, label, scope, /*invisible=*/false, /*nested=*/false,
653 UNKNOWN_LOCATION);
655 scope->has_label_bindings = true;
657 b = scope->bindings;
658 gcc_assert (b->decl == label);
659 label_vars->shadowed = b->u.label;
660 b->u.label = label_vars;
663 /* Hook called at end of compilation to assume 1 elt
664 for a file-scope tentative array defn that wasn't complete before. */
666 void
667 c_finish_incomplete_decl (tree decl)
669 if (TREE_CODE (decl) == VAR_DECL)
671 tree type = TREE_TYPE (decl);
672 if (type != error_mark_node
673 && TREE_CODE (type) == ARRAY_TYPE
674 && !DECL_EXTERNAL (decl)
675 && TYPE_DOMAIN (type) == 0)
677 warning_at (DECL_SOURCE_LOCATION (decl),
678 0, "array %q+D assumed to have one element", decl);
680 complete_array_type (&TREE_TYPE (decl), NULL_TREE, true);
682 layout_decl (decl, 0);
687 /* Record that inline function FUNC contains a reference (location
688 LOC) to static DECL (file-scope or function-local according to
689 TYPE). */
691 void
692 record_inline_static (location_t loc, tree func, tree decl,
693 enum c_inline_static_type type)
695 struct c_inline_static *csi = GGC_NEW (struct c_inline_static);
696 csi->location = loc;
697 csi->function = func;
698 csi->static_decl = decl;
699 csi->type = type;
700 csi->next = c_inline_statics;
701 c_inline_statics = csi;
704 /* Check for references to static declarations in inline functions at
705 the end of the translation unit and diagnose them if the functions
706 are still inline definitions. */
708 static void
709 check_inline_statics (void)
711 struct c_inline_static *csi;
712 for (csi = c_inline_statics; csi; csi = csi->next)
714 if (DECL_EXTERNAL (csi->function))
715 switch (csi->type)
717 case csi_internal:
718 pedwarn (csi->location, 0,
719 "%qD is static but used in inline function %qD "
720 "which is not static", csi->static_decl, csi->function);
721 break;
722 case csi_modifiable:
723 pedwarn (csi->location, 0,
724 "%q+D is static but declared in inline function %qD "
725 "which is not static", csi->static_decl, csi->function);
726 break;
727 default:
728 gcc_unreachable ();
731 c_inline_statics = NULL;
734 /* Fill in a c_spot_bindings structure. If DEFINING is true, set it
735 for the current state, otherwise set it to uninitialized. */
737 static void
738 set_spot_bindings (struct c_spot_bindings *p, bool defining)
740 if (defining)
742 p->scope = current_scope;
743 p->bindings_in_scope = current_scope->bindings;
745 else
747 p->scope = NULL;
748 p->bindings_in_scope = NULL;
750 p->stmt_exprs = 0;
751 p->left_stmt_expr = false;
754 /* Return true if we will want to say something if a goto statement
755 crosses DECL. */
757 static bool
758 decl_jump_unsafe (tree decl)
760 if (decl == error_mark_node || TREE_TYPE (decl) == error_mark_node)
761 return false;
763 /* Always warn about crossing variably modified types. */
764 if ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == TYPE_DECL)
765 && variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
766 return true;
768 /* Otherwise, only warn if -Wgoto-misses-init and this is an
769 initialized automatic decl. */
770 if (warn_jump_misses_init
771 && TREE_CODE (decl) == VAR_DECL
772 && !TREE_STATIC (decl)
773 && DECL_INITIAL (decl) != NULL_TREE)
774 return true;
776 return false;
779 /* Update spot bindings P as we pop out of SCOPE. Return true if we
780 should push decls for a label. */
782 static bool
783 update_spot_bindings (struct c_scope *scope, struct c_spot_bindings *p)
785 if (p->scope != scope)
787 /* This label or goto is defined in some other scope, or it is a
788 label which is not yet defined. There is nothing to
789 update. */
790 return false;
793 /* Adjust the spot bindings to refer to the bindings already defined
794 in the enclosing scope. */
795 p->scope = scope->outer;
796 p->bindings_in_scope = p->scope->bindings;
798 return true;
801 /* The Objective-C front-end often needs to determine the current scope. */
803 void *
804 objc_get_current_scope (void)
806 return current_scope;
809 /* The following function is used only by Objective-C. It needs to live here
810 because it accesses the innards of c_scope. */
812 void
813 objc_mark_locals_volatile (void *enclosing_blk)
815 struct c_scope *scope;
816 struct c_binding *b;
818 for (scope = current_scope;
819 scope && scope != enclosing_blk;
820 scope = scope->outer)
822 for (b = scope->bindings; b; b = b->prev)
823 objc_volatilize_decl (b->decl);
825 /* Do not climb up past the current function. */
826 if (scope->function_body)
827 break;
831 /* Nonzero if we are currently in file scope. */
834 global_bindings_p (void)
836 return (current_scope == file_scope && !c_override_global_bindings_to_false
837 ? -1
838 : 0);
841 void
842 keep_next_level (void)
844 keep_next_level_flag = true;
847 /* Set the flag for the FLOAT_CONST_DECIMAL64 pragma being ON. */
849 void
850 set_float_const_decimal64 (void)
852 current_scope->float_const_decimal64 = true;
855 /* Clear the flag for the FLOAT_CONST_DECIMAL64 pragma. */
857 void
858 clear_float_const_decimal64 (void)
860 current_scope->float_const_decimal64 = false;
863 /* Return nonzero if an unsuffixed float constant is _Decimal64. */
865 bool
866 float_const_decimal64_p (void)
868 return current_scope->float_const_decimal64;
871 /* Identify this scope as currently being filled with parameters. */
873 void
874 declare_parm_level (void)
876 current_scope->parm_flag = true;
879 void
880 push_scope (void)
882 if (next_is_function_body)
884 /* This is the transition from the parameters to the top level
885 of the function body. These are the same scope
886 (C99 6.2.1p4,6) so we do not push another scope structure.
887 next_is_function_body is set only by store_parm_decls, which
888 in turn is called when and only when we are about to
889 encounter the opening curly brace for the function body.
891 The outermost block of a function always gets a BLOCK node,
892 because the debugging output routines expect that each
893 function has at least one BLOCK. */
894 current_scope->parm_flag = false;
895 current_scope->function_body = true;
896 current_scope->keep = true;
897 current_scope->outer_function = current_function_scope;
898 current_function_scope = current_scope;
900 keep_next_level_flag = false;
901 next_is_function_body = false;
903 /* The FLOAT_CONST_DECIMAL64 pragma applies to nested scopes. */
904 if (current_scope->outer)
905 current_scope->float_const_decimal64
906 = current_scope->outer->float_const_decimal64;
907 else
908 current_scope->float_const_decimal64 = false;
910 else
912 struct c_scope *scope;
913 if (scope_freelist)
915 scope = scope_freelist;
916 scope_freelist = scope->outer;
918 else
919 scope = GGC_CNEW (struct c_scope);
921 /* The FLOAT_CONST_DECIMAL64 pragma applies to nested scopes. */
922 if (current_scope)
923 scope->float_const_decimal64 = current_scope->float_const_decimal64;
924 else
925 scope->float_const_decimal64 = false;
927 scope->keep = keep_next_level_flag;
928 scope->outer = current_scope;
929 scope->depth = current_scope ? (current_scope->depth + 1) : 0;
931 /* Check for scope depth overflow. Unlikely (2^28 == 268,435,456) but
932 possible. */
933 if (current_scope && scope->depth == 0)
935 scope->depth--;
936 sorry ("GCC supports only %u nested scopes", scope->depth);
939 current_scope = scope;
940 keep_next_level_flag = false;
944 /* This is called when we are leaving SCOPE. For each label defined
945 in SCOPE, add any appropriate decls to its decls_in_scope fields.
946 These are the decls whose initialization will be skipped by a goto
947 later in the function. */
949 static void
950 update_label_decls (struct c_scope *scope)
952 struct c_scope *s;
954 s = scope;
955 while (s != NULL)
957 if (s->has_label_bindings)
959 struct c_binding *b;
961 for (b = s->bindings; b != NULL; b = b->prev)
963 struct c_label_vars *label_vars;
964 struct c_binding *b1;
965 unsigned int ix;
966 struct c_goto_bindings *g;
968 if (TREE_CODE (b->decl) != LABEL_DECL)
969 continue;
970 label_vars = b->u.label;
972 b1 = label_vars->label_bindings.bindings_in_scope;
973 if (update_spot_bindings (scope, &label_vars->label_bindings))
975 /* This label is defined in this scope. */
976 for (; b1 != NULL; b1 = b1->prev)
978 /* A goto from later in the function to this
979 label will never see the initialization of
980 B1, if any. Save it to issue a warning if
981 needed. */
982 if (decl_jump_unsafe (b1->decl))
983 VEC_safe_push (tree, gc, label_vars->decls_in_scope,
984 b1->decl);
988 /* Update the bindings of any goto statements associated
989 with this label. */
990 for (ix = 0;
991 VEC_iterate (c_goto_bindings_p, label_vars->gotos, ix, g);
992 ++ix)
993 update_spot_bindings (scope, &g->goto_bindings);
997 /* Don't search beyond the current function. */
998 if (s == current_function_scope)
999 break;
1001 s = s->outer;
1005 /* Set the TYPE_CONTEXT of all of TYPE's variants to CONTEXT. */
1007 static void
1008 set_type_context (tree type, tree context)
1010 for (type = TYPE_MAIN_VARIANT (type); type;
1011 type = TYPE_NEXT_VARIANT (type))
1012 TYPE_CONTEXT (type) = context;
1015 /* Exit a scope. Restore the state of the identifier-decl mappings
1016 that were in effect when this scope was entered. Return a BLOCK
1017 node containing all the DECLs in this scope that are of interest
1018 to debug info generation. */
1020 tree
1021 pop_scope (void)
1023 struct c_scope *scope = current_scope;
1024 tree block, context, p;
1025 struct c_binding *b;
1027 bool functionbody = scope->function_body;
1028 bool keep = functionbody || scope->keep || scope->bindings;
1030 update_label_decls (scope);
1032 /* If appropriate, create a BLOCK to record the decls for the life
1033 of this function. */
1034 block = 0;
1035 if (keep)
1037 block = make_node (BLOCK);
1038 BLOCK_SUBBLOCKS (block) = scope->blocks;
1039 TREE_USED (block) = 1;
1041 /* In each subblock, record that this is its superior. */
1042 for (p = scope->blocks; p; p = BLOCK_CHAIN (p))
1043 BLOCK_SUPERCONTEXT (p) = block;
1045 BLOCK_VARS (block) = 0;
1048 /* The TYPE_CONTEXTs for all of the tagged types belonging to this
1049 scope must be set so that they point to the appropriate
1050 construct, i.e. either to the current FUNCTION_DECL node, or
1051 else to the BLOCK node we just constructed.
1053 Note that for tagged types whose scope is just the formal
1054 parameter list for some function type specification, we can't
1055 properly set their TYPE_CONTEXTs here, because we don't have a
1056 pointer to the appropriate FUNCTION_TYPE node readily available
1057 to us. For those cases, the TYPE_CONTEXTs of the relevant tagged
1058 type nodes get set in `grokdeclarator' as soon as we have created
1059 the FUNCTION_TYPE node which will represent the "scope" for these
1060 "parameter list local" tagged types. */
1061 if (scope->function_body)
1062 context = current_function_decl;
1063 else if (scope == file_scope)
1065 tree file_decl = build_decl (UNKNOWN_LOCATION,
1066 TRANSLATION_UNIT_DECL, 0, 0);
1067 TREE_CHAIN (file_decl) = all_translation_units;
1068 all_translation_units = file_decl;
1069 context = file_decl;
1071 else
1072 context = block;
1074 /* Clear all bindings in this scope. */
1075 for (b = scope->bindings; b; b = free_binding_and_advance (b))
1077 p = b->decl;
1078 switch (TREE_CODE (p))
1080 case LABEL_DECL:
1081 /* Warnings for unused labels, errors for undefined labels. */
1082 if (TREE_USED (p) && !DECL_INITIAL (p))
1084 error ("label %q+D used but not defined", p);
1085 DECL_INITIAL (p) = error_mark_node;
1087 else
1088 warn_for_unused_label (p);
1090 /* Labels go in BLOCK_VARS. */
1091 TREE_CHAIN (p) = BLOCK_VARS (block);
1092 BLOCK_VARS (block) = p;
1093 gcc_assert (I_LABEL_BINDING (b->id) == b);
1094 I_LABEL_BINDING (b->id) = b->shadowed;
1096 /* Also pop back to the shadowed label_vars. */
1097 release_tree_vector (b->u.label->decls_in_scope);
1098 b->u.label = b->u.label->shadowed;
1099 break;
1101 case ENUMERAL_TYPE:
1102 case UNION_TYPE:
1103 case RECORD_TYPE:
1104 set_type_context (p, context);
1106 /* Types may not have tag-names, in which case the type
1107 appears in the bindings list with b->id NULL. */
1108 if (b->id)
1110 gcc_assert (I_TAG_BINDING (b->id) == b);
1111 I_TAG_BINDING (b->id) = b->shadowed;
1113 break;
1115 case FUNCTION_DECL:
1116 /* Propagate TREE_ADDRESSABLE from nested functions to their
1117 containing functions. */
1118 if (!TREE_ASM_WRITTEN (p)
1119 && DECL_INITIAL (p) != 0
1120 && TREE_ADDRESSABLE (p)
1121 && DECL_ABSTRACT_ORIGIN (p) != 0
1122 && DECL_ABSTRACT_ORIGIN (p) != p)
1123 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (p)) = 1;
1124 if (!DECL_EXTERNAL (p)
1125 && !DECL_INITIAL (p)
1126 && scope != file_scope
1127 && scope != external_scope)
1129 error ("nested function %q+D declared but never defined", p);
1130 undef_nested_function = true;
1132 else if (DECL_DECLARED_INLINE_P (p)
1133 && TREE_PUBLIC (p)
1134 && !DECL_INITIAL (p))
1136 /* C99 6.7.4p6: "a function with external linkage... declared
1137 with an inline function specifier ... shall also be defined
1138 in the same translation unit." */
1139 if (!flag_gnu89_inline)
1140 pedwarn (input_location, 0,
1141 "inline function %q+D declared but never defined", p);
1142 DECL_EXTERNAL (p) = 1;
1145 goto common_symbol;
1147 case VAR_DECL:
1148 /* Warnings for unused variables. */
1149 if (!TREE_USED (p)
1150 && !TREE_NO_WARNING (p)
1151 && !DECL_IN_SYSTEM_HEADER (p)
1152 && DECL_NAME (p)
1153 && !DECL_ARTIFICIAL (p)
1154 && scope != file_scope
1155 && scope != external_scope)
1156 warning (OPT_Wunused_variable, "unused variable %q+D", p);
1158 if (b->inner_comp)
1160 error ("type of array %q+D completed incompatibly with"
1161 " implicit initialization", p);
1164 /* Fall through. */
1165 case TYPE_DECL:
1166 case CONST_DECL:
1167 common_symbol:
1168 /* All of these go in BLOCK_VARS, but only if this is the
1169 binding in the home scope. */
1170 if (!b->nested)
1172 TREE_CHAIN (p) = BLOCK_VARS (block);
1173 BLOCK_VARS (block) = p;
1175 else if (VAR_OR_FUNCTION_DECL_P (p))
1177 /* For block local externs add a special
1178 DECL_EXTERNAL decl for debug info generation. */
1179 tree extp = copy_node (p);
1181 DECL_EXTERNAL (extp) = 1;
1182 TREE_STATIC (extp) = 0;
1183 TREE_PUBLIC (extp) = 1;
1184 DECL_INITIAL (extp) = NULL_TREE;
1185 DECL_LANG_SPECIFIC (extp) = NULL;
1186 DECL_CONTEXT (extp) = current_function_decl;
1187 if (TREE_CODE (p) == FUNCTION_DECL)
1189 DECL_RESULT (extp) = NULL_TREE;
1190 DECL_SAVED_TREE (extp) = NULL_TREE;
1191 DECL_STRUCT_FUNCTION (extp) = NULL;
1193 if (b->locus != UNKNOWN_LOCATION)
1194 DECL_SOURCE_LOCATION (extp) = b->locus;
1195 TREE_CHAIN (extp) = BLOCK_VARS (block);
1196 BLOCK_VARS (block) = extp;
1198 /* If this is the file scope, and we are processing more
1199 than one translation unit in this compilation, set
1200 DECL_CONTEXT of each decl to the TRANSLATION_UNIT_DECL.
1201 This makes same_translation_unit_p work, and causes
1202 static declarations to be given disambiguating suffixes. */
1203 if (scope == file_scope && num_in_fnames > 1)
1205 DECL_CONTEXT (p) = context;
1206 if (TREE_CODE (p) == TYPE_DECL)
1207 set_type_context (TREE_TYPE (p), context);
1210 /* Fall through. */
1211 /* Parameters go in DECL_ARGUMENTS, not BLOCK_VARS, and have
1212 already been put there by store_parm_decls. Unused-
1213 parameter warnings are handled by function.c.
1214 error_mark_node obviously does not go in BLOCK_VARS and
1215 does not get unused-variable warnings. */
1216 case PARM_DECL:
1217 case ERROR_MARK:
1218 /* It is possible for a decl not to have a name. We get
1219 here with b->id NULL in this case. */
1220 if (b->id)
1222 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
1223 I_SYMBOL_BINDING (b->id) = b->shadowed;
1224 if (b->shadowed && b->shadowed->u.type)
1225 TREE_TYPE (b->shadowed->decl) = b->shadowed->u.type;
1227 break;
1229 default:
1230 gcc_unreachable ();
1235 /* Dispose of the block that we just made inside some higher level. */
1236 if ((scope->function_body || scope == file_scope) && context)
1238 DECL_INITIAL (context) = block;
1239 BLOCK_SUPERCONTEXT (block) = context;
1241 else if (scope->outer)
1243 if (block)
1244 SCOPE_LIST_APPEND (scope->outer, blocks, block);
1245 /* If we did not make a block for the scope just exited, any
1246 blocks made for inner scopes must be carried forward so they
1247 will later become subblocks of something else. */
1248 else if (scope->blocks)
1249 SCOPE_LIST_CONCAT (scope->outer, blocks, scope, blocks);
1252 /* Pop the current scope, and free the structure for reuse. */
1253 current_scope = scope->outer;
1254 if (scope->function_body)
1255 current_function_scope = scope->outer_function;
1257 memset (scope, 0, sizeof (struct c_scope));
1258 scope->outer = scope_freelist;
1259 scope_freelist = scope;
1261 return block;
1264 void
1265 push_file_scope (void)
1267 tree decl;
1269 if (file_scope)
1270 return;
1272 push_scope ();
1273 file_scope = current_scope;
1275 start_fname_decls ();
1277 for (decl = visible_builtins; decl; decl = TREE_CHAIN (decl))
1278 bind (DECL_NAME (decl), decl, file_scope,
1279 /*invisible=*/false, /*nested=*/true, DECL_SOURCE_LOCATION (decl));
1282 void
1283 pop_file_scope (void)
1285 /* In case there were missing closebraces, get us back to the global
1286 binding level. */
1287 while (current_scope != file_scope)
1288 pop_scope ();
1290 /* __FUNCTION__ is defined at file scope (""). This
1291 call may not be necessary as my tests indicate it
1292 still works without it. */
1293 finish_fname_decls ();
1295 check_inline_statics ();
1297 /* This is the point to write out a PCH if we're doing that.
1298 In that case we do not want to do anything else. */
1299 if (pch_file)
1301 c_common_write_pch ();
1302 return;
1305 /* Pop off the file scope and close this translation unit. */
1306 pop_scope ();
1307 file_scope = 0;
1309 maybe_apply_pending_pragma_weaks ();
1310 cgraph_finalize_compilation_unit ();
1313 /* Adjust the bindings for the start of a statement expression. */
1315 void
1316 c_bindings_start_stmt_expr (struct c_spot_bindings* switch_bindings)
1318 struct c_scope *scope;
1320 for (scope = current_scope; scope != NULL; scope = scope->outer)
1322 struct c_binding *b;
1324 if (!scope->has_label_bindings)
1325 continue;
1327 for (b = scope->bindings; b != NULL; b = b->prev)
1329 struct c_label_vars *label_vars;
1330 unsigned int ix;
1331 struct c_goto_bindings *g;
1333 if (TREE_CODE (b->decl) != LABEL_DECL)
1334 continue;
1335 label_vars = b->u.label;
1336 ++label_vars->label_bindings.stmt_exprs;
1337 for (ix = 0;
1338 VEC_iterate (c_goto_bindings_p, label_vars->gotos, ix, g);
1339 ++ix)
1340 ++g->goto_bindings.stmt_exprs;
1344 if (switch_bindings != NULL)
1345 ++switch_bindings->stmt_exprs;
1348 /* Adjust the bindings for the end of a statement expression. */
1350 void
1351 c_bindings_end_stmt_expr (struct c_spot_bindings *switch_bindings)
1353 struct c_scope *scope;
1355 for (scope = current_scope; scope != NULL; scope = scope->outer)
1357 struct c_binding *b;
1359 if (!scope->has_label_bindings)
1360 continue;
1362 for (b = scope->bindings; b != NULL; b = b->prev)
1364 struct c_label_vars *label_vars;
1365 unsigned int ix;
1366 struct c_goto_bindings *g;
1368 if (TREE_CODE (b->decl) != LABEL_DECL)
1369 continue;
1370 label_vars = b->u.label;
1371 --label_vars->label_bindings.stmt_exprs;
1372 if (label_vars->label_bindings.stmt_exprs < 0)
1374 label_vars->label_bindings.left_stmt_expr = true;
1375 label_vars->label_bindings.stmt_exprs = 0;
1377 for (ix = 0;
1378 VEC_iterate (c_goto_bindings_p, label_vars->gotos, ix, g);
1379 ++ix)
1381 --g->goto_bindings.stmt_exprs;
1382 if (g->goto_bindings.stmt_exprs < 0)
1384 g->goto_bindings.left_stmt_expr = true;
1385 g->goto_bindings.stmt_exprs = 0;
1391 if (switch_bindings != NULL)
1393 --switch_bindings->stmt_exprs;
1394 gcc_assert (switch_bindings->stmt_exprs >= 0);
1398 /* Push a definition or a declaration of struct, union or enum tag "name".
1399 "type" should be the type node.
1400 We assume that the tag "name" is not already defined, and has a location
1401 of LOC.
1403 Note that the definition may really be just a forward reference.
1404 In that case, the TYPE_SIZE will be zero. */
1406 static void
1407 pushtag (location_t loc, tree name, tree type)
1409 /* Record the identifier as the type's name if it has none. */
1410 if (name && !TYPE_NAME (type))
1411 TYPE_NAME (type) = name;
1412 bind (name, type, current_scope, /*invisible=*/false, /*nested=*/false, loc);
1414 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE will be the
1415 tagged type we just added to the current scope. This fake
1416 NULL-named TYPE_DECL node helps dwarfout.c to know when it needs
1417 to output a representation of a tagged type, and it also gives
1418 us a convenient place to record the "scope start" address for the
1419 tagged type. */
1421 TYPE_STUB_DECL (type) = pushdecl (build_decl (loc,
1422 TYPE_DECL, NULL_TREE, type));
1424 /* An approximation for now, so we can tell this is a function-scope tag.
1425 This will be updated in pop_scope. */
1426 TYPE_CONTEXT (type) = DECL_CONTEXT (TYPE_STUB_DECL (type));
1428 if (warn_cxx_compat && name != NULL_TREE)
1430 struct c_binding *b = I_SYMBOL_BINDING (name);
1432 if (b != NULL
1433 && b->decl != NULL_TREE
1434 && TREE_CODE (b->decl) == TYPE_DECL
1435 && (B_IN_CURRENT_SCOPE (b)
1436 || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
1437 && (TYPE_MAIN_VARIANT (TREE_TYPE (b->decl))
1438 != TYPE_MAIN_VARIANT (type)))
1440 warning_at (loc, OPT_Wc___compat,
1441 ("using %qD as both a typedef and a tag is "
1442 "invalid in C++"),
1443 b->decl);
1444 if (b->locus != UNKNOWN_LOCATION)
1445 inform (b->locus, "originally defined here");
1450 /* Subroutine of compare_decls. Allow harmless mismatches in return
1451 and argument types provided that the type modes match. This function
1452 return a unified type given a suitable match, and 0 otherwise. */
1454 static tree
1455 match_builtin_function_types (tree newtype, tree oldtype)
1457 tree newrettype, oldrettype;
1458 tree newargs, oldargs;
1459 tree trytype, tryargs;
1461 /* Accept the return type of the new declaration if same modes. */
1462 oldrettype = TREE_TYPE (oldtype);
1463 newrettype = TREE_TYPE (newtype);
1465 if (TYPE_MODE (oldrettype) != TYPE_MODE (newrettype))
1466 return 0;
1468 oldargs = TYPE_ARG_TYPES (oldtype);
1469 newargs = TYPE_ARG_TYPES (newtype);
1470 tryargs = newargs;
1472 while (oldargs || newargs)
1474 if (!oldargs
1475 || !newargs
1476 || !TREE_VALUE (oldargs)
1477 || !TREE_VALUE (newargs)
1478 || TYPE_MODE (TREE_VALUE (oldargs))
1479 != TYPE_MODE (TREE_VALUE (newargs)))
1480 return 0;
1482 oldargs = TREE_CHAIN (oldargs);
1483 newargs = TREE_CHAIN (newargs);
1486 trytype = build_function_type (newrettype, tryargs);
1487 return build_type_attribute_variant (trytype, TYPE_ATTRIBUTES (oldtype));
1490 /* Subroutine of diagnose_mismatched_decls. Check for function type
1491 mismatch involving an empty arglist vs a nonempty one and give clearer
1492 diagnostics. */
1493 static void
1494 diagnose_arglist_conflict (tree newdecl, tree olddecl,
1495 tree newtype, tree oldtype)
1497 tree t;
1499 if (TREE_CODE (olddecl) != FUNCTION_DECL
1500 || !comptypes (TREE_TYPE (oldtype), TREE_TYPE (newtype))
1501 || !((TYPE_ARG_TYPES (oldtype) == 0 && DECL_INITIAL (olddecl) == 0)
1503 (TYPE_ARG_TYPES (newtype) == 0 && DECL_INITIAL (newdecl) == 0)))
1504 return;
1506 t = TYPE_ARG_TYPES (oldtype);
1507 if (t == 0)
1508 t = TYPE_ARG_TYPES (newtype);
1509 for (; t; t = TREE_CHAIN (t))
1511 tree type = TREE_VALUE (t);
1513 if (TREE_CHAIN (t) == 0
1514 && TYPE_MAIN_VARIANT (type) != void_type_node)
1516 inform (input_location, "a parameter list with an ellipsis can%'t match "
1517 "an empty parameter name list declaration");
1518 break;
1521 if (c_type_promotes_to (type) != type)
1523 inform (input_location, "an argument type that has a default promotion can%'t match "
1524 "an empty parameter name list declaration");
1525 break;
1530 /* Another subroutine of diagnose_mismatched_decls. OLDDECL is an
1531 old-style function definition, NEWDECL is a prototype declaration.
1532 Diagnose inconsistencies in the argument list. Returns TRUE if
1533 the prototype is compatible, FALSE if not. */
1534 static bool
1535 validate_proto_after_old_defn (tree newdecl, tree newtype, tree oldtype)
1537 tree newargs, oldargs;
1538 int i;
1540 #define END_OF_ARGLIST(t) ((t) == void_type_node)
1542 oldargs = TYPE_ACTUAL_ARG_TYPES (oldtype);
1543 newargs = TYPE_ARG_TYPES (newtype);
1544 i = 1;
1546 for (;;)
1548 tree oldargtype = TREE_VALUE (oldargs);
1549 tree newargtype = TREE_VALUE (newargs);
1551 if (oldargtype == error_mark_node || newargtype == error_mark_node)
1552 return false;
1554 oldargtype = TYPE_MAIN_VARIANT (oldargtype);
1555 newargtype = TYPE_MAIN_VARIANT (newargtype);
1557 if (END_OF_ARGLIST (oldargtype) && END_OF_ARGLIST (newargtype))
1558 break;
1560 /* Reaching the end of just one list means the two decls don't
1561 agree on the number of arguments. */
1562 if (END_OF_ARGLIST (oldargtype))
1564 error ("prototype for %q+D declares more arguments "
1565 "than previous old-style definition", newdecl);
1566 return false;
1568 else if (END_OF_ARGLIST (newargtype))
1570 error ("prototype for %q+D declares fewer arguments "
1571 "than previous old-style definition", newdecl);
1572 return false;
1575 /* Type for passing arg must be consistent with that declared
1576 for the arg. */
1577 else if (!comptypes (oldargtype, newargtype))
1579 error ("prototype for %q+D declares argument %d"
1580 " with incompatible type",
1581 newdecl, i);
1582 return false;
1585 oldargs = TREE_CHAIN (oldargs);
1586 newargs = TREE_CHAIN (newargs);
1587 i++;
1590 /* If we get here, no errors were found, but do issue a warning
1591 for this poor-style construct. */
1592 warning (0, "prototype for %q+D follows non-prototype definition",
1593 newdecl);
1594 return true;
1595 #undef END_OF_ARGLIST
1598 /* Subroutine of diagnose_mismatched_decls. Report the location of DECL,
1599 first in a pair of mismatched declarations, using the diagnostic
1600 function DIAG. */
1601 static void
1602 locate_old_decl (tree decl)
1604 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_BUILT_IN (decl))
1606 else if (DECL_INITIAL (decl))
1607 inform (input_location, "previous definition of %q+D was here", decl);
1608 else if (C_DECL_IMPLICIT (decl))
1609 inform (input_location, "previous implicit declaration of %q+D was here", decl);
1610 else
1611 inform (input_location, "previous declaration of %q+D was here", decl);
1614 /* Subroutine of duplicate_decls. Compare NEWDECL to OLDDECL.
1615 Returns true if the caller should proceed to merge the two, false
1616 if OLDDECL should simply be discarded. As a side effect, issues
1617 all necessary diagnostics for invalid or poor-style combinations.
1618 If it returns true, writes the types of NEWDECL and OLDDECL to
1619 *NEWTYPEP and *OLDTYPEP - these may have been adjusted from
1620 TREE_TYPE (NEWDECL, OLDDECL) respectively. */
1622 static bool
1623 diagnose_mismatched_decls (tree newdecl, tree olddecl,
1624 tree *newtypep, tree *oldtypep)
1626 tree newtype, oldtype;
1627 bool pedwarned = false;
1628 bool warned = false;
1629 bool retval = true;
1631 #define DECL_EXTERN_INLINE(DECL) (DECL_DECLARED_INLINE_P (DECL) \
1632 && DECL_EXTERNAL (DECL))
1634 /* If we have error_mark_node for either decl or type, just discard
1635 the previous decl - we're in an error cascade already. */
1636 if (olddecl == error_mark_node || newdecl == error_mark_node)
1637 return false;
1638 *oldtypep = oldtype = TREE_TYPE (olddecl);
1639 *newtypep = newtype = TREE_TYPE (newdecl);
1640 if (oldtype == error_mark_node || newtype == error_mark_node)
1641 return false;
1643 /* Two different categories of symbol altogether. This is an error
1644 unless OLDDECL is a builtin. OLDDECL will be discarded in any case. */
1645 if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1647 if (!(TREE_CODE (olddecl) == FUNCTION_DECL
1648 && DECL_BUILT_IN (olddecl)
1649 && !C_DECL_DECLARED_BUILTIN (olddecl)))
1651 error ("%q+D redeclared as different kind of symbol", newdecl);
1652 locate_old_decl (olddecl);
1654 else if (TREE_PUBLIC (newdecl))
1655 warning (0, "built-in function %q+D declared as non-function",
1656 newdecl);
1657 else
1658 warning (OPT_Wshadow, "declaration of %q+D shadows "
1659 "a built-in function", newdecl);
1660 return false;
1663 /* Enumerators have no linkage, so may only be declared once in a
1664 given scope. */
1665 if (TREE_CODE (olddecl) == CONST_DECL)
1667 error ("redeclaration of enumerator %q+D", newdecl);
1668 locate_old_decl (olddecl);
1669 return false;
1672 if (!comptypes (oldtype, newtype))
1674 if (TREE_CODE (olddecl) == FUNCTION_DECL
1675 && DECL_BUILT_IN (olddecl) && !C_DECL_DECLARED_BUILTIN (olddecl))
1677 /* Accept harmless mismatch in function types.
1678 This is for the ffs and fprintf builtins. */
1679 tree trytype = match_builtin_function_types (newtype, oldtype);
1681 if (trytype && comptypes (newtype, trytype))
1682 *oldtypep = oldtype = trytype;
1683 else
1685 /* If types don't match for a built-in, throw away the
1686 built-in. No point in calling locate_old_decl here, it
1687 won't print anything. */
1688 warning (0, "conflicting types for built-in function %q+D",
1689 newdecl);
1690 return false;
1693 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1694 && DECL_IS_BUILTIN (olddecl))
1696 /* A conflicting function declaration for a predeclared
1697 function that isn't actually built in. Objective C uses
1698 these. The new declaration silently overrides everything
1699 but the volatility (i.e. noreturn) indication. See also
1700 below. FIXME: Make Objective C use normal builtins. */
1701 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1702 return false;
1704 /* Permit void foo (...) to match int foo (...) if the latter is
1705 the definition and implicit int was used. See
1706 c-torture/compile/920625-2.c. */
1707 else if (TREE_CODE (newdecl) == FUNCTION_DECL && DECL_INITIAL (newdecl)
1708 && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype)) == void_type_node
1709 && TYPE_MAIN_VARIANT (TREE_TYPE (newtype)) == integer_type_node
1710 && C_FUNCTION_IMPLICIT_INT (newdecl) && !DECL_INITIAL (olddecl))
1712 pedwarned = pedwarn (input_location, 0,
1713 "conflicting types for %q+D", newdecl);
1714 /* Make sure we keep void as the return type. */
1715 TREE_TYPE (newdecl) = *newtypep = newtype = oldtype;
1716 C_FUNCTION_IMPLICIT_INT (newdecl) = 0;
1718 /* Permit void foo (...) to match an earlier call to foo (...) with
1719 no declared type (thus, implicitly int). */
1720 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1721 && TYPE_MAIN_VARIANT (TREE_TYPE (newtype)) == void_type_node
1722 && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype)) == integer_type_node
1723 && C_DECL_IMPLICIT (olddecl) && !DECL_INITIAL (olddecl))
1725 pedwarned = pedwarn (input_location, 0,
1726 "conflicting types for %q+D", newdecl);
1727 /* Make sure we keep void as the return type. */
1728 TREE_TYPE (olddecl) = *oldtypep = oldtype = newtype;
1730 else
1732 if (TYPE_QUALS (newtype) != TYPE_QUALS (oldtype))
1733 error ("conflicting type qualifiers for %q+D", newdecl);
1734 else
1735 error ("conflicting types for %q+D", newdecl);
1736 diagnose_arglist_conflict (newdecl, olddecl, newtype, oldtype);
1737 locate_old_decl (olddecl);
1738 return false;
1742 /* Redeclaration of a type is a constraint violation (6.7.2.3p1),
1743 but silently ignore the redeclaration if either is in a system
1744 header. (Conflicting redeclarations were handled above.) */
1745 if (TREE_CODE (newdecl) == TYPE_DECL)
1747 if (DECL_IN_SYSTEM_HEADER (newdecl)
1748 || DECL_IN_SYSTEM_HEADER (olddecl)
1749 || TREE_NO_WARNING (newdecl)
1750 || TREE_NO_WARNING (olddecl))
1751 return true; /* Allow OLDDECL to continue in use. */
1753 error ("redefinition of typedef %q+D", newdecl);
1754 locate_old_decl (olddecl);
1755 return false;
1758 /* Function declarations can either be 'static' or 'extern' (no
1759 qualifier is equivalent to 'extern' - C99 6.2.2p5) and therefore
1760 can never conflict with each other on account of linkage
1761 (6.2.2p4). Multiple definitions are not allowed (6.9p3,5) but
1762 gnu89 mode permits two definitions if one is 'extern inline' and
1763 one is not. The non- extern-inline definition supersedes the
1764 extern-inline definition. */
1766 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1768 /* If you declare a built-in function name as static, or
1769 define the built-in with an old-style definition (so we
1770 can't validate the argument list) the built-in definition is
1771 overridden, but optionally warn this was a bad choice of name. */
1772 if (DECL_BUILT_IN (olddecl)
1773 && !C_DECL_DECLARED_BUILTIN (olddecl)
1774 && (!TREE_PUBLIC (newdecl)
1775 || (DECL_INITIAL (newdecl)
1776 && !TYPE_ARG_TYPES (TREE_TYPE (newdecl)))))
1778 warning (OPT_Wshadow, "declaration of %q+D shadows "
1779 "a built-in function", newdecl);
1780 /* Discard the old built-in function. */
1781 return false;
1784 if (DECL_INITIAL (newdecl))
1786 if (DECL_INITIAL (olddecl))
1788 /* If both decls are in the same TU and the new declaration
1789 isn't overriding an extern inline reject the new decl.
1790 In c99, no overriding is allowed in the same translation
1791 unit. */
1792 if ((!DECL_EXTERN_INLINE (olddecl)
1793 || DECL_EXTERN_INLINE (newdecl)
1794 || (!flag_gnu89_inline
1795 && (!DECL_DECLARED_INLINE_P (olddecl)
1796 || !lookup_attribute ("gnu_inline",
1797 DECL_ATTRIBUTES (olddecl)))
1798 && (!DECL_DECLARED_INLINE_P (newdecl)
1799 || !lookup_attribute ("gnu_inline",
1800 DECL_ATTRIBUTES (newdecl))))
1802 && same_translation_unit_p (newdecl, olddecl))
1804 error ("redefinition of %q+D", newdecl);
1805 locate_old_decl (olddecl);
1806 return false;
1810 /* If we have a prototype after an old-style function definition,
1811 the argument types must be checked specially. */
1812 else if (DECL_INITIAL (olddecl)
1813 && !TYPE_ARG_TYPES (oldtype) && TYPE_ARG_TYPES (newtype)
1814 && TYPE_ACTUAL_ARG_TYPES (oldtype)
1815 && !validate_proto_after_old_defn (newdecl, newtype, oldtype))
1817 locate_old_decl (olddecl);
1818 return false;
1820 /* A non-static declaration (even an "extern") followed by a
1821 static declaration is undefined behavior per C99 6.2.2p3-5,7.
1822 The same is true for a static forward declaration at block
1823 scope followed by a non-static declaration/definition at file
1824 scope. Static followed by non-static at the same scope is
1825 not undefined behavior, and is the most convenient way to get
1826 some effects (see e.g. what unwind-dw2-fde-glibc.c does to
1827 the definition of _Unwind_Find_FDE in unwind-dw2-fde.c), but
1828 we do diagnose it if -Wtraditional. */
1829 if (TREE_PUBLIC (olddecl) && !TREE_PUBLIC (newdecl))
1831 /* Two exceptions to the rule. If olddecl is an extern
1832 inline, or a predeclared function that isn't actually
1833 built in, newdecl silently overrides olddecl. The latter
1834 occur only in Objective C; see also above. (FIXME: Make
1835 Objective C use normal builtins.) */
1836 if (!DECL_IS_BUILTIN (olddecl)
1837 && !DECL_EXTERN_INLINE (olddecl))
1839 error ("static declaration of %q+D follows "
1840 "non-static declaration", newdecl);
1841 locate_old_decl (olddecl);
1843 return false;
1845 else if (TREE_PUBLIC (newdecl) && !TREE_PUBLIC (olddecl))
1847 if (DECL_CONTEXT (olddecl))
1849 error ("non-static declaration of %q+D follows "
1850 "static declaration", newdecl);
1851 locate_old_decl (olddecl);
1852 return false;
1854 else if (warn_traditional)
1856 warned |= warning (OPT_Wtraditional,
1857 "non-static declaration of %q+D "
1858 "follows static declaration", newdecl);
1862 /* Make sure gnu_inline attribute is either not present, or
1863 present on all inline decls. */
1864 if (DECL_DECLARED_INLINE_P (olddecl)
1865 && DECL_DECLARED_INLINE_P (newdecl))
1867 bool newa = lookup_attribute ("gnu_inline",
1868 DECL_ATTRIBUTES (newdecl)) != NULL;
1869 bool olda = lookup_attribute ("gnu_inline",
1870 DECL_ATTRIBUTES (olddecl)) != NULL;
1871 if (newa != olda)
1873 error ("%<gnu_inline%> attribute present on %q+D",
1874 newa ? newdecl : olddecl);
1875 error ("%Jbut not here", newa ? olddecl : newdecl);
1879 else if (TREE_CODE (newdecl) == VAR_DECL)
1881 /* Only variables can be thread-local, and all declarations must
1882 agree on this property. */
1883 if (C_DECL_THREADPRIVATE_P (olddecl) && !DECL_THREAD_LOCAL_P (newdecl))
1885 /* Nothing to check. Since OLDDECL is marked threadprivate
1886 and NEWDECL does not have a thread-local attribute, we
1887 will merge the threadprivate attribute into NEWDECL. */
1890 else if (DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl))
1892 if (DECL_THREAD_LOCAL_P (newdecl))
1893 error ("thread-local declaration of %q+D follows "
1894 "non-thread-local declaration", newdecl);
1895 else
1896 error ("non-thread-local declaration of %q+D follows "
1897 "thread-local declaration", newdecl);
1899 locate_old_decl (olddecl);
1900 return false;
1903 /* Multiple initialized definitions are not allowed (6.9p3,5). */
1904 if (DECL_INITIAL (newdecl) && DECL_INITIAL (olddecl))
1906 error ("redefinition of %q+D", newdecl);
1907 locate_old_decl (olddecl);
1908 return false;
1911 /* Objects declared at file scope: if the first declaration had
1912 external linkage (even if it was an external reference) the
1913 second must have external linkage as well, or the behavior is
1914 undefined. If the first declaration had internal linkage, then
1915 the second must too, or else be an external reference (in which
1916 case the composite declaration still has internal linkage).
1917 As for function declarations, we warn about the static-then-
1918 extern case only for -Wtraditional. See generally 6.2.2p3-5,7. */
1919 if (DECL_FILE_SCOPE_P (newdecl)
1920 && TREE_PUBLIC (newdecl) != TREE_PUBLIC (olddecl))
1922 if (DECL_EXTERNAL (newdecl))
1924 if (!DECL_FILE_SCOPE_P (olddecl))
1926 error ("extern declaration of %q+D follows "
1927 "declaration with no linkage", newdecl);
1928 locate_old_decl (olddecl);
1929 return false;
1931 else if (warn_traditional)
1933 warned |= warning (OPT_Wtraditional,
1934 "non-static declaration of %q+D "
1935 "follows static declaration", newdecl);
1938 else
1940 if (TREE_PUBLIC (newdecl))
1941 error ("non-static declaration of %q+D follows "
1942 "static declaration", newdecl);
1943 else
1944 error ("static declaration of %q+D follows "
1945 "non-static declaration", newdecl);
1947 locate_old_decl (olddecl);
1948 return false;
1951 /* Two objects with the same name declared at the same block
1952 scope must both be external references (6.7p3). */
1953 else if (!DECL_FILE_SCOPE_P (newdecl))
1955 if (DECL_EXTERNAL (newdecl))
1957 /* Extern with initializer at block scope, which will
1958 already have received an error. */
1960 else if (DECL_EXTERNAL (olddecl))
1962 error ("declaration of %q+D with no linkage follows "
1963 "extern declaration", newdecl);
1964 locate_old_decl (olddecl);
1966 else
1968 error ("redeclaration of %q+D with no linkage", newdecl);
1969 locate_old_decl (olddecl);
1972 return false;
1976 /* warnings */
1977 /* All decls must agree on a visibility. */
1978 if (CODE_CONTAINS_STRUCT (TREE_CODE (newdecl), TS_DECL_WITH_VIS)
1979 && DECL_VISIBILITY_SPECIFIED (newdecl) && DECL_VISIBILITY_SPECIFIED (olddecl)
1980 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
1982 warned |= warning (0, "redeclaration of %q+D with different visibility "
1983 "(old visibility preserved)", newdecl);
1986 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1988 /* Diagnose inline __attribute__ ((noinline)) which is silly. */
1989 if (DECL_DECLARED_INLINE_P (newdecl)
1990 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1992 warned |= warning (OPT_Wattributes,
1993 "inline declaration of %qD follows "
1994 "declaration with attribute noinline", newdecl);
1996 else if (DECL_DECLARED_INLINE_P (olddecl)
1997 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1999 warned |= warning (OPT_Wattributes,
2000 "declaration of %q+D with attribute "
2001 "noinline follows inline declaration ", newdecl);
2004 else /* PARM_DECL, VAR_DECL */
2006 /* Redeclaration of a parameter is a constraint violation (this is
2007 not explicitly stated, but follows from C99 6.7p3 [no more than
2008 one declaration of the same identifier with no linkage in the
2009 same scope, except type tags] and 6.2.2p6 [parameters have no
2010 linkage]). We must check for a forward parameter declaration,
2011 indicated by TREE_ASM_WRITTEN on the old declaration - this is
2012 an extension, the mandatory diagnostic for which is handled by
2013 mark_forward_parm_decls. */
2015 if (TREE_CODE (newdecl) == PARM_DECL
2016 && (!TREE_ASM_WRITTEN (olddecl) || TREE_ASM_WRITTEN (newdecl)))
2018 error ("redefinition of parameter %q+D", newdecl);
2019 locate_old_decl (olddecl);
2020 return false;
2024 /* Optional warning for completely redundant decls. */
2025 if (!warned && !pedwarned
2026 && warn_redundant_decls
2027 /* Don't warn about a function declaration followed by a
2028 definition. */
2029 && !(TREE_CODE (newdecl) == FUNCTION_DECL
2030 && DECL_INITIAL (newdecl) && !DECL_INITIAL (olddecl))
2031 /* Don't warn about redundant redeclarations of builtins. */
2032 && !(TREE_CODE (newdecl) == FUNCTION_DECL
2033 && !DECL_BUILT_IN (newdecl)
2034 && DECL_BUILT_IN (olddecl)
2035 && !C_DECL_DECLARED_BUILTIN (olddecl))
2036 /* Don't warn about an extern followed by a definition. */
2037 && !(DECL_EXTERNAL (olddecl) && !DECL_EXTERNAL (newdecl))
2038 /* Don't warn about forward parameter decls. */
2039 && !(TREE_CODE (newdecl) == PARM_DECL
2040 && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
2041 /* Don't warn about a variable definition following a declaration. */
2042 && !(TREE_CODE (newdecl) == VAR_DECL
2043 && DECL_INITIAL (newdecl) && !DECL_INITIAL (olddecl)))
2045 warned = warning (OPT_Wredundant_decls, "redundant redeclaration of %q+D",
2046 newdecl);
2049 /* Report location of previous decl/defn. */
2050 if (warned || pedwarned)
2051 locate_old_decl (olddecl);
2053 #undef DECL_EXTERN_INLINE
2055 return retval;
2058 /* Subroutine of duplicate_decls. NEWDECL has been found to be
2059 consistent with OLDDECL, but carries new information. Merge the
2060 new information into OLDDECL. This function issues no
2061 diagnostics. */
2063 static void
2064 merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
2066 bool new_is_definition = (TREE_CODE (newdecl) == FUNCTION_DECL
2067 && DECL_INITIAL (newdecl) != 0);
2068 bool new_is_prototype = (TREE_CODE (newdecl) == FUNCTION_DECL
2069 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != 0);
2070 bool old_is_prototype = (TREE_CODE (olddecl) == FUNCTION_DECL
2071 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) != 0);
2072 bool extern_changed = false;
2074 /* For real parm decl following a forward decl, rechain the old decl
2075 in its new location and clear TREE_ASM_WRITTEN (it's not a
2076 forward decl anymore). */
2077 if (TREE_CODE (newdecl) == PARM_DECL
2078 && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
2080 struct c_binding *b, **here;
2082 for (here = &current_scope->bindings; *here; here = &(*here)->prev)
2083 if ((*here)->decl == olddecl)
2084 goto found;
2085 gcc_unreachable ();
2087 found:
2088 b = *here;
2089 *here = b->prev;
2090 b->prev = current_scope->bindings;
2091 current_scope->bindings = b;
2093 TREE_ASM_WRITTEN (olddecl) = 0;
2096 DECL_ATTRIBUTES (newdecl)
2097 = targetm.merge_decl_attributes (olddecl, newdecl);
2099 /* Merge the data types specified in the two decls. */
2100 TREE_TYPE (newdecl)
2101 = TREE_TYPE (olddecl)
2102 = composite_type (newtype, oldtype);
2104 /* Lay the type out, unless already done. */
2105 if (!comptypes (oldtype, TREE_TYPE (newdecl)))
2107 if (TREE_TYPE (newdecl) != error_mark_node)
2108 layout_type (TREE_TYPE (newdecl));
2109 if (TREE_CODE (newdecl) != FUNCTION_DECL
2110 && TREE_CODE (newdecl) != TYPE_DECL
2111 && TREE_CODE (newdecl) != CONST_DECL)
2112 layout_decl (newdecl, 0);
2114 else
2116 /* Since the type is OLDDECL's, make OLDDECL's size go with. */
2117 DECL_SIZE (newdecl) = DECL_SIZE (olddecl);
2118 DECL_SIZE_UNIT (newdecl) = DECL_SIZE_UNIT (olddecl);
2119 DECL_MODE (newdecl) = DECL_MODE (olddecl);
2120 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2122 DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
2123 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2127 /* Keep the old rtl since we can safely use it. */
2128 if (HAS_RTL_P (olddecl))
2129 COPY_DECL_RTL (olddecl, newdecl);
2131 /* Merge the type qualifiers. */
2132 if (TREE_READONLY (newdecl))
2133 TREE_READONLY (olddecl) = 1;
2135 if (TREE_THIS_VOLATILE (newdecl))
2136 TREE_THIS_VOLATILE (olddecl) = 1;
2138 /* Merge deprecatedness. */
2139 if (TREE_DEPRECATED (newdecl))
2140 TREE_DEPRECATED (olddecl) = 1;
2142 /* If a decl is in a system header and the other isn't, keep the one on the
2143 system header. Otherwise, keep source location of definition rather than
2144 declaration and of prototype rather than non-prototype unless that
2145 prototype is built-in. */
2146 if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS)
2147 && DECL_IN_SYSTEM_HEADER (olddecl)
2148 && !DECL_IN_SYSTEM_HEADER (newdecl) )
2149 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2150 else if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS)
2151 && DECL_IN_SYSTEM_HEADER (newdecl)
2152 && !DECL_IN_SYSTEM_HEADER (olddecl))
2153 DECL_SOURCE_LOCATION (olddecl) = DECL_SOURCE_LOCATION (newdecl);
2154 else if ((DECL_INITIAL (newdecl) == 0 && DECL_INITIAL (olddecl) != 0)
2155 || (old_is_prototype && !new_is_prototype
2156 && !C_DECL_BUILTIN_PROTOTYPE (olddecl)))
2157 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2159 /* Merge the initialization information. */
2160 if (DECL_INITIAL (newdecl) == 0)
2161 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2163 /* Merge the threadprivate attribute. */
2164 if (TREE_CODE (olddecl) == VAR_DECL && C_DECL_THREADPRIVATE_P (olddecl))
2166 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
2167 C_DECL_THREADPRIVATE_P (newdecl) = 1;
2170 if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS))
2172 /* Merge the section attribute.
2173 We want to issue an error if the sections conflict but that
2174 must be done later in decl_attributes since we are called
2175 before attributes are assigned. */
2176 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
2177 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
2179 /* Copy the assembler name.
2180 Currently, it can only be defined in the prototype. */
2181 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2183 /* Use visibility of whichever declaration had it specified */
2184 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2186 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2187 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2190 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2192 DECL_STATIC_CONSTRUCTOR(newdecl) |= DECL_STATIC_CONSTRUCTOR(olddecl);
2193 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
2194 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2195 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2196 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2197 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
2198 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
2199 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2200 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
2201 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
2202 DECL_IS_NOVOPS (newdecl) |= DECL_IS_NOVOPS (olddecl);
2205 /* Merge the storage class information. */
2206 merge_weak (newdecl, olddecl);
2208 /* For functions, static overrides non-static. */
2209 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2211 TREE_PUBLIC (newdecl) &= TREE_PUBLIC (olddecl);
2212 /* This is since we don't automatically
2213 copy the attributes of NEWDECL into OLDDECL. */
2214 TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
2215 /* If this clears `static', clear it in the identifier too. */
2216 if (!TREE_PUBLIC (olddecl))
2217 TREE_PUBLIC (DECL_NAME (olddecl)) = 0;
2221 /* In c99, 'extern' declaration before (or after) 'inline' means this
2222 function is not DECL_EXTERNAL, unless 'gnu_inline' attribute
2223 is present. */
2224 if (TREE_CODE (newdecl) == FUNCTION_DECL
2225 && !flag_gnu89_inline
2226 && (DECL_DECLARED_INLINE_P (newdecl)
2227 || DECL_DECLARED_INLINE_P (olddecl))
2228 && (!DECL_DECLARED_INLINE_P (newdecl)
2229 || !DECL_DECLARED_INLINE_P (olddecl)
2230 || !DECL_EXTERNAL (olddecl))
2231 && DECL_EXTERNAL (newdecl)
2232 && !lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (newdecl))
2233 && !current_function_decl)
2234 DECL_EXTERNAL (newdecl) = 0;
2236 if (DECL_EXTERNAL (newdecl))
2238 TREE_STATIC (newdecl) = TREE_STATIC (olddecl);
2239 DECL_EXTERNAL (newdecl) = DECL_EXTERNAL (olddecl);
2241 /* An extern decl does not override previous storage class. */
2242 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2243 if (!DECL_EXTERNAL (newdecl))
2245 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
2246 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2249 else
2251 TREE_STATIC (olddecl) = TREE_STATIC (newdecl);
2252 TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
2255 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2257 /* If we're redefining a function previously defined as extern
2258 inline, make sure we emit debug info for the inline before we
2259 throw it away, in case it was inlined into a function that
2260 hasn't been written out yet. */
2261 if (new_is_definition && DECL_INITIAL (olddecl))
2262 /* The new defn must not be inline. */
2263 DECL_UNINLINABLE (newdecl) = 1;
2264 else
2266 /* If either decl says `inline', this fn is inline, unless
2267 its definition was passed already. */
2268 if (DECL_DECLARED_INLINE_P (newdecl)
2269 || DECL_DECLARED_INLINE_P (olddecl))
2270 DECL_DECLARED_INLINE_P (newdecl) = 1;
2272 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2273 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2275 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2276 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2277 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2278 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2281 if (DECL_BUILT_IN (olddecl))
2283 /* If redeclaring a builtin function, it stays built in.
2284 But it gets tagged as having been declared. */
2285 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2286 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2287 C_DECL_DECLARED_BUILTIN (newdecl) = 1;
2288 if (new_is_prototype)
2289 C_DECL_BUILTIN_PROTOTYPE (newdecl) = 0;
2290 else
2291 C_DECL_BUILTIN_PROTOTYPE (newdecl)
2292 = C_DECL_BUILTIN_PROTOTYPE (olddecl);
2295 /* Preserve function specific target and optimization options */
2296 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2297 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2298 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2299 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2301 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2302 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2303 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2304 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2306 /* Also preserve various other info from the definition. */
2307 if (!new_is_definition)
2309 tree t;
2310 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2311 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2312 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2313 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2314 gimple_set_body (newdecl, gimple_body (olddecl));
2315 DECL_ARGUMENTS (newdecl) = copy_list (DECL_ARGUMENTS (olddecl));
2316 for (t = DECL_ARGUMENTS (newdecl); t ; t = TREE_CHAIN (t))
2317 DECL_CONTEXT (t) = newdecl;
2319 /* See if we've got a function to instantiate from. */
2320 if (DECL_SAVED_TREE (olddecl))
2321 DECL_ABSTRACT_ORIGIN (newdecl)
2322 = DECL_ABSTRACT_ORIGIN (olddecl);
2326 extern_changed = DECL_EXTERNAL (olddecl) && !DECL_EXTERNAL (newdecl);
2328 /* Merge the USED information. */
2329 if (TREE_USED (olddecl))
2330 TREE_USED (newdecl) = 1;
2331 else if (TREE_USED (newdecl))
2332 TREE_USED (olddecl) = 1;
2334 /* Copy most of the decl-specific fields of NEWDECL into OLDDECL.
2335 But preserve OLDDECL's DECL_UID and DECL_CONTEXT. */
2337 unsigned olddecl_uid = DECL_UID (olddecl);
2338 tree olddecl_context = DECL_CONTEXT (olddecl);
2339 tree olddecl_arguments = NULL;
2340 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2341 olddecl_arguments = DECL_ARGUMENTS (olddecl);
2343 memcpy ((char *) olddecl + sizeof (struct tree_common),
2344 (char *) newdecl + sizeof (struct tree_common),
2345 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2346 switch (TREE_CODE (olddecl))
2348 case FUNCTION_DECL:
2349 gimple_set_body (olddecl, gimple_body (newdecl));
2350 /* fall through */
2352 case FIELD_DECL:
2353 case VAR_DECL:
2354 case PARM_DECL:
2355 case LABEL_DECL:
2356 case RESULT_DECL:
2357 case CONST_DECL:
2358 case TYPE_DECL:
2359 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2360 (char *) newdecl + sizeof (struct tree_decl_common),
2361 tree_code_size (TREE_CODE (olddecl)) - sizeof (struct tree_decl_common));
2362 break;
2364 default:
2366 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2367 (char *) newdecl + sizeof (struct tree_decl_common),
2368 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common));
2370 DECL_UID (olddecl) = olddecl_uid;
2371 DECL_CONTEXT (olddecl) = olddecl_context;
2372 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2373 DECL_ARGUMENTS (olddecl) = olddecl_arguments;
2376 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2377 so that encode_section_info has a chance to look at the new decl
2378 flags and attributes. */
2379 if (DECL_RTL_SET_P (olddecl)
2380 && (TREE_CODE (olddecl) == FUNCTION_DECL
2381 || (TREE_CODE (olddecl) == VAR_DECL
2382 && TREE_STATIC (olddecl))))
2383 make_decl_rtl (olddecl);
2385 /* If we changed a function from DECL_EXTERNAL to !DECL_EXTERNAL,
2386 and the definition is coming from the old version, cgraph needs
2387 to be called again. */
2388 if (extern_changed && !new_is_definition
2389 && TREE_CODE (olddecl) == FUNCTION_DECL && DECL_INITIAL (olddecl))
2390 cgraph_mark_if_needed (olddecl);
2393 /* Handle when a new declaration NEWDECL has the same name as an old
2394 one OLDDECL in the same binding contour. Prints an error message
2395 if appropriate.
2397 If safely possible, alter OLDDECL to look like NEWDECL, and return
2398 true. Otherwise, return false. */
2400 static bool
2401 duplicate_decls (tree newdecl, tree olddecl)
2403 tree newtype = NULL, oldtype = NULL;
2405 if (!diagnose_mismatched_decls (newdecl, olddecl, &newtype, &oldtype))
2407 /* Avoid `unused variable' and other warnings for OLDDECL. */
2408 TREE_NO_WARNING (olddecl) = 1;
2409 return false;
2412 merge_decls (newdecl, olddecl, newtype, oldtype);
2413 return true;
2417 /* Check whether decl-node NEW_DECL shadows an existing declaration. */
2418 static void
2419 warn_if_shadowing (tree new_decl)
2421 struct c_binding *b;
2423 /* Shadow warnings wanted? */
2424 if (!warn_shadow
2425 /* No shadow warnings for internally generated vars. */
2426 || DECL_IS_BUILTIN (new_decl)
2427 /* No shadow warnings for vars made for inlining. */
2428 || DECL_FROM_INLINE (new_decl))
2429 return;
2431 /* Is anything being shadowed? Invisible decls do not count. */
2432 for (b = I_SYMBOL_BINDING (DECL_NAME (new_decl)); b; b = b->shadowed)
2433 if (b->decl && b->decl != new_decl && !b->invisible)
2435 tree old_decl = b->decl;
2437 if (old_decl == error_mark_node)
2439 warning (OPT_Wshadow, "declaration of %q+D shadows previous "
2440 "non-variable", new_decl);
2441 break;
2443 else if (TREE_CODE (old_decl) == PARM_DECL)
2444 warning (OPT_Wshadow, "declaration of %q+D shadows a parameter",
2445 new_decl);
2446 else if (DECL_FILE_SCOPE_P (old_decl))
2447 warning (OPT_Wshadow, "declaration of %q+D shadows a global "
2448 "declaration", new_decl);
2449 else if (TREE_CODE (old_decl) == FUNCTION_DECL
2450 && DECL_BUILT_IN (old_decl))
2452 warning (OPT_Wshadow, "declaration of %q+D shadows "
2453 "a built-in function", new_decl);
2454 break;
2456 else
2457 warning (OPT_Wshadow, "declaration of %q+D shadows a previous local",
2458 new_decl);
2460 warning (OPT_Wshadow, "%Jshadowed declaration is here", old_decl);
2462 break;
2466 /* Record a decl-node X as belonging to the current lexical scope.
2467 Check for errors (such as an incompatible declaration for the same
2468 name already seen in the same scope).
2470 Returns either X or an old decl for the same name.
2471 If an old decl is returned, it may have been smashed
2472 to agree with what X says. */
2474 tree
2475 pushdecl (tree x)
2477 tree name = DECL_NAME (x);
2478 struct c_scope *scope = current_scope;
2479 struct c_binding *b;
2480 bool nested = false;
2481 location_t locus = DECL_SOURCE_LOCATION (x);
2483 /* Must set DECL_CONTEXT for everything not at file scope or
2484 DECL_FILE_SCOPE_P won't work. Local externs don't count
2485 unless they have initializers (which generate code). */
2486 if (current_function_decl
2487 && ((TREE_CODE (x) != FUNCTION_DECL && TREE_CODE (x) != VAR_DECL)
2488 || DECL_INITIAL (x) || !DECL_EXTERNAL (x)))
2489 DECL_CONTEXT (x) = current_function_decl;
2491 /* Anonymous decls are just inserted in the scope. */
2492 if (!name)
2494 bind (name, x, scope, /*invisible=*/false, /*nested=*/false,
2495 locus);
2496 return x;
2499 /* First, see if there is another declaration with the same name in
2500 the current scope. If there is, duplicate_decls may do all the
2501 work for us. If duplicate_decls returns false, that indicates
2502 two incompatible decls in the same scope; we are to silently
2503 replace the old one (duplicate_decls has issued all appropriate
2504 diagnostics). In particular, we should not consider possible
2505 duplicates in the external scope, or shadowing. */
2506 b = I_SYMBOL_BINDING (name);
2507 if (b && B_IN_SCOPE (b, scope))
2509 struct c_binding *b_ext, *b_use;
2510 tree type = TREE_TYPE (x);
2511 tree visdecl = b->decl;
2512 tree vistype = TREE_TYPE (visdecl);
2513 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
2514 && COMPLETE_TYPE_P (TREE_TYPE (x)))
2515 b->inner_comp = false;
2516 b_use = b;
2517 b_ext = b;
2518 /* If this is an external linkage declaration, we should check
2519 for compatibility with the type in the external scope before
2520 setting the type at this scope based on the visible
2521 information only. */
2522 if (TREE_PUBLIC (x) && TREE_PUBLIC (visdecl))
2524 while (b_ext && !B_IN_EXTERNAL_SCOPE (b_ext))
2525 b_ext = b_ext->shadowed;
2526 if (b_ext)
2528 b_use = b_ext;
2529 if (b_use->u.type)
2530 TREE_TYPE (b_use->decl) = b_use->u.type;
2533 if (duplicate_decls (x, b_use->decl))
2535 if (b_use != b)
2537 /* Save the updated type in the external scope and
2538 restore the proper type for this scope. */
2539 tree thistype;
2540 if (comptypes (vistype, type))
2541 thistype = composite_type (vistype, type);
2542 else
2543 thistype = TREE_TYPE (b_use->decl);
2544 b_use->u.type = TREE_TYPE (b_use->decl);
2545 if (TREE_CODE (b_use->decl) == FUNCTION_DECL
2546 && DECL_BUILT_IN (b_use->decl))
2547 thistype
2548 = build_type_attribute_variant (thistype,
2549 TYPE_ATTRIBUTES
2550 (b_use->u.type));
2551 TREE_TYPE (b_use->decl) = thistype;
2553 return b_use->decl;
2555 else
2556 goto skip_external_and_shadow_checks;
2559 /* All declarations with external linkage, and all external
2560 references, go in the external scope, no matter what scope is
2561 current. However, the binding in that scope is ignored for
2562 purposes of normal name lookup. A separate binding structure is
2563 created in the requested scope; this governs the normal
2564 visibility of the symbol.
2566 The binding in the externals scope is used exclusively for
2567 detecting duplicate declarations of the same object, no matter
2568 what scope they are in; this is what we do here. (C99 6.2.7p2:
2569 All declarations that refer to the same object or function shall
2570 have compatible type; otherwise, the behavior is undefined.) */
2571 if (DECL_EXTERNAL (x) || scope == file_scope)
2573 tree type = TREE_TYPE (x);
2574 tree vistype = 0;
2575 tree visdecl = 0;
2576 bool type_saved = false;
2577 if (b && !B_IN_EXTERNAL_SCOPE (b)
2578 && (TREE_CODE (b->decl) == FUNCTION_DECL
2579 || TREE_CODE (b->decl) == VAR_DECL)
2580 && DECL_FILE_SCOPE_P (b->decl))
2582 visdecl = b->decl;
2583 vistype = TREE_TYPE (visdecl);
2585 if (scope != file_scope
2586 && !DECL_IN_SYSTEM_HEADER (x))
2587 warning (OPT_Wnested_externs, "nested extern declaration of %qD", x);
2589 while (b && !B_IN_EXTERNAL_SCOPE (b))
2591 /* If this decl might be modified, save its type. This is
2592 done here rather than when the decl is first bound
2593 because the type may change after first binding, through
2594 being completed or through attributes being added. If we
2595 encounter multiple such decls, only the first should have
2596 its type saved; the others will already have had their
2597 proper types saved and the types will not have changed as
2598 their scopes will not have been re-entered. */
2599 if (DECL_P (b->decl) && DECL_FILE_SCOPE_P (b->decl) && !type_saved)
2601 b->u.type = TREE_TYPE (b->decl);
2602 type_saved = true;
2604 if (B_IN_FILE_SCOPE (b)
2605 && TREE_CODE (b->decl) == VAR_DECL
2606 && TREE_STATIC (b->decl)
2607 && TREE_CODE (TREE_TYPE (b->decl)) == ARRAY_TYPE
2608 && !TYPE_DOMAIN (TREE_TYPE (b->decl))
2609 && TREE_CODE (type) == ARRAY_TYPE
2610 && TYPE_DOMAIN (type)
2611 && TYPE_MAX_VALUE (TYPE_DOMAIN (type))
2612 && !integer_zerop (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
2614 /* Array type completed in inner scope, which should be
2615 diagnosed if the completion does not have size 1 and
2616 it does not get completed in the file scope. */
2617 b->inner_comp = true;
2619 b = b->shadowed;
2622 /* If a matching external declaration has been found, set its
2623 type to the composite of all the types of that declaration.
2624 After the consistency checks, it will be reset to the
2625 composite of the visible types only. */
2626 if (b && (TREE_PUBLIC (x) || same_translation_unit_p (x, b->decl))
2627 && b->u.type)
2628 TREE_TYPE (b->decl) = b->u.type;
2630 /* The point of the same_translation_unit_p check here is,
2631 we want to detect a duplicate decl for a construct like
2632 foo() { extern bar(); } ... static bar(); but not if
2633 they are in different translation units. In any case,
2634 the static does not go in the externals scope. */
2635 if (b
2636 && (TREE_PUBLIC (x) || same_translation_unit_p (x, b->decl))
2637 && duplicate_decls (x, b->decl))
2639 tree thistype;
2640 if (vistype)
2642 if (comptypes (vistype, type))
2643 thistype = composite_type (vistype, type);
2644 else
2645 thistype = TREE_TYPE (b->decl);
2647 else
2648 thistype = type;
2649 b->u.type = TREE_TYPE (b->decl);
2650 if (TREE_CODE (b->decl) == FUNCTION_DECL && DECL_BUILT_IN (b->decl))
2651 thistype
2652 = build_type_attribute_variant (thistype,
2653 TYPE_ATTRIBUTES (b->u.type));
2654 TREE_TYPE (b->decl) = thistype;
2655 bind (name, b->decl, scope, /*invisible=*/false, /*nested=*/true,
2656 locus);
2657 return b->decl;
2659 else if (TREE_PUBLIC (x))
2661 if (visdecl && !b && duplicate_decls (x, visdecl))
2663 /* An external declaration at block scope referring to a
2664 visible entity with internal linkage. The composite
2665 type will already be correct for this scope, so we
2666 just need to fall through to make the declaration in
2667 this scope. */
2668 nested = true;
2669 x = visdecl;
2671 else
2673 bind (name, x, external_scope, /*invisible=*/true,
2674 /*nested=*/false, locus);
2675 nested = true;
2680 if (TREE_CODE (x) != PARM_DECL)
2681 warn_if_shadowing (x);
2683 skip_external_and_shadow_checks:
2684 if (TREE_CODE (x) == TYPE_DECL)
2685 set_underlying_type (x);
2687 bind (name, x, scope, /*invisible=*/false, nested, locus);
2689 /* If x's type is incomplete because it's based on a
2690 structure or union which has not yet been fully declared,
2691 attach it to that structure or union type, so we can go
2692 back and complete the variable declaration later, if the
2693 structure or union gets fully declared.
2695 If the input is erroneous, we can have error_mark in the type
2696 slot (e.g. "f(void a, ...)") - that doesn't count as an
2697 incomplete type. */
2698 if (TREE_TYPE (x) != error_mark_node
2699 && !COMPLETE_TYPE_P (TREE_TYPE (x)))
2701 tree element = TREE_TYPE (x);
2703 while (TREE_CODE (element) == ARRAY_TYPE)
2704 element = TREE_TYPE (element);
2705 element = TYPE_MAIN_VARIANT (element);
2707 if ((TREE_CODE (element) == RECORD_TYPE
2708 || TREE_CODE (element) == UNION_TYPE)
2709 && (TREE_CODE (x) != TYPE_DECL
2710 || TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE)
2711 && !COMPLETE_TYPE_P (element))
2712 C_TYPE_INCOMPLETE_VARS (element)
2713 = tree_cons (NULL_TREE, x, C_TYPE_INCOMPLETE_VARS (element));
2715 return x;
2718 /* Record X as belonging to file scope.
2719 This is used only internally by the Objective-C front end,
2720 and is limited to its needs. duplicate_decls is not called;
2721 if there is any preexisting decl for this identifier, it is an ICE. */
2723 tree
2724 pushdecl_top_level (tree x)
2726 tree name;
2727 bool nested = false;
2728 gcc_assert (TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == CONST_DECL);
2730 name = DECL_NAME (x);
2732 gcc_assert (TREE_CODE (x) == CONST_DECL || !I_SYMBOL_BINDING (name));
2734 if (TREE_PUBLIC (x))
2736 bind (name, x, external_scope, /*invisible=*/true, /*nested=*/false,
2737 UNKNOWN_LOCATION);
2738 nested = true;
2740 if (file_scope)
2741 bind (name, x, file_scope, /*invisible=*/false, nested, UNKNOWN_LOCATION);
2743 return x;
2746 static void
2747 implicit_decl_warning (tree id, tree olddecl)
2749 if (warn_implicit_function_declaration)
2751 bool warned;
2753 if (flag_isoc99)
2754 warned = pedwarn (input_location, OPT_Wimplicit_function_declaration,
2755 "implicit declaration of function %qE", id);
2756 else
2757 warned = warning (OPT_Wimplicit_function_declaration,
2758 G_("implicit declaration of function %qE"), id);
2759 if (olddecl && warned)
2760 locate_old_decl (olddecl);
2764 /* Generate an implicit declaration for identifier FUNCTIONID at LOC as a
2765 function of type int (). */
2767 tree
2768 implicitly_declare (location_t loc, tree functionid)
2770 struct c_binding *b;
2771 tree decl = 0;
2772 tree asmspec_tree;
2774 for (b = I_SYMBOL_BINDING (functionid); b; b = b->shadowed)
2776 if (B_IN_SCOPE (b, external_scope))
2778 decl = b->decl;
2779 break;
2783 if (decl)
2785 if (decl == error_mark_node)
2786 return decl;
2788 /* FIXME: Objective-C has weird not-really-builtin functions
2789 which are supposed to be visible automatically. They wind up
2790 in the external scope because they're pushed before the file
2791 scope gets created. Catch this here and rebind them into the
2792 file scope. */
2793 if (!DECL_BUILT_IN (decl) && DECL_IS_BUILTIN (decl))
2795 bind (functionid, decl, file_scope,
2796 /*invisible=*/false, /*nested=*/true,
2797 DECL_SOURCE_LOCATION (decl));
2798 return decl;
2800 else
2802 tree newtype = default_function_type;
2803 if (b->u.type)
2804 TREE_TYPE (decl) = b->u.type;
2805 /* Implicit declaration of a function already declared
2806 (somehow) in a different scope, or as a built-in.
2807 If this is the first time this has happened, warn;
2808 then recycle the old declaration but with the new type. */
2809 if (!C_DECL_IMPLICIT (decl))
2811 implicit_decl_warning (functionid, decl);
2812 C_DECL_IMPLICIT (decl) = 1;
2814 if (DECL_BUILT_IN (decl))
2816 newtype = build_type_attribute_variant (newtype,
2817 TYPE_ATTRIBUTES
2818 (TREE_TYPE (decl)));
2819 if (!comptypes (newtype, TREE_TYPE (decl)))
2821 warning_at (loc, 0, "incompatible implicit declaration of "
2822 "built-in function %qD", decl);
2823 newtype = TREE_TYPE (decl);
2826 else
2828 if (!comptypes (newtype, TREE_TYPE (decl)))
2830 error_at (loc, "incompatible implicit declaration of function %qD", decl);
2831 locate_old_decl (decl);
2834 b->u.type = TREE_TYPE (decl);
2835 TREE_TYPE (decl) = newtype;
2836 bind (functionid, decl, current_scope,
2837 /*invisible=*/false, /*nested=*/true,
2838 DECL_SOURCE_LOCATION (decl));
2839 return decl;
2843 /* Not seen before. */
2844 decl = build_decl (loc, FUNCTION_DECL, functionid, default_function_type);
2845 DECL_EXTERNAL (decl) = 1;
2846 TREE_PUBLIC (decl) = 1;
2847 C_DECL_IMPLICIT (decl) = 1;
2848 implicit_decl_warning (functionid, 0);
2849 asmspec_tree = maybe_apply_renaming_pragma (decl, /*asmname=*/NULL);
2850 if (asmspec_tree)
2851 set_user_assembler_name (decl, TREE_STRING_POINTER (asmspec_tree));
2853 /* C89 says implicit declarations are in the innermost block.
2854 So we record the decl in the standard fashion. */
2855 decl = pushdecl (decl);
2857 /* No need to call objc_check_decl here - it's a function type. */
2858 rest_of_decl_compilation (decl, 0, 0);
2860 /* Write a record describing this implicit function declaration
2861 to the prototypes file (if requested). */
2862 gen_aux_info_record (decl, 0, 1, 0);
2864 /* Possibly apply some default attributes to this implicit declaration. */
2865 decl_attributes (&decl, NULL_TREE, 0);
2867 return decl;
2870 /* Issue an error message for a reference to an undeclared variable
2871 ID, including a reference to a builtin outside of function-call
2872 context. Establish a binding of the identifier to error_mark_node
2873 in an appropriate scope, which will suppress further errors for the
2874 same identifier. The error message should be given location LOC. */
2875 void
2876 undeclared_variable (location_t loc, tree id)
2878 static bool already = false;
2879 struct c_scope *scope;
2881 if (current_function_decl == 0)
2883 error ("%H%qE undeclared here (not in a function)", &loc, id);
2884 scope = current_scope;
2886 else
2888 error ("%H%qE undeclared (first use in this function)", &loc, id);
2890 if (!already)
2892 error ("%H(Each undeclared identifier is reported only once", &loc);
2893 error ("%Hfor each function it appears in.)", &loc);
2894 already = true;
2897 /* If we are parsing old-style parameter decls, current_function_decl
2898 will be nonnull but current_function_scope will be null. */
2899 scope = current_function_scope ? current_function_scope : current_scope;
2901 bind (id, error_mark_node, scope, /*invisible=*/false, /*nested=*/false,
2902 UNKNOWN_LOCATION);
2905 /* Subroutine of lookup_label, declare_label, define_label: construct a
2906 LABEL_DECL with all the proper frills. Also create a struct
2907 c_label_vars initialized for the current scope. */
2909 static tree
2910 make_label (location_t location, tree name, bool defining,
2911 struct c_label_vars **p_label_vars)
2913 tree label = build_decl (location, LABEL_DECL, name, void_type_node);
2914 struct c_label_vars *label_vars;
2916 DECL_CONTEXT (label) = current_function_decl;
2917 DECL_MODE (label) = VOIDmode;
2919 label_vars = GGC_NEW (struct c_label_vars);
2920 label_vars->shadowed = NULL;
2921 set_spot_bindings (&label_vars->label_bindings, defining);
2922 label_vars->decls_in_scope = make_tree_vector ();
2923 label_vars->gotos = VEC_alloc (c_goto_bindings_p, gc, 0);
2924 *p_label_vars = label_vars;
2926 return label;
2929 /* Get the LABEL_DECL corresponding to identifier NAME as a label.
2930 Create one if none exists so far for the current function.
2931 This is called when a label is used in a goto expression or
2932 has its address taken. */
2934 tree
2935 lookup_label (tree name)
2937 tree label;
2938 struct c_label_vars *label_vars;
2940 if (current_function_decl == 0)
2942 error ("label %qE referenced outside of any function", name);
2943 return 0;
2946 /* Use a label already defined or ref'd with this name, but not if
2947 it is inherited from a containing function and wasn't declared
2948 using __label__. */
2949 label = I_LABEL_DECL (name);
2950 if (label && (DECL_CONTEXT (label) == current_function_decl
2951 || C_DECLARED_LABEL_FLAG (label)))
2953 /* If the label has only been declared, update its apparent
2954 location to point here, for better diagnostics if it
2955 turns out not to have been defined. */
2956 if (DECL_INITIAL (label) == NULL_TREE)
2957 DECL_SOURCE_LOCATION (label) = input_location;
2958 return label;
2961 /* No label binding for that identifier; make one. */
2962 label = make_label (input_location, name, false, &label_vars);
2964 /* Ordinary labels go in the current function scope. */
2965 bind_label (name, label, current_function_scope, label_vars);
2967 return label;
2970 /* Issue a warning about DECL for a goto statement at GOTO_LOC going
2971 to LABEL. */
2973 static void
2974 warn_about_goto (location_t goto_loc, tree label, tree decl)
2976 if (variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
2977 error_at (goto_loc,
2978 "jump into scope of identifier with variably modified type");
2979 else
2980 warning_at (goto_loc, OPT_Wjump_misses_init,
2981 "jump skips variable initialization");
2982 inform (DECL_SOURCE_LOCATION (label), "label %qD defined here", label);
2983 inform (DECL_SOURCE_LOCATION (decl), "%qD declared here", decl);
2986 /* Look up a label because of a goto statement. This is like
2987 lookup_label, but also issues any appropriate warnings. */
2989 tree
2990 lookup_label_for_goto (location_t loc, tree name)
2992 tree label;
2993 struct c_label_vars *label_vars;
2994 unsigned int ix;
2995 tree decl;
2997 label = lookup_label (name);
2998 if (label == NULL_TREE)
2999 return NULL_TREE;
3001 /* If we are jumping to a different function, we can't issue any
3002 useful warnings. */
3003 if (DECL_CONTEXT (label) != current_function_decl)
3005 gcc_assert (C_DECLARED_LABEL_FLAG (label));
3006 return label;
3009 label_vars = I_LABEL_BINDING (name)->u.label;
3011 /* If the label has not yet been defined, then push this goto on a
3012 list for possible later warnings. */
3013 if (label_vars->label_bindings.scope == NULL)
3015 struct c_goto_bindings *g;
3017 g = GGC_NEW (struct c_goto_bindings);
3018 g->loc = loc;
3019 set_spot_bindings (&g->goto_bindings, true);
3020 VEC_safe_push (c_goto_bindings_p, gc, label_vars->gotos, g);
3021 return label;
3024 /* If there are any decls in label_vars->decls_in_scope, then this
3025 goto has missed the declaration of the decl. This happens for a
3026 case like
3027 int i = 1;
3028 lab:
3030 goto lab;
3031 Issue a warning or error. */
3032 for (ix = 0; VEC_iterate (tree, label_vars->decls_in_scope, ix, decl); ++ix)
3033 warn_about_goto (loc, label, decl);
3035 if (label_vars->label_bindings.left_stmt_expr)
3037 error_at (loc, "jump into statement expression");
3038 inform (DECL_SOURCE_LOCATION (label), "label %qD defined here", label);
3041 return label;
3044 /* Make a label named NAME in the current function, shadowing silently
3045 any that may be inherited from containing functions or containing
3046 scopes. This is called for __label__ declarations. */
3048 tree
3049 declare_label (tree name)
3051 struct c_binding *b = I_LABEL_BINDING (name);
3052 tree label;
3053 struct c_label_vars *label_vars;
3055 /* Check to make sure that the label hasn't already been declared
3056 at this scope */
3057 if (b && B_IN_CURRENT_SCOPE (b))
3059 error ("duplicate label declaration %qE", name);
3060 locate_old_decl (b->decl);
3062 /* Just use the previous declaration. */
3063 return b->decl;
3066 label = make_label (input_location, name, false, &label_vars);
3067 C_DECLARED_LABEL_FLAG (label) = 1;
3069 /* Declared labels go in the current scope. */
3070 bind_label (name, label, current_scope, label_vars);
3072 return label;
3075 /* When we define a label, issue any appropriate warnings if there are
3076 any gotos earlier in the function which jump to this label. */
3078 static void
3079 check_earlier_gotos (tree label, struct c_label_vars* label_vars)
3081 unsigned int ix;
3082 struct c_goto_bindings *g;
3084 for (ix = 0;
3085 VEC_iterate (c_goto_bindings_p, label_vars->gotos, ix, g);
3086 ++ix)
3088 struct c_binding *b;
3089 struct c_scope *scope;
3091 /* We have a goto to this label. The goto is going forward. In
3092 g->scope, the goto is going to skip any binding which was
3093 defined after g->bindings_in_scope. */
3094 for (b = g->goto_bindings.scope->bindings;
3095 b != g->goto_bindings.bindings_in_scope;
3096 b = b->prev)
3098 if (decl_jump_unsafe (b->decl))
3099 warn_about_goto (g->loc, label, b->decl);
3102 /* We also need to warn about decls defined in any scopes
3103 between the scope of the label and the scope of the goto. */
3104 for (scope = label_vars->label_bindings.scope;
3105 scope != g->goto_bindings.scope;
3106 scope = scope->outer)
3108 gcc_assert (scope != NULL);
3109 if (scope == label_vars->label_bindings.scope)
3110 b = label_vars->label_bindings.bindings_in_scope;
3111 else
3112 b = scope->bindings;
3113 for (; b != NULL; b = b->prev)
3115 if (decl_jump_unsafe (b->decl))
3116 warn_about_goto (g->loc, label, b->decl);
3120 if (g->goto_bindings.stmt_exprs > 0)
3122 error_at (g->loc, "jump into statement expression");
3123 inform (DECL_SOURCE_LOCATION (label), "label %qD defined here",
3124 label);
3128 /* Now that the label is defined, we will issue warnings about
3129 subsequent gotos to this label when we see them. */
3130 VEC_truncate (c_goto_bindings_p, label_vars->gotos, 0);
3131 label_vars->gotos = NULL;
3134 /* Define a label, specifying the location in the source file.
3135 Return the LABEL_DECL node for the label, if the definition is valid.
3136 Otherwise return 0. */
3138 tree
3139 define_label (location_t location, tree name)
3141 /* Find any preexisting label with this name. It is an error
3142 if that label has already been defined in this function, or
3143 if there is a containing function with a declared label with
3144 the same name. */
3145 tree label = I_LABEL_DECL (name);
3147 if (label
3148 && ((DECL_CONTEXT (label) == current_function_decl
3149 && DECL_INITIAL (label) != 0)
3150 || (DECL_CONTEXT (label) != current_function_decl
3151 && C_DECLARED_LABEL_FLAG (label))))
3153 error_at (location, "duplicate label %qD", label);
3154 locate_old_decl (label);
3155 return 0;
3157 else if (label && DECL_CONTEXT (label) == current_function_decl)
3159 struct c_label_vars *label_vars = I_LABEL_BINDING (name)->u.label;
3161 /* The label has been used or declared already in this function,
3162 but not defined. Update its location to point to this
3163 definition. */
3164 DECL_SOURCE_LOCATION (label) = location;
3165 set_spot_bindings (&label_vars->label_bindings, true);
3167 /* Issue warnings as required about any goto statements from
3168 earlier in the function. */
3169 check_earlier_gotos (label, label_vars);
3171 else
3173 struct c_label_vars *label_vars;
3175 /* No label binding for that identifier; make one. */
3176 label = make_label (location, name, true, &label_vars);
3178 /* Ordinary labels go in the current function scope. */
3179 bind_label (name, label, current_function_scope, label_vars);
3182 if (!in_system_header && lookup_name (name))
3183 warning_at (location, OPT_Wtraditional,
3184 "traditional C lacks a separate namespace "
3185 "for labels, identifier %qE conflicts", name);
3187 /* Mark label as having been defined. */
3188 DECL_INITIAL (label) = error_mark_node;
3189 return label;
3192 /* Get the bindings for a new switch statement. This is used to issue
3193 warnings as appropriate for jumps from the switch to case or
3194 default labels. */
3196 struct c_spot_bindings *
3197 c_get_switch_bindings (void)
3199 struct c_spot_bindings *switch_bindings;
3201 switch_bindings = XNEW (struct c_spot_bindings);
3202 set_spot_bindings (switch_bindings, true);
3203 return switch_bindings;
3206 void
3207 c_release_switch_bindings (struct c_spot_bindings *bindings)
3209 gcc_assert (bindings->stmt_exprs == 0 && !bindings->left_stmt_expr);
3210 XDELETE (bindings);
3213 /* This is called at the point of a case or default label to issue
3214 warnings about decls as needed. It returns true if it found an
3215 error, not just a warning. */
3217 bool
3218 c_check_switch_jump_warnings (struct c_spot_bindings *switch_bindings,
3219 location_t switch_loc, location_t case_loc)
3221 bool saw_error;
3222 struct c_scope *scope;
3224 saw_error = false;
3225 for (scope = current_scope;
3226 scope != switch_bindings->scope;
3227 scope = scope->outer)
3229 struct c_binding *b;
3231 gcc_assert (scope != NULL);
3232 for (b = scope->bindings; b != NULL; b = b->prev)
3234 if (decl_jump_unsafe (b->decl))
3236 if (variably_modified_type_p (TREE_TYPE (b->decl), NULL_TREE))
3238 saw_error = true;
3239 error_at (case_loc,
3240 ("switch jumps into scope of identifier with "
3241 "variably modified type"));
3243 else
3244 warning_at (case_loc, OPT_Wjump_misses_init,
3245 "switch jumps over variable initialization");
3246 inform (switch_loc, "switch starts here");
3247 inform (DECL_SOURCE_LOCATION (b->decl), "%qD declared here",
3248 b->decl);
3253 if (switch_bindings->stmt_exprs > 0)
3255 saw_error = true;
3256 error_at (case_loc, "switch jumps into statement expression");
3257 inform (switch_loc, "switch starts here");
3260 return saw_error;
3263 /* Given NAME, an IDENTIFIER_NODE,
3264 return the structure (or union or enum) definition for that name.
3265 If THISLEVEL_ONLY is nonzero, searches only the current_scope.
3266 CODE says which kind of type the caller wants;
3267 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
3268 If PLOC is not NULL and this returns non-null, it sets *PLOC to the
3269 location where the tag was defined.
3270 If the wrong kind of type is found, an error is reported. */
3272 static tree
3273 lookup_tag (enum tree_code code, tree name, int thislevel_only,
3274 location_t *ploc)
3276 struct c_binding *b = I_TAG_BINDING (name);
3277 int thislevel = 0;
3279 if (!b || !b->decl)
3280 return 0;
3282 /* We only care about whether it's in this level if
3283 thislevel_only was set or it might be a type clash. */
3284 if (thislevel_only || TREE_CODE (b->decl) != code)
3286 /* For our purposes, a tag in the external scope is the same as
3287 a tag in the file scope. (Primarily relevant to Objective-C
3288 and its builtin structure tags, which get pushed before the
3289 file scope is created.) */
3290 if (B_IN_CURRENT_SCOPE (b)
3291 || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
3292 thislevel = 1;
3295 if (thislevel_only && !thislevel)
3296 return 0;
3298 if (TREE_CODE (b->decl) != code)
3300 /* Definition isn't the kind we were looking for. */
3301 pending_invalid_xref = name;
3302 pending_invalid_xref_location = input_location;
3304 /* If in the same binding level as a declaration as a tag
3305 of a different type, this must not be allowed to
3306 shadow that tag, so give the error immediately.
3307 (For example, "struct foo; union foo;" is invalid.) */
3308 if (thislevel)
3309 pending_xref_error ();
3312 if (ploc != NULL)
3313 *ploc = b->locus;
3315 return b->decl;
3318 /* Print an error message now
3319 for a recent invalid struct, union or enum cross reference.
3320 We don't print them immediately because they are not invalid
3321 when used in the `struct foo;' construct for shadowing. */
3323 void
3324 pending_xref_error (void)
3326 if (pending_invalid_xref != 0)
3327 error ("%H%qE defined as wrong kind of tag",
3328 &pending_invalid_xref_location, pending_invalid_xref);
3329 pending_invalid_xref = 0;
3333 /* Look up NAME in the current scope and its superiors
3334 in the namespace of variables, functions and typedefs.
3335 Return a ..._DECL node of some kind representing its definition,
3336 or return 0 if it is undefined. */
3338 tree
3339 lookup_name (tree name)
3341 struct c_binding *b = I_SYMBOL_BINDING (name);
3342 if (b && !b->invisible)
3343 return b->decl;
3344 return 0;
3347 /* Similar to `lookup_name' but look only at the indicated scope. */
3349 static tree
3350 lookup_name_in_scope (tree name, struct c_scope *scope)
3352 struct c_binding *b;
3354 for (b = I_SYMBOL_BINDING (name); b; b = b->shadowed)
3355 if (B_IN_SCOPE (b, scope))
3356 return b->decl;
3357 return 0;
3360 /* Create the predefined scalar types of C,
3361 and some nodes representing standard constants (0, 1, (void *) 0).
3362 Initialize the global scope.
3363 Make definitions for built-in primitive functions. */
3365 void
3366 c_init_decl_processing (void)
3368 location_t save_loc = input_location;
3370 /* Initialize reserved words for parser. */
3371 c_parse_init ();
3373 current_function_decl = 0;
3375 gcc_obstack_init (&parser_obstack);
3377 /* Make the externals scope. */
3378 push_scope ();
3379 external_scope = current_scope;
3381 /* Declarations from c_common_nodes_and_builtins must not be associated
3382 with this input file, lest we get differences between using and not
3383 using preprocessed headers. */
3384 input_location = BUILTINS_LOCATION;
3386 build_common_tree_nodes (flag_signed_char, false);
3388 c_common_nodes_and_builtins ();
3390 /* In C, comparisons and TRUTH_* expressions have type int. */
3391 truthvalue_type_node = integer_type_node;
3392 truthvalue_true_node = integer_one_node;
3393 truthvalue_false_node = integer_zero_node;
3395 /* Even in C99, which has a real boolean type. */
3396 pushdecl (build_decl (UNKNOWN_LOCATION, TYPE_DECL, get_identifier ("_Bool"),
3397 boolean_type_node));
3399 input_location = save_loc;
3401 pedantic_lvalues = true;
3403 make_fname_decl = c_make_fname_decl;
3404 start_fname_decls ();
3407 /* Create the VAR_DECL at LOC for __FUNCTION__ etc. ID is the name to
3408 give the decl, NAME is the initialization string and TYPE_DEP
3409 indicates whether NAME depended on the type of the function. As we
3410 don't yet implement delayed emission of static data, we mark the
3411 decl as emitted so it is not placed in the output. Anything using
3412 it must therefore pull out the STRING_CST initializer directly.
3413 FIXME. */
3415 static tree
3416 c_make_fname_decl (location_t loc, tree id, int type_dep)
3418 const char *name = fname_as_string (type_dep);
3419 tree decl, type, init;
3420 size_t length = strlen (name);
3422 type = build_array_type (char_type_node,
3423 build_index_type (size_int (length)));
3424 type = c_build_qualified_type (type, TYPE_QUAL_CONST);
3426 decl = build_decl (loc, VAR_DECL, id, type);
3428 TREE_STATIC (decl) = 1;
3429 TREE_READONLY (decl) = 1;
3430 DECL_ARTIFICIAL (decl) = 1;
3432 init = build_string (length + 1, name);
3433 free (CONST_CAST (char *, name));
3434 TREE_TYPE (init) = type;
3435 DECL_INITIAL (decl) = init;
3437 TREE_USED (decl) = 1;
3439 if (current_function_decl
3440 /* For invalid programs like this:
3442 void foo()
3443 const char* p = __FUNCTION__;
3445 the __FUNCTION__ is believed to appear in K&R style function
3446 parameter declarator. In that case we still don't have
3447 function_scope. */
3448 && (!errorcount || current_function_scope))
3450 DECL_CONTEXT (decl) = current_function_decl;
3451 bind (id, decl, current_function_scope,
3452 /*invisible=*/false, /*nested=*/false, UNKNOWN_LOCATION);
3455 finish_decl (decl, loc, init, NULL_TREE, NULL_TREE);
3457 return decl;
3460 tree
3461 c_builtin_function (tree decl)
3463 tree type = TREE_TYPE (decl);
3464 tree id = DECL_NAME (decl);
3466 const char *name = IDENTIFIER_POINTER (id);
3467 C_DECL_BUILTIN_PROTOTYPE (decl) = (TYPE_ARG_TYPES (type) != 0);
3469 /* Should never be called on a symbol with a preexisting meaning. */
3470 gcc_assert (!I_SYMBOL_BINDING (id));
3472 bind (id, decl, external_scope, /*invisible=*/true, /*nested=*/false,
3473 UNKNOWN_LOCATION);
3475 /* Builtins in the implementation namespace are made visible without
3476 needing to be explicitly declared. See push_file_scope. */
3477 if (name[0] == '_' && (name[1] == '_' || ISUPPER (name[1])))
3479 TREE_CHAIN (decl) = visible_builtins;
3480 visible_builtins = decl;
3483 return decl;
3486 tree
3487 c_builtin_function_ext_scope (tree decl)
3489 tree type = TREE_TYPE (decl);
3490 tree id = DECL_NAME (decl);
3492 const char *name = IDENTIFIER_POINTER (id);
3493 C_DECL_BUILTIN_PROTOTYPE (decl) = (TYPE_ARG_TYPES (type) != 0);
3495 /* Should never be called on a symbol with a preexisting meaning. */
3496 gcc_assert (!I_SYMBOL_BINDING (id));
3498 bind (id, decl, external_scope, /*invisible=*/false, /*nested=*/false,
3499 UNKNOWN_LOCATION);
3501 /* Builtins in the implementation namespace are made visible without
3502 needing to be explicitly declared. See push_file_scope. */
3503 if (name[0] == '_' && (name[1] == '_' || ISUPPER (name[1])))
3505 TREE_CHAIN (decl) = visible_builtins;
3506 visible_builtins = decl;
3509 return decl;
3512 /* Called when a declaration is seen that contains no names to declare.
3513 If its type is a reference to a structure, union or enum inherited
3514 from a containing scope, shadow that tag name for the current scope
3515 with a forward reference.
3516 If its type defines a new named structure or union
3517 or defines an enum, it is valid but we need not do anything here.
3518 Otherwise, it is an error. */
3520 void
3521 shadow_tag (const struct c_declspecs *declspecs)
3523 shadow_tag_warned (declspecs, 0);
3526 /* WARNED is 1 if we have done a pedwarn, 2 if we have done a warning,
3527 but no pedwarn. */
3528 void
3529 shadow_tag_warned (const struct c_declspecs *declspecs, int warned)
3531 bool found_tag = false;
3533 if (declspecs->type && !declspecs->default_int_p && !declspecs->typedef_p)
3535 tree value = declspecs->type;
3536 enum tree_code code = TREE_CODE (value);
3538 if (code == RECORD_TYPE || code == UNION_TYPE || code == ENUMERAL_TYPE)
3539 /* Used to test also that TYPE_SIZE (value) != 0.
3540 That caused warning for `struct foo;' at top level in the file. */
3542 tree name = TYPE_NAME (value);
3543 tree t;
3545 found_tag = true;
3547 if (declspecs->restrict_p)
3549 error ("invalid use of %<restrict%>");
3550 warned = 1;
3553 if (name == 0)
3555 if (warned != 1 && code != ENUMERAL_TYPE)
3556 /* Empty unnamed enum OK */
3558 pedwarn (input_location, 0,
3559 "unnamed struct/union that defines no instances");
3560 warned = 1;
3563 else if (!declspecs->tag_defined_p
3564 && declspecs->storage_class != csc_none)
3566 if (warned != 1)
3567 pedwarn (input_location, 0,
3568 "empty declaration with storage class specifier "
3569 "does not redeclare tag");
3570 warned = 1;
3571 pending_xref_error ();
3573 else if (!declspecs->tag_defined_p
3574 && (declspecs->const_p
3575 || declspecs->volatile_p
3576 || declspecs->restrict_p))
3578 if (warned != 1)
3579 pedwarn (input_location, 0,
3580 "empty declaration with type qualifier "
3581 "does not redeclare tag");
3582 warned = 1;
3583 pending_xref_error ();
3585 else
3587 pending_invalid_xref = 0;
3588 t = lookup_tag (code, name, 1, NULL);
3590 if (t == 0)
3592 t = make_node (code);
3593 pushtag (input_location, name, t);
3597 else
3599 if (warned != 1 && !in_system_header)
3601 pedwarn (input_location, 0,
3602 "useless type name in empty declaration");
3603 warned = 1;
3607 else if (warned != 1 && !in_system_header && declspecs->typedef_p)
3609 pedwarn (input_location, 0, "useless type name in empty declaration");
3610 warned = 1;
3613 pending_invalid_xref = 0;
3615 if (declspecs->inline_p)
3617 error ("%<inline%> in empty declaration");
3618 warned = 1;
3621 if (current_scope == file_scope && declspecs->storage_class == csc_auto)
3623 error ("%<auto%> in file-scope empty declaration");
3624 warned = 1;
3627 if (current_scope == file_scope && declspecs->storage_class == csc_register)
3629 error ("%<register%> in file-scope empty declaration");
3630 warned = 1;
3633 if (!warned && !in_system_header && declspecs->storage_class != csc_none)
3635 warning (0, "useless storage class specifier in empty declaration");
3636 warned = 2;
3639 if (!warned && !in_system_header && declspecs->thread_p)
3641 warning (0, "useless %<__thread%> in empty declaration");
3642 warned = 2;
3645 if (!warned && !in_system_header && (declspecs->const_p
3646 || declspecs->volatile_p
3647 || declspecs->restrict_p))
3649 warning (0, "useless type qualifier in empty declaration");
3650 warned = 2;
3653 if (warned != 1)
3655 if (!found_tag)
3656 pedwarn (input_location, 0, "empty declaration");
3661 /* Return the qualifiers from SPECS as a bitwise OR of TYPE_QUAL_*
3662 bits. SPECS represents declaration specifiers that the grammar
3663 only permits to contain type qualifiers and attributes. */
3666 quals_from_declspecs (const struct c_declspecs *specs)
3668 int quals = ((specs->const_p ? TYPE_QUAL_CONST : 0)
3669 | (specs->volatile_p ? TYPE_QUAL_VOLATILE : 0)
3670 | (specs->restrict_p ? TYPE_QUAL_RESTRICT : 0));
3671 gcc_assert (!specs->type
3672 && !specs->decl_attr
3673 && specs->typespec_word == cts_none
3674 && specs->storage_class == csc_none
3675 && !specs->typedef_p
3676 && !specs->explicit_signed_p
3677 && !specs->deprecated_p
3678 && !specs->long_p
3679 && !specs->long_long_p
3680 && !specs->short_p
3681 && !specs->signed_p
3682 && !specs->unsigned_p
3683 && !specs->complex_p
3684 && !specs->inline_p
3685 && !specs->thread_p);
3686 return quals;
3689 /* Construct an array declarator. LOC is the location of the
3690 beginning of the array (usually the opening brace). EXPR is the
3691 expression inside [], or NULL_TREE. QUALS are the type qualifiers
3692 inside the [] (to be applied to the pointer to which a parameter
3693 array is converted). STATIC_P is true if "static" is inside the
3694 [], false otherwise. VLA_UNSPEC_P is true if the array is [*], a
3695 VLA of unspecified length which is nevertheless a complete type,
3696 false otherwise. The field for the contained declarator is left to
3697 be filled in by set_array_declarator_inner. */
3699 struct c_declarator *
3700 build_array_declarator (location_t loc,
3701 tree expr, struct c_declspecs *quals, bool static_p,
3702 bool vla_unspec_p)
3704 struct c_declarator *declarator = XOBNEW (&parser_obstack,
3705 struct c_declarator);
3706 declarator->id_loc = loc;
3707 declarator->kind = cdk_array;
3708 declarator->declarator = 0;
3709 declarator->u.array.dimen = expr;
3710 if (quals)
3712 declarator->u.array.attrs = quals->attrs;
3713 declarator->u.array.quals = quals_from_declspecs (quals);
3715 else
3717 declarator->u.array.attrs = NULL_TREE;
3718 declarator->u.array.quals = 0;
3720 declarator->u.array.static_p = static_p;
3721 declarator->u.array.vla_unspec_p = vla_unspec_p;
3722 if (!flag_isoc99)
3724 if (static_p || quals != NULL)
3725 pedwarn (loc, OPT_pedantic,
3726 "ISO C90 does not support %<static%> or type "
3727 "qualifiers in parameter array declarators");
3728 if (vla_unspec_p)
3729 pedwarn (loc, OPT_pedantic,
3730 "ISO C90 does not support %<[*]%> array declarators");
3732 if (vla_unspec_p)
3734 if (!current_scope->parm_flag)
3736 /* C99 6.7.5.2p4 */
3737 error_at (loc, "%<[*]%> not allowed in other than "
3738 "function prototype scope");
3739 declarator->u.array.vla_unspec_p = false;
3740 return NULL;
3742 current_scope->had_vla_unspec = true;
3744 return declarator;
3747 /* Set the contained declarator of an array declarator. DECL is the
3748 declarator, as constructed by build_array_declarator; INNER is what
3749 appears on the left of the []. */
3751 struct c_declarator *
3752 set_array_declarator_inner (struct c_declarator *decl,
3753 struct c_declarator *inner)
3755 decl->declarator = inner;
3756 return decl;
3759 /* INIT is a constructor that forms DECL's initializer. If the final
3760 element initializes a flexible array field, add the size of that
3761 initializer to DECL's size. */
3763 static void
3764 add_flexible_array_elts_to_size (tree decl, tree init)
3766 tree elt, type;
3768 if (VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (init)))
3769 return;
3771 elt = VEC_last (constructor_elt, CONSTRUCTOR_ELTS (init))->value;
3772 type = TREE_TYPE (elt);
3773 if (TREE_CODE (type) == ARRAY_TYPE
3774 && TYPE_SIZE (type) == NULL_TREE
3775 && TYPE_DOMAIN (type) != NULL_TREE
3776 && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL_TREE)
3778 complete_array_type (&type, elt, false);
3779 DECL_SIZE (decl)
3780 = size_binop (PLUS_EXPR, DECL_SIZE (decl), TYPE_SIZE (type));
3781 DECL_SIZE_UNIT (decl)
3782 = size_binop (PLUS_EXPR, DECL_SIZE_UNIT (decl), TYPE_SIZE_UNIT (type));
3786 /* Decode a "typename", such as "int **", returning a ..._TYPE node.
3787 Set *EXPR, if EXPR not NULL, to any expression to be evaluated
3788 before the type name, and set *EXPR_CONST_OPERANDS, if
3789 EXPR_CONST_OPERANDS not NULL, to indicate whether the type name may
3790 appear in a constant expression. */
3792 tree
3793 groktypename (struct c_type_name *type_name, tree *expr,
3794 bool *expr_const_operands)
3796 tree type;
3797 tree attrs = type_name->specs->attrs;
3799 type_name->specs->attrs = NULL_TREE;
3801 type = grokdeclarator (type_name->declarator, type_name->specs, TYPENAME,
3802 false, NULL, &attrs, expr, expr_const_operands,
3803 DEPRECATED_NORMAL);
3805 /* Apply attributes. */
3806 decl_attributes (&type, attrs, 0);
3808 return type;
3811 /* Decode a declarator in an ordinary declaration or data definition.
3812 This is called as soon as the type information and variable name
3813 have been parsed, before parsing the initializer if any.
3814 Here we create the ..._DECL node, fill in its type,
3815 and put it on the list of decls for the current context.
3816 The ..._DECL node is returned as the value.
3818 Exception: for arrays where the length is not specified,
3819 the type is left null, to be filled in by `finish_decl'.
3821 Function definitions do not come here; they go to start_function
3822 instead. However, external and forward declarations of functions
3823 do go through here. Structure field declarations are done by
3824 grokfield and not through here. */
3826 tree
3827 start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs,
3828 bool initialized, tree attributes)
3830 tree decl;
3831 tree tem;
3832 tree expr = NULL_TREE;
3833 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
3835 /* An object declared as __attribute__((deprecated)) suppresses
3836 warnings of uses of other deprecated items. */
3837 if (lookup_attribute ("deprecated", attributes))
3838 deprecated_state = DEPRECATED_SUPPRESS;
3840 decl = grokdeclarator (declarator, declspecs,
3841 NORMAL, initialized, NULL, &attributes, &expr, NULL,
3842 deprecated_state);
3843 if (!decl)
3844 return 0;
3846 if (expr)
3847 add_stmt (expr);
3849 if (TREE_CODE (decl) != FUNCTION_DECL && MAIN_NAME_P (DECL_NAME (decl)))
3850 warning (OPT_Wmain, "%q+D is usually a function", decl);
3852 if (initialized)
3853 /* Is it valid for this decl to have an initializer at all?
3854 If not, set INITIALIZED to zero, which will indirectly
3855 tell 'finish_decl' to ignore the initializer once it is parsed. */
3856 switch (TREE_CODE (decl))
3858 case TYPE_DECL:
3859 error ("typedef %qD is initialized (use __typeof__ instead)", decl);
3860 initialized = 0;
3861 break;
3863 case FUNCTION_DECL:
3864 error ("function %qD is initialized like a variable", decl);
3865 initialized = 0;
3866 break;
3868 case PARM_DECL:
3869 /* DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. */
3870 error ("parameter %qD is initialized", decl);
3871 initialized = 0;
3872 break;
3874 default:
3875 /* Don't allow initializations for incomplete types except for
3876 arrays which might be completed by the initialization. */
3878 /* This can happen if the array size is an undefined macro.
3879 We already gave a warning, so we don't need another one. */
3880 if (TREE_TYPE (decl) == error_mark_node)
3881 initialized = 0;
3882 else if (COMPLETE_TYPE_P (TREE_TYPE (decl)))
3884 /* A complete type is ok if size is fixed. */
3886 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (decl))) != INTEGER_CST
3887 || C_DECL_VARIABLE_SIZE (decl))
3889 error ("variable-sized object may not be initialized");
3890 initialized = 0;
3893 else if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE)
3895 error ("variable %qD has initializer but incomplete type", decl);
3896 initialized = 0;
3898 else if (C_DECL_VARIABLE_SIZE (decl))
3900 /* Although C99 is unclear about whether incomplete arrays
3901 of VLAs themselves count as VLAs, it does not make
3902 sense to permit them to be initialized given that
3903 ordinary VLAs may not be initialized. */
3904 error ("variable-sized object may not be initialized");
3905 initialized = 0;
3909 if (initialized)
3911 if (current_scope == file_scope)
3912 TREE_STATIC (decl) = 1;
3914 /* Tell 'pushdecl' this is an initialized decl
3915 even though we don't yet have the initializer expression.
3916 Also tell 'finish_decl' it may store the real initializer. */
3917 DECL_INITIAL (decl) = error_mark_node;
3920 /* If this is a function declaration, write a record describing it to the
3921 prototypes file (if requested). */
3923 if (TREE_CODE (decl) == FUNCTION_DECL)
3924 gen_aux_info_record (decl, 0, 0, TYPE_ARG_TYPES (TREE_TYPE (decl)) != 0);
3926 /* ANSI specifies that a tentative definition which is not merged with
3927 a non-tentative definition behaves exactly like a definition with an
3928 initializer equal to zero. (Section 3.7.2)
3930 -fno-common gives strict ANSI behavior, though this tends to break
3931 a large body of code that grew up without this rule.
3933 Thread-local variables are never common, since there's no entrenched
3934 body of code to break, and it allows more efficient variable references
3935 in the presence of dynamic linking. */
3937 if (TREE_CODE (decl) == VAR_DECL
3938 && !initialized
3939 && TREE_PUBLIC (decl)
3940 && !DECL_THREAD_LOCAL_P (decl)
3941 && !flag_no_common)
3942 DECL_COMMON (decl) = 1;
3944 /* Set attributes here so if duplicate decl, will have proper attributes. */
3945 decl_attributes (&decl, attributes, 0);
3947 /* Handle gnu_inline attribute. */
3948 if (declspecs->inline_p
3949 && !flag_gnu89_inline
3950 && TREE_CODE (decl) == FUNCTION_DECL
3951 && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl))
3952 || current_function_decl))
3954 if (declspecs->storage_class == csc_auto && current_scope != file_scope)
3956 else if (declspecs->storage_class != csc_static)
3957 DECL_EXTERNAL (decl) = !DECL_EXTERNAL (decl);
3960 if (TREE_CODE (decl) == FUNCTION_DECL
3961 && targetm.calls.promote_prototypes (TREE_TYPE (decl)))
3963 struct c_declarator *ce = declarator;
3965 if (ce->kind == cdk_pointer)
3966 ce = declarator->declarator;
3967 if (ce->kind == cdk_function)
3969 tree args = ce->u.arg_info->parms;
3970 for (; args; args = TREE_CHAIN (args))
3972 tree type = TREE_TYPE (args);
3973 if (type && INTEGRAL_TYPE_P (type)
3974 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
3975 DECL_ARG_TYPE (args) = integer_type_node;
3980 if (TREE_CODE (decl) == FUNCTION_DECL
3981 && DECL_DECLARED_INLINE_P (decl)
3982 && DECL_UNINLINABLE (decl)
3983 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
3984 warning (OPT_Wattributes, "inline function %q+D given attribute noinline",
3985 decl);
3987 /* C99 6.7.4p3: An inline definition of a function with external
3988 linkage shall not contain a definition of a modifiable object
3989 with static storage duration... */
3990 if (TREE_CODE (decl) == VAR_DECL
3991 && current_scope != file_scope
3992 && TREE_STATIC (decl)
3993 && !TREE_READONLY (decl)
3994 && DECL_DECLARED_INLINE_P (current_function_decl)
3995 && DECL_EXTERNAL (current_function_decl))
3996 record_inline_static (input_location, current_function_decl,
3997 decl, csi_modifiable);
3999 /* Add this decl to the current scope.
4000 TEM may equal DECL or it may be a previous decl of the same name. */
4001 tem = pushdecl (decl);
4003 if (initialized && DECL_EXTERNAL (tem))
4005 DECL_EXTERNAL (tem) = 0;
4006 TREE_STATIC (tem) = 1;
4009 return tem;
4012 /* Initialize EH if not initialized yet and exceptions are enabled. */
4014 void
4015 c_maybe_initialize_eh (void)
4017 if (!flag_exceptions || c_eh_initialized_p)
4018 return;
4020 c_eh_initialized_p = true;
4021 eh_personality_libfunc
4022 = init_one_libfunc (USING_SJLJ_EXCEPTIONS
4023 ? "__gcc_personality_sj0"
4024 : "__gcc_personality_v0");
4025 default_init_unwind_resume_libfunc ();
4026 using_eh_for_cleanups ();
4029 /* Finish processing of a declaration;
4030 install its initial value.
4031 If ORIGTYPE is not NULL_TREE, it is the original type of INIT.
4032 If the length of an array type is not known before,
4033 it must be determined now, from the initial value, or it is an error.
4035 INIT_LOC is the location of the initial value. */
4037 void
4038 finish_decl (tree decl, location_t init_loc, tree init,
4039 tree origtype, tree asmspec_tree)
4041 tree type;
4042 bool was_incomplete = (DECL_SIZE (decl) == 0);
4043 const char *asmspec = 0;
4045 /* If a name was specified, get the string. */
4046 if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
4047 && DECL_FILE_SCOPE_P (decl))
4048 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
4049 if (asmspec_tree)
4050 asmspec = TREE_STRING_POINTER (asmspec_tree);
4052 /* If `start_decl' didn't like having an initialization, ignore it now. */
4053 if (init != 0 && DECL_INITIAL (decl) == 0)
4054 init = 0;
4056 /* Don't crash if parm is initialized. */
4057 if (TREE_CODE (decl) == PARM_DECL)
4058 init = 0;
4060 if (init)
4061 store_init_value (init_loc, decl, init, origtype);
4063 if (c_dialect_objc () && (TREE_CODE (decl) == VAR_DECL
4064 || TREE_CODE (decl) == FUNCTION_DECL
4065 || TREE_CODE (decl) == FIELD_DECL))
4066 objc_check_decl (decl);
4068 type = TREE_TYPE (decl);
4070 /* Deduce size of array from initialization, if not already known. */
4071 if (TREE_CODE (type) == ARRAY_TYPE
4072 && TYPE_DOMAIN (type) == 0
4073 && TREE_CODE (decl) != TYPE_DECL)
4075 bool do_default
4076 = (TREE_STATIC (decl)
4077 /* Even if pedantic, an external linkage array
4078 may have incomplete type at first. */
4079 ? pedantic && !TREE_PUBLIC (decl)
4080 : !DECL_EXTERNAL (decl));
4081 int failure
4082 = complete_array_type (&TREE_TYPE (decl), DECL_INITIAL (decl),
4083 do_default);
4085 /* Get the completed type made by complete_array_type. */
4086 type = TREE_TYPE (decl);
4088 switch (failure)
4090 case 1:
4091 error ("initializer fails to determine size of %q+D", decl);
4092 break;
4094 case 2:
4095 if (do_default)
4096 error ("array size missing in %q+D", decl);
4097 /* If a `static' var's size isn't known,
4098 make it extern as well as static, so it does not get
4099 allocated.
4100 If it is not `static', then do not mark extern;
4101 finish_incomplete_decl will give it a default size
4102 and it will get allocated. */
4103 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4104 DECL_EXTERNAL (decl) = 1;
4105 break;
4107 case 3:
4108 error ("zero or negative size array %q+D", decl);
4109 break;
4111 case 0:
4112 /* For global variables, update the copy of the type that
4113 exists in the binding. */
4114 if (TREE_PUBLIC (decl))
4116 struct c_binding *b_ext = I_SYMBOL_BINDING (DECL_NAME (decl));
4117 while (b_ext && !B_IN_EXTERNAL_SCOPE (b_ext))
4118 b_ext = b_ext->shadowed;
4119 if (b_ext)
4121 if (b_ext->u.type)
4122 b_ext->u.type = composite_type (b_ext->u.type, type);
4123 else
4124 b_ext->u.type = type;
4127 break;
4129 default:
4130 gcc_unreachable ();
4133 if (DECL_INITIAL (decl))
4134 TREE_TYPE (DECL_INITIAL (decl)) = type;
4136 layout_decl (decl, 0);
4139 if (TREE_CODE (decl) == VAR_DECL)
4141 if (init && TREE_CODE (init) == CONSTRUCTOR)
4142 add_flexible_array_elts_to_size (decl, init);
4144 if (DECL_SIZE (decl) == 0 && TREE_TYPE (decl) != error_mark_node
4145 && COMPLETE_TYPE_P (TREE_TYPE (decl)))
4146 layout_decl (decl, 0);
4148 if (DECL_SIZE (decl) == 0
4149 /* Don't give an error if we already gave one earlier. */
4150 && TREE_TYPE (decl) != error_mark_node
4151 && (TREE_STATIC (decl)
4152 /* A static variable with an incomplete type
4153 is an error if it is initialized.
4154 Also if it is not file scope.
4155 Otherwise, let it through, but if it is not `extern'
4156 then it may cause an error message later. */
4157 ? (DECL_INITIAL (decl) != 0
4158 || !DECL_FILE_SCOPE_P (decl))
4159 /* An automatic variable with an incomplete type
4160 is an error. */
4161 : !DECL_EXTERNAL (decl)))
4163 error ("storage size of %q+D isn%'t known", decl);
4164 TREE_TYPE (decl) = error_mark_node;
4167 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4168 && DECL_SIZE (decl) != 0)
4170 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4171 constant_expression_warning (DECL_SIZE (decl));
4172 else
4174 error ("storage size of %q+D isn%'t constant", decl);
4175 TREE_TYPE (decl) = error_mark_node;
4179 if (TREE_USED (type))
4180 TREE_USED (decl) = 1;
4183 /* If this is a function and an assembler name is specified, reset DECL_RTL
4184 so we can give it its new name. Also, update built_in_decls if it
4185 was a normal built-in. */
4186 if (TREE_CODE (decl) == FUNCTION_DECL && asmspec)
4188 if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
4189 set_builtin_user_assembler_name (decl, asmspec);
4190 set_user_assembler_name (decl, asmspec);
4193 /* If #pragma weak was used, mark the decl weak now. */
4194 maybe_apply_pragma_weak (decl);
4196 /* Output the assembler code and/or RTL code for variables and functions,
4197 unless the type is an undefined structure or union.
4198 If not, it will get done when the type is completed. */
4200 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
4202 /* Determine the ELF visibility. */
4203 if (TREE_PUBLIC (decl))
4204 c_determine_visibility (decl);
4206 /* This is a no-op in c-lang.c or something real in objc-act.c. */
4207 if (c_dialect_objc ())
4208 objc_check_decl (decl);
4210 if (asmspec)
4212 /* If this is not a static variable, issue a warning.
4213 It doesn't make any sense to give an ASMSPEC for an
4214 ordinary, non-register local variable. Historically,
4215 GCC has accepted -- but ignored -- the ASMSPEC in
4216 this case. */
4217 if (!DECL_FILE_SCOPE_P (decl)
4218 && TREE_CODE (decl) == VAR_DECL
4219 && !C_DECL_REGISTER (decl)
4220 && !TREE_STATIC (decl))
4221 warning (0, "ignoring asm-specifier for non-static local "
4222 "variable %q+D", decl);
4223 else
4224 set_user_assembler_name (decl, asmspec);
4227 if (DECL_FILE_SCOPE_P (decl))
4229 if (DECL_INITIAL (decl) == NULL_TREE
4230 || DECL_INITIAL (decl) == error_mark_node)
4231 /* Don't output anything
4232 when a tentative file-scope definition is seen.
4233 But at end of compilation, do output code for them. */
4234 DECL_DEFER_OUTPUT (decl) = 1;
4235 rest_of_decl_compilation (decl, true, 0);
4237 else
4239 /* In conjunction with an ASMSPEC, the `register'
4240 keyword indicates that we should place the variable
4241 in a particular register. */
4242 if (asmspec && C_DECL_REGISTER (decl))
4244 DECL_HARD_REGISTER (decl) = 1;
4245 /* This cannot be done for a structure with volatile
4246 fields, on which DECL_REGISTER will have been
4247 reset. */
4248 if (!DECL_REGISTER (decl))
4249 error ("cannot put object with volatile field into register");
4252 if (TREE_CODE (decl) != FUNCTION_DECL)
4254 /* If we're building a variable sized type, and we might be
4255 reachable other than via the top of the current binding
4256 level, then create a new BIND_EXPR so that we deallocate
4257 the object at the right time. */
4258 /* Note that DECL_SIZE can be null due to errors. */
4259 if (DECL_SIZE (decl)
4260 && !TREE_CONSTANT (DECL_SIZE (decl))
4261 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
4263 tree bind;
4264 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
4265 TREE_SIDE_EFFECTS (bind) = 1;
4266 add_stmt (bind);
4267 BIND_EXPR_BODY (bind) = push_stmt_list ();
4269 add_stmt (build_stmt (DECL_SOURCE_LOCATION (decl),
4270 DECL_EXPR, decl));
4275 if (!DECL_FILE_SCOPE_P (decl))
4277 /* Recompute the RTL of a local array now
4278 if it used to be an incomplete type. */
4279 if (was_incomplete
4280 && !TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
4282 /* If we used it already as memory, it must stay in memory. */
4283 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
4284 /* If it's still incomplete now, no init will save it. */
4285 if (DECL_SIZE (decl) == 0)
4286 DECL_INITIAL (decl) = 0;
4291 if (TREE_CODE (decl) == TYPE_DECL)
4293 if (!DECL_FILE_SCOPE_P (decl)
4294 && variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
4295 add_stmt (build_stmt (DECL_SOURCE_LOCATION (decl), DECL_EXPR, decl));
4297 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl), 0);
4300 /* At the end of a declaration, throw away any variable type sizes
4301 of types defined inside that declaration. There is no use
4302 computing them in the following function definition. */
4303 if (current_scope == file_scope)
4304 get_pending_sizes ();
4306 /* Install a cleanup (aka destructor) if one was given. */
4307 if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
4309 tree attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
4310 if (attr)
4312 tree cleanup_id = TREE_VALUE (TREE_VALUE (attr));
4313 tree cleanup_decl = lookup_name (cleanup_id);
4314 tree cleanup;
4315 VEC(tree,gc) *vec;
4317 /* Build "cleanup(&decl)" for the destructor. */
4318 cleanup = build_unary_op (input_location, ADDR_EXPR, decl, 0);
4319 vec = VEC_alloc (tree, gc, 1);
4320 VEC_quick_push (tree, vec, cleanup);
4321 cleanup = build_function_call_vec (DECL_SOURCE_LOCATION (decl),
4322 cleanup_decl, vec, NULL);
4323 VEC_free (tree, gc, vec);
4325 /* Don't warn about decl unused; the cleanup uses it. */
4326 TREE_USED (decl) = 1;
4327 TREE_USED (cleanup_decl) = 1;
4329 /* Initialize EH, if we've been told to do so. */
4330 c_maybe_initialize_eh ();
4332 push_cleanup (decl, cleanup, false);
4337 /* Given a parsed parameter declaration, decode it into a PARM_DECL. */
4339 tree
4340 grokparm (const struct c_parm *parm)
4342 tree attrs = parm->attrs;
4343 tree decl = grokdeclarator (parm->declarator, parm->specs, PARM, false,
4344 NULL, &attrs, NULL, NULL, DEPRECATED_NORMAL);
4346 decl_attributes (&decl, attrs, 0);
4348 return decl;
4351 /* Given a parsed parameter declaration, decode it into a PARM_DECL
4352 and push that on the current scope. */
4354 void
4355 push_parm_decl (const struct c_parm *parm)
4357 tree attrs = parm->attrs;
4358 tree decl;
4360 decl = grokdeclarator (parm->declarator, parm->specs, PARM, false, NULL,
4361 &attrs, NULL, NULL, DEPRECATED_NORMAL);
4362 decl_attributes (&decl, attrs, 0);
4364 decl = pushdecl (decl);
4366 finish_decl (decl, input_location, NULL_TREE, NULL_TREE, NULL_TREE);
4369 /* Mark all the parameter declarations to date as forward decls.
4370 Also diagnose use of this extension. */
4372 void
4373 mark_forward_parm_decls (void)
4375 struct c_binding *b;
4377 if (pedantic && !current_scope->warned_forward_parm_decls)
4379 pedwarn (input_location, OPT_pedantic,
4380 "ISO C forbids forward parameter declarations");
4381 current_scope->warned_forward_parm_decls = true;
4384 for (b = current_scope->bindings; b; b = b->prev)
4385 if (TREE_CODE (b->decl) == PARM_DECL)
4386 TREE_ASM_WRITTEN (b->decl) = 1;
4389 /* Build a COMPOUND_LITERAL_EXPR. TYPE is the type given in the compound
4390 literal, which may be an incomplete array type completed by the
4391 initializer; INIT is a CONSTRUCTOR at LOC that initializes the compound
4392 literal. NON_CONST is true if the initializers contain something
4393 that cannot occur in a constant expression. */
4395 tree
4396 build_compound_literal (location_t loc, tree type, tree init, bool non_const)
4398 /* We do not use start_decl here because we have a type, not a declarator;
4399 and do not use finish_decl because the decl should be stored inside
4400 the COMPOUND_LITERAL_EXPR rather than added elsewhere as a DECL_EXPR. */
4401 tree decl;
4402 tree complit;
4403 tree stmt;
4405 if (type == error_mark_node)
4406 return error_mark_node;
4408 decl = build_decl (loc, VAR_DECL, NULL_TREE, type);
4409 DECL_EXTERNAL (decl) = 0;
4410 TREE_PUBLIC (decl) = 0;
4411 TREE_STATIC (decl) = (current_scope == file_scope);
4412 DECL_CONTEXT (decl) = current_function_decl;
4413 TREE_USED (decl) = 1;
4414 TREE_TYPE (decl) = type;
4415 TREE_READONLY (decl) = TYPE_READONLY (type);
4416 store_init_value (loc, decl, init, NULL_TREE);
4418 if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
4420 int failure = complete_array_type (&TREE_TYPE (decl),
4421 DECL_INITIAL (decl), true);
4422 gcc_assert (!failure);
4424 type = TREE_TYPE (decl);
4425 TREE_TYPE (DECL_INITIAL (decl)) = type;
4428 if (type == error_mark_node || !COMPLETE_TYPE_P (type))
4429 return error_mark_node;
4431 stmt = build_stmt (DECL_SOURCE_LOCATION (decl), DECL_EXPR, decl);
4432 complit = build1 (COMPOUND_LITERAL_EXPR, type, stmt);
4433 TREE_SIDE_EFFECTS (complit) = 1;
4435 layout_decl (decl, 0);
4437 if (TREE_STATIC (decl))
4439 /* This decl needs a name for the assembler output. */
4440 set_compound_literal_name (decl);
4441 DECL_DEFER_OUTPUT (decl) = 1;
4442 DECL_COMDAT (decl) = 1;
4443 DECL_ARTIFICIAL (decl) = 1;
4444 DECL_IGNORED_P (decl) = 1;
4445 pushdecl (decl);
4446 rest_of_decl_compilation (decl, 1, 0);
4449 if (non_const)
4451 complit = build2 (C_MAYBE_CONST_EXPR, type, NULL, complit);
4452 C_MAYBE_CONST_EXPR_NON_CONST (complit) = 1;
4455 return complit;
4458 /* Check the type of a compound literal. Here we just check that it
4459 is valid for C++. */
4461 void
4462 check_compound_literal_type (location_t loc, struct c_type_name *type_name)
4464 if (warn_cxx_compat && type_name->specs->tag_defined_p)
4465 warning_at (loc, OPT_Wc___compat,
4466 "defining a type in a compound literal is invalid in C++");
4469 /* Determine whether TYPE is a structure with a flexible array member,
4470 or a union containing such a structure (possibly recursively). */
4472 static bool
4473 flexible_array_type_p (tree type)
4475 tree x;
4476 switch (TREE_CODE (type))
4478 case RECORD_TYPE:
4479 x = TYPE_FIELDS (type);
4480 if (x == NULL_TREE)
4481 return false;
4482 while (TREE_CHAIN (x) != NULL_TREE)
4483 x = TREE_CHAIN (x);
4484 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
4485 && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
4486 && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
4487 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
4488 return true;
4489 return false;
4490 case UNION_TYPE:
4491 for (x = TYPE_FIELDS (type); x != NULL_TREE; x = TREE_CHAIN (x))
4493 if (flexible_array_type_p (TREE_TYPE (x)))
4494 return true;
4496 return false;
4497 default:
4498 return false;
4502 /* Performs sanity checks on the TYPE and WIDTH of the bit-field NAME,
4503 replacing with appropriate values if they are invalid. */
4504 static void
4505 check_bitfield_type_and_width (tree *type, tree *width, tree orig_name)
4507 tree type_mv;
4508 unsigned int max_width;
4509 unsigned HOST_WIDE_INT w;
4510 const char *name = (orig_name
4511 ? identifier_to_locale (IDENTIFIER_POINTER (orig_name))
4512 : _("<anonymous>"));
4514 /* Detect and ignore out of range field width and process valid
4515 field widths. */
4516 if (!INTEGRAL_TYPE_P (TREE_TYPE (*width))
4517 || TREE_CODE (*width) != INTEGER_CST)
4519 error ("bit-field %qs width not an integer constant", name);
4520 *width = integer_one_node;
4522 else
4524 constant_expression_warning (*width);
4525 if (tree_int_cst_sgn (*width) < 0)
4527 error ("negative width in bit-field %qs", name);
4528 *width = integer_one_node;
4530 else if (integer_zerop (*width) && orig_name)
4532 error ("zero width for bit-field %qs", name);
4533 *width = integer_one_node;
4537 /* Detect invalid bit-field type. */
4538 if (TREE_CODE (*type) != INTEGER_TYPE
4539 && TREE_CODE (*type) != BOOLEAN_TYPE
4540 && TREE_CODE (*type) != ENUMERAL_TYPE)
4542 error ("bit-field %qs has invalid type", name);
4543 *type = unsigned_type_node;
4546 type_mv = TYPE_MAIN_VARIANT (*type);
4547 if (!in_system_header
4548 && type_mv != integer_type_node
4549 && type_mv != unsigned_type_node
4550 && type_mv != boolean_type_node)
4551 pedwarn (input_location, OPT_pedantic,
4552 "type of bit-field %qs is a GCC extension", name);
4554 max_width = TYPE_PRECISION (*type);
4556 if (0 < compare_tree_int (*width, max_width))
4558 error ("width of %qs exceeds its type", name);
4559 w = max_width;
4560 *width = build_int_cst (NULL_TREE, w);
4562 else
4563 w = tree_low_cst (*width, 1);
4565 if (TREE_CODE (*type) == ENUMERAL_TYPE)
4567 struct lang_type *lt = TYPE_LANG_SPECIFIC (*type);
4568 if (!lt
4569 || w < tree_int_cst_min_precision (lt->enum_min, TYPE_UNSIGNED (*type))
4570 || w < tree_int_cst_min_precision (lt->enum_max, TYPE_UNSIGNED (*type)))
4571 warning (0, "%qs is narrower than values of its type", name);
4577 /* Print warning about variable length array if necessary. */
4579 static void
4580 warn_variable_length_array (tree name, tree size)
4582 int const_size = TREE_CONSTANT (size);
4584 if (!flag_isoc99 && pedantic && warn_vla != 0)
4586 if (const_size)
4588 if (name)
4589 pedwarn (input_location, OPT_Wvla,
4590 "ISO C90 forbids array %qE whose size "
4591 "can%'t be evaluated",
4592 name);
4593 else
4594 pedwarn (input_location, OPT_Wvla, "ISO C90 forbids array whose size "
4595 "can%'t be evaluated");
4597 else
4599 if (name)
4600 pedwarn (input_location, OPT_Wvla,
4601 "ISO C90 forbids variable length array %qE",
4602 name);
4603 else
4604 pedwarn (input_location, OPT_Wvla, "ISO C90 forbids variable length array");
4607 else if (warn_vla > 0)
4609 if (const_size)
4611 if (name)
4612 warning (OPT_Wvla,
4613 "the size of array %qE can"
4614 "%'t be evaluated", name);
4615 else
4616 warning (OPT_Wvla,
4617 "the size of array can %'t be evaluated");
4619 else
4621 if (name)
4622 warning (OPT_Wvla,
4623 "variable length array %qE is used",
4624 name);
4625 else
4626 warning (OPT_Wvla,
4627 "variable length array is used");
4632 /* Given a size SIZE that may not be a constant, return a SAVE_EXPR to
4633 serve as the actual size-expression for a type or decl. This is
4634 like variable_size in stor-layout.c, but we make global_bindings_p
4635 return negative to avoid calls to that function from outside the
4636 front end resulting in errors at file scope, then call this version
4637 instead from front-end code. */
4639 static tree
4640 c_variable_size (tree size)
4642 tree save;
4644 if (TREE_CONSTANT (size))
4645 return size;
4647 size = save_expr (size);
4649 save = skip_simple_arithmetic (size);
4651 if (cfun && cfun->dont_save_pending_sizes_p)
4652 return size;
4654 if (!global_bindings_p ())
4655 put_pending_size (save);
4657 return size;
4660 /* Given declspecs and a declarator,
4661 determine the name and type of the object declared
4662 and construct a ..._DECL node for it.
4663 (In one case we can return a ..._TYPE node instead.
4664 For invalid input we sometimes return 0.)
4666 DECLSPECS is a c_declspecs structure for the declaration specifiers.
4668 DECL_CONTEXT says which syntactic context this declaration is in:
4669 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
4670 FUNCDEF for a function definition. Like NORMAL but a few different
4671 error messages in each case. Return value may be zero meaning
4672 this definition is too screwy to try to parse.
4673 PARM for a parameter declaration (either within a function prototype
4674 or before a function body). Make a PARM_DECL, or return void_type_node.
4675 TYPENAME if for a typename (in a cast or sizeof).
4676 Don't make a DECL node; just return the ..._TYPE node.
4677 FIELD for a struct or union field; make a FIELD_DECL.
4678 INITIALIZED is true if the decl has an initializer.
4679 WIDTH is non-NULL for bit-fields, and is a pointer to an INTEGER_CST node
4680 representing the width of the bit-field.
4681 DECL_ATTRS points to the list of attributes that should be added to this
4682 decl. Any nested attributes that belong on the decl itself will be
4683 added to this list.
4684 If EXPR is not NULL, any expressions that need to be evaluated as
4685 part of evaluating variably modified types will be stored in *EXPR.
4686 If EXPR_CONST_OPERANDS is not NULL, *EXPR_CONST_OPERANDS will be
4687 set to indicate whether operands in *EXPR can be used in constant
4688 expressions.
4689 DEPRECATED_STATE is a deprecated_states value indicating whether
4690 deprecation warnings should be suppressed.
4692 In the TYPENAME case, DECLARATOR is really an absolute declarator.
4693 It may also be so in the PARM case, for a prototype where the
4694 argument type is specified but not the name.
4696 This function is where the complicated C meanings of `static'
4697 and `extern' are interpreted. */
4699 static tree
4700 grokdeclarator (const struct c_declarator *declarator,
4701 struct c_declspecs *declspecs,
4702 enum decl_context decl_context, bool initialized, tree *width,
4703 tree *decl_attrs, tree *expr, bool *expr_const_operands,
4704 enum deprecated_states deprecated_state)
4706 tree type = declspecs->type;
4707 bool threadp = declspecs->thread_p;
4708 enum c_storage_class storage_class = declspecs->storage_class;
4709 int constp;
4710 int restrictp;
4711 int volatilep;
4712 int type_quals = TYPE_UNQUALIFIED;
4713 tree name = NULL_TREE;
4714 bool funcdef_flag = false;
4715 bool funcdef_syntax = false;
4716 int size_varies = 0;
4717 tree decl_attr = declspecs->decl_attr;
4718 int array_ptr_quals = TYPE_UNQUALIFIED;
4719 tree array_ptr_attrs = NULL_TREE;
4720 int array_parm_static = 0;
4721 bool array_parm_vla_unspec_p = false;
4722 tree returned_attrs = NULL_TREE;
4723 bool bitfield = width != NULL;
4724 tree element_type;
4725 struct c_arg_info *arg_info = 0;
4726 location_t loc = UNKNOWN_LOCATION;
4727 const char *errmsg;
4728 tree expr_dummy;
4729 bool expr_const_operands_dummy;
4731 if (expr == NULL)
4732 expr = &expr_dummy;
4733 if (expr_const_operands == NULL)
4734 expr_const_operands = &expr_const_operands_dummy;
4736 *expr = declspecs->expr;
4737 *expr_const_operands = declspecs->expr_const_operands;
4739 if (decl_context == FUNCDEF)
4740 funcdef_flag = true, decl_context = NORMAL;
4742 /* Look inside a declarator for the name being declared
4743 and get it as an IDENTIFIER_NODE, for an error message. */
4745 const struct c_declarator *decl = declarator;
4747 while (decl)
4748 switch (decl->kind)
4750 case cdk_array:
4751 loc = decl->id_loc;
4752 /* FALL THRU. */
4754 case cdk_function:
4755 case cdk_pointer:
4756 funcdef_syntax = (decl->kind == cdk_function);
4757 decl = decl->declarator;
4758 break;
4760 case cdk_attrs:
4761 decl = decl->declarator;
4762 break;
4764 case cdk_id:
4765 loc = decl->id_loc;
4766 if (decl->u.id)
4767 name = decl->u.id;
4768 decl = 0;
4769 break;
4771 default:
4772 gcc_unreachable ();
4774 if (name == 0)
4776 gcc_assert (decl_context == PARM
4777 || decl_context == TYPENAME
4778 || (decl_context == FIELD
4779 && declarator->kind == cdk_id));
4780 gcc_assert (!initialized);
4784 /* A function definition's declarator must have the form of
4785 a function declarator. */
4787 if (funcdef_flag && !funcdef_syntax)
4788 return 0;
4790 /* If this looks like a function definition, make it one,
4791 even if it occurs where parms are expected.
4792 Then store_parm_decls will reject it and not use it as a parm. */
4793 if (decl_context == NORMAL && !funcdef_flag && current_scope->parm_flag)
4794 decl_context = PARM;
4796 if (declspecs->deprecated_p && deprecated_state != DEPRECATED_SUPPRESS)
4797 warn_deprecated_use (declspecs->type, declspecs->decl_attr);
4799 if ((decl_context == NORMAL || decl_context == FIELD)
4800 && current_scope == file_scope
4801 && variably_modified_type_p (type, NULL_TREE))
4803 if (name)
4804 error_at (loc, "variably modified %qE at file scope", name);
4805 else
4806 error_at (loc, "variably modified field at file scope");
4807 type = integer_type_node;
4810 size_varies = C_TYPE_VARIABLE_SIZE (type);
4812 /* Diagnose defaulting to "int". */
4814 if (declspecs->default_int_p && !in_system_header)
4816 /* Issue a warning if this is an ISO C 99 program or if
4817 -Wreturn-type and this is a function, or if -Wimplicit;
4818 prefer the former warning since it is more explicit. */
4819 if ((warn_implicit_int || warn_return_type || flag_isoc99)
4820 && funcdef_flag)
4821 warn_about_return_type = 1;
4822 else
4824 if (name)
4825 pedwarn_c99 (loc, flag_isoc99 ? 0 : OPT_Wimplicit_int,
4826 "type defaults to %<int%> in declaration of %qE",
4827 name);
4828 else
4829 pedwarn_c99 (input_location, flag_isoc99 ? 0 : OPT_Wimplicit_int,
4830 "type defaults to %<int%> in type name");
4834 /* Adjust the type if a bit-field is being declared,
4835 -funsigned-bitfields applied and the type is not explicitly
4836 "signed". */
4837 if (bitfield && !flag_signed_bitfields && !declspecs->explicit_signed_p
4838 && TREE_CODE (type) == INTEGER_TYPE)
4839 type = unsigned_type_for (type);
4841 /* Figure out the type qualifiers for the declaration. There are
4842 two ways a declaration can become qualified. One is something
4843 like `const int i' where the `const' is explicit. Another is
4844 something like `typedef const int CI; CI i' where the type of the
4845 declaration contains the `const'. A third possibility is that
4846 there is a type qualifier on the element type of a typedefed
4847 array type, in which case we should extract that qualifier so
4848 that c_apply_type_quals_to_decl receives the full list of
4849 qualifiers to work with (C90 is not entirely clear about whether
4850 duplicate qualifiers should be diagnosed in this case, but it
4851 seems most appropriate to do so). */
4852 element_type = strip_array_types (type);
4853 constp = declspecs->const_p + TYPE_READONLY (element_type);
4854 restrictp = declspecs->restrict_p + TYPE_RESTRICT (element_type);
4855 volatilep = declspecs->volatile_p + TYPE_VOLATILE (element_type);
4856 if (pedantic && !flag_isoc99)
4858 if (constp > 1)
4859 pedwarn (loc, OPT_pedantic, "duplicate %<const%>");
4860 if (restrictp > 1)
4861 pedwarn (loc, OPT_pedantic, "duplicate %<restrict%>");
4862 if (volatilep > 1)
4863 pedwarn (loc, OPT_pedantic, "duplicate %<volatile%>");
4865 if (!flag_gen_aux_info && (TYPE_QUALS (element_type)))
4866 type = TYPE_MAIN_VARIANT (type);
4867 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
4868 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
4869 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
4871 /* Warn about storage classes that are invalid for certain
4872 kinds of declarations (parameters, typenames, etc.). */
4874 if (funcdef_flag
4875 && (threadp
4876 || storage_class == csc_auto
4877 || storage_class == csc_register
4878 || storage_class == csc_typedef))
4880 if (storage_class == csc_auto)
4881 pedwarn (loc,
4882 (current_scope == file_scope) ? 0 : OPT_pedantic,
4883 "function definition declared %<auto%>");
4884 if (storage_class == csc_register)
4885 error_at (loc, "function definition declared %<register%>");
4886 if (storage_class == csc_typedef)
4887 error_at (loc, "function definition declared %<typedef%>");
4888 if (threadp)
4889 error_at (loc, "function definition declared %<__thread%>");
4890 threadp = false;
4891 if (storage_class == csc_auto
4892 || storage_class == csc_register
4893 || storage_class == csc_typedef)
4894 storage_class = csc_none;
4896 else if (decl_context != NORMAL && (storage_class != csc_none || threadp))
4898 if (decl_context == PARM && storage_class == csc_register)
4900 else
4902 switch (decl_context)
4904 case FIELD:
4905 if (name)
4906 error_at (loc, "storage class specified for structure "
4907 "field %qE", name);
4908 else
4909 error_at (loc, "storage class specified for structure field");
4910 break;
4911 case PARM:
4912 if (name)
4913 error_at (loc, "storage class specified for parameter %qE",
4914 name);
4915 else
4916 error_at (loc, "storage class specified for unnamed parameter");
4917 break;
4918 default:
4919 error_at (loc, "storage class specified for typename");
4920 break;
4922 storage_class = csc_none;
4923 threadp = false;
4926 else if (storage_class == csc_extern
4927 && initialized
4928 && !funcdef_flag)
4930 /* 'extern' with initialization is invalid if not at file scope. */
4931 if (current_scope == file_scope)
4933 /* It is fine to have 'extern const' when compiling at C
4934 and C++ intersection. */
4935 if (!(warn_cxx_compat && constp))
4936 warning_at (loc, 0, "%qE initialized and declared %<extern%>",
4937 name);
4939 else
4940 error_at (loc, "%qE has both %<extern%> and initializer", name);
4942 else if (current_scope == file_scope)
4944 if (storage_class == csc_auto)
4945 error_at (loc, "file-scope declaration of %qE specifies %<auto%>",
4946 name);
4947 if (pedantic && storage_class == csc_register)
4948 pedwarn (input_location, OPT_pedantic,
4949 "file-scope declaration of %qE specifies %<register%>", name);
4951 else
4953 if (storage_class == csc_extern && funcdef_flag)
4954 error_at (loc, "nested function %qE declared %<extern%>", name);
4955 else if (threadp && storage_class == csc_none)
4957 error_at (loc, "function-scope %qE implicitly auto and declared "
4958 "%<__thread%>",
4959 name);
4960 threadp = false;
4964 /* Now figure out the structure of the declarator proper.
4965 Descend through it, creating more complex types, until we reach
4966 the declared identifier (or NULL_TREE, in an absolute declarator).
4967 At each stage we maintain an unqualified version of the type
4968 together with any qualifiers that should be applied to it with
4969 c_build_qualified_type; this way, array types including
4970 multidimensional array types are first built up in unqualified
4971 form and then the qualified form is created with
4972 TYPE_MAIN_VARIANT pointing to the unqualified form. */
4974 while (declarator && declarator->kind != cdk_id)
4976 if (type == error_mark_node)
4978 declarator = declarator->declarator;
4979 continue;
4982 /* Each level of DECLARATOR is either a cdk_array (for ...[..]),
4983 a cdk_pointer (for *...),
4984 a cdk_function (for ...(...)),
4985 a cdk_attrs (for nested attributes),
4986 or a cdk_id (for the name being declared
4987 or the place in an absolute declarator
4988 where the name was omitted).
4989 For the last case, we have just exited the loop.
4991 At this point, TYPE is the type of elements of an array,
4992 or for a function to return, or for a pointer to point to.
4993 After this sequence of ifs, TYPE is the type of the
4994 array or function or pointer, and DECLARATOR has had its
4995 outermost layer removed. */
4997 if (array_ptr_quals != TYPE_UNQUALIFIED
4998 || array_ptr_attrs != NULL_TREE
4999 || array_parm_static)
5001 /* Only the innermost declarator (making a parameter be of
5002 array type which is converted to pointer type)
5003 may have static or type qualifiers. */
5004 error_at (loc, "static or type qualifiers in non-parameter array declarator");
5005 array_ptr_quals = TYPE_UNQUALIFIED;
5006 array_ptr_attrs = NULL_TREE;
5007 array_parm_static = 0;
5010 switch (declarator->kind)
5012 case cdk_attrs:
5014 /* A declarator with embedded attributes. */
5015 tree attrs = declarator->u.attrs;
5016 const struct c_declarator *inner_decl;
5017 int attr_flags = 0;
5018 declarator = declarator->declarator;
5019 inner_decl = declarator;
5020 while (inner_decl->kind == cdk_attrs)
5021 inner_decl = inner_decl->declarator;
5022 if (inner_decl->kind == cdk_id)
5023 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
5024 else if (inner_decl->kind == cdk_function)
5025 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
5026 else if (inner_decl->kind == cdk_array)
5027 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
5028 returned_attrs = decl_attributes (&type,
5029 chainon (returned_attrs, attrs),
5030 attr_flags);
5031 break;
5033 case cdk_array:
5035 tree itype = NULL_TREE;
5036 tree size = declarator->u.array.dimen;
5037 /* The index is a signed object `sizetype' bits wide. */
5038 tree index_type = c_common_signed_type (sizetype);
5040 array_ptr_quals = declarator->u.array.quals;
5041 array_ptr_attrs = declarator->u.array.attrs;
5042 array_parm_static = declarator->u.array.static_p;
5043 array_parm_vla_unspec_p = declarator->u.array.vla_unspec_p;
5045 declarator = declarator->declarator;
5047 /* Check for some types that there cannot be arrays of. */
5049 if (VOID_TYPE_P (type))
5051 if (name)
5052 error_at (loc, "declaration of %qE as array of voids", name);
5053 else
5054 error_at (loc, "declaration of type name as array of voids");
5055 type = error_mark_node;
5058 if (TREE_CODE (type) == FUNCTION_TYPE)
5060 if (name)
5061 error_at (loc, "declaration of %qE as array of functions",
5062 name);
5063 else
5064 error_at (loc, "declaration of type name as array of "
5065 "functions");
5066 type = error_mark_node;
5069 if (pedantic && !in_system_header && flexible_array_type_p (type))
5070 pedwarn (loc, OPT_pedantic,
5071 "invalid use of structure with flexible array member");
5073 if (size == error_mark_node)
5074 type = error_mark_node;
5076 if (type == error_mark_node)
5077 continue;
5079 /* If size was specified, set ITYPE to a range-type for
5080 that size. Otherwise, ITYPE remains null. finish_decl
5081 may figure it out from an initial value. */
5083 if (size)
5085 bool size_maybe_const = true;
5086 bool size_int_const = (TREE_CODE (size) == INTEGER_CST
5087 && !TREE_OVERFLOW (size));
5088 bool this_size_varies = false;
5090 /* Strip NON_LVALUE_EXPRs since we aren't using as an
5091 lvalue. */
5092 STRIP_TYPE_NOPS (size);
5094 if (!INTEGRAL_TYPE_P (TREE_TYPE (size)))
5096 if (name)
5097 error_at (loc, "size of array %qE has non-integer type",
5098 name);
5099 else
5100 error_at (loc,
5101 "size of unnamed array has non-integer type");
5102 size = integer_one_node;
5105 size = c_fully_fold (size, false, &size_maybe_const);
5107 if (pedantic && size_maybe_const && integer_zerop (size))
5109 if (name)
5110 pedwarn (loc, OPT_pedantic,
5111 "ISO C forbids zero-size array %qE", name);
5112 else
5113 pedwarn (loc, OPT_pedantic,
5114 "ISO C forbids zero-size array");
5117 if (TREE_CODE (size) == INTEGER_CST && size_maybe_const)
5119 constant_expression_warning (size);
5120 if (tree_int_cst_sgn (size) < 0)
5122 if (name)
5123 error_at (loc, "size of array %qE is negative", name);
5124 else
5125 error_at (loc, "size of unnamed array is negative");
5126 size = integer_one_node;
5128 /* Handle a size folded to an integer constant but
5129 not an integer constant expression. */
5130 if (!size_int_const)
5132 /* If this is a file scope declaration of an
5133 ordinary identifier, this is invalid code;
5134 diagnosing it here and not subsequently
5135 treating the type as variable-length avoids
5136 more confusing diagnostics later. */
5137 if ((decl_context == NORMAL || decl_context == FIELD)
5138 && current_scope == file_scope)
5139 pedwarn (input_location, 0,
5140 "variably modified %qE at file scope",
5141 name);
5142 else
5143 this_size_varies = size_varies = 1;
5144 warn_variable_length_array (name, size);
5147 else if ((decl_context == NORMAL || decl_context == FIELD)
5148 && current_scope == file_scope)
5150 error_at (loc, "variably modified %qE at file scope", name);
5151 size = integer_one_node;
5153 else
5155 /* Make sure the array size remains visibly
5156 nonconstant even if it is (eg) a const variable
5157 with known value. */
5158 this_size_varies = size_varies = 1;
5159 warn_variable_length_array (name, size);
5162 if (integer_zerop (size) && !this_size_varies)
5164 /* A zero-length array cannot be represented with
5165 an unsigned index type, which is what we'll
5166 get with build_index_type. Create an
5167 open-ended range instead. */
5168 itype = build_range_type (sizetype, size, NULL_TREE);
5170 else
5172 /* Arrange for the SAVE_EXPR on the inside of the
5173 MINUS_EXPR, which allows the -1 to get folded
5174 with the +1 that happens when building TYPE_SIZE. */
5175 if (size_varies)
5176 size = c_variable_size (size);
5177 if (this_size_varies && TREE_CODE (size) == INTEGER_CST)
5178 size = build2 (COMPOUND_EXPR, TREE_TYPE (size),
5179 integer_zero_node, size);
5181 /* Compute the maximum valid index, that is, size
5182 - 1. Do the calculation in index_type, so that
5183 if it is a variable the computations will be
5184 done in the proper mode. */
5185 itype = fold_build2 (MINUS_EXPR, index_type,
5186 convert (index_type, size),
5187 convert (index_type,
5188 size_one_node));
5190 /* If that overflowed, the array is too big. ???
5191 While a size of INT_MAX+1 technically shouldn't
5192 cause an overflow (because we subtract 1), the
5193 overflow is recorded during the conversion to
5194 index_type, before the subtraction. Handling
5195 this case seems like an unnecessary
5196 complication. */
5197 if (TREE_CODE (itype) == INTEGER_CST
5198 && TREE_OVERFLOW (itype))
5200 if (name)
5201 error_at (loc, "size of array %qE is too large",
5202 name);
5203 else
5204 error_at (loc, "size of unnamed array is too large");
5205 type = error_mark_node;
5206 continue;
5209 itype = build_index_type (itype);
5211 if (this_size_varies)
5213 if (*expr)
5214 *expr = build2 (COMPOUND_EXPR, TREE_TYPE (size),
5215 *expr, size);
5216 else
5217 *expr = size;
5218 *expr_const_operands &= size_maybe_const;
5221 else if (decl_context == FIELD)
5223 bool flexible_array_member = false;
5224 if (array_parm_vla_unspec_p)
5225 /* Field names can in fact have function prototype
5226 scope so [*] is disallowed here through making
5227 the field variably modified, not through being
5228 something other than a declaration with function
5229 prototype scope. */
5230 size_varies = 1;
5231 else
5233 const struct c_declarator *t = declarator;
5234 while (t->kind == cdk_attrs)
5235 t = t->declarator;
5236 flexible_array_member = (t->kind == cdk_id);
5238 if (flexible_array_member
5239 && pedantic && !flag_isoc99 && !in_system_header)
5240 pedwarn (loc, OPT_pedantic,
5241 "ISO C90 does not support flexible array members");
5243 /* ISO C99 Flexible array members are effectively
5244 identical to GCC's zero-length array extension. */
5245 if (flexible_array_member || array_parm_vla_unspec_p)
5246 itype = build_range_type (sizetype, size_zero_node,
5247 NULL_TREE);
5249 else if (decl_context == PARM)
5251 if (array_parm_vla_unspec_p)
5253 itype = build_range_type (sizetype, size_zero_node, NULL_TREE);
5254 size_varies = 1;
5257 else if (decl_context == TYPENAME)
5259 if (array_parm_vla_unspec_p)
5261 /* C99 6.7.5.2p4 */
5262 warning (0, "%<[*]%> not in a declaration");
5263 /* We use this to avoid messing up with incomplete
5264 array types of the same type, that would
5265 otherwise be modified below. */
5266 itype = build_range_type (sizetype, size_zero_node,
5267 NULL_TREE);
5268 size_varies = 1;
5272 /* Complain about arrays of incomplete types. */
5273 if (!COMPLETE_TYPE_P (type))
5275 error_at (loc, "array type has incomplete element type");
5276 type = error_mark_node;
5278 else
5279 /* When itype is NULL, a shared incomplete array type is
5280 returned for all array of a given type. Elsewhere we
5281 make sure we don't complete that type before copying
5282 it, but here we want to make sure we don't ever
5283 modify the shared type, so we gcc_assert (itype)
5284 below. */
5285 type = build_array_type (type, itype);
5287 if (type != error_mark_node)
5289 if (size_varies)
5291 /* It is ok to modify type here even if itype is
5292 NULL: if size_varies, we're in a
5293 multi-dimensional array and the inner type has
5294 variable size, so the enclosing shared array type
5295 must too. */
5296 if (size && TREE_CODE (size) == INTEGER_CST)
5297 type
5298 = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
5299 C_TYPE_VARIABLE_SIZE (type) = 1;
5302 /* The GCC extension for zero-length arrays differs from
5303 ISO flexible array members in that sizeof yields
5304 zero. */
5305 if (size && integer_zerop (size))
5307 gcc_assert (itype);
5308 TYPE_SIZE (type) = bitsize_zero_node;
5309 TYPE_SIZE_UNIT (type) = size_zero_node;
5311 if (array_parm_vla_unspec_p)
5313 gcc_assert (itype);
5314 /* The type is complete. C99 6.7.5.2p4 */
5315 TYPE_SIZE (type) = bitsize_zero_node;
5316 TYPE_SIZE_UNIT (type) = size_zero_node;
5320 if (decl_context != PARM
5321 && (array_ptr_quals != TYPE_UNQUALIFIED
5322 || array_ptr_attrs != NULL_TREE
5323 || array_parm_static))
5325 error_at (loc, "static or type qualifiers in non-parameter array declarator");
5326 array_ptr_quals = TYPE_UNQUALIFIED;
5327 array_ptr_attrs = NULL_TREE;
5328 array_parm_static = 0;
5330 break;
5332 case cdk_function:
5334 /* Say it's a definition only for the declarator closest
5335 to the identifier, apart possibly from some
5336 attributes. */
5337 bool really_funcdef = false;
5338 tree arg_types;
5339 if (funcdef_flag)
5341 const struct c_declarator *t = declarator->declarator;
5342 while (t->kind == cdk_attrs)
5343 t = t->declarator;
5344 really_funcdef = (t->kind == cdk_id);
5347 /* Declaring a function type. Make sure we have a valid
5348 type for the function to return. */
5349 if (type == error_mark_node)
5350 continue;
5352 size_varies = 0;
5354 /* Warn about some types functions can't return. */
5355 if (TREE_CODE (type) == FUNCTION_TYPE)
5357 if (name)
5358 error_at (loc, "%qE declared as function returning a "
5359 "function", name);
5360 else
5361 error_at (loc, "type name declared as function "
5362 "returning a function");
5363 type = integer_type_node;
5365 if (TREE_CODE (type) == ARRAY_TYPE)
5367 if (name)
5368 error_at (loc, "%qE declared as function returning an array",
5369 name);
5370 else
5371 error_at (loc, "type name declared as function returning "
5372 "an array");
5373 type = integer_type_node;
5375 errmsg = targetm.invalid_return_type (type);
5376 if (errmsg)
5378 error (errmsg);
5379 type = integer_type_node;
5382 /* Construct the function type and go to the next
5383 inner layer of declarator. */
5384 arg_info = declarator->u.arg_info;
5385 arg_types = grokparms (arg_info, really_funcdef);
5386 if (really_funcdef)
5387 put_pending_sizes (arg_info->pending_sizes);
5389 /* Type qualifiers before the return type of the function
5390 qualify the return type, not the function type. */
5391 if (type_quals)
5393 /* Type qualifiers on a function return type are
5394 normally permitted by the standard but have no
5395 effect, so give a warning at -Wreturn-type.
5396 Qualifiers on a void return type are banned on
5397 function definitions in ISO C; GCC used to used
5398 them for noreturn functions. */
5399 if (VOID_TYPE_P (type) && really_funcdef)
5400 pedwarn (loc, 0,
5401 "function definition has qualified void return type");
5402 else
5403 warning_at (loc, OPT_Wignored_qualifiers,
5404 "type qualifiers ignored on function return type");
5406 type = c_build_qualified_type (type, type_quals);
5408 type_quals = TYPE_UNQUALIFIED;
5410 type = build_function_type (type, arg_types);
5411 declarator = declarator->declarator;
5413 /* Set the TYPE_CONTEXTs for each tagged type which is local to
5414 the formal parameter list of this FUNCTION_TYPE to point to
5415 the FUNCTION_TYPE node itself. */
5417 tree link;
5419 for (link = arg_info->tags;
5420 link;
5421 link = TREE_CHAIN (link))
5422 TYPE_CONTEXT (TREE_VALUE (link)) = type;
5424 break;
5426 case cdk_pointer:
5428 /* Merge any constancy or volatility into the target type
5429 for the pointer. */
5431 if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
5432 && type_quals)
5433 pedwarn (loc, OPT_pedantic,
5434 "ISO C forbids qualified function types");
5435 if (type_quals)
5436 type = c_build_qualified_type (type, type_quals);
5437 size_varies = 0;
5439 /* When the pointed-to type involves components of variable size,
5440 care must be taken to ensure that the size evaluation code is
5441 emitted early enough to dominate all the possible later uses
5442 and late enough for the variables on which it depends to have
5443 been assigned.
5445 This is expected to happen automatically when the pointed-to
5446 type has a name/declaration of it's own, but special attention
5447 is required if the type is anonymous.
5449 We handle the NORMAL and FIELD contexts here by attaching an
5450 artificial TYPE_DECL to such pointed-to type. This forces the
5451 sizes evaluation at a safe point and ensures it is not deferred
5452 until e.g. within a deeper conditional context.
5454 We expect nothing to be needed here for PARM or TYPENAME.
5455 Pushing a TYPE_DECL at this point for TYPENAME would actually
5456 be incorrect, as we might be in the middle of an expression
5457 with side effects on the pointed-to type size "arguments" prior
5458 to the pointer declaration point and the fake TYPE_DECL in the
5459 enclosing context would force the size evaluation prior to the
5460 side effects. */
5462 if (!TYPE_NAME (type)
5463 && (decl_context == NORMAL || decl_context == FIELD)
5464 && variably_modified_type_p (type, NULL_TREE))
5466 tree decl = build_decl (loc, TYPE_DECL, NULL_TREE, type);
5467 DECL_ARTIFICIAL (decl) = 1;
5468 pushdecl (decl);
5469 finish_decl (decl, loc, NULL_TREE, NULL_TREE, NULL_TREE);
5470 TYPE_NAME (type) = decl;
5473 type = build_pointer_type (type);
5475 /* Process type qualifiers (such as const or volatile)
5476 that were given inside the `*'. */
5477 type_quals = declarator->u.pointer_quals;
5479 declarator = declarator->declarator;
5480 break;
5482 default:
5483 gcc_unreachable ();
5486 *decl_attrs = chainon (returned_attrs, *decl_attrs);
5488 /* Now TYPE has the actual type, apart from any qualifiers in
5489 TYPE_QUALS. */
5491 /* Check the type and width of a bit-field. */
5492 if (bitfield)
5493 check_bitfield_type_and_width (&type, width, name);
5495 /* Did array size calculations overflow? */
5497 if (TREE_CODE (type) == ARRAY_TYPE
5498 && COMPLETE_TYPE_P (type)
5499 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
5500 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
5502 if (name)
5503 error_at (loc, "size of array %qE is too large", name);
5504 else
5505 error_at (loc, "size of unnamed array is too large");
5506 /* If we proceed with the array type as it is, we'll eventually
5507 crash in tree_low_cst(). */
5508 type = error_mark_node;
5511 /* If this is declaring a typedef name, return a TYPE_DECL. */
5513 if (storage_class == csc_typedef)
5515 tree decl;
5516 if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
5517 && type_quals)
5518 pedwarn (loc, OPT_pedantic,
5519 "ISO C forbids qualified function types");
5520 if (type_quals)
5521 type = c_build_qualified_type (type, type_quals);
5522 decl = build_decl (declarator->id_loc,
5523 TYPE_DECL, declarator->u.id, type);
5524 if (declspecs->explicit_signed_p)
5525 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
5526 if (declspecs->inline_p)
5527 pedwarn (loc, 0,"typedef %q+D declared %<inline%>", decl);
5529 if (warn_cxx_compat && declarator->u.id != NULL_TREE)
5531 struct c_binding *b = I_TAG_BINDING (declarator->u.id);
5533 if (b != NULL
5534 && b->decl != NULL_TREE
5535 && (B_IN_CURRENT_SCOPE (b)
5536 || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
5537 && TYPE_MAIN_VARIANT (b->decl) != TYPE_MAIN_VARIANT (type))
5539 warning_at (declarator->id_loc, OPT_Wc___compat,
5540 ("using %qD as both a typedef and a tag is "
5541 "invalid in C++"),
5542 decl);
5543 if (b->locus != UNKNOWN_LOCATION)
5544 inform (b->locus, "originally defined here");
5548 return decl;
5551 /* If this is a type name (such as, in a cast or sizeof),
5552 compute the type and return it now. */
5554 if (decl_context == TYPENAME)
5556 /* Note that the grammar rejects storage classes in typenames
5557 and fields. */
5558 gcc_assert (storage_class == csc_none && !threadp
5559 && !declspecs->inline_p);
5560 if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
5561 && type_quals)
5562 pedwarn (loc, OPT_pedantic,
5563 "ISO C forbids const or volatile function types");
5564 if (type_quals)
5565 type = c_build_qualified_type (type, type_quals);
5566 return type;
5569 if (pedantic && decl_context == FIELD
5570 && variably_modified_type_p (type, NULL_TREE))
5572 /* C99 6.7.2.1p8 */
5573 pedwarn (loc, OPT_pedantic, "a member of a structure or union cannot "
5574 "have a variably modified type");
5577 /* Aside from typedefs and type names (handle above),
5578 `void' at top level (not within pointer)
5579 is allowed only in public variables.
5580 We don't complain about parms either, but that is because
5581 a better error message can be made later. */
5583 if (VOID_TYPE_P (type) && decl_context != PARM
5584 && !((decl_context != FIELD && TREE_CODE (type) != FUNCTION_TYPE)
5585 && (storage_class == csc_extern
5586 || (current_scope == file_scope
5587 && !(storage_class == csc_static
5588 || storage_class == csc_register)))))
5590 error_at (loc, "variable or field %qE declared void", name);
5591 type = integer_type_node;
5594 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
5595 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
5598 tree decl;
5600 if (decl_context == PARM)
5602 tree promoted_type;
5604 /* A parameter declared as an array of T is really a pointer to T.
5605 One declared as a function is really a pointer to a function. */
5607 if (TREE_CODE (type) == ARRAY_TYPE)
5609 /* Transfer const-ness of array into that of type pointed to. */
5610 type = TREE_TYPE (type);
5611 if (type_quals)
5612 type = c_build_qualified_type (type, type_quals);
5613 type = build_pointer_type (type);
5614 type_quals = array_ptr_quals;
5615 if (type_quals)
5616 type = c_build_qualified_type (type, type_quals);
5618 /* We don't yet implement attributes in this context. */
5619 if (array_ptr_attrs != NULL_TREE)
5620 warning_at (loc, OPT_Wattributes,
5621 "attributes in parameter array declarator ignored");
5623 size_varies = 0;
5625 else if (TREE_CODE (type) == FUNCTION_TYPE)
5627 if (type_quals)
5628 pedwarn (loc, OPT_pedantic,
5629 "ISO C forbids qualified function types");
5630 if (type_quals)
5631 type = c_build_qualified_type (type, type_quals);
5632 type = build_pointer_type (type);
5633 type_quals = TYPE_UNQUALIFIED;
5635 else if (type_quals)
5636 type = c_build_qualified_type (type, type_quals);
5638 decl = build_decl (declarator->id_loc,
5639 PARM_DECL, declarator->u.id, type);
5640 if (size_varies)
5641 C_DECL_VARIABLE_SIZE (decl) = 1;
5643 /* Compute the type actually passed in the parmlist,
5644 for the case where there is no prototype.
5645 (For example, shorts and chars are passed as ints.)
5646 When there is a prototype, this is overridden later. */
5648 if (type == error_mark_node)
5649 promoted_type = type;
5650 else
5651 promoted_type = c_type_promotes_to (type);
5653 DECL_ARG_TYPE (decl) = promoted_type;
5654 if (declspecs->inline_p)
5655 pedwarn (loc, 0, "parameter %q+D declared %<inline%>", decl);
5657 else if (decl_context == FIELD)
5659 /* Note that the grammar rejects storage classes in typenames
5660 and fields. */
5661 gcc_assert (storage_class == csc_none && !threadp
5662 && !declspecs->inline_p);
5664 /* Structure field. It may not be a function. */
5666 if (TREE_CODE (type) == FUNCTION_TYPE)
5668 error_at (loc, "field %qE declared as a function", name);
5669 type = build_pointer_type (type);
5671 else if (TREE_CODE (type) != ERROR_MARK
5672 && !COMPLETE_OR_UNBOUND_ARRAY_TYPE_P (type))
5674 if (name)
5675 error_at (loc, "field %qE has incomplete type", name);
5676 else
5677 error_at (loc, "unnamed field has incomplete type");
5678 type = error_mark_node;
5680 type = c_build_qualified_type (type, type_quals);
5681 decl = build_decl (declarator->id_loc,
5682 FIELD_DECL, declarator->u.id, type);
5683 DECL_NONADDRESSABLE_P (decl) = bitfield;
5684 if (bitfield && !declarator->u.id)
5685 TREE_NO_WARNING (decl) = 1;
5687 if (size_varies)
5688 C_DECL_VARIABLE_SIZE (decl) = 1;
5690 else if (TREE_CODE (type) == FUNCTION_TYPE)
5692 if (storage_class == csc_register || threadp)
5694 error_at (loc, "invalid storage class for function %qE", name);
5696 else if (current_scope != file_scope)
5698 /* Function declaration not at file scope. Storage
5699 classes other than `extern' are not allowed, C99
5700 6.7.1p5, and `extern' makes no difference. However,
5701 GCC allows 'auto', perhaps with 'inline', to support
5702 nested functions. */
5703 if (storage_class == csc_auto)
5704 pedwarn (loc, OPT_pedantic,
5705 "invalid storage class for function %qE", name);
5706 else if (storage_class == csc_static)
5708 error_at (loc, "invalid storage class for function %qE", name);
5709 if (funcdef_flag)
5710 storage_class = declspecs->storage_class = csc_none;
5711 else
5712 return 0;
5716 decl = build_decl (declarator->id_loc,
5717 FUNCTION_DECL, declarator->u.id, type);
5718 decl = build_decl_attribute_variant (decl, decl_attr);
5720 if (pedantic && type_quals && !DECL_IN_SYSTEM_HEADER (decl))
5721 pedwarn (loc, OPT_pedantic,
5722 "ISO C forbids qualified function types");
5724 /* GNU C interprets a volatile-qualified function type to indicate
5725 that the function does not return. */
5726 if ((type_quals & TYPE_QUAL_VOLATILE)
5727 && !VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
5728 warning_at (loc, 0, "%<noreturn%> function returns non-void value");
5730 /* Every function declaration is an external reference
5731 (DECL_EXTERNAL) except for those which are not at file
5732 scope and are explicitly declared "auto". This is
5733 forbidden by standard C (C99 6.7.1p5) and is interpreted by
5734 GCC to signify a forward declaration of a nested function. */
5735 if (storage_class == csc_auto && current_scope != file_scope)
5736 DECL_EXTERNAL (decl) = 0;
5737 /* In C99, a function which is declared 'inline' with 'extern'
5738 is not an external reference (which is confusing). It
5739 means that the later definition of the function must be output
5740 in this file, C99 6.7.4p6. In GNU C89, a function declared
5741 'extern inline' is an external reference. */
5742 else if (declspecs->inline_p && storage_class != csc_static)
5743 DECL_EXTERNAL (decl) = ((storage_class == csc_extern)
5744 == flag_gnu89_inline);
5745 else
5746 DECL_EXTERNAL (decl) = !initialized;
5748 /* Record absence of global scope for `static' or `auto'. */
5749 TREE_PUBLIC (decl)
5750 = !(storage_class == csc_static || storage_class == csc_auto);
5752 /* For a function definition, record the argument information
5753 block where store_parm_decls will look for it. */
5754 if (funcdef_flag)
5755 current_function_arg_info = arg_info;
5757 if (declspecs->default_int_p)
5758 C_FUNCTION_IMPLICIT_INT (decl) = 1;
5760 /* Record presence of `inline', if it is reasonable. */
5761 if (flag_hosted && MAIN_NAME_P (declarator->u.id))
5763 if (declspecs->inline_p)
5764 pedwarn (loc, 0, "cannot inline function %<main%>");
5766 else if (declspecs->inline_p)
5767 /* Record that the function is declared `inline'. */
5768 DECL_DECLARED_INLINE_P (decl) = 1;
5770 else
5772 /* It's a variable. */
5773 /* An uninitialized decl with `extern' is a reference. */
5774 int extern_ref = !initialized && storage_class == csc_extern;
5776 type = c_build_qualified_type (type, type_quals);
5778 /* C99 6.2.2p7: It is invalid (compile-time undefined
5779 behavior) to create an 'extern' declaration for a
5780 variable if there is a global declaration that is
5781 'static' and the global declaration is not visible.
5782 (If the static declaration _is_ currently visible,
5783 the 'extern' declaration is taken to refer to that decl.) */
5784 if (extern_ref && current_scope != file_scope)
5786 tree global_decl = identifier_global_value (declarator->u.id);
5787 tree visible_decl = lookup_name (declarator->u.id);
5789 if (global_decl
5790 && global_decl != visible_decl
5791 && TREE_CODE (global_decl) == VAR_DECL
5792 && !TREE_PUBLIC (global_decl))
5793 error_at (loc, "variable previously declared %<static%> "
5794 "redeclared %<extern%>");
5797 decl = build_decl (declarator->id_loc,
5798 VAR_DECL, declarator->u.id, type);
5799 if (size_varies)
5800 C_DECL_VARIABLE_SIZE (decl) = 1;
5802 if (declspecs->inline_p)
5803 pedwarn (loc, 0, "variable %q+D declared %<inline%>", decl);
5805 /* At file scope, an initialized extern declaration may follow
5806 a static declaration. In that case, DECL_EXTERNAL will be
5807 reset later in start_decl. */
5808 DECL_EXTERNAL (decl) = (storage_class == csc_extern);
5810 /* At file scope, the presence of a `static' or `register' storage
5811 class specifier, or the absence of all storage class specifiers
5812 makes this declaration a definition (perhaps tentative). Also,
5813 the absence of `static' makes it public. */
5814 if (current_scope == file_scope)
5816 TREE_PUBLIC (decl) = storage_class != csc_static;
5817 TREE_STATIC (decl) = !extern_ref;
5819 /* Not at file scope, only `static' makes a static definition. */
5820 else
5822 TREE_STATIC (decl) = (storage_class == csc_static);
5823 TREE_PUBLIC (decl) = extern_ref;
5826 if (threadp)
5827 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
5830 if ((storage_class == csc_extern
5831 || (storage_class == csc_none
5832 && TREE_CODE (type) == FUNCTION_TYPE
5833 && !funcdef_flag))
5834 && variably_modified_type_p (type, NULL_TREE))
5836 /* C99 6.7.5.2p2 */
5837 if (TREE_CODE (type) == FUNCTION_TYPE)
5838 error_at (loc, "non-nested function with variably modified type");
5839 else
5840 error_at (loc, "object with variably modified type must have "
5841 "no linkage");
5844 /* Record `register' declaration for warnings on &
5845 and in case doing stupid register allocation. */
5847 if (storage_class == csc_register)
5849 C_DECL_REGISTER (decl) = 1;
5850 DECL_REGISTER (decl) = 1;
5853 /* Record constancy and volatility. */
5854 c_apply_type_quals_to_decl (type_quals, decl);
5856 /* If a type has volatile components, it should be stored in memory.
5857 Otherwise, the fact that those components are volatile
5858 will be ignored, and would even crash the compiler.
5859 Of course, this only makes sense on VAR,PARM, and RESULT decl's. */
5860 if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl))
5861 && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
5862 || TREE_CODE (decl) == RESULT_DECL))
5864 /* It is not an error for a structure with volatile fields to
5865 be declared register, but reset DECL_REGISTER since it
5866 cannot actually go in a register. */
5867 int was_reg = C_DECL_REGISTER (decl);
5868 C_DECL_REGISTER (decl) = 0;
5869 DECL_REGISTER (decl) = 0;
5870 c_mark_addressable (decl);
5871 C_DECL_REGISTER (decl) = was_reg;
5874 /* This is the earliest point at which we might know the assembler
5875 name of a variable. Thus, if it's known before this, die horribly. */
5876 gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl));
5878 return decl;
5882 /* Decode the parameter-list info for a function type or function definition.
5883 The argument is the value returned by `get_parm_info' (or made in c-parse.c
5884 if there is an identifier list instead of a parameter decl list).
5885 These two functions are separate because when a function returns
5886 or receives functions then each is called multiple times but the order
5887 of calls is different. The last call to `grokparms' is always the one
5888 that contains the formal parameter names of a function definition.
5890 Return a list of arg types to use in the FUNCTION_TYPE for this function.
5892 FUNCDEF_FLAG is true for a function definition, false for
5893 a mere declaration. A nonempty identifier-list gets an error message
5894 when FUNCDEF_FLAG is false. */
5896 static tree
5897 grokparms (struct c_arg_info *arg_info, bool funcdef_flag)
5899 tree arg_types = arg_info->types;
5901 if (funcdef_flag && arg_info->had_vla_unspec)
5903 /* A function definition isn't function prototype scope C99 6.2.1p4. */
5904 /* C99 6.7.5.2p4 */
5905 error ("%<[*]%> not allowed in other than function prototype scope");
5908 if (arg_types == 0 && !funcdef_flag && !in_system_header)
5909 warning (OPT_Wstrict_prototypes,
5910 "function declaration isn%'t a prototype");
5912 if (arg_types == error_mark_node)
5913 return 0; /* don't set TYPE_ARG_TYPES in this case */
5915 else if (arg_types && TREE_CODE (TREE_VALUE (arg_types)) == IDENTIFIER_NODE)
5917 if (!funcdef_flag)
5918 pedwarn (input_location, 0, "parameter names (without types) in function declaration");
5920 arg_info->parms = arg_info->types;
5921 arg_info->types = 0;
5922 return 0;
5924 else
5926 tree parm, type, typelt;
5927 unsigned int parmno;
5928 const char *errmsg;
5930 /* If there is a parameter of incomplete type in a definition,
5931 this is an error. In a declaration this is valid, and a
5932 struct or union type may be completed later, before any calls
5933 or definition of the function. In the case where the tag was
5934 first declared within the parameter list, a warning has
5935 already been given. If a parameter has void type, then
5936 however the function cannot be defined or called, so
5937 warn. */
5939 for (parm = arg_info->parms, typelt = arg_types, parmno = 1;
5940 parm;
5941 parm = TREE_CHAIN (parm), typelt = TREE_CHAIN (typelt), parmno++)
5943 type = TREE_VALUE (typelt);
5944 if (type == error_mark_node)
5945 continue;
5947 if (!COMPLETE_TYPE_P (type))
5949 if (funcdef_flag)
5951 if (DECL_NAME (parm))
5952 error ("parameter %u (%q+D) has incomplete type",
5953 parmno, parm);
5954 else
5955 error ("%Jparameter %u has incomplete type",
5956 parm, parmno);
5958 TREE_VALUE (typelt) = error_mark_node;
5959 TREE_TYPE (parm) = error_mark_node;
5961 else if (VOID_TYPE_P (type))
5963 if (DECL_NAME (parm))
5964 warning (0, "parameter %u (%q+D) has void type",
5965 parmno, parm);
5966 else
5967 warning (0, "%Jparameter %u has void type",
5968 parm, parmno);
5972 errmsg = targetm.invalid_parameter_type (type);
5973 if (errmsg)
5975 error (errmsg);
5976 TREE_VALUE (typelt) = error_mark_node;
5977 TREE_TYPE (parm) = error_mark_node;
5980 if (DECL_NAME (parm) && TREE_USED (parm))
5981 warn_if_shadowing (parm);
5983 return arg_types;
5987 /* Take apart the current scope and return a c_arg_info structure with
5988 info on a parameter list just parsed.
5990 This structure is later fed to 'grokparms' and 'store_parm_decls'.
5992 ELLIPSIS being true means the argument list ended in '...' so don't
5993 append a sentinel (void_list_node) to the end of the type-list. */
5995 struct c_arg_info *
5996 get_parm_info (bool ellipsis)
5998 struct c_binding *b = current_scope->bindings;
5999 struct c_arg_info *arg_info = XOBNEW (&parser_obstack,
6000 struct c_arg_info);
6001 tree parms = 0;
6002 tree tags = 0;
6003 tree types = 0;
6004 tree others = 0;
6006 static bool explained_incomplete_types = false;
6007 bool gave_void_only_once_err = false;
6009 arg_info->parms = 0;
6010 arg_info->tags = 0;
6011 arg_info->types = 0;
6012 arg_info->others = 0;
6013 arg_info->pending_sizes = 0;
6014 arg_info->had_vla_unspec = current_scope->had_vla_unspec;
6016 /* The bindings in this scope must not get put into a block.
6017 We will take care of deleting the binding nodes. */
6018 current_scope->bindings = 0;
6020 /* This function is only called if there was *something* on the
6021 parameter list. */
6022 gcc_assert (b);
6024 /* A parameter list consisting solely of 'void' indicates that the
6025 function takes no arguments. But if the 'void' is qualified
6026 (by 'const' or 'volatile'), or has a storage class specifier
6027 ('register'), then the behavior is undefined; issue an error.
6028 Typedefs for 'void' are OK (see DR#157). */
6029 if (b->prev == 0 /* one binding */
6030 && TREE_CODE (b->decl) == PARM_DECL /* which is a parameter */
6031 && !DECL_NAME (b->decl) /* anonymous */
6032 && VOID_TYPE_P (TREE_TYPE (b->decl))) /* of void type */
6034 if (TREE_THIS_VOLATILE (b->decl)
6035 || TREE_READONLY (b->decl)
6036 || C_DECL_REGISTER (b->decl))
6037 error ("%<void%> as only parameter may not be qualified");
6039 /* There cannot be an ellipsis. */
6040 if (ellipsis)
6041 error ("%<void%> must be the only parameter");
6043 arg_info->types = void_list_node;
6044 return arg_info;
6047 if (!ellipsis)
6048 types = void_list_node;
6050 /* Break up the bindings list into parms, tags, types, and others;
6051 apply sanity checks; purge the name-to-decl bindings. */
6052 while (b)
6054 tree decl = b->decl;
6055 tree type = TREE_TYPE (decl);
6056 const char *keyword;
6058 switch (TREE_CODE (decl))
6060 case PARM_DECL:
6061 if (b->id)
6063 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
6064 I_SYMBOL_BINDING (b->id) = b->shadowed;
6067 /* Check for forward decls that never got their actual decl. */
6068 if (TREE_ASM_WRITTEN (decl))
6069 error ("parameter %q+D has just a forward declaration", decl);
6070 /* Check for (..., void, ...) and issue an error. */
6071 else if (VOID_TYPE_P (type) && !DECL_NAME (decl))
6073 if (!gave_void_only_once_err)
6075 error ("%<void%> must be the only parameter");
6076 gave_void_only_once_err = true;
6079 else
6081 /* Valid parameter, add it to the list. */
6082 TREE_CHAIN (decl) = parms;
6083 parms = decl;
6085 /* Since there is a prototype, args are passed in their
6086 declared types. The back end may override this later. */
6087 DECL_ARG_TYPE (decl) = type;
6088 types = tree_cons (0, type, types);
6090 break;
6092 case ENUMERAL_TYPE: keyword = "enum"; goto tag;
6093 case UNION_TYPE: keyword = "union"; goto tag;
6094 case RECORD_TYPE: keyword = "struct"; goto tag;
6095 tag:
6096 /* Types may not have tag-names, in which case the type
6097 appears in the bindings list with b->id NULL. */
6098 if (b->id)
6100 gcc_assert (I_TAG_BINDING (b->id) == b);
6101 I_TAG_BINDING (b->id) = b->shadowed;
6104 /* Warn about any struct, union or enum tags defined in a
6105 parameter list. The scope of such types is limited to
6106 the parameter list, which is rarely if ever desirable
6107 (it's impossible to call such a function with type-
6108 correct arguments). An anonymous union parm type is
6109 meaningful as a GNU extension, so don't warn for that. */
6110 if (TREE_CODE (decl) != UNION_TYPE || b->id != 0)
6112 if (b->id)
6113 /* The %s will be one of 'struct', 'union', or 'enum'. */
6114 warning (0, "%<%s %E%> declared inside parameter list",
6115 keyword, b->id);
6116 else
6117 /* The %s will be one of 'struct', 'union', or 'enum'. */
6118 warning (0, "anonymous %s declared inside parameter list",
6119 keyword);
6121 if (!explained_incomplete_types)
6123 warning (0, "its scope is only this definition or declaration,"
6124 " which is probably not what you want");
6125 explained_incomplete_types = true;
6129 tags = tree_cons (b->id, decl, tags);
6130 break;
6132 case CONST_DECL:
6133 case TYPE_DECL:
6134 case FUNCTION_DECL:
6135 /* CONST_DECLs appear here when we have an embedded enum,
6136 and TYPE_DECLs appear here when we have an embedded struct
6137 or union. No warnings for this - we already warned about the
6138 type itself. FUNCTION_DECLs appear when there is an implicit
6139 function declaration in the parameter list. */
6141 TREE_CHAIN (decl) = others;
6142 others = decl;
6143 /* fall through */
6145 case ERROR_MARK:
6146 /* error_mark_node appears here when we have an undeclared
6147 variable. Just throw it away. */
6148 if (b->id)
6150 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
6151 I_SYMBOL_BINDING (b->id) = b->shadowed;
6153 break;
6155 /* Other things that might be encountered. */
6156 case LABEL_DECL:
6157 case VAR_DECL:
6158 default:
6159 gcc_unreachable ();
6162 b = free_binding_and_advance (b);
6165 arg_info->parms = parms;
6166 arg_info->tags = tags;
6167 arg_info->types = types;
6168 arg_info->others = others;
6169 arg_info->pending_sizes = get_pending_sizes ();
6170 return arg_info;
6173 /* Get the struct, enum or union (CODE says which) with tag NAME.
6174 Define the tag as a forward-reference with location LOC if it is
6175 not defined. Return a c_typespec structure for the type
6176 specifier. */
6178 struct c_typespec
6179 parser_xref_tag (location_t loc, enum tree_code code, tree name)
6181 struct c_typespec ret;
6182 tree ref;
6183 location_t refloc;
6185 ret.expr = NULL_TREE;
6186 ret.expr_const_operands = true;
6188 /* If a cross reference is requested, look up the type
6189 already defined for this tag and return it. */
6191 ref = lookup_tag (code, name, 0, &refloc);
6192 /* If this is the right type of tag, return what we found.
6193 (This reference will be shadowed by shadow_tag later if appropriate.)
6194 If this is the wrong type of tag, do not return it. If it was the
6195 wrong type in the same scope, we will have had an error
6196 message already; if in a different scope and declaring
6197 a name, pending_xref_error will give an error message; but if in a
6198 different scope and not declaring a name, this tag should
6199 shadow the previous declaration of a different type of tag, and
6200 this would not work properly if we return the reference found.
6201 (For example, with "struct foo" in an outer scope, "union foo;"
6202 must shadow that tag with a new one of union type.) */
6203 ret.kind = (ref ? ctsk_tagref : ctsk_tagfirstref);
6204 if (ref && TREE_CODE (ref) == code)
6206 if (C_TYPE_DEFINED_IN_STRUCT (ref)
6207 && loc != UNKNOWN_LOCATION
6208 && warn_cxx_compat)
6210 switch (code)
6212 case ENUMERAL_TYPE:
6213 warning_at (loc, OPT_Wc___compat,
6214 ("enum type defined in struct or union "
6215 "is not visible in C++"));
6216 inform (refloc, "enum type defined here");
6217 break;
6218 case RECORD_TYPE:
6219 warning_at (loc, OPT_Wc___compat,
6220 ("struct defined in struct or union "
6221 "is not visible in C++"));
6222 inform (refloc, "struct defined here");
6223 break;
6224 case UNION_TYPE:
6225 warning_at (loc, OPT_Wc___compat,
6226 ("union defined in struct or union "
6227 "is not visible in C++"));
6228 inform (refloc, "union defined here");
6229 break;
6230 default:
6231 gcc_unreachable();
6235 ret.spec = ref;
6236 return ret;
6239 /* If no such tag is yet defined, create a forward-reference node
6240 and record it as the "definition".
6241 When a real declaration of this type is found,
6242 the forward-reference will be altered into a real type. */
6244 ref = make_node (code);
6245 if (code == ENUMERAL_TYPE)
6247 /* Give the type a default layout like unsigned int
6248 to avoid crashing if it does not get defined. */
6249 SET_TYPE_MODE (ref, TYPE_MODE (unsigned_type_node));
6250 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
6251 TYPE_USER_ALIGN (ref) = 0;
6252 TYPE_UNSIGNED (ref) = 1;
6253 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
6254 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
6255 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
6258 pushtag (loc, name, ref);
6260 ret.spec = ref;
6261 return ret;
6264 /* Get the struct, enum or union (CODE says which) with tag NAME.
6265 Define the tag as a forward-reference if it is not defined.
6266 Return a tree for the type. */
6268 tree
6269 xref_tag (enum tree_code code, tree name)
6271 return parser_xref_tag (input_location, code, name).spec;
6274 /* Make sure that the tag NAME is defined *in the current scope*
6275 at least as a forward reference.
6276 LOC is the location of the struct's definition.
6277 CODE says which kind of tag NAME ought to be.
6279 This stores the current value of the file static IN_STRUCT in
6280 *ENCLOSING_IN_STRUCT, and sets IN_STRUCT to true. Similarly, this
6281 sets STRUCT_TYPES in *ENCLOSING_STRUCT_TYPES, and sets STRUCT_TYPES
6282 to an empty vector. The old values are restored in
6283 finish_struct. */
6285 tree
6286 start_struct (location_t loc, enum tree_code code, tree name,
6287 bool *enclosing_in_struct,
6288 VEC(tree,heap) **enclosing_struct_types)
6290 /* If there is already a tag defined at this scope
6291 (as a forward reference), just return it. */
6293 tree ref = NULL_TREE;
6294 location_t refloc = UNKNOWN_LOCATION;
6296 if (name != NULL_TREE)
6297 ref = lookup_tag (code, name, 1, &refloc);
6298 if (ref && TREE_CODE (ref) == code)
6300 if (TYPE_SIZE (ref))
6302 if (code == UNION_TYPE)
6303 error_at (loc, "redefinition of %<union %E%>", name);
6304 else
6305 error_at (loc, "redefinition of %<struct %E%>", name);
6306 if (refloc != UNKNOWN_LOCATION)
6307 inform (refloc, "originally defined here");
6308 /* Don't create structures using a name already in use. */
6309 ref = NULL_TREE;
6311 else if (C_TYPE_BEING_DEFINED (ref))
6313 if (code == UNION_TYPE)
6314 error_at (loc, "nested redefinition of %<union %E%>", name);
6315 else
6316 error_at (loc, "nested redefinition of %<struct %E%>", name);
6317 /* Don't bother to report "originally defined here" for a
6318 nested redefinition; the original definition should be
6319 obvious. */
6320 /* Don't create structures that contain themselves. */
6321 ref = NULL_TREE;
6325 /* Otherwise create a forward-reference just so the tag is in scope. */
6327 if (ref == NULL_TREE || TREE_CODE (ref) != code)
6329 ref = make_node (code);
6330 pushtag (loc, name, ref);
6333 C_TYPE_BEING_DEFINED (ref) = 1;
6334 TYPE_PACKED (ref) = flag_pack_struct;
6336 *enclosing_in_struct = in_struct;
6337 *enclosing_struct_types = struct_types;
6338 in_struct = true;
6339 struct_types = VEC_alloc(tree, heap, 0);
6341 /* FIXME: This will issue a warning for a use of a type defined
6342 within a statement expr used within sizeof, et. al. This is not
6343 terribly serious as C++ doesn't permit statement exprs within
6344 sizeof anyhow. */
6345 if (warn_cxx_compat && (in_sizeof || in_typeof || in_alignof))
6346 warning_at (loc, OPT_Wc___compat,
6347 "defining type in %qs expression is invalid in C++",
6348 (in_sizeof
6349 ? "sizeof"
6350 : (in_typeof ? "typeof" : "alignof")));
6352 return ref;
6355 /* Process the specs, declarator and width (NULL if omitted)
6356 of a structure component, returning a FIELD_DECL node.
6357 WIDTH is non-NULL for bit-fields only, and is an INTEGER_CST node.
6358 DECL_ATTRS is as for grokdeclarator.
6360 LOC is the location of the structure component.
6362 This is done during the parsing of the struct declaration.
6363 The FIELD_DECL nodes are chained together and the lot of them
6364 are ultimately passed to `build_struct' to make the RECORD_TYPE node. */
6366 tree
6367 grokfield (location_t loc,
6368 struct c_declarator *declarator, struct c_declspecs *declspecs,
6369 tree width, tree *decl_attrs)
6371 tree value;
6373 if (declarator->kind == cdk_id && declarator->u.id == NULL_TREE
6374 && width == NULL_TREE)
6376 /* This is an unnamed decl.
6378 If we have something of the form "union { list } ;" then this
6379 is the anonymous union extension. Similarly for struct.
6381 If this is something of the form "struct foo;", then
6382 If MS extensions are enabled, this is handled as an
6383 anonymous struct.
6384 Otherwise this is a forward declaration of a structure tag.
6386 If this is something of the form "foo;" and foo is a TYPE_DECL, then
6387 If MS extensions are enabled and foo names a structure, then
6388 again this is an anonymous struct.
6389 Otherwise this is an error.
6391 Oh what a horrid tangled web we weave. I wonder if MS consciously
6392 took this from Plan 9 or if it was an accident of implementation
6393 that took root before someone noticed the bug... */
6395 tree type = declspecs->type;
6396 bool type_ok = (TREE_CODE (type) == RECORD_TYPE
6397 || TREE_CODE (type) == UNION_TYPE);
6398 bool ok = false;
6400 if (type_ok
6401 && (flag_ms_extensions || !declspecs->typedef_p))
6403 if (flag_ms_extensions)
6404 ok = true;
6405 else if (flag_iso)
6406 ok = false;
6407 else if (TYPE_NAME (type) == NULL)
6408 ok = true;
6409 else
6410 ok = false;
6412 if (!ok)
6414 pedwarn (loc, 0, "declaration does not declare anything");
6415 return NULL_TREE;
6417 pedwarn (loc, OPT_pedantic, "ISO C doesn%'t support unnamed structs/unions");
6420 value = grokdeclarator (declarator, declspecs, FIELD, false,
6421 width ? &width : NULL, decl_attrs, NULL, NULL,
6422 DEPRECATED_NORMAL);
6424 finish_decl (value, loc, NULL_TREE, NULL_TREE, NULL_TREE);
6425 DECL_INITIAL (value) = width;
6427 return value;
6430 /* Generate an error for any duplicate field names in FIELDLIST. Munge
6431 the list such that this does not present a problem later. */
6433 static void
6434 detect_field_duplicates (tree fieldlist)
6436 tree x, y;
6437 int timeout = 10;
6439 /* First, see if there are more than "a few" fields.
6440 This is trivially true if there are zero or one fields. */
6441 if (!fieldlist)
6442 return;
6443 x = TREE_CHAIN (fieldlist);
6444 if (!x)
6445 return;
6446 do {
6447 timeout--;
6448 x = TREE_CHAIN (x);
6449 } while (timeout > 0 && x);
6451 /* If there were "few" fields, avoid the overhead of allocating
6452 a hash table. Instead just do the nested traversal thing. */
6453 if (timeout > 0)
6455 for (x = TREE_CHAIN (fieldlist); x ; x = TREE_CHAIN (x))
6456 if (DECL_NAME (x))
6458 for (y = fieldlist; y != x; y = TREE_CHAIN (y))
6459 if (DECL_NAME (y) == DECL_NAME (x))
6461 error ("duplicate member %q+D", x);
6462 DECL_NAME (x) = NULL_TREE;
6466 else
6468 htab_t htab = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
6469 void **slot;
6471 for (x = fieldlist; x ; x = TREE_CHAIN (x))
6472 if ((y = DECL_NAME (x)) != 0)
6474 slot = htab_find_slot (htab, y, INSERT);
6475 if (*slot)
6477 error ("duplicate member %q+D", x);
6478 DECL_NAME (x) = NULL_TREE;
6480 *slot = y;
6483 htab_delete (htab);
6487 /* Fill in the fields of a RECORD_TYPE or UNION_TYPE node, T.
6488 LOC is the location of the RECORD_TYPE or UNION_TYPE's definition.
6489 FIELDLIST is a chain of FIELD_DECL nodes for the fields.
6490 ATTRIBUTES are attributes to be applied to the structure.
6492 ENCLOSING_IN_STRUCT is the value of IN_STRUCT, and
6493 ENCLOSING_STRUCT_TYPES is the value of STRUCT_TYPES, when the
6494 struct was started. This sets the C_TYPE_DEFINED_IN_STRUCT flag
6495 for any type defined in the current struct. */
6497 tree
6498 finish_struct (location_t loc, tree t, tree fieldlist, tree attributes,
6499 bool enclosing_in_struct,
6500 VEC(tree,heap) *enclosing_struct_types)
6502 tree x;
6503 bool toplevel = file_scope == current_scope;
6504 int saw_named_field;
6505 unsigned int ix;
6507 /* If this type was previously laid out as a forward reference,
6508 make sure we lay it out again. */
6510 TYPE_SIZE (t) = 0;
6512 decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
6514 if (pedantic)
6516 for (x = fieldlist; x; x = TREE_CHAIN (x))
6517 if (DECL_NAME (x) != 0)
6518 break;
6520 if (x == 0)
6522 if (TREE_CODE (t) == UNION_TYPE)
6524 if (fieldlist)
6525 pedwarn (loc, OPT_pedantic, "union has no named members");
6526 else
6527 pedwarn (loc, OPT_pedantic, "union has no members");
6529 else
6531 if (fieldlist)
6532 pedwarn (loc, OPT_pedantic, "struct has no named members");
6533 else
6534 pedwarn (loc, OPT_pedantic, "struct has no members");
6539 /* Install struct as DECL_CONTEXT of each field decl.
6540 Also process specified field sizes, found in the DECL_INITIAL,
6541 storing 0 there after the type has been changed to precision equal
6542 to its width, rather than the precision of the specified standard
6543 type. (Correct layout requires the original type to have been preserved
6544 until now.) */
6546 saw_named_field = 0;
6547 for (x = fieldlist; x; x = TREE_CHAIN (x))
6549 if (TREE_TYPE (x) == error_mark_node)
6550 continue;
6552 DECL_CONTEXT (x) = t;
6554 /* If any field is const, the structure type is pseudo-const. */
6555 if (TREE_READONLY (x))
6556 C_TYPE_FIELDS_READONLY (t) = 1;
6557 else
6559 /* A field that is pseudo-const makes the structure likewise. */
6560 tree t1 = TREE_TYPE (x);
6561 while (TREE_CODE (t1) == ARRAY_TYPE)
6562 t1 = TREE_TYPE (t1);
6563 if ((TREE_CODE (t1) == RECORD_TYPE || TREE_CODE (t1) == UNION_TYPE)
6564 && C_TYPE_FIELDS_READONLY (t1))
6565 C_TYPE_FIELDS_READONLY (t) = 1;
6568 /* Any field that is volatile means variables of this type must be
6569 treated in some ways as volatile. */
6570 if (TREE_THIS_VOLATILE (x))
6571 C_TYPE_FIELDS_VOLATILE (t) = 1;
6573 /* Any field of nominal variable size implies structure is too. */
6574 if (C_DECL_VARIABLE_SIZE (x))
6575 C_TYPE_VARIABLE_SIZE (t) = 1;
6577 if (DECL_INITIAL (x))
6579 unsigned HOST_WIDE_INT width = tree_low_cst (DECL_INITIAL (x), 1);
6580 DECL_SIZE (x) = bitsize_int (width);
6581 DECL_BIT_FIELD (x) = 1;
6582 SET_DECL_C_BIT_FIELD (x);
6585 if (TYPE_PACKED (t)
6586 && (DECL_BIT_FIELD (x)
6587 || TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT))
6588 DECL_PACKED (x) = 1;
6590 /* Detect flexible array member in an invalid context. */
6591 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
6592 && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
6593 && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
6594 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
6596 if (TREE_CODE (t) == UNION_TYPE)
6598 error_at (DECL_SOURCE_LOCATION (x),
6599 "%Jflexible array member in union", x);
6600 TREE_TYPE (x) = error_mark_node;
6602 else if (TREE_CHAIN (x) != NULL_TREE)
6604 error_at (DECL_SOURCE_LOCATION (x),
6605 "%Jflexible array member not at end of struct", x);
6606 TREE_TYPE (x) = error_mark_node;
6608 else if (!saw_named_field)
6610 error_at (DECL_SOURCE_LOCATION (x),
6611 "%Jflexible array member in otherwise empty struct",
6613 TREE_TYPE (x) = error_mark_node;
6617 if (pedantic && !in_system_header && TREE_CODE (t) == RECORD_TYPE
6618 && flexible_array_type_p (TREE_TYPE (x)))
6619 pedwarn (loc, OPT_pedantic,
6620 "%Jinvalid use of structure with flexible array member", x);
6622 if (DECL_NAME (x))
6623 saw_named_field = 1;
6626 detect_field_duplicates (fieldlist);
6628 /* Now we have the nearly final fieldlist. Record it,
6629 then lay out the structure or union (including the fields). */
6631 TYPE_FIELDS (t) = fieldlist;
6633 layout_type (t);
6635 /* Give bit-fields their proper types. */
6637 tree *fieldlistp = &fieldlist;
6638 while (*fieldlistp)
6639 if (TREE_CODE (*fieldlistp) == FIELD_DECL && DECL_INITIAL (*fieldlistp)
6640 && TREE_TYPE (*fieldlistp) != error_mark_node)
6642 unsigned HOST_WIDE_INT width
6643 = tree_low_cst (DECL_INITIAL (*fieldlistp), 1);
6644 tree type = TREE_TYPE (*fieldlistp);
6645 if (width != TYPE_PRECISION (type))
6647 TREE_TYPE (*fieldlistp)
6648 = c_build_bitfield_integer_type (width, TYPE_UNSIGNED (type));
6649 DECL_MODE (*fieldlistp) = TYPE_MODE (TREE_TYPE (*fieldlistp));
6651 DECL_INITIAL (*fieldlistp) = 0;
6653 else
6654 fieldlistp = &TREE_CHAIN (*fieldlistp);
6657 /* Now we have the truly final field list.
6658 Store it in this type and in the variants. */
6660 TYPE_FIELDS (t) = fieldlist;
6662 /* If there are lots of fields, sort so we can look through them fast.
6663 We arbitrarily consider 16 or more elts to be "a lot". */
6666 int len = 0;
6668 for (x = fieldlist; x; x = TREE_CHAIN (x))
6670 if (len > 15 || DECL_NAME (x) == NULL)
6671 break;
6672 len += 1;
6675 if (len > 15)
6677 tree *field_array;
6678 struct lang_type *space;
6679 struct sorted_fields_type *space2;
6681 len += list_length (x);
6683 /* Use the same allocation policy here that make_node uses, to
6684 ensure that this lives as long as the rest of the struct decl.
6685 All decls in an inline function need to be saved. */
6687 space = GGC_CNEW (struct lang_type);
6688 space2 = GGC_NEWVAR (struct sorted_fields_type,
6689 sizeof (struct sorted_fields_type) + len * sizeof (tree));
6691 len = 0;
6692 space->s = space2;
6693 field_array = &space2->elts[0];
6694 for (x = fieldlist; x; x = TREE_CHAIN (x))
6696 field_array[len++] = x;
6698 /* If there is anonymous struct or union, break out of the loop. */
6699 if (DECL_NAME (x) == NULL)
6700 break;
6702 /* Found no anonymous struct/union. Add the TYPE_LANG_SPECIFIC. */
6703 if (x == NULL)
6705 TYPE_LANG_SPECIFIC (t) = space;
6706 TYPE_LANG_SPECIFIC (t)->s->len = len;
6707 field_array = TYPE_LANG_SPECIFIC (t)->s->elts;
6708 qsort (field_array, len, sizeof (tree), field_decl_cmp);
6713 for (x = TYPE_MAIN_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
6715 TYPE_FIELDS (x) = TYPE_FIELDS (t);
6716 TYPE_LANG_SPECIFIC (x) = TYPE_LANG_SPECIFIC (t);
6717 C_TYPE_FIELDS_READONLY (x) = C_TYPE_FIELDS_READONLY (t);
6718 C_TYPE_FIELDS_VOLATILE (x) = C_TYPE_FIELDS_VOLATILE (t);
6719 C_TYPE_VARIABLE_SIZE (x) = C_TYPE_VARIABLE_SIZE (t);
6722 /* If this was supposed to be a transparent union, but we can't
6723 make it one, warn and turn off the flag. */
6724 if (TREE_CODE (t) == UNION_TYPE
6725 && TYPE_TRANSPARENT_UNION (t)
6726 && (!TYPE_FIELDS (t) || TYPE_MODE (t) != DECL_MODE (TYPE_FIELDS (t))))
6728 TYPE_TRANSPARENT_UNION (t) = 0;
6729 warning_at (loc, 0, "union cannot be made transparent");
6732 /* If this structure or union completes the type of any previous
6733 variable declaration, lay it out and output its rtl. */
6734 for (x = C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t));
6736 x = TREE_CHAIN (x))
6738 tree decl = TREE_VALUE (x);
6739 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
6740 layout_array_type (TREE_TYPE (decl));
6741 if (TREE_CODE (decl) != TYPE_DECL)
6743 layout_decl (decl, 0);
6744 if (c_dialect_objc ())
6745 objc_check_decl (decl);
6746 rest_of_decl_compilation (decl, toplevel, 0);
6747 if (!toplevel)
6748 expand_decl (decl);
6751 C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t)) = 0;
6753 /* Finish debugging output for this type. */
6754 rest_of_type_compilation (t, toplevel);
6756 /* If we're inside a function proper, i.e. not file-scope and not still
6757 parsing parameters, then arrange for the size of a variable sized type
6758 to be bound now. */
6759 if (cur_stmt_list && variably_modified_type_p (t, NULL_TREE))
6760 add_stmt (build_stmt (loc,
6761 DECL_EXPR, build_decl (loc, TYPE_DECL, NULL, t)));
6763 /* Set the C_TYPE_DEFINED_IN_STRUCT flag for each type defined in
6764 the current struct. We do this now at the end of the struct
6765 because the flag is used to issue visibility warnings when using
6766 -Wc++-compat, and we only want to issue those warnings if the
6767 type is referenced outside of the struct declaration. */
6768 for (ix = 0; VEC_iterate (tree, struct_types, ix, x); ++ix)
6769 C_TYPE_DEFINED_IN_STRUCT (x) = 1;
6771 VEC_free (tree, heap, struct_types);
6773 in_struct = enclosing_in_struct;
6774 struct_types = enclosing_struct_types;
6776 /* If this struct is defined inside a struct, add it to
6777 STRUCT_TYPES. */
6778 if (in_struct && !in_sizeof && !in_typeof && !in_alignof)
6779 VEC_safe_push (tree, heap, struct_types, t);
6781 return t;
6784 /* Lay out the type T, and its element type, and so on. */
6786 static void
6787 layout_array_type (tree t)
6789 if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
6790 layout_array_type (TREE_TYPE (t));
6791 layout_type (t);
6794 /* Begin compiling the definition of an enumeration type.
6795 NAME is its name (or null if anonymous).
6796 LOC is the enum's location.
6797 Returns the type object, as yet incomplete.
6798 Also records info about it so that build_enumerator
6799 may be used to declare the individual values as they are read. */
6801 tree
6802 start_enum (location_t loc, struct c_enum_contents *the_enum, tree name)
6804 tree enumtype = NULL_TREE;
6805 location_t enumloc = UNKNOWN_LOCATION;
6807 /* If this is the real definition for a previous forward reference,
6808 fill in the contents in the same object that used to be the
6809 forward reference. */
6811 if (name != NULL_TREE)
6812 enumtype = lookup_tag (ENUMERAL_TYPE, name, 1, &enumloc);
6814 if (enumtype == 0 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
6816 enumtype = make_node (ENUMERAL_TYPE);
6817 pushtag (loc, name, enumtype);
6820 if (C_TYPE_BEING_DEFINED (enumtype))
6821 error_at (loc, "nested redefinition of %<enum %E%>", name);
6823 C_TYPE_BEING_DEFINED (enumtype) = 1;
6825 if (TYPE_VALUES (enumtype) != 0)
6827 /* This enum is a named one that has been declared already. */
6828 error_at (loc, "redeclaration of %<enum %E%>", name);
6829 if (enumloc != UNKNOWN_LOCATION)
6830 inform (enumloc, "originally defined here");
6832 /* Completely replace its old definition.
6833 The old enumerators remain defined, however. */
6834 TYPE_VALUES (enumtype) = 0;
6837 the_enum->enum_next_value = integer_zero_node;
6838 the_enum->enum_overflow = 0;
6840 if (flag_short_enums)
6841 TYPE_PACKED (enumtype) = 1;
6843 /* FIXME: This will issue a warning for a use of a type defined
6844 within sizeof in a statement expr. This is not terribly serious
6845 as C++ doesn't permit statement exprs within sizeof anyhow. */
6846 if (warn_cxx_compat && (in_sizeof || in_typeof || in_alignof))
6847 warning_at (loc, OPT_Wc___compat,
6848 "defining type in %qs expression is invalid in C++",
6849 (in_sizeof
6850 ? "sizeof"
6851 : (in_typeof ? "typeof" : "alignof")));
6853 return enumtype;
6856 /* After processing and defining all the values of an enumeration type,
6857 install their decls in the enumeration type and finish it off.
6858 ENUMTYPE is the type object, VALUES a list of decl-value pairs,
6859 and ATTRIBUTES are the specified attributes.
6860 Returns ENUMTYPE. */
6862 tree
6863 finish_enum (tree enumtype, tree values, tree attributes)
6865 tree pair, tem;
6866 tree minnode = 0, maxnode = 0;
6867 int precision, unsign;
6868 bool toplevel = (file_scope == current_scope);
6869 struct lang_type *lt;
6871 decl_attributes (&enumtype, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
6873 /* Calculate the maximum value of any enumerator in this type. */
6875 if (values == error_mark_node)
6876 minnode = maxnode = integer_zero_node;
6877 else
6879 minnode = maxnode = TREE_VALUE (values);
6880 for (pair = TREE_CHAIN (values); pair; pair = TREE_CHAIN (pair))
6882 tree value = TREE_VALUE (pair);
6883 if (tree_int_cst_lt (maxnode, value))
6884 maxnode = value;
6885 if (tree_int_cst_lt (value, minnode))
6886 minnode = value;
6890 /* Construct the final type of this enumeration. It is the same
6891 as one of the integral types - the narrowest one that fits, except
6892 that normally we only go as narrow as int - and signed iff any of
6893 the values are negative. */
6894 unsign = (tree_int_cst_sgn (minnode) >= 0);
6895 precision = MAX (tree_int_cst_min_precision (minnode, unsign),
6896 tree_int_cst_min_precision (maxnode, unsign));
6898 if (TYPE_PACKED (enumtype) || precision > TYPE_PRECISION (integer_type_node))
6900 tem = c_common_type_for_size (precision, unsign);
6901 if (tem == NULL)
6903 warning (0, "enumeration values exceed range of largest integer");
6904 tem = long_long_integer_type_node;
6907 else
6908 tem = unsign ? unsigned_type_node : integer_type_node;
6910 TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (tem);
6911 TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (tem);
6912 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (tem);
6913 TYPE_SIZE (enumtype) = 0;
6915 /* If the precision of the type was specific with an attribute and it
6916 was too small, give an error. Otherwise, use it. */
6917 if (TYPE_PRECISION (enumtype))
6919 if (precision > TYPE_PRECISION (enumtype))
6920 error ("specified mode too small for enumeral values");
6922 else
6923 TYPE_PRECISION (enumtype) = TYPE_PRECISION (tem);
6925 layout_type (enumtype);
6927 if (values != error_mark_node)
6929 /* Change the type of the enumerators to be the enum type. We
6930 need to do this irrespective of the size of the enum, for
6931 proper type checking. Replace the DECL_INITIALs of the
6932 enumerators, and the value slots of the list, with copies
6933 that have the enum type; they cannot be modified in place
6934 because they may be shared (e.g. integer_zero_node) Finally,
6935 change the purpose slots to point to the names of the decls. */
6936 for (pair = values; pair; pair = TREE_CHAIN (pair))
6938 tree enu = TREE_PURPOSE (pair);
6939 tree ini = DECL_INITIAL (enu);
6941 TREE_TYPE (enu) = enumtype;
6943 /* The ISO C Standard mandates enumerators to have type int,
6944 even though the underlying type of an enum type is
6945 unspecified. However, GCC allows enumerators of any
6946 integer type as an extensions. build_enumerator()
6947 converts any enumerators that fit in an int to type int,
6948 to avoid promotions to unsigned types when comparing
6949 integers with enumerators that fit in the int range.
6950 When -pedantic is given, build_enumerator() would have
6951 already warned about those that don't fit. Here we
6952 convert the rest to the enumerator type. */
6953 if (TREE_TYPE (ini) != integer_type_node)
6954 ini = convert (enumtype, ini);
6956 DECL_INITIAL (enu) = ini;
6957 TREE_PURPOSE (pair) = DECL_NAME (enu);
6958 TREE_VALUE (pair) = ini;
6961 TYPE_VALUES (enumtype) = values;
6964 /* Record the min/max values so that we can warn about bit-field
6965 enumerations that are too small for the values. */
6966 lt = GGC_CNEW (struct lang_type);
6967 lt->enum_min = minnode;
6968 lt->enum_max = maxnode;
6969 TYPE_LANG_SPECIFIC (enumtype) = lt;
6971 /* Fix up all variant types of this enum type. */
6972 for (tem = TYPE_MAIN_VARIANT (enumtype); tem; tem = TYPE_NEXT_VARIANT (tem))
6974 if (tem == enumtype)
6975 continue;
6976 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
6977 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
6978 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
6979 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
6980 TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
6981 SET_TYPE_MODE (tem, TYPE_MODE (enumtype));
6982 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
6983 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
6984 TYPE_USER_ALIGN (tem) = TYPE_USER_ALIGN (enumtype);
6985 TYPE_UNSIGNED (tem) = TYPE_UNSIGNED (enumtype);
6986 TYPE_LANG_SPECIFIC (tem) = TYPE_LANG_SPECIFIC (enumtype);
6989 /* Finish debugging output for this type. */
6990 rest_of_type_compilation (enumtype, toplevel);
6992 /* If this enum is defined inside a struct, add it to
6993 STRUCT_TYPES. */
6994 if (in_struct && !in_sizeof && !in_typeof && !in_alignof)
6995 VEC_safe_push (tree, heap, struct_types, enumtype);
6997 return enumtype;
7000 /* Build and install a CONST_DECL for one value of the
7001 current enumeration type (one that was begun with start_enum).
7002 LOC is the location of the enumerator.
7003 Return a tree-list containing the CONST_DECL and its value.
7004 Assignment of sequential values by default is handled here. */
7006 tree
7007 build_enumerator (location_t loc,
7008 struct c_enum_contents *the_enum, tree name, tree value)
7010 tree decl, type;
7012 /* Validate and default VALUE. */
7014 if (value != 0)
7016 /* Don't issue more errors for error_mark_node (i.e. an
7017 undeclared identifier) - just ignore the value expression. */
7018 if (value == error_mark_node)
7019 value = 0;
7020 else if (!INTEGRAL_TYPE_P (TREE_TYPE (value)))
7022 error_at (loc, "enumerator value for %qE is not an integer constant",
7023 name);
7024 value = 0;
7026 else
7028 if (TREE_CODE (value) != INTEGER_CST)
7030 value = c_fully_fold (value, false, NULL);
7031 if (TREE_CODE (value) == INTEGER_CST)
7032 pedwarn (loc, OPT_pedantic,
7033 "enumerator value for %qE is not an integer "
7034 "constant expression", name);
7036 if (TREE_CODE (value) != INTEGER_CST)
7038 error ("enumerator value for %qE is not an integer constant",
7039 name);
7040 value = 0;
7042 else
7044 value = default_conversion (value);
7045 constant_expression_warning (value);
7050 /* Default based on previous value. */
7051 /* It should no longer be possible to have NON_LVALUE_EXPR
7052 in the default. */
7053 if (value == 0)
7055 value = the_enum->enum_next_value;
7056 if (the_enum->enum_overflow)
7057 error_at (loc, "overflow in enumeration values");
7059 /* Even though the underlying type of an enum is unspecified, the
7060 type of enumeration constants is explicitly defined as int
7061 (6.4.4.3/2 in the C99 Standard). GCC allows any integer type as
7062 an extension. */
7063 else if (!int_fits_type_p (value, integer_type_node))
7064 pedwarn (loc, OPT_pedantic,
7065 "ISO C restricts enumerator values to range of %<int%>");
7067 /* The ISO C Standard mandates enumerators to have type int, even
7068 though the underlying type of an enum type is unspecified.
7069 However, GCC allows enumerators of any integer type as an
7070 extensions. Here we convert any enumerators that fit in an int
7071 to type int, to avoid promotions to unsigned types when comparing
7072 integers with enumerators that fit in the int range. When
7073 -pedantic is given, we would have already warned about those that
7074 don't fit. We have to do this here rather than in finish_enum
7075 because this value may be used to define more enumerators. */
7076 if (int_fits_type_p (value, integer_type_node))
7077 value = convert (integer_type_node, value);
7079 /* Set basis for default for next value. */
7080 the_enum->enum_next_value
7081 = build_binary_op
7082 (EXPR_HAS_LOCATION (value) ? EXPR_LOCATION (value) : input_location,
7083 PLUS_EXPR, value, integer_one_node, 0);
7084 the_enum->enum_overflow = tree_int_cst_lt (the_enum->enum_next_value, value);
7086 /* Now create a declaration for the enum value name. */
7088 type = TREE_TYPE (value);
7089 type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
7090 TYPE_PRECISION (integer_type_node)),
7091 (TYPE_PRECISION (type)
7092 >= TYPE_PRECISION (integer_type_node)
7093 && TYPE_UNSIGNED (type)));
7095 decl = build_decl (loc, CONST_DECL, name, type);
7096 DECL_INITIAL (decl) = convert (type, value);
7097 pushdecl (decl);
7099 return tree_cons (decl, value, NULL_TREE);
7103 /* Create the FUNCTION_DECL for a function definition.
7104 DECLSPECS, DECLARATOR and ATTRIBUTES are the parts of
7105 the declaration; they describe the function's name and the type it returns,
7106 but twisted together in a fashion that parallels the syntax of C.
7108 This function creates a binding context for the function body
7109 as well as setting up the FUNCTION_DECL in current_function_decl.
7111 Returns 1 on success. If the DECLARATOR is not suitable for a function
7112 (it defines a datum instead), we return 0, which tells
7113 yyparse to report a parse error. */
7116 start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
7117 tree attributes)
7119 tree decl1, old_decl;
7120 tree restype, resdecl;
7121 location_t loc;
7123 current_function_returns_value = 0; /* Assume, until we see it does. */
7124 current_function_returns_null = 0;
7125 current_function_returns_abnormally = 0;
7126 warn_about_return_type = 0;
7127 c_switch_stack = NULL;
7129 /* Indicate no valid break/continue context by setting these variables
7130 to some non-null, non-label value. We'll notice and emit the proper
7131 error message in c_finish_bc_stmt. */
7132 c_break_label = c_cont_label = size_zero_node;
7134 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, true, NULL,
7135 &attributes, NULL, NULL, DEPRECATED_NORMAL);
7137 /* If the declarator is not suitable for a function definition,
7138 cause a syntax error. */
7139 if (decl1 == 0)
7140 return 0;
7142 loc = DECL_SOURCE_LOCATION (decl1);
7144 decl_attributes (&decl1, attributes, 0);
7146 if (DECL_DECLARED_INLINE_P (decl1)
7147 && DECL_UNINLINABLE (decl1)
7148 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl1)))
7149 warning_at (loc, OPT_Wattributes,
7150 "inline function %qD given attribute noinline",
7151 decl1);
7153 /* Handle gnu_inline attribute. */
7154 if (declspecs->inline_p
7155 && !flag_gnu89_inline
7156 && TREE_CODE (decl1) == FUNCTION_DECL
7157 && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl1))
7158 || current_function_decl))
7160 if (declspecs->storage_class != csc_static)
7161 DECL_EXTERNAL (decl1) = !DECL_EXTERNAL (decl1);
7164 announce_function (decl1);
7166 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl1))))
7168 error_at (loc, "return type is an incomplete type");
7169 /* Make it return void instead. */
7170 TREE_TYPE (decl1)
7171 = build_function_type (void_type_node,
7172 TYPE_ARG_TYPES (TREE_TYPE (decl1)));
7175 if (warn_about_return_type)
7176 pedwarn_c99 (loc, flag_isoc99 ? 0
7177 : (warn_return_type ? OPT_Wreturn_type : OPT_Wimplicit_int),
7178 "return type defaults to %<int%>");
7180 /* Make the init_value nonzero so pushdecl knows this is not tentative.
7181 error_mark_node is replaced below (in pop_scope) with the BLOCK. */
7182 DECL_INITIAL (decl1) = error_mark_node;
7184 /* If this definition isn't a prototype and we had a prototype declaration
7185 before, copy the arg type info from that prototype. */
7186 old_decl = lookup_name_in_scope (DECL_NAME (decl1), current_scope);
7187 if (old_decl && TREE_CODE (old_decl) != FUNCTION_DECL)
7188 old_decl = 0;
7189 current_function_prototype_locus = UNKNOWN_LOCATION;
7190 current_function_prototype_built_in = false;
7191 current_function_prototype_arg_types = NULL_TREE;
7192 if (TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0)
7194 if (old_decl != 0 && TREE_CODE (TREE_TYPE (old_decl)) == FUNCTION_TYPE
7195 && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
7196 TREE_TYPE (TREE_TYPE (old_decl))))
7198 TREE_TYPE (decl1) = composite_type (TREE_TYPE (old_decl),
7199 TREE_TYPE (decl1));
7200 current_function_prototype_locus = DECL_SOURCE_LOCATION (old_decl);
7201 current_function_prototype_built_in
7202 = C_DECL_BUILTIN_PROTOTYPE (old_decl);
7203 current_function_prototype_arg_types
7204 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
7206 if (TREE_PUBLIC (decl1))
7208 /* If there is an external prototype declaration of this
7209 function, record its location but do not copy information
7210 to this decl. This may be an invisible declaration
7211 (built-in or in a scope which has finished) or simply
7212 have more refined argument types than any declaration
7213 found above. */
7214 struct c_binding *b;
7215 for (b = I_SYMBOL_BINDING (DECL_NAME (decl1)); b; b = b->shadowed)
7216 if (B_IN_SCOPE (b, external_scope))
7217 break;
7218 if (b)
7220 tree ext_decl, ext_type;
7221 ext_decl = b->decl;
7222 ext_type = b->u.type ? b->u.type : TREE_TYPE (ext_decl);
7223 if (TREE_CODE (ext_type) == FUNCTION_TYPE
7224 && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
7225 TREE_TYPE (ext_type)))
7227 current_function_prototype_locus
7228 = DECL_SOURCE_LOCATION (ext_decl);
7229 current_function_prototype_built_in
7230 = C_DECL_BUILTIN_PROTOTYPE (ext_decl);
7231 current_function_prototype_arg_types
7232 = TYPE_ARG_TYPES (ext_type);
7238 /* Optionally warn of old-fashioned def with no previous prototype. */
7239 if (warn_strict_prototypes
7240 && old_decl != error_mark_node
7241 && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0
7242 && C_DECL_ISNT_PROTOTYPE (old_decl))
7243 warning_at (loc, OPT_Wstrict_prototypes,
7244 "function declaration isn%'t a prototype");
7245 /* Optionally warn of any global def with no previous prototype. */
7246 else if (warn_missing_prototypes
7247 && old_decl != error_mark_node
7248 && TREE_PUBLIC (decl1)
7249 && !MAIN_NAME_P (DECL_NAME (decl1))
7250 && C_DECL_ISNT_PROTOTYPE (old_decl))
7251 warning_at (loc, OPT_Wmissing_prototypes,
7252 "no previous prototype for %qD", decl1);
7253 /* Optionally warn of any def with no previous prototype
7254 if the function has already been used. */
7255 else if (warn_missing_prototypes
7256 && old_decl != 0
7257 && old_decl != error_mark_node
7258 && TREE_USED (old_decl)
7259 && TYPE_ARG_TYPES (TREE_TYPE (old_decl)) == 0)
7260 warning_at (loc, OPT_Wmissing_prototypes,
7261 "%qD was used with no prototype before its definition", decl1);
7262 /* Optionally warn of any global def with no previous declaration. */
7263 else if (warn_missing_declarations
7264 && TREE_PUBLIC (decl1)
7265 && old_decl == 0
7266 && !MAIN_NAME_P (DECL_NAME (decl1)))
7267 warning_at (loc, OPT_Wmissing_declarations,
7268 "no previous declaration for %qD",
7269 decl1);
7270 /* Optionally warn of any def with no previous declaration
7271 if the function has already been used. */
7272 else if (warn_missing_declarations
7273 && old_decl != 0
7274 && old_decl != error_mark_node
7275 && TREE_USED (old_decl)
7276 && C_DECL_IMPLICIT (old_decl))
7277 warning_at (loc, OPT_Wmissing_declarations,
7278 "%qD was used with no declaration before its definition", decl1);
7280 /* This function exists in static storage.
7281 (This does not mean `static' in the C sense!) */
7282 TREE_STATIC (decl1) = 1;
7284 /* A nested function is not global. */
7285 if (current_function_decl != 0)
7286 TREE_PUBLIC (decl1) = 0;
7288 /* This is the earliest point at which we might know the assembler
7289 name of the function. Thus, if it's set before this, die horribly. */
7290 gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl1));
7292 /* If #pragma weak was used, mark the decl weak now. */
7293 if (current_scope == file_scope)
7294 maybe_apply_pragma_weak (decl1);
7296 /* Warn for unlikely, improbable, or stupid declarations of `main'. */
7297 if (warn_main && MAIN_NAME_P (DECL_NAME (decl1)))
7299 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1)))
7300 != integer_type_node)
7301 pedwarn (loc, OPT_Wmain, "return type of %qD is not %<int%>", decl1);
7303 check_main_parameter_types (decl1);
7305 if (!TREE_PUBLIC (decl1))
7306 pedwarn (loc, OPT_Wmain,
7307 "%qD is normally a non-static function", decl1);
7310 /* Record the decl so that the function name is defined.
7311 If we already have a decl for this name, and it is a FUNCTION_DECL,
7312 use the old decl. */
7314 current_function_decl = pushdecl (decl1);
7316 push_scope ();
7317 declare_parm_level ();
7319 restype = TREE_TYPE (TREE_TYPE (current_function_decl));
7320 resdecl = build_decl (loc, RESULT_DECL, NULL_TREE, restype);
7321 DECL_ARTIFICIAL (resdecl) = 1;
7322 DECL_IGNORED_P (resdecl) = 1;
7323 DECL_RESULT (current_function_decl) = resdecl;
7325 start_fname_decls ();
7327 return 1;
7330 /* Subroutine of store_parm_decls which handles new-style function
7331 definitions (prototype format). The parms already have decls, so we
7332 need only record them as in effect and complain if any redundant
7333 old-style parm decls were written. */
7334 static void
7335 store_parm_decls_newstyle (tree fndecl, const struct c_arg_info *arg_info)
7337 tree decl;
7339 if (current_scope->bindings)
7341 error ("%Jold-style parameter declarations in prototyped "
7342 "function definition", fndecl);
7344 /* Get rid of the old-style declarations. */
7345 pop_scope ();
7346 push_scope ();
7348 /* Don't issue this warning for nested functions, and don't issue this
7349 warning if we got here because ARG_INFO_TYPES was error_mark_node
7350 (this happens when a function definition has just an ellipsis in
7351 its parameter list). */
7352 else if (!in_system_header && !current_function_scope
7353 && arg_info->types != error_mark_node)
7354 warning (OPT_Wtraditional,
7355 "%Jtraditional C rejects ISO C style function definitions",
7356 fndecl);
7358 /* Now make all the parameter declarations visible in the function body.
7359 We can bypass most of the grunt work of pushdecl. */
7360 for (decl = arg_info->parms; decl; decl = TREE_CHAIN (decl))
7362 DECL_CONTEXT (decl) = current_function_decl;
7363 if (DECL_NAME (decl))
7365 bind (DECL_NAME (decl), decl, current_scope,
7366 /*invisible=*/false, /*nested=*/false,
7367 UNKNOWN_LOCATION);
7368 if (!TREE_USED (decl))
7369 warn_if_shadowing (decl);
7371 else
7372 error ("%Jparameter name omitted", decl);
7375 /* Record the parameter list in the function declaration. */
7376 DECL_ARGUMENTS (fndecl) = arg_info->parms;
7378 /* Now make all the ancillary declarations visible, likewise. */
7379 for (decl = arg_info->others; decl; decl = TREE_CHAIN (decl))
7381 DECL_CONTEXT (decl) = current_function_decl;
7382 if (DECL_NAME (decl))
7383 bind (DECL_NAME (decl), decl, current_scope,
7384 /*invisible=*/false, /*nested=*/false, UNKNOWN_LOCATION);
7387 /* And all the tag declarations. */
7388 for (decl = arg_info->tags; decl; decl = TREE_CHAIN (decl))
7389 if (TREE_PURPOSE (decl))
7390 bind (TREE_PURPOSE (decl), TREE_VALUE (decl), current_scope,
7391 /*invisible=*/false, /*nested=*/false, UNKNOWN_LOCATION);
7394 /* Subroutine of store_parm_decls which handles old-style function
7395 definitions (separate parameter list and declarations). */
7397 static void
7398 store_parm_decls_oldstyle (tree fndecl, const struct c_arg_info *arg_info)
7400 struct c_binding *b;
7401 tree parm, decl, last;
7402 tree parmids = arg_info->parms;
7403 struct pointer_set_t *seen_args = pointer_set_create ();
7405 if (!in_system_header)
7406 warning_at (DECL_SOURCE_LOCATION (fndecl),
7407 OPT_Wold_style_definition, "old-style function definition");
7409 /* Match each formal parameter name with its declaration. Save each
7410 decl in the appropriate TREE_PURPOSE slot of the parmids chain. */
7411 for (parm = parmids; parm; parm = TREE_CHAIN (parm))
7413 if (TREE_VALUE (parm) == 0)
7415 error_at (DECL_SOURCE_LOCATION (fndecl),
7416 "parameter name missing from parameter list");
7417 TREE_PURPOSE (parm) = 0;
7418 continue;
7421 b = I_SYMBOL_BINDING (TREE_VALUE (parm));
7422 if (b && B_IN_CURRENT_SCOPE (b))
7424 decl = b->decl;
7425 /* If we got something other than a PARM_DECL it is an error. */
7426 if (TREE_CODE (decl) != PARM_DECL)
7427 error_at (DECL_SOURCE_LOCATION (decl),
7428 "%qD declared as a non-parameter", decl);
7429 /* If the declaration is already marked, we have a duplicate
7430 name. Complain and ignore the duplicate. */
7431 else if (pointer_set_contains (seen_args, decl))
7433 error_at (DECL_SOURCE_LOCATION (decl),
7434 "multiple parameters named %qD", decl);
7435 TREE_PURPOSE (parm) = 0;
7436 continue;
7438 /* If the declaration says "void", complain and turn it into
7439 an int. */
7440 else if (VOID_TYPE_P (TREE_TYPE (decl)))
7442 error_at (DECL_SOURCE_LOCATION (decl),
7443 "parameter %qD declared with void type", decl);
7444 TREE_TYPE (decl) = integer_type_node;
7445 DECL_ARG_TYPE (decl) = integer_type_node;
7446 layout_decl (decl, 0);
7448 warn_if_shadowing (decl);
7450 /* If no declaration found, default to int. */
7451 else
7453 /* FIXME diagnostics: This should be the location of the argument,
7454 not the FNDECL. E.g., for an old-style declaration
7456 int f10(v) { blah; }
7458 We should use the location of the V, not the F10.
7459 Unfortunately, the V is an IDENTIFIER_NODE which has no
7460 location. In the future we need locations for c_arg_info
7461 entries.
7463 See gcc.dg/Wshadow-3.c for an example of this problem. */
7464 decl = build_decl (DECL_SOURCE_LOCATION (fndecl),
7465 PARM_DECL, TREE_VALUE (parm), integer_type_node);
7466 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
7467 pushdecl (decl);
7468 warn_if_shadowing (decl);
7470 if (flag_isoc99)
7471 pedwarn (DECL_SOURCE_LOCATION (decl),
7472 0, "type of %qD defaults to %<int%>", decl);
7473 else
7474 warning_at (DECL_SOURCE_LOCATION (decl),
7475 OPT_Wmissing_parameter_type,
7476 "type of %qD defaults to %<int%>", decl);
7479 TREE_PURPOSE (parm) = decl;
7480 pointer_set_insert (seen_args, decl);
7483 /* Now examine the parms chain for incomplete declarations
7484 and declarations with no corresponding names. */
7486 for (b = current_scope->bindings; b; b = b->prev)
7488 parm = b->decl;
7489 if (TREE_CODE (parm) != PARM_DECL)
7490 continue;
7492 if (TREE_TYPE (parm) != error_mark_node
7493 && !COMPLETE_TYPE_P (TREE_TYPE (parm)))
7495 error_at (DECL_SOURCE_LOCATION (parm),
7496 "parameter %qD has incomplete type", parm);
7497 TREE_TYPE (parm) = error_mark_node;
7500 if (!pointer_set_contains (seen_args, parm))
7502 error_at (DECL_SOURCE_LOCATION (parm),
7503 "declaration for parameter %qD but no such parameter",
7504 parm);
7506 /* Pretend the parameter was not missing.
7507 This gets us to a standard state and minimizes
7508 further error messages. */
7509 parmids = chainon (parmids, tree_cons (parm, 0, 0));
7513 /* Chain the declarations together in the order of the list of
7514 names. Store that chain in the function decl, replacing the
7515 list of names. Update the current scope to match. */
7516 DECL_ARGUMENTS (fndecl) = 0;
7518 for (parm = parmids; parm; parm = TREE_CHAIN (parm))
7519 if (TREE_PURPOSE (parm))
7520 break;
7521 if (parm && TREE_PURPOSE (parm))
7523 last = TREE_PURPOSE (parm);
7524 DECL_ARGUMENTS (fndecl) = last;
7526 for (parm = TREE_CHAIN (parm); parm; parm = TREE_CHAIN (parm))
7527 if (TREE_PURPOSE (parm))
7529 TREE_CHAIN (last) = TREE_PURPOSE (parm);
7530 last = TREE_PURPOSE (parm);
7532 TREE_CHAIN (last) = 0;
7535 pointer_set_destroy (seen_args);
7537 /* If there was a previous prototype,
7538 set the DECL_ARG_TYPE of each argument according to
7539 the type previously specified, and report any mismatches. */
7541 if (current_function_prototype_arg_types)
7543 tree type;
7544 for (parm = DECL_ARGUMENTS (fndecl),
7545 type = current_function_prototype_arg_types;
7546 parm || (type && TREE_VALUE (type) != error_mark_node
7547 && (TYPE_MAIN_VARIANT (TREE_VALUE (type)) != void_type_node));
7548 parm = TREE_CHAIN (parm), type = TREE_CHAIN (type))
7550 if (parm == 0 || type == 0
7551 || TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
7553 if (current_function_prototype_built_in)
7554 warning_at (DECL_SOURCE_LOCATION (fndecl),
7555 0, "number of arguments doesn%'t match "
7556 "built-in prototype");
7557 else
7559 /* FIXME diagnostics: This should be the location of
7560 FNDECL, but there is bug when a prototype is
7561 declared inside function context, but defined
7562 outside of it (e.g., gcc.dg/pr15698-2.c). In
7563 which case FNDECL gets the location of the
7564 prototype, not the definition. */
7565 error_at (input_location,
7566 "number of arguments doesn%'t match prototype");
7568 error_at (current_function_prototype_locus,
7569 "prototype declaration");
7571 break;
7573 /* Type for passing arg must be consistent with that
7574 declared for the arg. ISO C says we take the unqualified
7575 type for parameters declared with qualified type. */
7576 if (TREE_TYPE (parm) != error_mark_node
7577 && TREE_TYPE (type) != error_mark_node
7578 && !comptypes (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (parm)),
7579 TYPE_MAIN_VARIANT (TREE_VALUE (type))))
7581 if (TYPE_MAIN_VARIANT (TREE_TYPE (parm))
7582 == TYPE_MAIN_VARIANT (TREE_VALUE (type)))
7584 /* Adjust argument to match prototype. E.g. a previous
7585 `int foo(float);' prototype causes
7586 `int foo(x) float x; {...}' to be treated like
7587 `int foo(float x) {...}'. This is particularly
7588 useful for argument types like uid_t. */
7589 DECL_ARG_TYPE (parm) = TREE_TYPE (parm);
7591 if (targetm.calls.promote_prototypes (TREE_TYPE (current_function_decl))
7592 && INTEGRAL_TYPE_P (TREE_TYPE (parm))
7593 && TYPE_PRECISION (TREE_TYPE (parm))
7594 < TYPE_PRECISION (integer_type_node))
7595 DECL_ARG_TYPE (parm) = integer_type_node;
7597 /* ??? Is it possible to get here with a
7598 built-in prototype or will it always have
7599 been diagnosed as conflicting with an
7600 old-style definition and discarded? */
7601 if (current_function_prototype_built_in)
7602 warning_at (DECL_SOURCE_LOCATION (parm),
7603 OPT_pedantic, "promoted argument %qD "
7604 "doesn%'t match built-in prototype", parm);
7605 else
7607 pedwarn (DECL_SOURCE_LOCATION (parm),
7608 OPT_pedantic, "promoted argument %qD "
7609 "doesn%'t match prototype", parm);
7610 pedwarn (current_function_prototype_locus, OPT_pedantic,
7611 "prototype declaration");
7614 else
7616 if (current_function_prototype_built_in)
7617 warning_at (DECL_SOURCE_LOCATION (parm),
7618 0, "argument %qD doesn%'t match "
7619 "built-in prototype", parm);
7620 else
7622 error_at (DECL_SOURCE_LOCATION (parm),
7623 "argument %qD doesn%'t match prototype", parm);
7624 error_at (current_function_prototype_locus,
7625 "prototype declaration");
7630 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = 0;
7633 /* Otherwise, create a prototype that would match. */
7635 else
7637 tree actual = 0, last = 0, type;
7639 for (parm = DECL_ARGUMENTS (fndecl); parm; parm = TREE_CHAIN (parm))
7641 type = tree_cons (NULL_TREE, DECL_ARG_TYPE (parm), NULL_TREE);
7642 if (last)
7643 TREE_CHAIN (last) = type;
7644 else
7645 actual = type;
7646 last = type;
7648 type = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
7649 if (last)
7650 TREE_CHAIN (last) = type;
7651 else
7652 actual = type;
7654 /* We are going to assign a new value for the TYPE_ACTUAL_ARG_TYPES
7655 of the type of this function, but we need to avoid having this
7656 affect the types of other similarly-typed functions, so we must
7657 first force the generation of an identical (but separate) type
7658 node for the relevant function type. The new node we create
7659 will be a variant of the main variant of the original function
7660 type. */
7662 TREE_TYPE (fndecl) = build_variant_type_copy (TREE_TYPE (fndecl));
7664 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = actual;
7668 /* Store parameter declarations passed in ARG_INFO into the current
7669 function declaration. */
7671 void
7672 store_parm_decls_from (struct c_arg_info *arg_info)
7674 current_function_arg_info = arg_info;
7675 store_parm_decls ();
7678 /* Store the parameter declarations into the current function declaration.
7679 This is called after parsing the parameter declarations, before
7680 digesting the body of the function.
7682 For an old-style definition, construct a prototype out of the old-style
7683 parameter declarations and inject it into the function's type. */
7685 void
7686 store_parm_decls (void)
7688 tree fndecl = current_function_decl;
7689 bool proto;
7691 /* The argument information block for FNDECL. */
7692 struct c_arg_info *arg_info = current_function_arg_info;
7693 current_function_arg_info = 0;
7695 /* True if this definition is written with a prototype. Note:
7696 despite C99 6.7.5.3p14, we can *not* treat an empty argument
7697 list in a function definition as equivalent to (void) -- an
7698 empty argument list specifies the function has no parameters,
7699 but only (void) sets up a prototype for future calls. */
7700 proto = arg_info->types != 0;
7702 if (proto)
7703 store_parm_decls_newstyle (fndecl, arg_info);
7704 else
7705 store_parm_decls_oldstyle (fndecl, arg_info);
7707 /* The next call to push_scope will be a function body. */
7709 next_is_function_body = true;
7711 /* Write a record describing this function definition to the prototypes
7712 file (if requested). */
7714 gen_aux_info_record (fndecl, 1, 0, proto);
7716 /* Initialize the RTL code for the function. */
7717 allocate_struct_function (fndecl, false);
7719 /* Begin the statement tree for this function. */
7720 DECL_SAVED_TREE (fndecl) = push_stmt_list ();
7722 /* ??? Insert the contents of the pending sizes list into the function
7723 to be evaluated. The only reason left to have this is
7724 void foo(int n, int array[n++])
7725 because we throw away the array type in favor of a pointer type, and
7726 thus won't naturally see the SAVE_EXPR containing the increment. All
7727 other pending sizes would be handled by gimplify_parameters. */
7729 tree t;
7730 for (t = nreverse (get_pending_sizes ()); t ; t = TREE_CHAIN (t))
7731 add_stmt (TREE_VALUE (t));
7734 /* Even though we're inside a function body, we still don't want to
7735 call expand_expr to calculate the size of a variable-sized array.
7736 We haven't necessarily assigned RTL to all variables yet, so it's
7737 not safe to try to expand expressions involving them. */
7738 cfun->dont_save_pending_sizes_p = 1;
7741 /* Emit diagnostics that require gimple input for detection. Operate on
7742 FNDECL and all its nested functions. */
7744 static void
7745 c_gimple_diagnostics_recursively (tree fndecl)
7747 struct cgraph_node *cgn;
7748 gimple_seq body = gimple_body (fndecl);
7750 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
7751 c_warn_unused_result (body);
7753 /* Notice when OpenMP structured block constraints are violated. */
7754 if (flag_openmp)
7755 diagnose_omp_structured_block_errors (fndecl);
7757 /* Finalize all nested functions now. */
7758 cgn = cgraph_node (fndecl);
7759 for (cgn = cgn->nested; cgn ; cgn = cgn->next_nested)
7760 c_gimple_diagnostics_recursively (cgn->decl);
7763 /* Finish up a function declaration and compile that function
7764 all the way to assembler language output. The free the storage
7765 for the function definition.
7767 This is called after parsing the body of the function definition. */
7769 void
7770 finish_function (void)
7772 tree fndecl = current_function_decl;
7774 if (TREE_CODE (fndecl) == FUNCTION_DECL
7775 && targetm.calls.promote_prototypes (TREE_TYPE (fndecl)))
7777 tree args = DECL_ARGUMENTS (fndecl);
7778 for (; args; args = TREE_CHAIN (args))
7780 tree type = TREE_TYPE (args);
7781 if (INTEGRAL_TYPE_P (type)
7782 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
7783 DECL_ARG_TYPE (args) = integer_type_node;
7787 if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node)
7788 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
7790 /* Must mark the RESULT_DECL as being in this function. */
7792 if (DECL_RESULT (fndecl) && DECL_RESULT (fndecl) != error_mark_node)
7793 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
7795 if (MAIN_NAME_P (DECL_NAME (fndecl)) && flag_hosted
7796 && TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (fndecl)))
7797 == integer_type_node && flag_isoc99)
7799 /* Hack. We don't want the middle-end to warn that this return
7800 is unreachable, so we mark its location as special. Using
7801 UNKNOWN_LOCATION has the problem that it gets clobbered in
7802 annotate_one_with_locus. A cleaner solution might be to
7803 ensure ! should_carry_locus_p (stmt), but that needs a flag.
7805 c_finish_return (BUILTINS_LOCATION, integer_zero_node, NULL_TREE);
7808 /* Tie off the statement tree for this function. */
7809 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
7811 finish_fname_decls ();
7813 /* Complain if there's just no return statement. */
7814 if (warn_return_type
7815 && TREE_CODE (TREE_TYPE (TREE_TYPE (fndecl))) != VOID_TYPE
7816 && !current_function_returns_value && !current_function_returns_null
7817 /* Don't complain if we are no-return. */
7818 && !current_function_returns_abnormally
7819 /* Don't warn for main(). */
7820 && !MAIN_NAME_P (DECL_NAME (fndecl))
7821 /* Or if they didn't actually specify a return type. */
7822 && !C_FUNCTION_IMPLICIT_INT (fndecl)
7823 /* Normally, with -Wreturn-type, flow will complain, but we might
7824 optimize out static functions. */
7825 && !TREE_PUBLIC (fndecl))
7827 warning (OPT_Wreturn_type,
7828 "no return statement in function returning non-void");
7829 TREE_NO_WARNING (fndecl) = 1;
7832 /* Store the end of the function, so that we get good line number
7833 info for the epilogue. */
7834 cfun->function_end_locus = input_location;
7836 /* Finalize the ELF visibility for the function. */
7837 c_determine_visibility (fndecl);
7839 /* For GNU C extern inline functions disregard inline limits. */
7840 if (DECL_EXTERNAL (fndecl)
7841 && DECL_DECLARED_INLINE_P (fndecl))
7842 DECL_DISREGARD_INLINE_LIMITS (fndecl) = 1;
7844 /* Genericize before inlining. Delay genericizing nested functions
7845 until their parent function is genericized. Since finalizing
7846 requires GENERIC, delay that as well. */
7848 if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node
7849 && !undef_nested_function)
7851 if (!decl_function_context (fndecl))
7853 c_genericize (fndecl);
7854 c_gimple_diagnostics_recursively (fndecl);
7856 /* ??? Objc emits functions after finalizing the compilation unit.
7857 This should be cleaned up later and this conditional removed. */
7858 if (cgraph_global_info_ready)
7860 cgraph_add_new_function (fndecl, false);
7861 return;
7863 cgraph_finalize_function (fndecl, false);
7865 else
7867 /* Register this function with cgraph just far enough to get it
7868 added to our parent's nested function list. Handy, since the
7869 C front end doesn't have such a list. */
7870 (void) cgraph_node (fndecl);
7874 if (!decl_function_context (fndecl))
7875 undef_nested_function = false;
7877 /* We're leaving the context of this function, so zap cfun.
7878 It's still in DECL_STRUCT_FUNCTION, and we'll restore it in
7879 tree_rest_of_compilation. */
7880 set_cfun (NULL);
7881 current_function_decl = NULL;
7884 /* Check the declarations given in a for-loop for satisfying the C99
7885 constraints. If exactly one such decl is found, return it. LOC is
7886 the location of the opening parenthesis of the for loop. */
7888 tree
7889 check_for_loop_decls (location_t loc)
7891 struct c_binding *b;
7892 tree one_decl = NULL_TREE;
7893 int n_decls = 0;
7895 if (!flag_isoc99)
7897 static bool hint = true;
7898 /* If we get here, declarations have been used in a for loop without
7899 the C99 for loop scope. This doesn't make much sense, so don't
7900 allow it. */
7901 error_at (loc, "%<for%> loop initial declarations "
7902 "are only allowed in C99 mode");
7903 if (hint)
7905 inform (loc,
7906 "use option -std=c99 or -std=gnu99 to compile your code");
7907 hint = false;
7909 return NULL_TREE;
7911 /* C99 subclause 6.8.5 paragraph 3:
7913 [#3] The declaration part of a for statement shall only
7914 declare identifiers for objects having storage class auto or
7915 register.
7917 It isn't clear whether, in this sentence, "identifiers" binds to
7918 "shall only declare" or to "objects" - that is, whether all identifiers
7919 declared must be identifiers for objects, or whether the restriction
7920 only applies to those that are. (A question on this in comp.std.c
7921 in November 2000 received no answer.) We implement the strictest
7922 interpretation, to avoid creating an extension which later causes
7923 problems. */
7925 for (b = current_scope->bindings; b; b = b->prev)
7927 tree id = b->id;
7928 tree decl = b->decl;
7930 if (!id)
7931 continue;
7933 switch (TREE_CODE (decl))
7935 case VAR_DECL:
7937 location_t decl_loc = DECL_SOURCE_LOCATION (decl);
7938 if (TREE_STATIC (decl))
7939 error_at (decl_loc,
7940 "declaration of static variable %qD in %<for%> loop "
7941 "initial declaration", decl);
7942 else if (DECL_EXTERNAL (decl))
7943 error_at (decl_loc,
7944 "declaration of %<extern%> variable %qD in %<for%> loop "
7945 "initial declaration", decl);
7947 break;
7949 case RECORD_TYPE:
7950 error_at (loc,
7951 "%<struct %E%> declared in %<for%> loop initial "
7952 "declaration", id);
7953 break;
7954 case UNION_TYPE:
7955 error_at (loc,
7956 "%<union %E%> declared in %<for%> loop initial declaration",
7957 id);
7958 break;
7959 case ENUMERAL_TYPE:
7960 error_at (loc, "%<enum %E%> declared in %<for%> loop "
7961 "initial declaration", id);
7962 break;
7963 default:
7964 error_at (loc, "declaration of non-variable "
7965 "%qD in %<for%> loop initial declaration", decl);
7968 n_decls++;
7969 one_decl = decl;
7972 return n_decls == 1 ? one_decl : NULL_TREE;
7975 /* Save and reinitialize the variables
7976 used during compilation of a C function. */
7978 void
7979 c_push_function_context (void)
7981 struct language_function *p;
7982 p = GGC_NEW (struct language_function);
7983 cfun->language = p;
7985 p->base.x_stmt_tree = c_stmt_tree;
7986 p->x_break_label = c_break_label;
7987 p->x_cont_label = c_cont_label;
7988 p->x_switch_stack = c_switch_stack;
7989 p->arg_info = current_function_arg_info;
7990 p->returns_value = current_function_returns_value;
7991 p->returns_null = current_function_returns_null;
7992 p->returns_abnormally = current_function_returns_abnormally;
7993 p->warn_about_return_type = warn_about_return_type;
7995 push_function_context ();
7998 /* Restore the variables used during compilation of a C function. */
8000 void
8001 c_pop_function_context (void)
8003 struct language_function *p;
8005 pop_function_context ();
8006 p = cfun->language;
8007 cfun->language = NULL;
8009 if (DECL_STRUCT_FUNCTION (current_function_decl) == 0
8010 && DECL_SAVED_TREE (current_function_decl) == NULL_TREE)
8012 /* Stop pointing to the local nodes about to be freed. */
8013 /* But DECL_INITIAL must remain nonzero so we know this
8014 was an actual function definition. */
8015 DECL_INITIAL (current_function_decl) = error_mark_node;
8016 DECL_ARGUMENTS (current_function_decl) = 0;
8019 c_stmt_tree = p->base.x_stmt_tree;
8020 c_break_label = p->x_break_label;
8021 c_cont_label = p->x_cont_label;
8022 c_switch_stack = p->x_switch_stack;
8023 current_function_arg_info = p->arg_info;
8024 current_function_returns_value = p->returns_value;
8025 current_function_returns_null = p->returns_null;
8026 current_function_returns_abnormally = p->returns_abnormally;
8027 warn_about_return_type = p->warn_about_return_type;
8030 /* Copy the DECL_LANG_SPECIFIC data associated with DECL. */
8032 void
8033 c_dup_lang_specific_decl (tree decl)
8035 struct lang_decl *ld;
8037 if (!DECL_LANG_SPECIFIC (decl))
8038 return;
8040 ld = GGC_NEW (struct lang_decl);
8041 memcpy (ld, DECL_LANG_SPECIFIC (decl), sizeof (struct lang_decl));
8042 DECL_LANG_SPECIFIC (decl) = ld;
8045 /* The functions below are required for functionality of doing
8046 function at once processing in the C front end. Currently these
8047 functions are not called from anywhere in the C front end, but as
8048 these changes continue, that will change. */
8050 /* Returns the stmt_tree (if any) to which statements are currently
8051 being added. If there is no active statement-tree, NULL is
8052 returned. */
8054 stmt_tree
8055 current_stmt_tree (void)
8057 return &c_stmt_tree;
8060 /* Return the global value of T as a symbol. */
8062 tree
8063 identifier_global_value (tree t)
8065 struct c_binding *b;
8067 for (b = I_SYMBOL_BINDING (t); b; b = b->shadowed)
8068 if (B_IN_FILE_SCOPE (b) || B_IN_EXTERNAL_SCOPE (b))
8069 return b->decl;
8071 return 0;
8074 /* Record a builtin type for C. If NAME is non-NULL, it is the name used;
8075 otherwise the name is found in ridpointers from RID_INDEX. */
8077 void
8078 record_builtin_type (enum rid rid_index, const char *name, tree type)
8080 tree id, decl;
8081 if (name == 0)
8082 id = ridpointers[(int) rid_index];
8083 else
8084 id = get_identifier (name);
8085 decl = build_decl (UNKNOWN_LOCATION, TYPE_DECL, id, type);
8086 pushdecl (decl);
8087 if (debug_hooks->type_decl)
8088 debug_hooks->type_decl (decl, false);
8091 /* Build the void_list_node (void_type_node having been created). */
8092 tree
8093 build_void_list_node (void)
8095 tree t = build_tree_list (NULL_TREE, void_type_node);
8096 return t;
8099 /* Return a c_parm structure with the given SPECS, ATTRS and DECLARATOR. */
8101 struct c_parm *
8102 build_c_parm (struct c_declspecs *specs, tree attrs,
8103 struct c_declarator *declarator)
8105 struct c_parm *ret = XOBNEW (&parser_obstack, struct c_parm);
8106 ret->specs = specs;
8107 ret->attrs = attrs;
8108 ret->declarator = declarator;
8109 return ret;
8112 /* Return a declarator with nested attributes. TARGET is the inner
8113 declarator to which these attributes apply. ATTRS are the
8114 attributes. */
8116 struct c_declarator *
8117 build_attrs_declarator (tree attrs, struct c_declarator *target)
8119 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
8120 ret->kind = cdk_attrs;
8121 ret->declarator = target;
8122 ret->u.attrs = attrs;
8123 return ret;
8126 /* Return a declarator for a function with arguments specified by ARGS
8127 and return type specified by TARGET. */
8129 struct c_declarator *
8130 build_function_declarator (struct c_arg_info *args,
8131 struct c_declarator *target)
8133 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
8134 ret->kind = cdk_function;
8135 ret->declarator = target;
8136 ret->u.arg_info = args;
8137 return ret;
8140 /* Return a declarator for the identifier IDENT (which may be
8141 NULL_TREE for an abstract declarator). */
8143 struct c_declarator *
8144 build_id_declarator (tree ident)
8146 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
8147 ret->kind = cdk_id;
8148 ret->declarator = 0;
8149 ret->u.id = ident;
8150 /* Default value - may get reset to a more precise location. */
8151 ret->id_loc = input_location;
8152 return ret;
8155 /* Return something to represent absolute declarators containing a *.
8156 TARGET is the absolute declarator that the * contains.
8157 TYPE_QUALS_ATTRS is a structure for type qualifiers and attributes
8158 to apply to the pointer type. */
8160 struct c_declarator *
8161 make_pointer_declarator (struct c_declspecs *type_quals_attrs,
8162 struct c_declarator *target)
8164 tree attrs;
8165 int quals = 0;
8166 struct c_declarator *itarget = target;
8167 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
8168 if (type_quals_attrs)
8170 attrs = type_quals_attrs->attrs;
8171 quals = quals_from_declspecs (type_quals_attrs);
8172 if (attrs != NULL_TREE)
8173 itarget = build_attrs_declarator (attrs, target);
8175 ret->kind = cdk_pointer;
8176 ret->declarator = itarget;
8177 ret->u.pointer_quals = quals;
8178 return ret;
8181 /* Return a pointer to a structure for an empty list of declaration
8182 specifiers. */
8184 struct c_declspecs *
8185 build_null_declspecs (void)
8187 struct c_declspecs *ret = XOBNEW (&parser_obstack, struct c_declspecs);
8188 ret->type = 0;
8189 ret->expr = 0;
8190 ret->decl_attr = 0;
8191 ret->attrs = 0;
8192 ret->typespec_word = cts_none;
8193 ret->storage_class = csc_none;
8194 ret->expr_const_operands = true;
8195 ret->declspecs_seen_p = false;
8196 ret->type_seen_p = false;
8197 ret->non_sc_seen_p = false;
8198 ret->typedef_p = false;
8199 ret->tag_defined_p = false;
8200 ret->explicit_signed_p = false;
8201 ret->deprecated_p = false;
8202 ret->default_int_p = false;
8203 ret->long_p = false;
8204 ret->long_long_p = false;
8205 ret->short_p = false;
8206 ret->signed_p = false;
8207 ret->unsigned_p = false;
8208 ret->complex_p = false;
8209 ret->inline_p = false;
8210 ret->thread_p = false;
8211 ret->const_p = false;
8212 ret->volatile_p = false;
8213 ret->restrict_p = false;
8214 ret->saturating_p = false;
8215 return ret;
8218 /* Add the type qualifier QUAL to the declaration specifiers SPECS,
8219 returning SPECS. */
8221 struct c_declspecs *
8222 declspecs_add_qual (struct c_declspecs *specs, tree qual)
8224 enum rid i;
8225 bool dupe = false;
8226 specs->non_sc_seen_p = true;
8227 specs->declspecs_seen_p = true;
8228 gcc_assert (TREE_CODE (qual) == IDENTIFIER_NODE
8229 && C_IS_RESERVED_WORD (qual));
8230 i = C_RID_CODE (qual);
8231 switch (i)
8233 case RID_CONST:
8234 dupe = specs->const_p;
8235 specs->const_p = true;
8236 break;
8237 case RID_VOLATILE:
8238 dupe = specs->volatile_p;
8239 specs->volatile_p = true;
8240 break;
8241 case RID_RESTRICT:
8242 dupe = specs->restrict_p;
8243 specs->restrict_p = true;
8244 break;
8245 default:
8246 gcc_unreachable ();
8248 if (dupe && !flag_isoc99)
8249 pedwarn (input_location, OPT_pedantic, "duplicate %qE", qual);
8250 return specs;
8253 /* Add the type specifier TYPE to the declaration specifiers SPECS,
8254 returning SPECS. */
8256 struct c_declspecs *
8257 declspecs_add_type (struct c_declspecs *specs, struct c_typespec spec)
8259 tree type = spec.spec;
8260 specs->non_sc_seen_p = true;
8261 specs->declspecs_seen_p = true;
8262 specs->type_seen_p = true;
8263 if (TREE_DEPRECATED (type))
8264 specs->deprecated_p = true;
8266 /* Handle type specifier keywords. */
8267 if (TREE_CODE (type) == IDENTIFIER_NODE
8268 && C_IS_RESERVED_WORD (type)
8269 && C_RID_CODE (type) != RID_CXX_COMPAT_WARN)
8271 enum rid i = C_RID_CODE (type);
8272 if (specs->type)
8274 error ("two or more data types in declaration specifiers");
8275 return specs;
8277 if ((int) i <= (int) RID_LAST_MODIFIER)
8279 /* "long", "short", "signed", "unsigned", "_Complex" or "_Sat". */
8280 bool dupe = false;
8281 switch (i)
8283 case RID_LONG:
8284 if (specs->long_long_p)
8286 error ("%<long long long%> is too long for GCC");
8287 break;
8289 if (specs->long_p)
8291 if (specs->typespec_word == cts_double)
8293 error ("both %<long long%> and %<double%> in "
8294 "declaration specifiers");
8295 break;
8297 pedwarn_c90 (input_location, OPT_Wlong_long,
8298 "ISO C90 does not support %<long long%>");
8299 specs->long_long_p = 1;
8300 break;
8302 if (specs->short_p)
8303 error ("both %<long%> and %<short%> in "
8304 "declaration specifiers");
8305 else if (specs->typespec_word == cts_void)
8306 error ("both %<long%> and %<void%> in "
8307 "declaration specifiers");
8308 else if (specs->typespec_word == cts_bool)
8309 error ("both %<long%> and %<_Bool%> in "
8310 "declaration specifiers");
8311 else if (specs->typespec_word == cts_char)
8312 error ("both %<long%> and %<char%> in "
8313 "declaration specifiers");
8314 else if (specs->typespec_word == cts_float)
8315 error ("both %<long%> and %<float%> in "
8316 "declaration specifiers");
8317 else if (specs->typespec_word == cts_dfloat32)
8318 error ("both %<long%> and %<_Decimal32%> in "
8319 "declaration specifiers");
8320 else if (specs->typespec_word == cts_dfloat64)
8321 error ("both %<long%> and %<_Decimal64%> in "
8322 "declaration specifiers");
8323 else if (specs->typespec_word == cts_dfloat128)
8324 error ("both %<long%> and %<_Decimal128%> in "
8325 "declaration specifiers");
8326 else
8327 specs->long_p = true;
8328 break;
8329 case RID_SHORT:
8330 dupe = specs->short_p;
8331 if (specs->long_p)
8332 error ("both %<long%> and %<short%> in "
8333 "declaration specifiers");
8334 else if (specs->typespec_word == cts_void)
8335 error ("both %<short%> and %<void%> in "
8336 "declaration specifiers");
8337 else if (specs->typespec_word == cts_bool)
8338 error ("both %<short%> and %<_Bool%> in "
8339 "declaration specifiers");
8340 else if (specs->typespec_word == cts_char)
8341 error ("both %<short%> and %<char%> in "
8342 "declaration specifiers");
8343 else if (specs->typespec_word == cts_float)
8344 error ("both %<short%> and %<float%> in "
8345 "declaration specifiers");
8346 else if (specs->typespec_word == cts_double)
8347 error ("both %<short%> and %<double%> in "
8348 "declaration specifiers");
8349 else if (specs->typespec_word == cts_dfloat32)
8350 error ("both %<short%> and %<_Decimal32%> in "
8351 "declaration specifiers");
8352 else if (specs->typespec_word == cts_dfloat64)
8353 error ("both %<short%> and %<_Decimal64%> in "
8354 "declaration specifiers");
8355 else if (specs->typespec_word == cts_dfloat128)
8356 error ("both %<short%> and %<_Decimal128%> in "
8357 "declaration specifiers");
8358 else
8359 specs->short_p = true;
8360 break;
8361 case RID_SIGNED:
8362 dupe = specs->signed_p;
8363 if (specs->unsigned_p)
8364 error ("both %<signed%> and %<unsigned%> in "
8365 "declaration specifiers");
8366 else if (specs->typespec_word == cts_void)
8367 error ("both %<signed%> and %<void%> in "
8368 "declaration specifiers");
8369 else if (specs->typespec_word == cts_bool)
8370 error ("both %<signed%> and %<_Bool%> in "
8371 "declaration specifiers");
8372 else if (specs->typespec_word == cts_float)
8373 error ("both %<signed%> and %<float%> in "
8374 "declaration specifiers");
8375 else if (specs->typespec_word == cts_double)
8376 error ("both %<signed%> and %<double%> in "
8377 "declaration specifiers");
8378 else if (specs->typespec_word == cts_dfloat32)
8379 error ("both %<signed%> and %<_Decimal32%> in "
8380 "declaration specifiers");
8381 else if (specs->typespec_word == cts_dfloat64)
8382 error ("both %<signed%> and %<_Decimal64%> in "
8383 "declaration specifiers");
8384 else if (specs->typespec_word == cts_dfloat128)
8385 error ("both %<signed%> and %<_Decimal128%> in "
8386 "declaration specifiers");
8387 else
8388 specs->signed_p = true;
8389 break;
8390 case RID_UNSIGNED:
8391 dupe = specs->unsigned_p;
8392 if (specs->signed_p)
8393 error ("both %<signed%> and %<unsigned%> in "
8394 "declaration specifiers");
8395 else if (specs->typespec_word == cts_void)
8396 error ("both %<unsigned%> and %<void%> in "
8397 "declaration specifiers");
8398 else if (specs->typespec_word == cts_bool)
8399 error ("both %<unsigned%> and %<_Bool%> in "
8400 "declaration specifiers");
8401 else if (specs->typespec_word == cts_float)
8402 error ("both %<unsigned%> and %<float%> in "
8403 "declaration specifiers");
8404 else if (specs->typespec_word == cts_double)
8405 error ("both %<unsigned%> and %<double%> in "
8406 "declaration specifiers");
8407 else if (specs->typespec_word == cts_dfloat32)
8408 error ("both %<unsigned%> and %<_Decimal32%> in "
8409 "declaration specifiers");
8410 else if (specs->typespec_word == cts_dfloat64)
8411 error ("both %<unsigned%> and %<_Decimal64%> in "
8412 "declaration specifiers");
8413 else if (specs->typespec_word == cts_dfloat128)
8414 error ("both %<unsigned%> and %<_Decimal128%> in "
8415 "declaration specifiers");
8416 else
8417 specs->unsigned_p = true;
8418 break;
8419 case RID_COMPLEX:
8420 dupe = specs->complex_p;
8421 if (!flag_isoc99 && !in_system_header)
8422 pedwarn (input_location, OPT_pedantic, "ISO C90 does not support complex types");
8423 if (specs->typespec_word == cts_void)
8424 error ("both %<complex%> and %<void%> in "
8425 "declaration specifiers");
8426 else if (specs->typespec_word == cts_bool)
8427 error ("both %<complex%> and %<_Bool%> in "
8428 "declaration specifiers");
8429 else if (specs->typespec_word == cts_dfloat32)
8430 error ("both %<complex%> and %<_Decimal32%> in "
8431 "declaration specifiers");
8432 else if (specs->typespec_word == cts_dfloat64)
8433 error ("both %<complex%> and %<_Decimal64%> in "
8434 "declaration specifiers");
8435 else if (specs->typespec_word == cts_dfloat128)
8436 error ("both %<complex%> and %<_Decimal128%> in "
8437 "declaration specifiers");
8438 else if (specs->typespec_word == cts_fract)
8439 error ("both %<complex%> and %<_Fract%> in "
8440 "declaration specifiers");
8441 else if (specs->typespec_word == cts_accum)
8442 error ("both %<complex%> and %<_Accum%> in "
8443 "declaration specifiers");
8444 else if (specs->saturating_p)
8445 error ("both %<complex%> and %<_Sat%> in "
8446 "declaration specifiers");
8447 else
8448 specs->complex_p = true;
8449 break;
8450 case RID_SAT:
8451 dupe = specs->saturating_p;
8452 pedwarn (input_location, OPT_pedantic, "ISO C does not support saturating types");
8453 if (specs->typespec_word == cts_void)
8454 error ("both %<_Sat%> and %<void%> in "
8455 "declaration specifiers");
8456 else if (specs->typespec_word == cts_bool)
8457 error ("both %<_Sat%> and %<_Bool%> in "
8458 "declaration specifiers");
8459 else if (specs->typespec_word == cts_char)
8460 error ("both %<_Sat%> and %<char%> in "
8461 "declaration specifiers");
8462 else if (specs->typespec_word == cts_int)
8463 error ("both %<_Sat%> and %<int%> in "
8464 "declaration specifiers");
8465 else if (specs->typespec_word == cts_float)
8466 error ("both %<_Sat%> and %<float%> in "
8467 "declaration specifiers");
8468 else if (specs->typespec_word == cts_double)
8469 error ("both %<_Sat%> and %<double%> in "
8470 "declaration specifiers");
8471 else if (specs->typespec_word == cts_dfloat32)
8472 error ("both %<_Sat%> and %<_Decimal32%> in "
8473 "declaration specifiers");
8474 else if (specs->typespec_word == cts_dfloat64)
8475 error ("both %<_Sat%> and %<_Decimal64%> in "
8476 "declaration specifiers");
8477 else if (specs->typespec_word == cts_dfloat128)
8478 error ("both %<_Sat%> and %<_Decimal128%> in "
8479 "declaration specifiers");
8480 else if (specs->complex_p)
8481 error ("both %<_Sat%> and %<complex%> in "
8482 "declaration specifiers");
8483 else
8484 specs->saturating_p = true;
8485 break;
8486 default:
8487 gcc_unreachable ();
8490 if (dupe)
8491 error ("duplicate %qE", type);
8493 return specs;
8495 else
8497 /* "void", "_Bool", "char", "int", "float", "double", "_Decimal32",
8498 "_Decimal64", "_Decimal128", "_Fract" or "_Accum". */
8499 if (specs->typespec_word != cts_none)
8501 error ("two or more data types in declaration specifiers");
8502 return specs;
8504 switch (i)
8506 case RID_VOID:
8507 if (specs->long_p)
8508 error ("both %<long%> and %<void%> in "
8509 "declaration specifiers");
8510 else if (specs->short_p)
8511 error ("both %<short%> and %<void%> in "
8512 "declaration specifiers");
8513 else if (specs->signed_p)
8514 error ("both %<signed%> and %<void%> in "
8515 "declaration specifiers");
8516 else if (specs->unsigned_p)
8517 error ("both %<unsigned%> and %<void%> in "
8518 "declaration specifiers");
8519 else if (specs->complex_p)
8520 error ("both %<complex%> and %<void%> in "
8521 "declaration specifiers");
8522 else if (specs->saturating_p)
8523 error ("both %<_Sat%> and %<void%> in "
8524 "declaration specifiers");
8525 else
8526 specs->typespec_word = cts_void;
8527 return specs;
8528 case RID_BOOL:
8529 if (specs->long_p)
8530 error ("both %<long%> and %<_Bool%> in "
8531 "declaration specifiers");
8532 else if (specs->short_p)
8533 error ("both %<short%> and %<_Bool%> in "
8534 "declaration specifiers");
8535 else if (specs->signed_p)
8536 error ("both %<signed%> and %<_Bool%> in "
8537 "declaration specifiers");
8538 else if (specs->unsigned_p)
8539 error ("both %<unsigned%> and %<_Bool%> in "
8540 "declaration specifiers");
8541 else if (specs->complex_p)
8542 error ("both %<complex%> and %<_Bool%> in "
8543 "declaration specifiers");
8544 else if (specs->saturating_p)
8545 error ("both %<_Sat%> and %<_Bool%> in "
8546 "declaration specifiers");
8547 else
8548 specs->typespec_word = cts_bool;
8549 return specs;
8550 case RID_CHAR:
8551 if (specs->long_p)
8552 error ("both %<long%> and %<char%> in "
8553 "declaration specifiers");
8554 else if (specs->short_p)
8555 error ("both %<short%> and %<char%> in "
8556 "declaration specifiers");
8557 else if (specs->saturating_p)
8558 error ("both %<_Sat%> and %<char%> in "
8559 "declaration specifiers");
8560 else
8561 specs->typespec_word = cts_char;
8562 return specs;
8563 case RID_INT:
8564 if (specs->saturating_p)
8565 error ("both %<_Sat%> and %<int%> in "
8566 "declaration specifiers");
8567 else
8568 specs->typespec_word = cts_int;
8569 return specs;
8570 case RID_FLOAT:
8571 if (specs->long_p)
8572 error ("both %<long%> and %<float%> in "
8573 "declaration specifiers");
8574 else if (specs->short_p)
8575 error ("both %<short%> and %<float%> in "
8576 "declaration specifiers");
8577 else if (specs->signed_p)
8578 error ("both %<signed%> and %<float%> in "
8579 "declaration specifiers");
8580 else if (specs->unsigned_p)
8581 error ("both %<unsigned%> and %<float%> in "
8582 "declaration specifiers");
8583 else if (specs->saturating_p)
8584 error ("both %<_Sat%> and %<float%> in "
8585 "declaration specifiers");
8586 else
8587 specs->typespec_word = cts_float;
8588 return specs;
8589 case RID_DOUBLE:
8590 if (specs->long_long_p)
8591 error ("both %<long long%> and %<double%> in "
8592 "declaration specifiers");
8593 else if (specs->short_p)
8594 error ("both %<short%> and %<double%> in "
8595 "declaration specifiers");
8596 else if (specs->signed_p)
8597 error ("both %<signed%> and %<double%> in "
8598 "declaration specifiers");
8599 else if (specs->unsigned_p)
8600 error ("both %<unsigned%> and %<double%> in "
8601 "declaration specifiers");
8602 else if (specs->saturating_p)
8603 error ("both %<_Sat%> and %<double%> in "
8604 "declaration specifiers");
8605 else
8606 specs->typespec_word = cts_double;
8607 return specs;
8608 case RID_DFLOAT32:
8609 case RID_DFLOAT64:
8610 case RID_DFLOAT128:
8612 const char *str;
8613 if (i == RID_DFLOAT32)
8614 str = "_Decimal32";
8615 else if (i == RID_DFLOAT64)
8616 str = "_Decimal64";
8617 else
8618 str = "_Decimal128";
8619 if (specs->long_long_p)
8620 error ("both %<long long%> and %<%s%> in "
8621 "declaration specifiers", str);
8622 if (specs->long_p)
8623 error ("both %<long%> and %<%s%> in "
8624 "declaration specifiers", str);
8625 else if (specs->short_p)
8626 error ("both %<short%> and %<%s%> in "
8627 "declaration specifiers", str);
8628 else if (specs->signed_p)
8629 error ("both %<signed%> and %<%s%> in "
8630 "declaration specifiers", str);
8631 else if (specs->unsigned_p)
8632 error ("both %<unsigned%> and %<%s%> in "
8633 "declaration specifiers", str);
8634 else if (specs->complex_p)
8635 error ("both %<complex%> and %<%s%> in "
8636 "declaration specifiers", str);
8637 else if (specs->saturating_p)
8638 error ("both %<_Sat%> and %<%s%> in "
8639 "declaration specifiers", str);
8640 else if (i == RID_DFLOAT32)
8641 specs->typespec_word = cts_dfloat32;
8642 else if (i == RID_DFLOAT64)
8643 specs->typespec_word = cts_dfloat64;
8644 else
8645 specs->typespec_word = cts_dfloat128;
8647 if (!targetm.decimal_float_supported_p ())
8648 error ("decimal floating point not supported for this target");
8649 pedwarn (input_location, OPT_pedantic,
8650 "ISO C does not support decimal floating point");
8651 return specs;
8652 case RID_FRACT:
8653 case RID_ACCUM:
8655 const char *str;
8656 if (i == RID_FRACT)
8657 str = "_Fract";
8658 else
8659 str = "_Accum";
8660 if (specs->complex_p)
8661 error ("both %<complex%> and %<%s%> in "
8662 "declaration specifiers", str);
8663 else if (i == RID_FRACT)
8664 specs->typespec_word = cts_fract;
8665 else
8666 specs->typespec_word = cts_accum;
8668 if (!targetm.fixed_point_supported_p ())
8669 error ("fixed-point types not supported for this target");
8670 pedwarn (input_location, OPT_pedantic,
8671 "ISO C does not support fixed-point types");
8672 return specs;
8673 default:
8674 /* ObjC reserved word "id", handled below. */
8675 break;
8680 /* Now we have a typedef (a TYPE_DECL node), an identifier (some
8681 form of ObjC type, cases such as "int" and "long" being handled
8682 above), a TYPE (struct, union, enum and typeof specifiers) or an
8683 ERROR_MARK. In none of these cases may there have previously
8684 been any type specifiers. */
8685 if (specs->type || specs->typespec_word != cts_none
8686 || specs->long_p || specs->short_p || specs->signed_p
8687 || specs->unsigned_p || specs->complex_p)
8688 error ("two or more data types in declaration specifiers");
8689 else if (TREE_CODE (type) == TYPE_DECL)
8691 if (TREE_TYPE (type) == error_mark_node)
8692 ; /* Allow the type to default to int to avoid cascading errors. */
8693 else
8695 specs->type = TREE_TYPE (type);
8696 specs->decl_attr = DECL_ATTRIBUTES (type);
8697 specs->typedef_p = true;
8698 specs->explicit_signed_p = C_TYPEDEF_EXPLICITLY_SIGNED (type);
8701 else if (TREE_CODE (type) == IDENTIFIER_NODE)
8703 tree t = lookup_name (type);
8704 if (!t || TREE_CODE (t) != TYPE_DECL)
8705 error ("%qE fails to be a typedef or built in type", type);
8706 else if (TREE_TYPE (t) == error_mark_node)
8708 else
8709 specs->type = TREE_TYPE (t);
8711 else if (TREE_CODE (type) != ERROR_MARK)
8713 if (spec.kind == ctsk_tagdef || spec.kind == ctsk_tagfirstref)
8714 specs->tag_defined_p = true;
8715 if (spec.kind == ctsk_typeof)
8717 specs->typedef_p = true;
8718 if (spec.expr)
8720 if (specs->expr)
8721 specs->expr = build2 (COMPOUND_EXPR, TREE_TYPE (spec.expr),
8722 specs->expr, spec.expr);
8723 else
8724 specs->expr = spec.expr;
8725 specs->expr_const_operands &= spec.expr_const_operands;
8728 specs->type = type;
8731 return specs;
8734 /* Add the storage class specifier or function specifier SCSPEC to the
8735 declaration specifiers SPECS, returning SPECS. */
8737 struct c_declspecs *
8738 declspecs_add_scspec (struct c_declspecs *specs, tree scspec)
8740 enum rid i;
8741 enum c_storage_class n = csc_none;
8742 bool dupe = false;
8743 specs->declspecs_seen_p = true;
8744 gcc_assert (TREE_CODE (scspec) == IDENTIFIER_NODE
8745 && C_IS_RESERVED_WORD (scspec));
8746 i = C_RID_CODE (scspec);
8747 if (specs->non_sc_seen_p)
8748 warning (OPT_Wold_style_declaration,
8749 "%qE is not at beginning of declaration", scspec);
8750 switch (i)
8752 case RID_INLINE:
8753 /* C99 permits duplicate inline. Although of doubtful utility,
8754 it seems simplest to permit it in gnu89 mode as well, as
8755 there is also little utility in maintaining this as a
8756 difference between gnu89 and C99 inline. */
8757 dupe = false;
8758 specs->inline_p = true;
8759 break;
8760 case RID_THREAD:
8761 dupe = specs->thread_p;
8762 if (specs->storage_class == csc_auto)
8763 error ("%<__thread%> used with %<auto%>");
8764 else if (specs->storage_class == csc_register)
8765 error ("%<__thread%> used with %<register%>");
8766 else if (specs->storage_class == csc_typedef)
8767 error ("%<__thread%> used with %<typedef%>");
8768 else
8769 specs->thread_p = true;
8770 break;
8771 case RID_AUTO:
8772 n = csc_auto;
8773 break;
8774 case RID_EXTERN:
8775 n = csc_extern;
8776 /* Diagnose "__thread extern". */
8777 if (specs->thread_p)
8778 error ("%<__thread%> before %<extern%>");
8779 break;
8780 case RID_REGISTER:
8781 n = csc_register;
8782 break;
8783 case RID_STATIC:
8784 n = csc_static;
8785 /* Diagnose "__thread static". */
8786 if (specs->thread_p)
8787 error ("%<__thread%> before %<static%>");
8788 break;
8789 case RID_TYPEDEF:
8790 n = csc_typedef;
8791 break;
8792 default:
8793 gcc_unreachable ();
8795 if (n != csc_none && n == specs->storage_class)
8796 dupe = true;
8797 if (dupe)
8798 error ("duplicate %qE", scspec);
8799 if (n != csc_none)
8801 if (specs->storage_class != csc_none && n != specs->storage_class)
8803 error ("multiple storage classes in declaration specifiers");
8805 else
8807 specs->storage_class = n;
8808 if (n != csc_extern && n != csc_static && specs->thread_p)
8810 error ("%<__thread%> used with %qE", scspec);
8811 specs->thread_p = false;
8815 return specs;
8818 /* Add the attributes ATTRS to the declaration specifiers SPECS,
8819 returning SPECS. */
8821 struct c_declspecs *
8822 declspecs_add_attrs (struct c_declspecs *specs, tree attrs)
8824 specs->attrs = chainon (attrs, specs->attrs);
8825 specs->declspecs_seen_p = true;
8826 return specs;
8829 /* Combine "long", "short", "signed", "unsigned" and "_Complex" type
8830 specifiers with any other type specifier to determine the resulting
8831 type. This is where ISO C checks on complex types are made, since
8832 "_Complex long" is a prefix of the valid ISO C type "_Complex long
8833 double". */
8835 struct c_declspecs *
8836 finish_declspecs (struct c_declspecs *specs)
8838 /* If a type was specified as a whole, we have no modifiers and are
8839 done. */
8840 if (specs->type != NULL_TREE)
8842 gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
8843 && !specs->signed_p && !specs->unsigned_p
8844 && !specs->complex_p);
8845 return specs;
8848 /* If none of "void", "_Bool", "char", "int", "float" or "double"
8849 has been specified, treat it as "int" unless "_Complex" is
8850 present and there are no other specifiers. If we just have
8851 "_Complex", it is equivalent to "_Complex double", but e.g.
8852 "_Complex short" is equivalent to "_Complex short int". */
8853 if (specs->typespec_word == cts_none)
8855 if (specs->saturating_p)
8857 error ("%<_Sat%> is used without %<_Fract%> or %<_Accum%>");
8858 if (!targetm.fixed_point_supported_p ())
8859 error ("fixed-point types not supported for this target");
8860 specs->typespec_word = cts_fract;
8862 else if (specs->long_p || specs->short_p
8863 || specs->signed_p || specs->unsigned_p)
8865 specs->typespec_word = cts_int;
8867 else if (specs->complex_p)
8869 specs->typespec_word = cts_double;
8870 pedwarn (input_location, OPT_pedantic,
8871 "ISO C does not support plain %<complex%> meaning "
8872 "%<double complex%>");
8874 else
8876 specs->typespec_word = cts_int;
8877 specs->default_int_p = true;
8878 /* We don't diagnose this here because grokdeclarator will
8879 give more specific diagnostics according to whether it is
8880 a function definition. */
8884 /* If "signed" was specified, record this to distinguish "int" and
8885 "signed int" in the case of a bit-field with
8886 -funsigned-bitfields. */
8887 specs->explicit_signed_p = specs->signed_p;
8889 /* Now compute the actual type. */
8890 switch (specs->typespec_word)
8892 case cts_void:
8893 gcc_assert (!specs->long_p && !specs->short_p
8894 && !specs->signed_p && !specs->unsigned_p
8895 && !specs->complex_p);
8896 specs->type = void_type_node;
8897 break;
8898 case cts_bool:
8899 gcc_assert (!specs->long_p && !specs->short_p
8900 && !specs->signed_p && !specs->unsigned_p
8901 && !specs->complex_p);
8902 specs->type = boolean_type_node;
8903 break;
8904 case cts_char:
8905 gcc_assert (!specs->long_p && !specs->short_p);
8906 gcc_assert (!(specs->signed_p && specs->unsigned_p));
8907 if (specs->signed_p)
8908 specs->type = signed_char_type_node;
8909 else if (specs->unsigned_p)
8910 specs->type = unsigned_char_type_node;
8911 else
8912 specs->type = char_type_node;
8913 if (specs->complex_p)
8915 pedwarn (input_location, OPT_pedantic,
8916 "ISO C does not support complex integer types");
8917 specs->type = build_complex_type (specs->type);
8919 break;
8920 case cts_int:
8921 gcc_assert (!(specs->long_p && specs->short_p));
8922 gcc_assert (!(specs->signed_p && specs->unsigned_p));
8923 if (specs->long_long_p)
8924 specs->type = (specs->unsigned_p
8925 ? long_long_unsigned_type_node
8926 : long_long_integer_type_node);
8927 else if (specs->long_p)
8928 specs->type = (specs->unsigned_p
8929 ? long_unsigned_type_node
8930 : long_integer_type_node);
8931 else if (specs->short_p)
8932 specs->type = (specs->unsigned_p
8933 ? short_unsigned_type_node
8934 : short_integer_type_node);
8935 else
8936 specs->type = (specs->unsigned_p
8937 ? unsigned_type_node
8938 : integer_type_node);
8939 if (specs->complex_p)
8941 pedwarn (input_location, OPT_pedantic,
8942 "ISO C does not support complex integer types");
8943 specs->type = build_complex_type (specs->type);
8945 break;
8946 case cts_float:
8947 gcc_assert (!specs->long_p && !specs->short_p
8948 && !specs->signed_p && !specs->unsigned_p);
8949 specs->type = (specs->complex_p
8950 ? complex_float_type_node
8951 : float_type_node);
8952 break;
8953 case cts_double:
8954 gcc_assert (!specs->long_long_p && !specs->short_p
8955 && !specs->signed_p && !specs->unsigned_p);
8956 if (specs->long_p)
8958 specs->type = (specs->complex_p
8959 ? complex_long_double_type_node
8960 : long_double_type_node);
8962 else
8964 specs->type = (specs->complex_p
8965 ? complex_double_type_node
8966 : double_type_node);
8968 break;
8969 case cts_dfloat32:
8970 case cts_dfloat64:
8971 case cts_dfloat128:
8972 gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
8973 && !specs->signed_p && !specs->unsigned_p && !specs->complex_p);
8974 if (specs->typespec_word == cts_dfloat32)
8975 specs->type = dfloat32_type_node;
8976 else if (specs->typespec_word == cts_dfloat64)
8977 specs->type = dfloat64_type_node;
8978 else
8979 specs->type = dfloat128_type_node;
8980 break;
8981 case cts_fract:
8982 gcc_assert (!specs->complex_p);
8983 if (!targetm.fixed_point_supported_p ())
8984 specs->type = integer_type_node;
8985 else if (specs->saturating_p)
8987 if (specs->long_long_p)
8988 specs->type = specs->unsigned_p
8989 ? sat_unsigned_long_long_fract_type_node
8990 : sat_long_long_fract_type_node;
8991 else if (specs->long_p)
8992 specs->type = specs->unsigned_p
8993 ? sat_unsigned_long_fract_type_node
8994 : sat_long_fract_type_node;
8995 else if (specs->short_p)
8996 specs->type = specs->unsigned_p
8997 ? sat_unsigned_short_fract_type_node
8998 : sat_short_fract_type_node;
8999 else
9000 specs->type = specs->unsigned_p
9001 ? sat_unsigned_fract_type_node
9002 : sat_fract_type_node;
9004 else
9006 if (specs->long_long_p)
9007 specs->type = specs->unsigned_p
9008 ? unsigned_long_long_fract_type_node
9009 : long_long_fract_type_node;
9010 else if (specs->long_p)
9011 specs->type = specs->unsigned_p
9012 ? unsigned_long_fract_type_node
9013 : long_fract_type_node;
9014 else if (specs->short_p)
9015 specs->type = specs->unsigned_p
9016 ? unsigned_short_fract_type_node
9017 : short_fract_type_node;
9018 else
9019 specs->type = specs->unsigned_p
9020 ? unsigned_fract_type_node
9021 : fract_type_node;
9023 break;
9024 case cts_accum:
9025 gcc_assert (!specs->complex_p);
9026 if (!targetm.fixed_point_supported_p ())
9027 specs->type = integer_type_node;
9028 else if (specs->saturating_p)
9030 if (specs->long_long_p)
9031 specs->type = specs->unsigned_p
9032 ? sat_unsigned_long_long_accum_type_node
9033 : sat_long_long_accum_type_node;
9034 else if (specs->long_p)
9035 specs->type = specs->unsigned_p
9036 ? sat_unsigned_long_accum_type_node
9037 : sat_long_accum_type_node;
9038 else if (specs->short_p)
9039 specs->type = specs->unsigned_p
9040 ? sat_unsigned_short_accum_type_node
9041 : sat_short_accum_type_node;
9042 else
9043 specs->type = specs->unsigned_p
9044 ? sat_unsigned_accum_type_node
9045 : sat_accum_type_node;
9047 else
9049 if (specs->long_long_p)
9050 specs->type = specs->unsigned_p
9051 ? unsigned_long_long_accum_type_node
9052 : long_long_accum_type_node;
9053 else if (specs->long_p)
9054 specs->type = specs->unsigned_p
9055 ? unsigned_long_accum_type_node
9056 : long_accum_type_node;
9057 else if (specs->short_p)
9058 specs->type = specs->unsigned_p
9059 ? unsigned_short_accum_type_node
9060 : short_accum_type_node;
9061 else
9062 specs->type = specs->unsigned_p
9063 ? unsigned_accum_type_node
9064 : accum_type_node;
9066 break;
9067 default:
9068 gcc_unreachable ();
9071 return specs;
9074 /* A subroutine of c_write_global_declarations. Perform final processing
9075 on one file scope's declarations (or the external scope's declarations),
9076 GLOBALS. */
9078 static void
9079 c_write_global_declarations_1 (tree globals)
9081 tree decl;
9082 bool reconsider;
9084 /* Process the decls in the order they were written. */
9085 for (decl = globals; decl; decl = TREE_CHAIN (decl))
9087 /* Check for used but undefined static functions using the C
9088 standard's definition of "used", and set TREE_NO_WARNING so
9089 that check_global_declarations doesn't repeat the check. */
9090 if (TREE_CODE (decl) == FUNCTION_DECL
9091 && DECL_INITIAL (decl) == 0
9092 && DECL_EXTERNAL (decl)
9093 && !TREE_PUBLIC (decl)
9094 && C_DECL_USED (decl))
9096 pedwarn (input_location, 0, "%q+F used but never defined", decl);
9097 TREE_NO_WARNING (decl) = 1;
9100 wrapup_global_declaration_1 (decl);
9105 reconsider = false;
9106 for (decl = globals; decl; decl = TREE_CHAIN (decl))
9107 reconsider |= wrapup_global_declaration_2 (decl);
9109 while (reconsider);
9111 for (decl = globals; decl; decl = TREE_CHAIN (decl))
9112 check_global_declaration_1 (decl);
9115 /* A subroutine of c_write_global_declarations Emit debug information for each
9116 of the declarations in GLOBALS. */
9118 static void
9119 c_write_global_declarations_2 (tree globals)
9121 tree decl;
9123 for (decl = globals; decl ; decl = TREE_CHAIN (decl))
9124 debug_hooks->global_decl (decl);
9127 /* Preserve the external declarations scope across a garbage collect. */
9128 static GTY(()) tree ext_block;
9130 void
9131 c_write_global_declarations (void)
9133 tree t;
9135 /* We don't want to do this if generating a PCH. */
9136 if (pch_file)
9137 return;
9139 /* Don't waste time on further processing if -fsyntax-only or we've
9140 encountered errors. */
9141 if (flag_syntax_only || errorcount || sorrycount)
9142 return;
9144 /* Close the external scope. */
9145 ext_block = pop_scope ();
9146 external_scope = 0;
9147 gcc_assert (!current_scope);
9149 if (ext_block)
9151 tree tmp = BLOCK_VARS (ext_block);
9152 int flags;
9153 FILE * stream = dump_begin (TDI_tu, &flags);
9154 if (stream && tmp)
9156 dump_node (tmp, flags & ~TDF_SLIM, stream);
9157 dump_end (TDI_tu, stream);
9161 /* Process all file scopes in this compilation, and the external_scope,
9162 through wrapup_global_declarations and check_global_declarations. */
9163 for (t = all_translation_units; t; t = TREE_CHAIN (t))
9164 c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t)));
9165 c_write_global_declarations_1 (BLOCK_VARS (ext_block));
9167 /* We're done parsing; proceed to optimize and emit assembly.
9168 FIXME: shouldn't be the front end's responsibility to call this. */
9169 cgraph_optimize ();
9171 /* After cgraph has had a chance to emit everything that's going to
9172 be emitted, output debug information for globals. */
9173 if (errorcount == 0 && sorrycount == 0)
9175 timevar_push (TV_SYMOUT);
9176 for (t = all_translation_units; t; t = TREE_CHAIN (t))
9177 c_write_global_declarations_2 (BLOCK_VARS (DECL_INITIAL (t)));
9178 c_write_global_declarations_2 (BLOCK_VARS (ext_block));
9179 timevar_pop (TV_SYMOUT);
9182 ext_block = NULL;
9185 #include "gt-c-decl.h"