PR middle-end/19583
[official-gcc.git] / gcc / c-decl.c
blob0b7b97ede23bf624f6b421f36322b679d5fb4ee5
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 Free Software Foundation, Inc.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA. */
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 "tree-gimple.h"
56 #include "diagnostic.h"
57 #include "tree-dump.h"
58 #include "cgraph.h"
59 #include "hashtab.h"
60 #include "libfuncs.h"
61 #include "except.h"
62 #include "langhooks-def.h"
64 /* In grokdeclarator, distinguish syntactic contexts of declarators. */
65 enum decl_context
66 { NORMAL, /* Ordinary declaration */
67 FUNCDEF, /* Function definition */
68 PARM, /* Declaration of parm before function body */
69 FIELD, /* Declaration inside struct or union */
70 TYPENAME}; /* Typename (inside cast or sizeof) */
73 /* Nonzero if we have seen an invalid cross reference
74 to a struct, union, or enum, but not yet printed the message. */
75 tree pending_invalid_xref;
77 /* File and line to appear in the eventual error message. */
78 location_t pending_invalid_xref_location;
80 /* True means we've initialized exception handling. */
81 bool c_eh_initialized_p;
83 /* While defining an enum type, this is 1 plus the last enumerator
84 constant value. Note that will do not have to save this or `enum_overflow'
85 around nested function definition since such a definition could only
86 occur in an enum value expression and we don't use these variables in
87 that case. */
89 static tree enum_next_value;
91 /* Nonzero means that there was overflow computing enum_next_value. */
93 static int enum_overflow;
95 /* The file and line that the prototype came from if this is an
96 old-style definition; used for diagnostics in
97 store_parm_decls_oldstyle. */
99 static location_t current_function_prototype_locus;
101 /* The argument information structure for the function currently being
102 defined. */
104 static struct c_arg_info *current_function_arg_info;
106 /* The obstack on which parser and related data structures, which are
107 not live beyond their top-level declaration or definition, are
108 allocated. */
109 struct obstack parser_obstack;
111 /* The current statement tree. */
113 static GTY(()) struct stmt_tree_s c_stmt_tree;
115 /* State saving variables. */
116 tree c_break_label;
117 tree c_cont_label;
119 /* Linked list of TRANSLATION_UNIT_DECLS for the translation units
120 included in this invocation. Note that the current translation
121 unit is not included in this list. */
123 static GTY(()) tree all_translation_units;
125 /* A list of decls to be made automatically visible in each file scope. */
126 static GTY(()) tree visible_builtins;
128 /* Set to 0 at beginning of a function definition, set to 1 if
129 a return statement that specifies a return value is seen. */
131 int current_function_returns_value;
133 /* Set to 0 at beginning of a function definition, set to 1 if
134 a return statement with no argument is seen. */
136 int current_function_returns_null;
138 /* Set to 0 at beginning of a function definition, set to 1 if
139 a call to a noreturn function is seen. */
141 int current_function_returns_abnormally;
143 /* Set to nonzero by `grokdeclarator' for a function
144 whose return type is defaulted, if warnings for this are desired. */
146 static int warn_about_return_type;
148 /* Nonzero when starting a function declared `extern inline'. */
150 static int current_extern_inline;
152 /* Nonzero when the current toplevel function contains a declaration
153 of a nested function which is never defined. */
155 static bool undef_nested_function;
157 /* True means global_bindings_p should return false even if the scope stack
158 says we are in file scope. */
159 bool c_override_global_bindings_to_false;
162 /* Each c_binding structure describes one binding of an identifier to
163 a decl. All the decls in a scope - irrespective of namespace - are
164 chained together by the ->prev field, which (as the name implies)
165 runs in reverse order. All the decls in a given namespace bound to
166 a given identifier are chained by the ->shadowed field, which runs
167 from inner to outer scopes.
169 The ->decl field usually points to a DECL node, but there are two
170 exceptions. In the namespace of type tags, the bound entity is a
171 RECORD_TYPE, UNION_TYPE, or ENUMERAL_TYPE node. If an undeclared
172 identifier is encountered, it is bound to error_mark_node to
173 suppress further errors about that identifier in the current
174 function.
176 The ->type field stores the type of the declaration in this scope;
177 if NULL, the type is the type of the ->decl field. This is only of
178 relevance for objects with external or internal linkage which may
179 be redeclared in inner scopes, forming composite types that only
180 persist for the duration of those scopes. In the external scope,
181 this stores the composite of all the types declared for this
182 object, visible or not. The ->inner_comp field (used only at file
183 scope) stores whether an incomplete array type at file scope was
184 completed at an inner scope to an array size other than 1.
186 The depth field is copied from the scope structure that holds this
187 decl. It is used to preserve the proper ordering of the ->shadowed
188 field (see bind()) and also for a handful of special-case checks.
189 Finally, the invisible bit is true for a decl which should be
190 ignored for purposes of normal name lookup, and the nested bit is
191 true for a decl that's been bound a second time in an inner scope;
192 in all such cases, the binding in the outer scope will have its
193 invisible bit true. */
195 struct c_binding GTY((chain_next ("%h.prev")))
197 tree decl; /* the decl bound */
198 tree type; /* the type in this scope */
199 tree id; /* the identifier it's bound to */
200 struct c_binding *prev; /* the previous decl in this scope */
201 struct c_binding *shadowed; /* the innermost decl shadowed by this one */
202 unsigned int depth : 28; /* depth of this scope */
203 BOOL_BITFIELD invisible : 1; /* normal lookup should ignore this binding */
204 BOOL_BITFIELD nested : 1; /* do not set DECL_CONTEXT when popping */
205 BOOL_BITFIELD inner_comp : 1; /* incomplete array completed in inner scope */
206 /* one free bit */
208 #define B_IN_SCOPE(b1, b2) ((b1)->depth == (b2)->depth)
209 #define B_IN_CURRENT_SCOPE(b) ((b)->depth == current_scope->depth)
210 #define B_IN_FILE_SCOPE(b) ((b)->depth == 1 /*file_scope->depth*/)
211 #define B_IN_EXTERNAL_SCOPE(b) ((b)->depth == 0 /*external_scope->depth*/)
213 #define I_SYMBOL_BINDING(node) \
214 (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->symbol_binding)
215 #define I_SYMBOL_DECL(node) \
216 (I_SYMBOL_BINDING(node) ? I_SYMBOL_BINDING(node)->decl : 0)
218 #define I_TAG_BINDING(node) \
219 (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->tag_binding)
220 #define I_TAG_DECL(node) \
221 (I_TAG_BINDING(node) ? I_TAG_BINDING(node)->decl : 0)
223 #define I_LABEL_BINDING(node) \
224 (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->label_binding)
225 #define I_LABEL_DECL(node) \
226 (I_LABEL_BINDING(node) ? I_LABEL_BINDING(node)->decl : 0)
228 /* Each C symbol points to three linked lists of c_binding structures.
229 These describe the values of the identifier in the three different
230 namespaces defined by the language. */
232 struct lang_identifier GTY(())
234 struct c_common_identifier common_id;
235 struct c_binding *symbol_binding; /* vars, funcs, constants, typedefs */
236 struct c_binding *tag_binding; /* struct/union/enum tags */
237 struct c_binding *label_binding; /* labels */
240 /* Validate c-lang.c's assumptions. */
241 extern char C_SIZEOF_STRUCT_LANG_IDENTIFIER_isnt_accurate
242 [(sizeof(struct lang_identifier) == C_SIZEOF_STRUCT_LANG_IDENTIFIER) ? 1 : -1];
244 /* The resulting tree type. */
246 union lang_tree_node
247 GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"),
248 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)")))
250 union tree_node GTY ((tag ("0"),
251 desc ("tree_node_structure (&%h)")))
252 generic;
253 struct lang_identifier GTY ((tag ("1"))) identifier;
256 /* Each c_scope structure describes the complete contents of one
257 scope. Four scopes are distinguished specially: the innermost or
258 current scope, the innermost function scope, the file scope (always
259 the second to outermost) and the outermost or external scope.
261 Most declarations are recorded in the current scope.
263 All normal label declarations are recorded in the innermost
264 function scope, as are bindings of undeclared identifiers to
265 error_mark_node. (GCC permits nested functions as an extension,
266 hence the 'innermost' qualifier.) Explicitly declared labels
267 (using the __label__ extension) appear in the current scope.
269 Being in the file scope (current_scope == file_scope) causes
270 special behavior in several places below. Also, under some
271 conditions the Objective-C front end records declarations in the
272 file scope even though that isn't the current scope.
274 All declarations with external linkage are recorded in the external
275 scope, even if they aren't visible there; this models the fact that
276 such declarations are visible to the entire program, and (with a
277 bit of cleverness, see pushdecl) allows diagnosis of some violations
278 of C99 6.2.2p7 and 6.2.7p2:
280 If, within the same translation unit, the same identifier appears
281 with both internal and external linkage, the behavior is
282 undefined.
284 All declarations that refer to the same object or function shall
285 have compatible type; otherwise, the behavior is undefined.
287 Initially only the built-in declarations, which describe compiler
288 intrinsic functions plus a subset of the standard library, are in
289 this scope.
291 The order of the blocks list matters, and it is frequently appended
292 to. To avoid having to walk all the way to the end of the list on
293 each insertion, or reverse the list later, we maintain a pointer to
294 the last list entry. (FIXME: It should be feasible to use a reversed
295 list here.)
297 The bindings list is strictly in reverse order of declarations;
298 pop_scope relies on this. */
301 struct c_scope GTY((chain_next ("%h.outer")))
303 /* The scope containing this one. */
304 struct c_scope *outer;
306 /* The next outermost function scope. */
307 struct c_scope *outer_function;
309 /* All bindings in this scope. */
310 struct c_binding *bindings;
312 /* For each scope (except the global one), a chain of BLOCK nodes
313 for all the scopes that were entered and exited one level down. */
314 tree blocks;
315 tree blocks_last;
317 /* The depth of this scope. Used to keep the ->shadowed chain of
318 bindings sorted innermost to outermost. */
319 unsigned int depth : 28;
321 /* True if we are currently filling this scope with parameter
322 declarations. */
323 BOOL_BITFIELD parm_flag : 1;
325 /* True if we already complained about forward parameter decls
326 in this scope. This prevents double warnings on
327 foo (int a; int b; ...) */
328 BOOL_BITFIELD warned_forward_parm_decls : 1;
330 /* True if this is the outermost block scope of a function body.
331 This scope contains the parameters, the local variables declared
332 in the outermost block, and all the labels (except those in
333 nested functions, or declared at block scope with __label__). */
334 BOOL_BITFIELD function_body : 1;
336 /* True means make a BLOCK for this scope no matter what. */
337 BOOL_BITFIELD keep : 1;
340 /* The scope currently in effect. */
342 static GTY(()) struct c_scope *current_scope;
344 /* The innermost function scope. Ordinary (not explicitly declared)
345 labels, bindings to error_mark_node, and the lazily-created
346 bindings of __func__ and its friends get this scope. */
348 static GTY(()) struct c_scope *current_function_scope;
350 /* The C file scope. This is reset for each input translation unit. */
352 static GTY(()) struct c_scope *file_scope;
354 /* The outermost scope. This is used for all declarations with
355 external linkage, and only these, hence the name. */
357 static GTY(()) struct c_scope *external_scope;
359 /* A chain of c_scope structures awaiting reuse. */
361 static GTY((deletable)) struct c_scope *scope_freelist;
363 /* A chain of c_binding structures awaiting reuse. */
365 static GTY((deletable)) struct c_binding *binding_freelist;
367 /* Append VAR to LIST in scope SCOPE. */
368 #define SCOPE_LIST_APPEND(scope, list, decl) do { \
369 struct c_scope *s_ = (scope); \
370 tree d_ = (decl); \
371 if (s_->list##_last) \
372 TREE_CHAIN (s_->list##_last) = d_; \
373 else \
374 s_->list = d_; \
375 s_->list##_last = d_; \
376 } while (0)
378 /* Concatenate FROM in scope FSCOPE onto TO in scope TSCOPE. */
379 #define SCOPE_LIST_CONCAT(tscope, to, fscope, from) do { \
380 struct c_scope *t_ = (tscope); \
381 struct c_scope *f_ = (fscope); \
382 if (t_->to##_last) \
383 TREE_CHAIN (t_->to##_last) = f_->from; \
384 else \
385 t_->to = f_->from; \
386 t_->to##_last = f_->from##_last; \
387 } while (0)
389 /* True means unconditionally make a BLOCK for the next scope pushed. */
391 static bool keep_next_level_flag;
393 /* True means the next call to push_scope will be the outermost scope
394 of a function body, so do not push a new scope, merely cease
395 expecting parameter decls. */
397 static bool next_is_function_body;
399 /* Functions called automatically at the beginning and end of execution. */
401 static GTY(()) tree static_ctors;
402 static GTY(()) tree static_dtors;
404 /* Forward declarations. */
405 static tree lookup_name_in_scope (tree, struct c_scope *);
406 static tree c_make_fname_decl (tree, int);
407 static tree grokdeclarator (const struct c_declarator *,
408 struct c_declspecs *,
409 enum decl_context, bool, tree *);
410 static tree grokparms (struct c_arg_info *, bool);
411 static void layout_array_type (tree);
413 /* States indicating how grokdeclarator() should handle declspecs marked
414 with __attribute__((deprecated)). An object declared as
415 __attribute__((deprecated)) suppresses warnings of uses of other
416 deprecated items. */
418 enum deprecated_states {
419 DEPRECATED_NORMAL,
420 DEPRECATED_SUPPRESS
423 static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
425 void
426 c_print_identifier (FILE *file, tree node, int indent)
428 print_node (file, "symbol", I_SYMBOL_DECL (node), indent + 4);
429 print_node (file, "tag", I_TAG_DECL (node), indent + 4);
430 print_node (file, "label", I_LABEL_DECL (node), indent + 4);
431 if (C_IS_RESERVED_WORD (node))
433 tree rid = ridpointers[C_RID_CODE (node)];
434 indent_to (file, indent + 4);
435 fprintf (file, "rid " HOST_PTR_PRINTF " \"%s\"",
436 (void *) rid, IDENTIFIER_POINTER (rid));
440 /* Establish a binding between NAME, an IDENTIFIER_NODE, and DECL,
441 which may be any of several kinds of DECL or TYPE or error_mark_node,
442 in the scope SCOPE. */
443 static void
444 bind (tree name, tree decl, struct c_scope *scope, bool invisible, bool nested)
446 struct c_binding *b, **here;
448 if (binding_freelist)
450 b = binding_freelist;
451 binding_freelist = b->prev;
453 else
454 b = GGC_NEW (struct c_binding);
456 b->shadowed = 0;
457 b->decl = decl;
458 b->id = name;
459 b->depth = scope->depth;
460 b->invisible = invisible;
461 b->nested = nested;
462 b->inner_comp = 0;
464 b->type = 0;
466 b->prev = scope->bindings;
467 scope->bindings = b;
469 if (!name)
470 return;
472 switch (TREE_CODE (decl))
474 case LABEL_DECL: here = &I_LABEL_BINDING (name); break;
475 case ENUMERAL_TYPE:
476 case UNION_TYPE:
477 case RECORD_TYPE: here = &I_TAG_BINDING (name); break;
478 case VAR_DECL:
479 case FUNCTION_DECL:
480 case TYPE_DECL:
481 case CONST_DECL:
482 case PARM_DECL:
483 case ERROR_MARK: here = &I_SYMBOL_BINDING (name); break;
485 default:
486 gcc_unreachable ();
489 /* Locate the appropriate place in the chain of shadowed decls
490 to insert this binding. Normally, scope == current_scope and
491 this does nothing. */
492 while (*here && (*here)->depth > scope->depth)
493 here = &(*here)->shadowed;
495 b->shadowed = *here;
496 *here = b;
499 /* Clear the binding structure B, stick it on the binding_freelist,
500 and return the former value of b->prev. This is used by pop_scope
501 and get_parm_info to iterate destructively over all the bindings
502 from a given scope. */
503 static struct c_binding *
504 free_binding_and_advance (struct c_binding *b)
506 struct c_binding *prev = b->prev;
508 memset (b, 0, sizeof (struct c_binding));
509 b->prev = binding_freelist;
510 binding_freelist = b;
512 return prev;
516 /* Hook called at end of compilation to assume 1 elt
517 for a file-scope tentative array defn that wasn't complete before. */
519 void
520 c_finish_incomplete_decl (tree decl)
522 if (TREE_CODE (decl) == VAR_DECL)
524 tree type = TREE_TYPE (decl);
525 if (type != error_mark_node
526 && TREE_CODE (type) == ARRAY_TYPE
527 && !DECL_EXTERNAL (decl)
528 && TYPE_DOMAIN (type) == 0)
530 warning ("%Jarray %qD assumed to have one element", decl, decl);
532 complete_array_type (type, NULL_TREE, 1);
534 layout_decl (decl, 0);
539 /* The Objective-C front-end often needs to determine the current scope. */
541 void *
542 objc_get_current_scope (void)
544 return current_scope;
547 /* The following function is used only by Objective-C. It needs to live here
548 because it accesses the innards of c_scope. */
550 void
551 objc_mark_locals_volatile (void *enclosing_blk)
553 struct c_scope *scope;
554 struct c_binding *b;
556 for (scope = current_scope;
557 scope && scope != enclosing_blk;
558 scope = scope->outer)
560 for (b = scope->bindings; b; b = b->prev)
562 if (TREE_CODE (b->decl) == VAR_DECL
563 || TREE_CODE (b->decl) == PARM_DECL)
565 C_DECL_REGISTER (b->decl) = 0;
566 DECL_REGISTER (b->decl) = 0;
567 TREE_THIS_VOLATILE (b->decl) = 1;
571 /* Do not climb up past the current function. */
572 if (scope->function_body)
573 break;
577 /* Nonzero if we are currently in file scope. */
580 global_bindings_p (void)
582 return current_scope == file_scope && !c_override_global_bindings_to_false;
585 void
586 keep_next_level (void)
588 keep_next_level_flag = true;
591 /* Identify this scope as currently being filled with parameters. */
593 void
594 declare_parm_level (void)
596 current_scope->parm_flag = true;
599 void
600 push_scope (void)
602 if (next_is_function_body)
604 /* This is the transition from the parameters to the top level
605 of the function body. These are the same scope
606 (C99 6.2.1p4,6) so we do not push another scope structure.
607 next_is_function_body is set only by store_parm_decls, which
608 in turn is called when and only when we are about to
609 encounter the opening curly brace for the function body.
611 The outermost block of a function always gets a BLOCK node,
612 because the debugging output routines expect that each
613 function has at least one BLOCK. */
614 current_scope->parm_flag = false;
615 current_scope->function_body = true;
616 current_scope->keep = true;
617 current_scope->outer_function = current_function_scope;
618 current_function_scope = current_scope;
620 keep_next_level_flag = false;
621 next_is_function_body = false;
623 else
625 struct c_scope *scope;
626 if (scope_freelist)
628 scope = scope_freelist;
629 scope_freelist = scope->outer;
631 else
632 scope = GGC_CNEW (struct c_scope);
634 scope->keep = keep_next_level_flag;
635 scope->outer = current_scope;
636 scope->depth = current_scope ? (current_scope->depth + 1) : 0;
638 /* Check for scope depth overflow. Unlikely (2^28 == 268,435,456) but
639 possible. */
640 if (current_scope && scope->depth == 0)
642 scope->depth--;
643 sorry ("GCC supports only %u nested scopes", scope->depth);
646 current_scope = scope;
647 keep_next_level_flag = false;
651 /* Set the TYPE_CONTEXT of all of TYPE's variants to CONTEXT. */
653 static void
654 set_type_context (tree type, tree context)
656 for (type = TYPE_MAIN_VARIANT (type); type;
657 type = TYPE_NEXT_VARIANT (type))
658 TYPE_CONTEXT (type) = context;
661 /* Exit a scope. Restore the state of the identifier-decl mappings
662 that were in effect when this scope was entered. Return a BLOCK
663 node containing all the DECLs in this scope that are of interest
664 to debug info generation. */
666 tree
667 pop_scope (void)
669 struct c_scope *scope = current_scope;
670 tree block, context, p;
671 struct c_binding *b;
673 bool functionbody = scope->function_body;
674 bool keep = functionbody || scope->keep || scope->bindings;
676 /* If appropriate, create a BLOCK to record the decls for the life
677 of this function. */
678 block = 0;
679 if (keep)
681 block = make_node (BLOCK);
682 BLOCK_SUBBLOCKS (block) = scope->blocks;
683 TREE_USED (block) = 1;
685 /* In each subblock, record that this is its superior. */
686 for (p = scope->blocks; p; p = TREE_CHAIN (p))
687 BLOCK_SUPERCONTEXT (p) = block;
689 BLOCK_VARS (block) = 0;
692 /* The TYPE_CONTEXTs for all of the tagged types belonging to this
693 scope must be set so that they point to the appropriate
694 construct, i.e. either to the current FUNCTION_DECL node, or
695 else to the BLOCK node we just constructed.
697 Note that for tagged types whose scope is just the formal
698 parameter list for some function type specification, we can't
699 properly set their TYPE_CONTEXTs here, because we don't have a
700 pointer to the appropriate FUNCTION_TYPE node readily available
701 to us. For those cases, the TYPE_CONTEXTs of the relevant tagged
702 type nodes get set in `grokdeclarator' as soon as we have created
703 the FUNCTION_TYPE node which will represent the "scope" for these
704 "parameter list local" tagged types. */
705 if (scope->function_body)
706 context = current_function_decl;
707 else if (scope == file_scope)
709 tree file_decl = build_decl (TRANSLATION_UNIT_DECL, 0, 0);
710 TREE_CHAIN (file_decl) = all_translation_units;
711 all_translation_units = file_decl;
712 context = file_decl;
714 else
715 context = block;
717 /* Clear all bindings in this scope. */
718 for (b = scope->bindings; b; b = free_binding_and_advance (b))
720 p = b->decl;
721 switch (TREE_CODE (p))
723 case LABEL_DECL:
724 /* Warnings for unused labels, errors for undefined labels. */
725 if (TREE_USED (p) && !DECL_INITIAL (p))
727 error ("%Jlabel %qD used but not defined", p, p);
728 DECL_INITIAL (p) = error_mark_node;
730 else if (!TREE_USED (p) && warn_unused_label)
732 if (DECL_INITIAL (p))
733 warning ("%Jlabel %qD defined but not used", p, p);
734 else
735 warning ("%Jlabel %qD declared but not defined", p, p);
737 /* Labels go in BLOCK_VARS. */
738 TREE_CHAIN (p) = BLOCK_VARS (block);
739 BLOCK_VARS (block) = p;
740 gcc_assert (I_LABEL_BINDING (b->id) == b);
741 I_LABEL_BINDING (b->id) = b->shadowed;
742 break;
744 case ENUMERAL_TYPE:
745 case UNION_TYPE:
746 case RECORD_TYPE:
747 set_type_context (p, context);
749 /* Types may not have tag-names, in which case the type
750 appears in the bindings list with b->id NULL. */
751 if (b->id)
753 gcc_assert (I_TAG_BINDING (b->id) == b);
754 I_TAG_BINDING (b->id) = b->shadowed;
756 break;
758 case FUNCTION_DECL:
759 /* Propagate TREE_ADDRESSABLE from nested functions to their
760 containing functions. */
761 if (!TREE_ASM_WRITTEN (p)
762 && DECL_INITIAL (p) != 0
763 && TREE_ADDRESSABLE (p)
764 && DECL_ABSTRACT_ORIGIN (p) != 0
765 && DECL_ABSTRACT_ORIGIN (p) != p)
766 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (p)) = 1;
767 if (!DECL_EXTERNAL (p)
768 && DECL_INITIAL (p) == 0)
770 error ("%Jnested function %qD declared but never defined", p, p);
771 undef_nested_function = true;
773 goto common_symbol;
775 case VAR_DECL:
776 /* Warnings for unused variables. */
777 if (warn_unused_variable
778 && !TREE_USED (p)
779 && !DECL_IN_SYSTEM_HEADER (p)
780 && DECL_NAME (p)
781 && !DECL_ARTIFICIAL (p)
782 && scope != file_scope
783 && scope != external_scope)
784 warning ("%Junused variable %qD", p, p);
786 if (b->inner_comp)
788 error ("%Jtype of array %qD completed incompatibly with"
789 " implicit initialization", p, p);
792 /* Fall through. */
793 case TYPE_DECL:
794 case CONST_DECL:
795 common_symbol:
796 /* All of these go in BLOCK_VARS, but only if this is the
797 binding in the home scope. */
798 if (!b->nested)
800 TREE_CHAIN (p) = BLOCK_VARS (block);
801 BLOCK_VARS (block) = p;
803 /* If this is the file scope, and we are processing more
804 than one translation unit in this compilation, set
805 DECL_CONTEXT of each decl to the TRANSLATION_UNIT_DECL.
806 This makes same_translation_unit_p work, and causes
807 static declarations to be given disambiguating suffixes. */
808 if (scope == file_scope && num_in_fnames > 1)
810 DECL_CONTEXT (p) = context;
811 if (TREE_CODE (p) == TYPE_DECL)
812 set_type_context (TREE_TYPE (p), context);
815 /* Fall through. */
816 /* Parameters go in DECL_ARGUMENTS, not BLOCK_VARS, and have
817 already been put there by store_parm_decls. Unused-
818 parameter warnings are handled by function.c.
819 error_mark_node obviously does not go in BLOCK_VARS and
820 does not get unused-variable warnings. */
821 case PARM_DECL:
822 case ERROR_MARK:
823 /* It is possible for a decl not to have a name. We get
824 here with b->id NULL in this case. */
825 if (b->id)
827 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
828 I_SYMBOL_BINDING (b->id) = b->shadowed;
829 if (b->shadowed && b->shadowed->type)
830 TREE_TYPE (b->shadowed->decl) = b->shadowed->type;
832 break;
834 default:
835 gcc_unreachable ();
840 /* Dispose of the block that we just made inside some higher level. */
841 if ((scope->function_body || scope == file_scope) && context)
843 DECL_INITIAL (context) = block;
844 BLOCK_SUPERCONTEXT (block) = context;
846 else if (scope->outer)
848 if (block)
849 SCOPE_LIST_APPEND (scope->outer, blocks, block);
850 /* If we did not make a block for the scope just exited, any
851 blocks made for inner scopes must be carried forward so they
852 will later become subblocks of something else. */
853 else if (scope->blocks)
854 SCOPE_LIST_CONCAT (scope->outer, blocks, scope, blocks);
857 /* Pop the current scope, and free the structure for reuse. */
858 current_scope = scope->outer;
859 if (scope->function_body)
860 current_function_scope = scope->outer_function;
862 memset (scope, 0, sizeof (struct c_scope));
863 scope->outer = scope_freelist;
864 scope_freelist = scope;
866 return block;
869 void
870 push_file_scope (void)
872 tree decl;
874 if (file_scope)
875 return;
877 push_scope ();
878 file_scope = current_scope;
880 start_fname_decls ();
882 for (decl = visible_builtins; decl; decl = TREE_CHAIN (decl))
883 bind (DECL_NAME (decl), decl, file_scope,
884 /*invisible=*/false, /*nested=*/true);
887 void
888 pop_file_scope (void)
890 /* In case there were missing closebraces, get us back to the global
891 binding level. */
892 while (current_scope != file_scope)
893 pop_scope ();
895 /* __FUNCTION__ is defined at file scope (""). This
896 call may not be necessary as my tests indicate it
897 still works without it. */
898 finish_fname_decls ();
900 /* This is the point to write out a PCH if we're doing that.
901 In that case we do not want to do anything else. */
902 if (pch_file)
904 c_common_write_pch ();
905 return;
908 /* Pop off the file scope and close this translation unit. */
909 pop_scope ();
910 file_scope = 0;
912 maybe_apply_pending_pragma_weaks ();
913 cgraph_finalize_compilation_unit ();
916 /* Insert BLOCK at the end of the list of subblocks of the current
917 scope. This is used when a BIND_EXPR is expanded, to handle the
918 BLOCK node inside the BIND_EXPR. */
920 void
921 insert_block (tree block)
923 TREE_USED (block) = 1;
924 SCOPE_LIST_APPEND (current_scope, blocks, block);
927 /* Push a definition or a declaration of struct, union or enum tag "name".
928 "type" should be the type node.
929 We assume that the tag "name" is not already defined.
931 Note that the definition may really be just a forward reference.
932 In that case, the TYPE_SIZE will be zero. */
934 static void
935 pushtag (tree name, tree type)
937 /* Record the identifier as the type's name if it has none. */
938 if (name && !TYPE_NAME (type))
939 TYPE_NAME (type) = name;
940 bind (name, type, current_scope, /*invisible=*/false, /*nested=*/false);
942 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE will be the
943 tagged type we just added to the current scope. This fake
944 NULL-named TYPE_DECL node helps dwarfout.c to know when it needs
945 to output a representation of a tagged type, and it also gives
946 us a convenient place to record the "scope start" address for the
947 tagged type. */
949 TYPE_STUB_DECL (type) = pushdecl (build_decl (TYPE_DECL, NULL_TREE, type));
951 /* An approximation for now, so we can tell this is a function-scope tag.
952 This will be updated in pop_scope. */
953 TYPE_CONTEXT (type) = DECL_CONTEXT (TYPE_STUB_DECL (type));
956 /* Subroutine of compare_decls. Allow harmless mismatches in return
957 and argument types provided that the type modes match. This function
958 return a unified type given a suitable match, and 0 otherwise. */
960 static tree
961 match_builtin_function_types (tree newtype, tree oldtype)
963 tree newrettype, oldrettype;
964 tree newargs, oldargs;
965 tree trytype, tryargs;
967 /* Accept the return type of the new declaration if same modes. */
968 oldrettype = TREE_TYPE (oldtype);
969 newrettype = TREE_TYPE (newtype);
971 if (TYPE_MODE (oldrettype) != TYPE_MODE (newrettype))
972 return 0;
974 oldargs = TYPE_ARG_TYPES (oldtype);
975 newargs = TYPE_ARG_TYPES (newtype);
976 tryargs = newargs;
978 while (oldargs || newargs)
980 if (!oldargs
981 || !newargs
982 || !TREE_VALUE (oldargs)
983 || !TREE_VALUE (newargs)
984 || TYPE_MODE (TREE_VALUE (oldargs))
985 != TYPE_MODE (TREE_VALUE (newargs)))
986 return 0;
988 oldargs = TREE_CHAIN (oldargs);
989 newargs = TREE_CHAIN (newargs);
992 trytype = build_function_type (newrettype, tryargs);
993 return build_type_attribute_variant (trytype, TYPE_ATTRIBUTES (oldtype));
996 /* Subroutine of diagnose_mismatched_decls. Check for function type
997 mismatch involving an empty arglist vs a nonempty one and give clearer
998 diagnostics. */
999 static void
1000 diagnose_arglist_conflict (tree newdecl, tree olddecl,
1001 tree newtype, tree oldtype)
1003 tree t;
1005 if (TREE_CODE (olddecl) != FUNCTION_DECL
1006 || !comptypes (TREE_TYPE (oldtype), TREE_TYPE (newtype))
1007 || !((TYPE_ARG_TYPES (oldtype) == 0 && DECL_INITIAL (olddecl) == 0)
1009 (TYPE_ARG_TYPES (newtype) == 0 && DECL_INITIAL (newdecl) == 0)))
1010 return;
1012 t = TYPE_ARG_TYPES (oldtype);
1013 if (t == 0)
1014 t = TYPE_ARG_TYPES (newtype);
1015 for (; t; t = TREE_CHAIN (t))
1017 tree type = TREE_VALUE (t);
1019 if (TREE_CHAIN (t) == 0
1020 && TYPE_MAIN_VARIANT (type) != void_type_node)
1022 inform ("a parameter list with an ellipsis can%'t match "
1023 "an empty parameter name list declaration");
1024 break;
1027 if (c_type_promotes_to (type) != type)
1029 inform ("an argument type that has a default promotion can%'t match "
1030 "an empty parameter name list declaration");
1031 break;
1036 /* Another subroutine of diagnose_mismatched_decls. OLDDECL is an
1037 old-style function definition, NEWDECL is a prototype declaration.
1038 Diagnose inconsistencies in the argument list. Returns TRUE if
1039 the prototype is compatible, FALSE if not. */
1040 static bool
1041 validate_proto_after_old_defn (tree newdecl, tree newtype, tree oldtype)
1043 tree newargs, oldargs;
1044 int i;
1046 /* ??? Elsewhere TYPE_MAIN_VARIANT is not used in this context. */
1047 #define END_OF_ARGLIST(t) (TYPE_MAIN_VARIANT (t) == void_type_node)
1049 oldargs = TYPE_ACTUAL_ARG_TYPES (oldtype);
1050 newargs = TYPE_ARG_TYPES (newtype);
1051 i = 1;
1053 for (;;)
1055 tree oldargtype = TREE_VALUE (oldargs);
1056 tree newargtype = TREE_VALUE (newargs);
1058 if (END_OF_ARGLIST (oldargtype) && END_OF_ARGLIST (newargtype))
1059 break;
1061 /* Reaching the end of just one list means the two decls don't
1062 agree on the number of arguments. */
1063 if (END_OF_ARGLIST (oldargtype))
1065 error ("%Jprototype for %qD declares more arguments "
1066 "than previous old-style definition", newdecl, newdecl);
1067 return false;
1069 else if (END_OF_ARGLIST (newargtype))
1071 error ("%Jprototype for %qD declares fewer arguments "
1072 "than previous old-style definition", newdecl, newdecl);
1073 return false;
1076 /* Type for passing arg must be consistent with that declared
1077 for the arg. */
1078 else if (!comptypes (oldargtype, newargtype))
1080 error ("%Jprototype for %qD declares argument %d"
1081 " with incompatible type",
1082 newdecl, newdecl, i);
1083 return false;
1086 oldargs = TREE_CHAIN (oldargs);
1087 newargs = TREE_CHAIN (newargs);
1088 i++;
1091 /* If we get here, no errors were found, but do issue a warning
1092 for this poor-style construct. */
1093 warning ("%Jprototype for %qD follows non-prototype definition",
1094 newdecl, newdecl);
1095 return true;
1096 #undef END_OF_ARGLIST
1099 /* Subroutine of diagnose_mismatched_decls. Report the location of DECL,
1100 first in a pair of mismatched declarations, using the diagnostic
1101 function DIAG. */
1102 static void
1103 locate_old_decl (tree decl, void (*diag)(const char *, ...))
1105 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_BUILT_IN (decl))
1107 else if (DECL_INITIAL (decl))
1108 diag (N_("%Jprevious definition of %qD was here"), decl, decl);
1109 else if (C_DECL_IMPLICIT (decl))
1110 diag (N_("%Jprevious implicit declaration of %qD was here"), decl, decl);
1111 else
1112 diag (N_("%Jprevious declaration of %qD was here"), decl, decl);
1115 /* Subroutine of duplicate_decls. Compare NEWDECL to OLDDECL.
1116 Returns true if the caller should proceed to merge the two, false
1117 if OLDDECL should simply be discarded. As a side effect, issues
1118 all necessary diagnostics for invalid or poor-style combinations.
1119 If it returns true, writes the types of NEWDECL and OLDDECL to
1120 *NEWTYPEP and *OLDTYPEP - these may have been adjusted from
1121 TREE_TYPE (NEWDECL, OLDDECL) respectively. */
1123 static bool
1124 diagnose_mismatched_decls (tree newdecl, tree olddecl,
1125 tree *newtypep, tree *oldtypep)
1127 tree newtype, oldtype;
1128 bool pedwarned = false;
1129 bool warned = false;
1130 bool retval = true;
1132 /* If we have error_mark_node for either decl or type, just discard
1133 the previous decl - we're in an error cascade already. */
1134 if (olddecl == error_mark_node || newdecl == error_mark_node)
1135 return false;
1136 *oldtypep = oldtype = TREE_TYPE (olddecl);
1137 *newtypep = newtype = TREE_TYPE (newdecl);
1138 if (oldtype == error_mark_node || newtype == error_mark_node)
1139 return false;
1141 /* Two different categories of symbol altogether. This is an error
1142 unless OLDDECL is a builtin. OLDDECL will be discarded in any case. */
1143 if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1145 if (!(TREE_CODE (olddecl) == FUNCTION_DECL
1146 && DECL_BUILT_IN (olddecl)
1147 && !C_DECL_DECLARED_BUILTIN (olddecl)))
1149 error ("%J%qD redeclared as different kind of symbol",
1150 newdecl, newdecl);
1151 locate_old_decl (olddecl, error);
1153 else if (TREE_PUBLIC (newdecl))
1154 warning ("%Jbuilt-in function %qD declared as non-function",
1155 newdecl, newdecl);
1156 else if (warn_shadow)
1157 warning ("%Jdeclaration of %qD shadows a built-in function",
1158 newdecl, newdecl);
1159 return false;
1162 /* Enumerators have no linkage, so may only be declared once in a
1163 given scope. */
1164 if (TREE_CODE (olddecl) == CONST_DECL)
1166 error ("%Jredeclaration of enumerator %qD", newdecl, newdecl);
1167 locate_old_decl (olddecl, error);
1168 return false;
1171 if (!comptypes (oldtype, newtype))
1173 if (TREE_CODE (olddecl) == FUNCTION_DECL
1174 && DECL_BUILT_IN (olddecl) && !C_DECL_DECLARED_BUILTIN (olddecl))
1176 /* Accept harmless mismatch in function types.
1177 This is for the ffs and fprintf builtins. */
1178 tree trytype = match_builtin_function_types (newtype, oldtype);
1180 if (trytype && comptypes (newtype, trytype))
1181 *oldtypep = oldtype = trytype;
1182 else
1184 /* If types don't match for a built-in, throw away the
1185 built-in. No point in calling locate_old_decl here, it
1186 won't print anything. */
1187 warning ("%Jconflicting types for built-in function %qD",
1188 newdecl, newdecl);
1189 return false;
1192 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1193 && DECL_IS_BUILTIN (olddecl))
1195 /* A conflicting function declaration for a predeclared
1196 function that isn't actually built in. Objective C uses
1197 these. The new declaration silently overrides everything
1198 but the volatility (i.e. noreturn) indication. See also
1199 below. FIXME: Make Objective C use normal builtins. */
1200 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1201 return false;
1203 /* Permit void foo (...) to match int foo (...) if the latter is
1204 the definition and implicit int was used. See
1205 c-torture/compile/920625-2.c. */
1206 else if (TREE_CODE (newdecl) == FUNCTION_DECL && DECL_INITIAL (newdecl)
1207 && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype)) == void_type_node
1208 && TYPE_MAIN_VARIANT (TREE_TYPE (newtype)) == integer_type_node
1209 && C_FUNCTION_IMPLICIT_INT (newdecl) && !DECL_INITIAL (olddecl))
1211 pedwarn ("%Jconflicting types for %qD", newdecl, newdecl);
1212 /* Make sure we keep void as the return type. */
1213 TREE_TYPE (newdecl) = *newtypep = newtype = oldtype;
1214 C_FUNCTION_IMPLICIT_INT (newdecl) = 0;
1215 pedwarned = true;
1217 /* Permit void foo (...) to match an earlier call to foo (...) with
1218 no declared type (thus, implicitly int). */
1219 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1220 && TYPE_MAIN_VARIANT (TREE_TYPE (newtype)) == void_type_node
1221 && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype)) == integer_type_node
1222 && C_DECL_IMPLICIT (olddecl) && !DECL_INITIAL (olddecl))
1224 pedwarn ("%Jconflicting types for %qD", newdecl, newdecl);
1225 /* Make sure we keep void as the return type. */
1226 TREE_TYPE (olddecl) = *oldtypep = oldtype = newtype;
1227 pedwarned = true;
1229 else
1231 if (TYPE_QUALS (newtype) != TYPE_QUALS (oldtype))
1232 error ("%J conflicting type qualifiers for %qD", newdecl, newdecl);
1233 else
1234 error ("%Jconflicting types for %qD", newdecl, newdecl);
1235 diagnose_arglist_conflict (newdecl, olddecl, newtype, oldtype);
1236 locate_old_decl (olddecl, error);
1237 return false;
1241 /* Redeclaration of a type is a constraint violation (6.7.2.3p1),
1242 but silently ignore the redeclaration if either is in a system
1243 header. (Conflicting redeclarations were handled above.) */
1244 if (TREE_CODE (newdecl) == TYPE_DECL)
1246 if (DECL_IN_SYSTEM_HEADER (newdecl) || DECL_IN_SYSTEM_HEADER (olddecl))
1247 return true; /* Allow OLDDECL to continue in use. */
1249 error ("%Jredefinition of typedef %qD", newdecl, newdecl);
1250 locate_old_decl (olddecl, error);
1251 return false;
1254 /* Function declarations can either be 'static' or 'extern' (no
1255 qualifier is equivalent to 'extern' - C99 6.2.2p5) and therefore
1256 can never conflict with each other on account of linkage (6.2.2p4).
1257 Multiple definitions are not allowed (6.9p3,5) but GCC permits
1258 two definitions if one is 'extern inline' and one is not. The non-
1259 extern-inline definition supersedes the extern-inline definition. */
1260 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1262 /* If you declare a built-in function name as static, or
1263 define the built-in with an old-style definition (so we
1264 can't validate the argument list) the built-in definition is
1265 overridden, but optionally warn this was a bad choice of name. */
1266 if (DECL_BUILT_IN (olddecl)
1267 && !C_DECL_DECLARED_BUILTIN (olddecl)
1268 && (!TREE_PUBLIC (newdecl)
1269 || (DECL_INITIAL (newdecl)
1270 && !TYPE_ARG_TYPES (TREE_TYPE (newdecl)))))
1272 if (warn_shadow)
1273 warning ("%Jdeclaration of %qD shadows a built-in function",
1274 newdecl, newdecl);
1275 /* Discard the old built-in function. */
1276 return false;
1279 if (DECL_INITIAL (newdecl))
1281 if (DECL_INITIAL (olddecl))
1283 /* If both decls have extern inline and are in the same TU,
1284 reject the new decl. */
1285 if (DECL_DECLARED_INLINE_P (olddecl)
1286 && DECL_EXTERNAL (olddecl)
1287 && DECL_DECLARED_INLINE_P (newdecl)
1288 && DECL_EXTERNAL (newdecl)
1289 && same_translation_unit_p (newdecl, olddecl))
1291 error ("%Jredefinition of %qD", newdecl, newdecl);
1292 locate_old_decl (olddecl, error);
1293 return false;
1295 /* If both decls have not extern inline, reject the new decl. */
1296 if (!DECL_DECLARED_INLINE_P (olddecl)
1297 && !DECL_EXTERNAL (olddecl)
1298 && !DECL_DECLARED_INLINE_P (newdecl)
1299 && !DECL_EXTERNAL (newdecl))
1301 error ("%Jredefinition of %qD", newdecl, newdecl);
1302 locate_old_decl (olddecl, error);
1303 return false;
1305 /* If the new decl is declared as extern inline, error if they are
1306 in the same TU, otherwise retain the old decl. */
1307 if (!DECL_DECLARED_INLINE_P (olddecl)
1308 && !DECL_EXTERNAL (olddecl)
1309 && DECL_DECLARED_INLINE_P (newdecl)
1310 && DECL_EXTERNAL (newdecl))
1312 if (same_translation_unit_p (newdecl, olddecl))
1314 error ("%Jredefinition of %qD", newdecl, newdecl);
1315 locate_old_decl (olddecl, error);
1316 return false;
1318 else
1319 retval = false;
1323 /* If we have a prototype after an old-style function definition,
1324 the argument types must be checked specially. */
1325 else if (DECL_INITIAL (olddecl)
1326 && !TYPE_ARG_TYPES (oldtype) && TYPE_ARG_TYPES (newtype)
1327 && TYPE_ACTUAL_ARG_TYPES (oldtype)
1328 && !validate_proto_after_old_defn (newdecl, newtype, oldtype))
1330 locate_old_decl (olddecl, error);
1331 return false;
1333 /* A non-static declaration (even an "extern") followed by a
1334 static declaration is undefined behavior per C99 6.2.2p3-5,7.
1335 The same is true for a static forward declaration at block
1336 scope followed by a non-static declaration/definition at file
1337 scope. Static followed by non-static at the same scope is
1338 not undefined behavior, and is the most convenient way to get
1339 some effects (see e.g. what unwind-dw2-fde-glibc.c does to
1340 the definition of _Unwind_Find_FDE in unwind-dw2-fde.c), but
1341 we do diagnose it if -Wtraditional. */
1342 if (TREE_PUBLIC (olddecl) && !TREE_PUBLIC (newdecl))
1344 /* Two exceptions to the rule. If olddecl is an extern
1345 inline, or a predeclared function that isn't actually
1346 built in, newdecl silently overrides olddecl. The latter
1347 occur only in Objective C; see also above. (FIXME: Make
1348 Objective C use normal builtins.) */
1349 if (!DECL_IS_BUILTIN (olddecl)
1350 && !(DECL_EXTERNAL (olddecl)
1351 && DECL_DECLARED_INLINE_P (olddecl)))
1353 error ("%Jstatic declaration of %qD follows "
1354 "non-static declaration", newdecl, newdecl);
1355 locate_old_decl (olddecl, error);
1357 return false;
1359 else if (TREE_PUBLIC (newdecl) && !TREE_PUBLIC (olddecl))
1361 if (DECL_CONTEXT (olddecl))
1363 error ("%Jnon-static declaration of %qD follows "
1364 "static declaration", newdecl, newdecl);
1365 locate_old_decl (olddecl, error);
1366 return false;
1368 else if (warn_traditional)
1370 warning ("%Jnon-static declaration of %qD follows "
1371 "static declaration", newdecl, newdecl);
1372 warned = true;
1376 else if (TREE_CODE (newdecl) == VAR_DECL)
1378 /* Only variables can be thread-local, and all declarations must
1379 agree on this property. */
1380 if (DECL_THREAD_LOCAL (newdecl) != DECL_THREAD_LOCAL (olddecl))
1382 if (DECL_THREAD_LOCAL (newdecl))
1383 error ("%Jthread-local declaration of %qD follows "
1384 "non-thread-local declaration", newdecl, newdecl);
1385 else
1386 error ("%Jnon-thread-local declaration of %qD follows "
1387 "thread-local declaration", newdecl, newdecl);
1389 locate_old_decl (olddecl, error);
1390 return false;
1393 /* Multiple initialized definitions are not allowed (6.9p3,5). */
1394 if (DECL_INITIAL (newdecl) && DECL_INITIAL (olddecl))
1396 error ("%Jredefinition of %qD", newdecl, newdecl);
1397 locate_old_decl (olddecl, error);
1398 return false;
1401 /* Objects declared at file scope: if the first declaration had
1402 external linkage (even if it was an external reference) the
1403 second must have external linkage as well, or the behavior is
1404 undefined. If the first declaration had internal linkage, then
1405 the second must too, or else be an external reference (in which
1406 case the composite declaration still has internal linkage).
1407 As for function declarations, we warn about the static-then-
1408 extern case only for -Wtraditional. See generally 6.2.2p3-5,7. */
1409 if (DECL_FILE_SCOPE_P (newdecl)
1410 && TREE_PUBLIC (newdecl) != TREE_PUBLIC (olddecl))
1412 if (DECL_EXTERNAL (newdecl))
1414 if (!DECL_FILE_SCOPE_P (olddecl))
1416 error ("%Jextern declaration of %qD follows "
1417 "declaration with no linkage", newdecl, newdecl);
1418 locate_old_decl (olddecl, error);
1419 return false;
1421 else if (warn_traditional)
1423 warning ("%Jnon-static declaration of %qD follows "
1424 "static declaration", newdecl, newdecl);
1425 warned = true;
1428 else
1430 if (TREE_PUBLIC (newdecl))
1431 error ("%Jnon-static declaration of %qD follows "
1432 "static declaration", newdecl, newdecl);
1433 else
1434 error ("%Jstatic declaration of %qD follows "
1435 "non-static declaration", newdecl, newdecl);
1437 locate_old_decl (olddecl, error);
1438 return false;
1441 /* Two objects with the same name declared at the same block
1442 scope must both be external references (6.7p3). */
1443 else if (!DECL_FILE_SCOPE_P (newdecl))
1445 if (DECL_EXTERNAL (newdecl))
1447 /* Extern with initializer at block scope, which will
1448 already have received an error. */
1450 else if (DECL_EXTERNAL (olddecl))
1452 error ("%Jdeclaration of %qD with no linkage follows "
1453 "extern declaration", newdecl, newdecl);
1454 locate_old_decl (olddecl, error);
1456 else
1458 error ("%Jredeclaration of %qD with no linkage",
1459 newdecl, newdecl);
1460 locate_old_decl (olddecl, error);
1463 return false;
1467 /* warnings */
1468 /* All decls must agree on a visibility. */
1469 if (DECL_VISIBILITY_SPECIFIED (newdecl) && DECL_VISIBILITY_SPECIFIED (olddecl)
1470 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
1472 warning ("%Jredeclaration of %qD with different visibility "
1473 "(old visibility preserved)", newdecl, newdecl);
1474 warned = true;
1477 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1479 /* Diagnose inline __attribute__ ((noinline)) which is silly. */
1480 if (DECL_DECLARED_INLINE_P (newdecl)
1481 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1483 warning ("%Jinline declaration of %qD follows "
1484 "declaration with attribute noinline", newdecl, newdecl);
1485 warned = true;
1487 else if (DECL_DECLARED_INLINE_P (olddecl)
1488 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1490 warning ("%Jdeclaration of %qD with attribute noinline follows "
1491 "inline declaration ", newdecl, newdecl);
1492 warned = true;
1495 /* Inline declaration after use or definition.
1496 ??? Should we still warn about this now we have unit-at-a-time
1497 mode and can get it right?
1498 Definitely don't complain if the decls are in different translation
1499 units. */
1500 if (DECL_DECLARED_INLINE_P (newdecl) && !DECL_DECLARED_INLINE_P (olddecl)
1501 && same_translation_unit_p (olddecl, newdecl))
1503 if (TREE_USED (olddecl))
1505 warning ("%J%qD declared inline after being called",
1506 olddecl, olddecl);
1507 warned = true;
1509 else if (DECL_INITIAL (olddecl))
1511 warning ("%J%qD declared inline after its definition",
1512 olddecl, olddecl);
1513 warned = true;
1517 else /* PARM_DECL, VAR_DECL */
1519 /* Redeclaration of a parameter is a constraint violation (this is
1520 not explicitly stated, but follows from C99 6.7p3 [no more than
1521 one declaration of the same identifier with no linkage in the
1522 same scope, except type tags] and 6.2.2p6 [parameters have no
1523 linkage]). We must check for a forward parameter declaration,
1524 indicated by TREE_ASM_WRITTEN on the old declaration - this is
1525 an extension, the mandatory diagnostic for which is handled by
1526 mark_forward_parm_decls. */
1528 if (TREE_CODE (newdecl) == PARM_DECL
1529 && (!TREE_ASM_WRITTEN (olddecl) || TREE_ASM_WRITTEN (newdecl)))
1531 error ("%Jredefinition of parameter %qD", newdecl, newdecl);
1532 locate_old_decl (olddecl, error);
1533 return false;
1537 /* Optional warning for completely redundant decls. */
1538 if (!warned && !pedwarned
1539 && warn_redundant_decls
1540 /* Don't warn about a function declaration followed by a
1541 definition. */
1542 && !(TREE_CODE (newdecl) == FUNCTION_DECL
1543 && DECL_INITIAL (newdecl) && !DECL_INITIAL (olddecl))
1544 /* Don't warn about redundant redeclarations of builtins. */
1545 && !(TREE_CODE (newdecl) == FUNCTION_DECL
1546 && !DECL_BUILT_IN (newdecl)
1547 && DECL_BUILT_IN (olddecl)
1548 && !C_DECL_DECLARED_BUILTIN (olddecl))
1549 /* Don't warn about an extern followed by a definition. */
1550 && !(DECL_EXTERNAL (olddecl) && !DECL_EXTERNAL (newdecl))
1551 /* Don't warn about forward parameter decls. */
1552 && !(TREE_CODE (newdecl) == PARM_DECL
1553 && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl)))
1555 warning ("%Jredundant redeclaration of %qD", newdecl, newdecl);
1556 warned = true;
1559 /* Report location of previous decl/defn in a consistent manner. */
1560 if (warned || pedwarned)
1561 locate_old_decl (olddecl, pedwarned ? pedwarn : warning);
1563 return retval;
1566 /* Subroutine of duplicate_decls. NEWDECL has been found to be
1567 consistent with OLDDECL, but carries new information. Merge the
1568 new information into OLDDECL. This function issues no
1569 diagnostics. */
1571 static void
1572 merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
1574 int new_is_definition = (TREE_CODE (newdecl) == FUNCTION_DECL
1575 && DECL_INITIAL (newdecl) != 0);
1577 /* For real parm decl following a forward decl, rechain the old decl
1578 in its new location and clear TREE_ASM_WRITTEN (it's not a
1579 forward decl anymore). */
1580 if (TREE_CODE (newdecl) == PARM_DECL
1581 && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
1583 struct c_binding *b, **here;
1585 for (here = &current_scope->bindings; *here; here = &(*here)->prev)
1586 if ((*here)->decl == olddecl)
1587 goto found;
1588 gcc_unreachable ();
1590 found:
1591 b = *here;
1592 *here = b->prev;
1593 b->prev = current_scope->bindings;
1594 current_scope->bindings = b;
1596 TREE_ASM_WRITTEN (olddecl) = 0;
1599 DECL_ATTRIBUTES (newdecl)
1600 = targetm.merge_decl_attributes (olddecl, newdecl);
1602 /* Merge the data types specified in the two decls. */
1603 TREE_TYPE (newdecl)
1604 = TREE_TYPE (olddecl)
1605 = composite_type (newtype, oldtype);
1607 /* Lay the type out, unless already done. */
1608 if (!comptypes (oldtype, TREE_TYPE (newdecl)))
1610 if (TREE_TYPE (newdecl) != error_mark_node)
1611 layout_type (TREE_TYPE (newdecl));
1612 if (TREE_CODE (newdecl) != FUNCTION_DECL
1613 && TREE_CODE (newdecl) != TYPE_DECL
1614 && TREE_CODE (newdecl) != CONST_DECL)
1615 layout_decl (newdecl, 0);
1617 else
1619 /* Since the type is OLDDECL's, make OLDDECL's size go with. */
1620 DECL_SIZE (newdecl) = DECL_SIZE (olddecl);
1621 DECL_SIZE_UNIT (newdecl) = DECL_SIZE_UNIT (olddecl);
1622 DECL_MODE (newdecl) = DECL_MODE (olddecl);
1623 if (TREE_CODE (olddecl) != FUNCTION_DECL)
1624 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
1626 DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
1627 DECL_USER_ALIGN (newdecl) |= DECL_ALIGN (olddecl);
1631 /* Keep the old rtl since we can safely use it. */
1632 COPY_DECL_RTL (olddecl, newdecl);
1634 /* Merge the type qualifiers. */
1635 if (TREE_READONLY (newdecl))
1636 TREE_READONLY (olddecl) = 1;
1638 if (TREE_THIS_VOLATILE (newdecl))
1640 TREE_THIS_VOLATILE (olddecl) = 1;
1641 if (TREE_CODE (newdecl) == VAR_DECL)
1642 make_var_volatile (newdecl);
1645 /* Merge deprecatedness. */
1646 if (TREE_DEPRECATED (newdecl))
1647 TREE_DEPRECATED (olddecl) = 1;
1649 /* Keep source location of definition rather than declaration. */
1650 if (DECL_INITIAL (newdecl) == 0 && DECL_INITIAL (olddecl) != 0)
1651 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1653 /* Merge the unused-warning information. */
1654 if (DECL_IN_SYSTEM_HEADER (olddecl))
1655 DECL_IN_SYSTEM_HEADER (newdecl) = 1;
1656 else if (DECL_IN_SYSTEM_HEADER (newdecl))
1657 DECL_IN_SYSTEM_HEADER (olddecl) = 1;
1659 /* Merge the initialization information. */
1660 if (DECL_INITIAL (newdecl) == 0)
1661 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1663 /* Merge the section attribute.
1664 We want to issue an error if the sections conflict but that must be
1665 done later in decl_attributes since we are called before attributes
1666 are assigned. */
1667 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1668 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1670 /* Copy the assembler name.
1671 Currently, it can only be defined in the prototype. */
1672 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
1674 /* Use visibility of whichever declaration had it specified */
1675 if (DECL_VISIBILITY_SPECIFIED (olddecl))
1677 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
1678 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
1681 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1683 DECL_STATIC_CONSTRUCTOR(newdecl) |= DECL_STATIC_CONSTRUCTOR(olddecl);
1684 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1685 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1686 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1687 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1688 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1689 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1690 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1691 DECL_IS_PURE (newdecl) |= DECL_IS_PURE (olddecl);
1694 /* Merge the storage class information. */
1695 merge_weak (newdecl, olddecl);
1697 /* For functions, static overrides non-static. */
1698 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1700 TREE_PUBLIC (newdecl) &= TREE_PUBLIC (olddecl);
1701 /* This is since we don't automatically
1702 copy the attributes of NEWDECL into OLDDECL. */
1703 TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
1704 /* If this clears `static', clear it in the identifier too. */
1705 if (!TREE_PUBLIC (olddecl))
1706 TREE_PUBLIC (DECL_NAME (olddecl)) = 0;
1708 if (DECL_EXTERNAL (newdecl))
1710 TREE_STATIC (newdecl) = TREE_STATIC (olddecl);
1711 DECL_EXTERNAL (newdecl) = DECL_EXTERNAL (olddecl);
1713 /* An extern decl does not override previous storage class. */
1714 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1715 if (!DECL_EXTERNAL (newdecl))
1717 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1718 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
1721 else
1723 TREE_STATIC (olddecl) = TREE_STATIC (newdecl);
1724 TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
1727 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1729 /* If we're redefining a function previously defined as extern
1730 inline, make sure we emit debug info for the inline before we
1731 throw it away, in case it was inlined into a function that hasn't
1732 been written out yet. */
1733 if (new_is_definition && DECL_INITIAL (olddecl))
1735 if (TREE_USED (olddecl)
1736 /* In unit-at-a-time mode we never inline re-defined extern
1737 inline functions. */
1738 && !flag_unit_at_a_time
1739 && cgraph_function_possibly_inlined_p (olddecl))
1740 (*debug_hooks->outlining_inline_function) (olddecl);
1742 /* The new defn must not be inline. */
1743 DECL_INLINE (newdecl) = 0;
1744 DECL_UNINLINABLE (newdecl) = 1;
1746 else
1748 /* If either decl says `inline', this fn is inline,
1749 unless its definition was passed already. */
1750 if (DECL_DECLARED_INLINE_P (newdecl)
1751 || DECL_DECLARED_INLINE_P (olddecl))
1752 DECL_DECLARED_INLINE_P (newdecl) = 1;
1754 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1755 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
1758 if (DECL_BUILT_IN (olddecl))
1760 /* If redeclaring a builtin function, it stays built in.
1761 But it gets tagged as having been declared. */
1762 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
1763 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
1764 C_DECL_DECLARED_BUILTIN (newdecl) = 1;
1767 /* Also preserve various other info from the definition. */
1768 if (!new_is_definition)
1770 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
1771 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1772 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1773 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1774 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
1776 /* Set DECL_INLINE on the declaration if we've got a body
1777 from which to instantiate. */
1778 if (DECL_INLINE (olddecl) && !DECL_UNINLINABLE (newdecl))
1780 DECL_INLINE (newdecl) = 1;
1781 DECL_ABSTRACT_ORIGIN (newdecl)
1782 = DECL_ABSTRACT_ORIGIN (olddecl);
1785 else
1787 /* If a previous declaration said inline, mark the
1788 definition as inlinable. */
1789 if (DECL_DECLARED_INLINE_P (newdecl)
1790 && !DECL_UNINLINABLE (newdecl))
1791 DECL_INLINE (newdecl) = 1;
1795 /* Copy most of the decl-specific fields of NEWDECL into OLDDECL.
1796 But preserve OLDDECL's DECL_UID and DECL_CONTEXT. */
1798 unsigned olddecl_uid = DECL_UID (olddecl);
1799 tree olddecl_context = DECL_CONTEXT (olddecl);
1801 memcpy ((char *) olddecl + sizeof (struct tree_common),
1802 (char *) newdecl + sizeof (struct tree_common),
1803 sizeof (struct tree_decl) - sizeof (struct tree_common));
1804 DECL_UID (olddecl) = olddecl_uid;
1805 DECL_CONTEXT (olddecl) = olddecl_context;
1808 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
1809 so that encode_section_info has a chance to look at the new decl
1810 flags and attributes. */
1811 if (DECL_RTL_SET_P (olddecl)
1812 && (TREE_CODE (olddecl) == FUNCTION_DECL
1813 || (TREE_CODE (olddecl) == VAR_DECL
1814 && TREE_STATIC (olddecl))))
1815 make_decl_rtl (olddecl);
1818 /* Handle when a new declaration NEWDECL has the same name as an old
1819 one OLDDECL in the same binding contour. Prints an error message
1820 if appropriate.
1822 If safely possible, alter OLDDECL to look like NEWDECL, and return
1823 true. Otherwise, return false. */
1825 static bool
1826 duplicate_decls (tree newdecl, tree olddecl)
1828 tree newtype = NULL, oldtype = NULL;
1830 if (!diagnose_mismatched_decls (newdecl, olddecl, &newtype, &oldtype))
1831 return false;
1833 merge_decls (newdecl, olddecl, newtype, oldtype);
1834 return true;
1838 /* Check whether decl-node NEW_DECL shadows an existing declaration. */
1839 static void
1840 warn_if_shadowing (tree new_decl)
1842 struct c_binding *b;
1844 /* Shadow warnings wanted? */
1845 if (!warn_shadow
1846 /* No shadow warnings for internally generated vars. */
1847 || DECL_IS_BUILTIN (new_decl)
1848 /* No shadow warnings for vars made for inlining. */
1849 || DECL_FROM_INLINE (new_decl)
1850 /* Don't warn about the parm names in function declarator
1851 within a function declarator. It would be nice to avoid
1852 warning in any function declarator in a declaration, as
1853 opposed to a definition, but there is no way to tell
1854 it's not a definition at this point. */
1855 || (TREE_CODE (new_decl) == PARM_DECL && current_scope->outer->parm_flag))
1856 return;
1858 /* Is anything being shadowed? Invisible decls do not count. */
1859 for (b = I_SYMBOL_BINDING (DECL_NAME (new_decl)); b; b = b->shadowed)
1860 if (b->decl && b->decl != new_decl && !b->invisible)
1862 tree old_decl = b->decl;
1864 if (old_decl == error_mark_node)
1866 warning ("%Jdeclaration of %qD shadows previous non-variable",
1867 new_decl, new_decl);
1868 break;
1870 else if (TREE_CODE (old_decl) == PARM_DECL)
1871 warning ("%Jdeclaration of %qD shadows a parameter",
1872 new_decl, new_decl);
1873 else if (DECL_FILE_SCOPE_P (old_decl))
1874 warning ("%Jdeclaration of %qD shadows a global declaration",
1875 new_decl, new_decl);
1876 else if (TREE_CODE (old_decl) == FUNCTION_DECL
1877 && DECL_BUILT_IN (old_decl))
1879 warning ("%Jdeclaration of %qD shadows a built-in function",
1880 new_decl, new_decl);
1881 break;
1883 else
1884 warning ("%Jdeclaration of %qD shadows a previous local",
1885 new_decl, new_decl);
1887 warning ("%Jshadowed declaration is here", old_decl);
1889 break;
1894 /* Subroutine of pushdecl.
1896 X is a TYPE_DECL for a typedef statement. Create a brand new
1897 ..._TYPE node (which will be just a variant of the existing
1898 ..._TYPE node with identical properties) and then install X
1899 as the TYPE_NAME of this brand new (duplicate) ..._TYPE node.
1901 The whole point here is to end up with a situation where each
1902 and every ..._TYPE node the compiler creates will be uniquely
1903 associated with AT MOST one node representing a typedef name.
1904 This way, even though the compiler substitutes corresponding
1905 ..._TYPE nodes for TYPE_DECL (i.e. "typedef name") nodes very
1906 early on, later parts of the compiler can always do the reverse
1907 translation and get back the corresponding typedef name. For
1908 example, given:
1910 typedef struct S MY_TYPE;
1911 MY_TYPE object;
1913 Later parts of the compiler might only know that `object' was of
1914 type `struct S' if it were not for code just below. With this
1915 code however, later parts of the compiler see something like:
1917 struct S' == struct S
1918 typedef struct S' MY_TYPE;
1919 struct S' object;
1921 And they can then deduce (from the node for type struct S') that
1922 the original object declaration was:
1924 MY_TYPE object;
1926 Being able to do this is important for proper support of protoize,
1927 and also for generating precise symbolic debugging information
1928 which takes full account of the programmer's (typedef) vocabulary.
1930 Obviously, we don't want to generate a duplicate ..._TYPE node if
1931 the TYPE_DECL node that we are now processing really represents a
1932 standard built-in type.
1934 Since all standard types are effectively declared at line zero
1935 in the source file, we can easily check to see if we are working
1936 on a standard type by checking the current value of lineno. */
1938 static void
1939 clone_underlying_type (tree x)
1941 if (DECL_IS_BUILTIN (x))
1943 if (TYPE_NAME (TREE_TYPE (x)) == 0)
1944 TYPE_NAME (TREE_TYPE (x)) = x;
1946 else if (TREE_TYPE (x) != error_mark_node
1947 && DECL_ORIGINAL_TYPE (x) == NULL_TREE)
1949 tree tt = TREE_TYPE (x);
1950 DECL_ORIGINAL_TYPE (x) = tt;
1951 tt = build_variant_type_copy (tt);
1952 TYPE_NAME (tt) = x;
1953 TREE_USED (tt) = TREE_USED (x);
1954 TREE_TYPE (x) = tt;
1958 /* Record a decl-node X as belonging to the current lexical scope.
1959 Check for errors (such as an incompatible declaration for the same
1960 name already seen in the same scope).
1962 Returns either X or an old decl for the same name.
1963 If an old decl is returned, it may have been smashed
1964 to agree with what X says. */
1966 tree
1967 pushdecl (tree x)
1969 tree name = DECL_NAME (x);
1970 struct c_scope *scope = current_scope;
1971 struct c_binding *b;
1972 bool nested = false;
1974 /* Functions need the lang_decl data. */
1975 if (TREE_CODE (x) == FUNCTION_DECL && !DECL_LANG_SPECIFIC (x))
1976 DECL_LANG_SPECIFIC (x) = GGC_CNEW (struct lang_decl);
1978 /* Must set DECL_CONTEXT for everything not at file scope or
1979 DECL_FILE_SCOPE_P won't work. Local externs don't count
1980 unless they have initializers (which generate code). */
1981 if (current_function_decl
1982 && ((TREE_CODE (x) != FUNCTION_DECL && TREE_CODE (x) != VAR_DECL)
1983 || DECL_INITIAL (x) || !DECL_EXTERNAL (x)))
1984 DECL_CONTEXT (x) = current_function_decl;
1986 /* Anonymous decls are just inserted in the scope. */
1987 if (!name)
1989 bind (name, x, scope, /*invisible=*/false, /*nested=*/false);
1990 return x;
1993 /* First, see if there is another declaration with the same name in
1994 the current scope. If there is, duplicate_decls may do all the
1995 work for us. If duplicate_decls returns false, that indicates
1996 two incompatible decls in the same scope; we are to silently
1997 replace the old one (duplicate_decls has issued all appropriate
1998 diagnostics). In particular, we should not consider possible
1999 duplicates in the external scope, or shadowing. */
2000 b = I_SYMBOL_BINDING (name);
2001 if (b && B_IN_SCOPE (b, scope))
2003 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
2004 && COMPLETE_TYPE_P (TREE_TYPE (x)))
2005 b->inner_comp = false;
2006 if (duplicate_decls (x, b->decl))
2007 return b->decl;
2008 else
2009 goto skip_external_and_shadow_checks;
2012 /* All declarations with external linkage, and all external
2013 references, go in the external scope, no matter what scope is
2014 current. However, the binding in that scope is ignored for
2015 purposes of normal name lookup. A separate binding structure is
2016 created in the requested scope; this governs the normal
2017 visibility of the symbol.
2019 The binding in the externals scope is used exclusively for
2020 detecting duplicate declarations of the same object, no matter
2021 what scope they are in; this is what we do here. (C99 6.2.7p2:
2022 All declarations that refer to the same object or function shall
2023 have compatible type; otherwise, the behavior is undefined.) */
2024 if (DECL_EXTERNAL (x) || scope == file_scope)
2026 tree type = TREE_TYPE (x);
2027 tree vistype = 0;
2028 tree visdecl = 0;
2029 bool type_saved = false;
2030 if (b && !B_IN_EXTERNAL_SCOPE (b)
2031 && (TREE_CODE (b->decl) == FUNCTION_DECL
2032 || TREE_CODE (b->decl) == VAR_DECL)
2033 && DECL_FILE_SCOPE_P (b->decl))
2035 visdecl = b->decl;
2036 vistype = TREE_TYPE (visdecl);
2038 if (warn_nested_externs
2039 && scope != file_scope
2040 && !DECL_IN_SYSTEM_HEADER (x))
2041 warning ("nested extern declaration of %qD", x);
2043 while (b && !B_IN_EXTERNAL_SCOPE (b))
2045 /* If this decl might be modified, save its type. This is
2046 done here rather than when the decl is first bound
2047 because the type may change after first binding, through
2048 being completed or through attributes being added. If we
2049 encounter multiple such decls, only the first should have
2050 its type saved; the others will already have had their
2051 proper types saved and the types will not have changed as
2052 their scopes will not have been re-entered. */
2053 if (DECL_P (b->decl) && DECL_FILE_SCOPE_P (b->decl) && !type_saved)
2055 b->type = TREE_TYPE (b->decl);
2056 type_saved = true;
2058 if (B_IN_FILE_SCOPE (b)
2059 && TREE_CODE (b->decl) == VAR_DECL
2060 && TREE_STATIC (b->decl)
2061 && TREE_CODE (TREE_TYPE (b->decl)) == ARRAY_TYPE
2062 && !TYPE_DOMAIN (TREE_TYPE (b->decl))
2063 && TREE_CODE (type) == ARRAY_TYPE
2064 && TYPE_DOMAIN (type)
2065 && TYPE_MAX_VALUE (TYPE_DOMAIN (type))
2066 && !integer_zerop (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
2068 /* Array type completed in inner scope, which should be
2069 diagnosed if the completion does not have size 1 and
2070 it does not get completed in the file scope. */
2071 b->inner_comp = true;
2073 b = b->shadowed;
2076 /* If a matching external declaration has been found, set its
2077 type to the composite of all the types of that declaration.
2078 After the consistency checks, it will be reset to the
2079 composite of the visible types only. */
2080 if (b && (TREE_PUBLIC (x) || same_translation_unit_p (x, b->decl))
2081 && b->type)
2082 TREE_TYPE (b->decl) = b->type;
2084 /* The point of the same_translation_unit_p check here is,
2085 we want to detect a duplicate decl for a construct like
2086 foo() { extern bar(); } ... static bar(); but not if
2087 they are in different translation units. In any case,
2088 the static does not go in the externals scope. */
2089 if (b
2090 && (TREE_PUBLIC (x) || same_translation_unit_p (x, b->decl))
2091 && duplicate_decls (x, b->decl))
2093 tree thistype;
2094 thistype = (vistype ? composite_type (vistype, type) : type);
2095 b->type = TREE_TYPE (b->decl);
2096 if (TREE_CODE (b->decl) == FUNCTION_DECL && DECL_BUILT_IN (b->decl))
2097 thistype
2098 = build_type_attribute_variant (thistype,
2099 TYPE_ATTRIBUTES (b->type));
2100 TREE_TYPE (b->decl) = thistype;
2101 bind (name, b->decl, scope, /*invisible=*/false, /*nested=*/true);
2102 return b->decl;
2104 else if (TREE_PUBLIC (x))
2106 if (visdecl && !b && duplicate_decls (x, visdecl))
2108 /* An external declaration at block scope referring to a
2109 visible entity with internal linkage. The composite
2110 type will already be correct for this scope, so we
2111 just need to fall through to make the declaration in
2112 this scope. */
2113 nested = true;
2114 x = visdecl;
2116 else
2118 bind (name, x, external_scope, /*invisible=*/true,
2119 /*nested=*/false);
2120 nested = true;
2125 warn_if_shadowing (x);
2127 skip_external_and_shadow_checks:
2128 if (TREE_CODE (x) == TYPE_DECL)
2129 clone_underlying_type (x);
2131 bind (name, x, scope, /*invisible=*/false, nested);
2133 /* If x's type is incomplete because it's based on a
2134 structure or union which has not yet been fully declared,
2135 attach it to that structure or union type, so we can go
2136 back and complete the variable declaration later, if the
2137 structure or union gets fully declared.
2139 If the input is erroneous, we can have error_mark in the type
2140 slot (e.g. "f(void a, ...)") - that doesn't count as an
2141 incomplete type. */
2142 if (TREE_TYPE (x) != error_mark_node
2143 && !COMPLETE_TYPE_P (TREE_TYPE (x)))
2145 tree element = TREE_TYPE (x);
2147 while (TREE_CODE (element) == ARRAY_TYPE)
2148 element = TREE_TYPE (element);
2149 element = TYPE_MAIN_VARIANT (element);
2151 if ((TREE_CODE (element) == RECORD_TYPE
2152 || TREE_CODE (element) == UNION_TYPE)
2153 && (TREE_CODE (x) != TYPE_DECL
2154 || TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE)
2155 && !COMPLETE_TYPE_P (element))
2156 C_TYPE_INCOMPLETE_VARS (element)
2157 = tree_cons (NULL_TREE, x, C_TYPE_INCOMPLETE_VARS (element));
2159 return x;
2162 /* Record X as belonging to file scope.
2163 This is used only internally by the Objective-C front end,
2164 and is limited to its needs. duplicate_decls is not called;
2165 if there is any preexisting decl for this identifier, it is an ICE. */
2167 tree
2168 pushdecl_top_level (tree x)
2170 tree name;
2171 bool nested = false;
2172 gcc_assert (TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == CONST_DECL);
2174 name = DECL_NAME (x);
2176 gcc_assert (TREE_CODE (x) == CONST_DECL || !I_SYMBOL_BINDING (name));
2178 if (TREE_PUBLIC (x))
2180 bind (name, x, external_scope, /*invisible=*/true, /*nested=*/false);
2181 nested = true;
2183 if (file_scope)
2184 bind (name, x, file_scope, /*invisible=*/false, nested);
2186 return x;
2189 static void
2190 implicit_decl_warning (tree id, tree olddecl)
2192 void (*diag) (const char *, ...);
2193 switch (mesg_implicit_function_declaration)
2195 case 0: return;
2196 case 1: diag = warning; break;
2197 case 2: diag = error; break;
2198 default: gcc_unreachable ();
2201 diag (N_("implicit declaration of function %qE"), id);
2202 if (olddecl)
2203 locate_old_decl (olddecl, diag);
2206 /* Generate an implicit declaration for identifier FUNCTIONID as a
2207 function of type int (). */
2209 tree
2210 implicitly_declare (tree functionid)
2212 struct c_binding *b;
2213 tree decl = 0;
2214 tree asmspec_tree;
2216 for (b = I_SYMBOL_BINDING (functionid); b; b = b->shadowed)
2218 if (B_IN_SCOPE (b, external_scope))
2220 decl = b->decl;
2221 break;
2225 if (decl)
2227 if (decl == error_mark_node)
2228 return decl;
2230 /* FIXME: Objective-C has weird not-really-builtin functions
2231 which are supposed to be visible automatically. They wind up
2232 in the external scope because they're pushed before the file
2233 scope gets created. Catch this here and rebind them into the
2234 file scope. */
2235 if (!DECL_BUILT_IN (decl) && DECL_IS_BUILTIN (decl))
2237 bind (functionid, decl, file_scope,
2238 /*invisible=*/false, /*nested=*/true);
2239 return decl;
2241 else
2243 tree newtype = default_function_type;
2244 if (b->type)
2245 TREE_TYPE (decl) = b->type;
2246 /* Implicit declaration of a function already declared
2247 (somehow) in a different scope, or as a built-in.
2248 If this is the first time this has happened, warn;
2249 then recycle the old declaration but with the new type. */
2250 if (!C_DECL_IMPLICIT (decl))
2252 implicit_decl_warning (functionid, decl);
2253 C_DECL_IMPLICIT (decl) = 1;
2255 if (DECL_BUILT_IN (decl))
2257 newtype = build_type_attribute_variant (newtype,
2258 TYPE_ATTRIBUTES
2259 (TREE_TYPE (decl)));
2260 if (!comptypes (newtype, TREE_TYPE (decl)))
2262 warning ("incompatible implicit declaration of built-in"
2263 " function %qD", decl);
2264 newtype = TREE_TYPE (decl);
2267 else
2269 if (!comptypes (newtype, TREE_TYPE (decl)))
2271 error ("incompatible implicit declaration of function %qD",
2272 decl);
2273 locate_old_decl (decl, error);
2276 b->type = TREE_TYPE (decl);
2277 TREE_TYPE (decl) = newtype;
2278 bind (functionid, decl, current_scope,
2279 /*invisible=*/false, /*nested=*/true);
2280 return decl;
2284 /* Not seen before. */
2285 decl = build_decl (FUNCTION_DECL, functionid, default_function_type);
2286 DECL_EXTERNAL (decl) = 1;
2287 TREE_PUBLIC (decl) = 1;
2288 C_DECL_IMPLICIT (decl) = 1;
2289 implicit_decl_warning (functionid, 0);
2290 asmspec_tree = maybe_apply_renaming_pragma (decl, /*asmname=*/NULL);
2291 if (asmspec_tree)
2292 set_user_assembler_name (decl, TREE_STRING_POINTER (asmspec_tree));
2294 /* C89 says implicit declarations are in the innermost block.
2295 So we record the decl in the standard fashion. */
2296 decl = pushdecl (decl);
2298 /* No need to call objc_check_decl here - it's a function type. */
2299 rest_of_decl_compilation (decl, 0, 0);
2301 /* Write a record describing this implicit function declaration
2302 to the prototypes file (if requested). */
2303 gen_aux_info_record (decl, 0, 1, 0);
2305 /* Possibly apply some default attributes to this implicit declaration. */
2306 decl_attributes (&decl, NULL_TREE, 0);
2308 return decl;
2311 /* Issue an error message for a reference to an undeclared variable
2312 ID, including a reference to a builtin outside of function-call
2313 context. Establish a binding of the identifier to error_mark_node
2314 in an appropriate scope, which will suppress further errors for the
2315 same identifier. */
2316 void
2317 undeclared_variable (tree id)
2319 static bool already = false;
2320 struct c_scope *scope;
2322 if (current_function_decl == 0)
2324 error ("%qE undeclared here (not in a function)", id);
2325 scope = current_scope;
2327 else
2329 error ("%qE undeclared (first use in this function)", id);
2331 if (!already)
2333 error ("(Each undeclared identifier is reported only once");
2334 error ("for each function it appears in.)");
2335 already = true;
2338 /* If we are parsing old-style parameter decls, current_function_decl
2339 will be nonnull but current_function_scope will be null. */
2340 scope = current_function_scope ? current_function_scope : current_scope;
2342 bind (id, error_mark_node, scope, /*invisible=*/false, /*nested=*/false);
2345 /* Subroutine of lookup_label, declare_label, define_label: construct a
2346 LABEL_DECL with all the proper frills. */
2348 static tree
2349 make_label (tree name, location_t location)
2351 tree label = build_decl (LABEL_DECL, name, void_type_node);
2353 DECL_CONTEXT (label) = current_function_decl;
2354 DECL_MODE (label) = VOIDmode;
2355 DECL_SOURCE_LOCATION (label) = location;
2357 return label;
2360 /* Get the LABEL_DECL corresponding to identifier NAME as a label.
2361 Create one if none exists so far for the current function.
2362 This is called when a label is used in a goto expression or
2363 has its address taken. */
2365 tree
2366 lookup_label (tree name)
2368 tree label;
2370 if (current_function_decl == 0)
2372 error ("label %qs referenced outside of any function",
2373 IDENTIFIER_POINTER (name));
2374 return 0;
2377 /* Use a label already defined or ref'd with this name, but not if
2378 it is inherited from a containing function and wasn't declared
2379 using __label__. */
2380 label = I_LABEL_DECL (name);
2381 if (label && (DECL_CONTEXT (label) == current_function_decl
2382 || C_DECLARED_LABEL_FLAG (label)))
2384 /* If the label has only been declared, update its apparent
2385 location to point here, for better diagnostics if it
2386 turns out not to have been defined. */
2387 if (!TREE_USED (label))
2388 DECL_SOURCE_LOCATION (label) = input_location;
2389 return label;
2392 /* No label binding for that identifier; make one. */
2393 label = make_label (name, input_location);
2395 /* Ordinary labels go in the current function scope. */
2396 bind (name, label, current_function_scope,
2397 /*invisible=*/false, /*nested=*/false);
2398 return label;
2401 /* Make a label named NAME in the current function, shadowing silently
2402 any that may be inherited from containing functions or containing
2403 scopes. This is called for __label__ declarations. */
2405 tree
2406 declare_label (tree name)
2408 struct c_binding *b = I_LABEL_BINDING (name);
2409 tree label;
2411 /* Check to make sure that the label hasn't already been declared
2412 at this scope */
2413 if (b && B_IN_CURRENT_SCOPE (b))
2415 error ("duplicate label declaration %qs", IDENTIFIER_POINTER (name));
2416 locate_old_decl (b->decl, error);
2418 /* Just use the previous declaration. */
2419 return b->decl;
2422 label = make_label (name, input_location);
2423 C_DECLARED_LABEL_FLAG (label) = 1;
2425 /* Declared labels go in the current scope. */
2426 bind (name, label, current_scope,
2427 /*invisible=*/false, /*nested=*/false);
2428 return label;
2431 /* Define a label, specifying the location in the source file.
2432 Return the LABEL_DECL node for the label, if the definition is valid.
2433 Otherwise return 0. */
2435 tree
2436 define_label (location_t location, tree name)
2438 /* Find any preexisting label with this name. It is an error
2439 if that label has already been defined in this function, or
2440 if there is a containing function with a declared label with
2441 the same name. */
2442 tree label = I_LABEL_DECL (name);
2444 if (label
2445 && ((DECL_CONTEXT (label) == current_function_decl
2446 && DECL_INITIAL (label) != 0)
2447 || (DECL_CONTEXT (label) != current_function_decl
2448 && C_DECLARED_LABEL_FLAG (label))))
2450 error ("%Hduplicate label %qD", &location, label);
2451 locate_old_decl (label, error);
2452 return 0;
2454 else if (label && DECL_CONTEXT (label) == current_function_decl)
2456 /* The label has been used or declared already in this function,
2457 but not defined. Update its location to point to this
2458 definition. */
2459 DECL_SOURCE_LOCATION (label) = location;
2461 else
2463 /* No label binding for that identifier; make one. */
2464 label = make_label (name, location);
2466 /* Ordinary labels go in the current function scope. */
2467 bind (name, label, current_function_scope,
2468 /*invisible=*/false, /*nested=*/false);
2471 if (warn_traditional && !in_system_header && lookup_name (name))
2472 warning ("%Htraditional C lacks a separate namespace for labels, "
2473 "identifier %qs conflicts", &location,
2474 IDENTIFIER_POINTER (name));
2476 /* Mark label as having been defined. */
2477 DECL_INITIAL (label) = error_mark_node;
2478 return label;
2481 /* Given NAME, an IDENTIFIER_NODE,
2482 return the structure (or union or enum) definition for that name.
2483 If THISLEVEL_ONLY is nonzero, searches only the current_scope.
2484 CODE says which kind of type the caller wants;
2485 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
2486 If the wrong kind of type is found, an error is reported. */
2488 static tree
2489 lookup_tag (enum tree_code code, tree name, int thislevel_only)
2491 struct c_binding *b = I_TAG_BINDING (name);
2492 int thislevel = 0;
2494 if (!b || !b->decl)
2495 return 0;
2497 /* We only care about whether it's in this level if
2498 thislevel_only was set or it might be a type clash. */
2499 if (thislevel_only || TREE_CODE (b->decl) != code)
2501 /* For our purposes, a tag in the external scope is the same as
2502 a tag in the file scope. (Primarily relevant to Objective-C
2503 and its builtin structure tags, which get pushed before the
2504 file scope is created.) */
2505 if (B_IN_CURRENT_SCOPE (b)
2506 || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
2507 thislevel = 1;
2510 if (thislevel_only && !thislevel)
2511 return 0;
2513 if (TREE_CODE (b->decl) != code)
2515 /* Definition isn't the kind we were looking for. */
2516 pending_invalid_xref = name;
2517 pending_invalid_xref_location = input_location;
2519 /* If in the same binding level as a declaration as a tag
2520 of a different type, this must not be allowed to
2521 shadow that tag, so give the error immediately.
2522 (For example, "struct foo; union foo;" is invalid.) */
2523 if (thislevel)
2524 pending_xref_error ();
2526 return b->decl;
2529 /* Print an error message now
2530 for a recent invalid struct, union or enum cross reference.
2531 We don't print them immediately because they are not invalid
2532 when used in the `struct foo;' construct for shadowing. */
2534 void
2535 pending_xref_error (void)
2537 if (pending_invalid_xref != 0)
2538 error ("%H%qs defined as wrong kind of tag",
2539 &pending_invalid_xref_location,
2540 IDENTIFIER_POINTER (pending_invalid_xref));
2541 pending_invalid_xref = 0;
2545 /* Look up NAME in the current scope and its superiors
2546 in the namespace of variables, functions and typedefs.
2547 Return a ..._DECL node of some kind representing its definition,
2548 or return 0 if it is undefined. */
2550 tree
2551 lookup_name (tree name)
2553 struct c_binding *b = I_SYMBOL_BINDING (name);
2554 if (b && !b->invisible)
2555 return b->decl;
2556 return 0;
2559 /* Similar to `lookup_name' but look only at the indicated scope. */
2561 static tree
2562 lookup_name_in_scope (tree name, struct c_scope *scope)
2564 struct c_binding *b;
2566 for (b = I_SYMBOL_BINDING (name); b; b = b->shadowed)
2567 if (B_IN_SCOPE (b, scope))
2568 return b->decl;
2569 return 0;
2572 /* Create the predefined scalar types of C,
2573 and some nodes representing standard constants (0, 1, (void *) 0).
2574 Initialize the global scope.
2575 Make definitions for built-in primitive functions. */
2577 void
2578 c_init_decl_processing (void)
2580 tree endlink;
2581 tree ptr_ftype_void, ptr_ftype_ptr;
2582 location_t save_loc = input_location;
2584 /* Adds some ggc roots, and reserved words for c-parse.in. */
2585 c_parse_init ();
2587 current_function_decl = 0;
2589 gcc_obstack_init (&parser_obstack);
2591 /* Make the externals scope. */
2592 push_scope ();
2593 external_scope = current_scope;
2595 /* Declarations from c_common_nodes_and_builtins must not be associated
2596 with this input file, lest we get differences between using and not
2597 using preprocessed headers. */
2598 #ifdef USE_MAPPED_LOCATION
2599 input_location = BUILTINS_LOCATION;
2600 #else
2601 input_location.file = "<built-in>";
2602 input_location.line = 0;
2603 #endif
2605 build_common_tree_nodes (flag_signed_char, false);
2607 c_common_nodes_and_builtins ();
2609 /* In C, comparisons and TRUTH_* expressions have type int. */
2610 truthvalue_type_node = integer_type_node;
2611 truthvalue_true_node = integer_one_node;
2612 truthvalue_false_node = integer_zero_node;
2614 /* Even in C99, which has a real boolean type. */
2615 pushdecl (build_decl (TYPE_DECL, get_identifier ("_Bool"),
2616 boolean_type_node));
2618 endlink = void_list_node;
2619 ptr_ftype_void = build_function_type (ptr_type_node, endlink);
2620 ptr_ftype_ptr
2621 = build_function_type (ptr_type_node,
2622 tree_cons (NULL_TREE, ptr_type_node, endlink));
2624 input_location = save_loc;
2626 pedantic_lvalues = true;
2628 make_fname_decl = c_make_fname_decl;
2629 start_fname_decls ();
2632 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
2633 decl, NAME is the initialization string and TYPE_DEP indicates whether
2634 NAME depended on the type of the function. As we don't yet implement
2635 delayed emission of static data, we mark the decl as emitted
2636 so it is not placed in the output. Anything using it must therefore pull
2637 out the STRING_CST initializer directly. FIXME. */
2639 static tree
2640 c_make_fname_decl (tree id, int type_dep)
2642 const char *name = fname_as_string (type_dep);
2643 tree decl, type, init;
2644 size_t length = strlen (name);
2646 type = build_array_type (char_type_node,
2647 build_index_type (size_int (length)));
2648 type = c_build_qualified_type (type, TYPE_QUAL_CONST);
2650 decl = build_decl (VAR_DECL, id, type);
2652 TREE_STATIC (decl) = 1;
2653 TREE_READONLY (decl) = 1;
2654 DECL_ARTIFICIAL (decl) = 1;
2656 init = build_string (length + 1, name);
2657 free ((char *) name);
2658 TREE_TYPE (init) = type;
2659 DECL_INITIAL (decl) = init;
2661 TREE_USED (decl) = 1;
2663 if (current_function_decl)
2665 DECL_CONTEXT (decl) = current_function_decl;
2666 bind (id, decl, current_function_scope,
2667 /*invisible=*/false, /*nested=*/false);
2670 finish_decl (decl, init, NULL_TREE);
2672 return decl;
2675 /* Return a definition for a builtin function named NAME and whose data type
2676 is TYPE. TYPE should be a function type with argument types.
2677 FUNCTION_CODE tells later passes how to compile calls to this function.
2678 See tree.h for its possible values.
2680 If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
2681 the name to be called if we can't opencode the function. If
2682 ATTRS is nonzero, use that for the function's attribute list. */
2684 tree
2685 builtin_function (const char *name, tree type, int function_code,
2686 enum built_in_class cl, const char *library_name,
2687 tree attrs)
2689 tree id = get_identifier (name);
2690 tree decl = build_decl (FUNCTION_DECL, id, type);
2691 TREE_PUBLIC (decl) = 1;
2692 DECL_EXTERNAL (decl) = 1;
2693 DECL_LANG_SPECIFIC (decl) = GGC_CNEW (struct lang_decl);
2694 DECL_BUILT_IN_CLASS (decl) = cl;
2695 DECL_FUNCTION_CODE (decl) = function_code;
2696 if (library_name)
2697 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (library_name));
2699 /* Should never be called on a symbol with a preexisting meaning. */
2700 gcc_assert (!I_SYMBOL_BINDING (id));
2702 bind (id, decl, external_scope, /*invisible=*/true, /*nested=*/false);
2704 /* Builtins in the implementation namespace are made visible without
2705 needing to be explicitly declared. See push_file_scope. */
2706 if (name[0] == '_' && (name[1] == '_' || ISUPPER (name[1])))
2708 TREE_CHAIN (decl) = visible_builtins;
2709 visible_builtins = decl;
2712 /* Possibly apply some default attributes to this built-in function. */
2713 if (attrs)
2714 decl_attributes (&decl, attrs, ATTR_FLAG_BUILT_IN);
2715 else
2716 decl_attributes (&decl, NULL_TREE, 0);
2718 return decl;
2721 /* Called when a declaration is seen that contains no names to declare.
2722 If its type is a reference to a structure, union or enum inherited
2723 from a containing scope, shadow that tag name for the current scope
2724 with a forward reference.
2725 If its type defines a new named structure or union
2726 or defines an enum, it is valid but we need not do anything here.
2727 Otherwise, it is an error. */
2729 void
2730 shadow_tag (const struct c_declspecs *declspecs)
2732 shadow_tag_warned (declspecs, 0);
2735 /* WARNED is 1 if we have done a pedwarn, 2 if we have done a warning,
2736 but no pedwarn. */
2737 void
2738 shadow_tag_warned (const struct c_declspecs *declspecs, int warned)
2740 bool found_tag = false;
2742 if (declspecs->type && !declspecs->default_int_p && !declspecs->typedef_p)
2744 tree value = declspecs->type;
2745 enum tree_code code = TREE_CODE (value);
2747 if (code == RECORD_TYPE || code == UNION_TYPE || code == ENUMERAL_TYPE)
2748 /* Used to test also that TYPE_SIZE (value) != 0.
2749 That caused warning for `struct foo;' at top level in the file. */
2751 tree name = TYPE_NAME (value);
2752 tree t;
2754 found_tag = true;
2756 if (name == 0)
2758 if (warned != 1 && code != ENUMERAL_TYPE)
2759 /* Empty unnamed enum OK */
2761 pedwarn ("unnamed struct/union that defines no instances");
2762 warned = 1;
2765 else if (!declspecs->tag_defined_p
2766 && declspecs->storage_class != csc_none)
2768 if (warned != 1)
2769 pedwarn ("empty declaration with storage class specifier "
2770 "does not redeclare tag");
2771 warned = 1;
2772 pending_xref_error ();
2774 else if (!declspecs->tag_defined_p
2775 && (declspecs->const_p
2776 || declspecs->volatile_p
2777 || declspecs->restrict_p))
2779 if (warned != 1)
2780 pedwarn ("empty declaration with type qualifier "
2781 "does not redeclare tag");
2782 warned = 1;
2783 pending_xref_error ();
2785 else
2787 pending_invalid_xref = 0;
2788 t = lookup_tag (code, name, 1);
2790 if (t == 0)
2792 t = make_node (code);
2793 pushtag (name, t);
2797 else
2799 if (warned != 1 && !in_system_header)
2801 pedwarn ("useless type name in empty declaration");
2802 warned = 1;
2806 else if (warned != 1 && !in_system_header && declspecs->typedef_p)
2808 pedwarn ("useless type name in empty declaration");
2809 warned = 1;
2812 pending_invalid_xref = 0;
2814 if (declspecs->inline_p)
2816 error ("%<inline%> in empty declaration");
2817 warned = 1;
2820 if (current_scope == file_scope && declspecs->storage_class == csc_auto)
2822 error ("%<auto%> in file-scope empty declaration");
2823 warned = 1;
2826 if (current_scope == file_scope && declspecs->storage_class == csc_register)
2828 error ("%<register%> in file-scope empty declaration");
2829 warned = 1;
2832 if (!warned && !in_system_header && declspecs->storage_class != csc_none)
2834 warning ("useless storage class specifier in empty declaration");
2835 warned = 2;
2838 if (!warned && !in_system_header && declspecs->thread_p)
2840 warning ("useless %<__thread%> in empty declaration");
2841 warned = 2;
2844 if (!warned && !in_system_header && (declspecs->const_p
2845 || declspecs->volatile_p
2846 || declspecs->restrict_p))
2848 warning ("useless type qualifier in empty declaration");
2849 warned = 2;
2852 if (warned != 1)
2854 if (!found_tag)
2855 pedwarn ("empty declaration");
2860 /* Return the qualifiers from SPECS as a bitwise OR of TYPE_QUAL_*
2861 bits. SPECS represents declaration specifiers that the grammar
2862 only permits to contain type qualifiers and attributes. */
2865 quals_from_declspecs (const struct c_declspecs *specs)
2867 int quals = ((specs->const_p ? TYPE_QUAL_CONST : 0)
2868 | (specs->volatile_p ? TYPE_QUAL_VOLATILE : 0)
2869 | (specs->restrict_p ? TYPE_QUAL_RESTRICT : 0));
2870 gcc_assert (!specs->type
2871 && !specs->decl_attr
2872 && specs->typespec_word == cts_none
2873 && specs->storage_class == csc_none
2874 && !specs->typedef_p
2875 && !specs->explicit_signed_p
2876 && !specs->deprecated_p
2877 && !specs->long_p
2878 && !specs->long_long_p
2879 && !specs->short_p
2880 && !specs->signed_p
2881 && !specs->unsigned_p
2882 && !specs->complex_p
2883 && !specs->inline_p
2884 && !specs->thread_p);
2885 return quals;
2888 /* Construct an array declarator. EXPR is the expression inside [], or
2889 NULL_TREE. QUALS are the type qualifiers inside the [] (to be applied
2890 to the pointer to which a parameter array is converted). STATIC_P is
2891 true if "static" is inside the [], false otherwise. VLA_UNSPEC_P
2892 is true if the array is [*], a VLA of unspecified length which is
2893 nevertheless a complete type (not currently implemented by GCC),
2894 false otherwise. The field for the contained declarator is left to be
2895 filled in by set_array_declarator_inner. */
2897 struct c_declarator *
2898 build_array_declarator (tree expr, struct c_declspecs *quals, bool static_p,
2899 bool vla_unspec_p)
2901 struct c_declarator *declarator = XOBNEW (&parser_obstack,
2902 struct c_declarator);
2903 declarator->kind = cdk_array;
2904 declarator->declarator = 0;
2905 declarator->u.array.dimen = expr;
2906 if (quals)
2908 declarator->u.array.attrs = quals->attrs;
2909 declarator->u.array.quals = quals_from_declspecs (quals);
2911 else
2913 declarator->u.array.attrs = NULL_TREE;
2914 declarator->u.array.quals = 0;
2916 declarator->u.array.static_p = static_p;
2917 declarator->u.array.vla_unspec_p = vla_unspec_p;
2918 if (pedantic && !flag_isoc99)
2920 if (static_p || quals != NULL)
2921 pedwarn ("ISO C90 does not support %<static%> or type "
2922 "qualifiers in parameter array declarators");
2923 if (vla_unspec_p)
2924 pedwarn ("ISO C90 does not support %<[*]%> array declarators");
2926 if (vla_unspec_p)
2927 warning ("GCC does not yet properly implement %<[*]%> array declarators");
2928 return declarator;
2931 /* Set the contained declarator of an array declarator. DECL is the
2932 declarator, as constructed by build_array_declarator; INNER is what
2933 appears on the left of the []. ABSTRACT_P is true if it is an
2934 abstract declarator, false otherwise; this is used to reject static
2935 and type qualifiers in abstract declarators, where they are not in
2936 the C99 grammar (subject to possible change in DR#289). */
2938 struct c_declarator *
2939 set_array_declarator_inner (struct c_declarator *decl,
2940 struct c_declarator *inner, bool abstract_p)
2942 decl->declarator = inner;
2943 if (abstract_p && (decl->u.array.quals != TYPE_UNQUALIFIED
2944 || decl->u.array.attrs != NULL_TREE
2945 || decl->u.array.static_p))
2946 error ("static or type qualifiers in abstract declarator");
2947 return decl;
2950 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
2952 tree
2953 groktypename (struct c_type_name *type_name)
2955 tree type;
2956 tree attrs = type_name->specs->attrs;
2958 type_name->specs->attrs = NULL_TREE;
2960 type = grokdeclarator (type_name->declarator, type_name->specs, TYPENAME,
2961 false, NULL);
2963 /* Apply attributes. */
2964 decl_attributes (&type, attrs, 0);
2966 return type;
2969 /* Decode a declarator in an ordinary declaration or data definition.
2970 This is called as soon as the type information and variable name
2971 have been parsed, before parsing the initializer if any.
2972 Here we create the ..._DECL node, fill in its type,
2973 and put it on the list of decls for the current context.
2974 The ..._DECL node is returned as the value.
2976 Exception: for arrays where the length is not specified,
2977 the type is left null, to be filled in by `finish_decl'.
2979 Function definitions do not come here; they go to start_function
2980 instead. However, external and forward declarations of functions
2981 do go through here. Structure field declarations are done by
2982 grokfield and not through here. */
2984 tree
2985 start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs,
2986 bool initialized, tree attributes)
2988 tree decl;
2989 tree tem;
2991 /* An object declared as __attribute__((deprecated)) suppresses
2992 warnings of uses of other deprecated items. */
2993 if (lookup_attribute ("deprecated", attributes))
2994 deprecated_state = DEPRECATED_SUPPRESS;
2996 decl = grokdeclarator (declarator, declspecs,
2997 NORMAL, initialized, NULL);
2998 if (!decl)
2999 return 0;
3001 deprecated_state = DEPRECATED_NORMAL;
3003 if (warn_main > 0 && TREE_CODE (decl) != FUNCTION_DECL
3004 && MAIN_NAME_P (DECL_NAME (decl)))
3005 warning ("%J%qD is usually a function", decl, decl);
3007 if (initialized)
3008 /* Is it valid for this decl to have an initializer at all?
3009 If not, set INITIALIZED to zero, which will indirectly
3010 tell 'finish_decl' to ignore the initializer once it is parsed. */
3011 switch (TREE_CODE (decl))
3013 case TYPE_DECL:
3014 error ("typedef %qD is initialized (use __typeof__ instead)", decl);
3015 initialized = 0;
3016 break;
3018 case FUNCTION_DECL:
3019 error ("function %qD is initialized like a variable", decl);
3020 initialized = 0;
3021 break;
3023 case PARM_DECL:
3024 /* DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. */
3025 error ("parameter %qD is initialized", decl);
3026 initialized = 0;
3027 break;
3029 default:
3030 /* Don't allow initializations for incomplete types except for
3031 arrays which might be completed by the initialization. */
3033 /* This can happen if the array size is an undefined macro.
3034 We already gave a warning, so we don't need another one. */
3035 if (TREE_TYPE (decl) == error_mark_node)
3036 initialized = 0;
3037 else if (COMPLETE_TYPE_P (TREE_TYPE (decl)))
3039 /* A complete type is ok if size is fixed. */
3041 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (decl))) != INTEGER_CST
3042 || C_DECL_VARIABLE_SIZE (decl))
3044 error ("variable-sized object may not be initialized");
3045 initialized = 0;
3048 else if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE)
3050 error ("variable %qD has initializer but incomplete type", decl);
3051 initialized = 0;
3053 else if (C_DECL_VARIABLE_SIZE (decl))
3055 /* Although C99 is unclear about whether incomplete arrays
3056 of VLAs themselves count as VLAs, it does not make
3057 sense to permit them to be initialized given that
3058 ordinary VLAs may not be initialized. */
3059 error ("variable-sized object may not be initialized");
3060 initialized = 0;
3064 if (initialized)
3066 if (current_scope == file_scope)
3067 TREE_STATIC (decl) = 1;
3069 /* Tell 'pushdecl' this is an initialized decl
3070 even though we don't yet have the initializer expression.
3071 Also tell 'finish_decl' it may store the real initializer. */
3072 DECL_INITIAL (decl) = error_mark_node;
3075 /* If this is a function declaration, write a record describing it to the
3076 prototypes file (if requested). */
3078 if (TREE_CODE (decl) == FUNCTION_DECL)
3079 gen_aux_info_record (decl, 0, 0, TYPE_ARG_TYPES (TREE_TYPE (decl)) != 0);
3081 /* ANSI specifies that a tentative definition which is not merged with
3082 a non-tentative definition behaves exactly like a definition with an
3083 initializer equal to zero. (Section 3.7.2)
3085 -fno-common gives strict ANSI behavior, though this tends to break
3086 a large body of code that grew up without this rule.
3088 Thread-local variables are never common, since there's no entrenched
3089 body of code to break, and it allows more efficient variable references
3090 in the presence of dynamic linking. */
3092 if (TREE_CODE (decl) == VAR_DECL
3093 && !initialized
3094 && TREE_PUBLIC (decl)
3095 && !DECL_THREAD_LOCAL (decl)
3096 && !flag_no_common)
3097 DECL_COMMON (decl) = 1;
3099 /* Set attributes here so if duplicate decl, will have proper attributes. */
3100 decl_attributes (&decl, attributes, 0);
3102 if (TREE_CODE (decl) == FUNCTION_DECL
3103 && targetm.calls.promote_prototypes (TREE_TYPE (decl)))
3105 struct c_declarator *ce = declarator;
3107 if (ce->kind == cdk_pointer)
3108 ce = declarator->declarator;
3109 if (ce->kind == cdk_function)
3111 tree args = ce->u.arg_info->parms;
3112 for (; args; args = TREE_CHAIN (args))
3114 tree type = TREE_TYPE (args);
3115 if (type && INTEGRAL_TYPE_P (type)
3116 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
3117 DECL_ARG_TYPE (args) = integer_type_node;
3122 if (TREE_CODE (decl) == FUNCTION_DECL
3123 && DECL_DECLARED_INLINE_P (decl)
3124 && DECL_UNINLINABLE (decl)
3125 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
3126 warning ("%Jinline function %qD given attribute noinline", decl, decl);
3128 /* Add this decl to the current scope.
3129 TEM may equal DECL or it may be a previous decl of the same name. */
3130 tem = pushdecl (decl);
3132 if (initialized && DECL_EXTERNAL (tem))
3134 DECL_EXTERNAL (tem) = 0;
3135 TREE_STATIC (tem) = 1;
3138 return tem;
3141 /* Finish processing of a declaration;
3142 install its initial value.
3143 If the length of an array type is not known before,
3144 it must be determined now, from the initial value, or it is an error. */
3146 void
3147 finish_decl (tree decl, tree init, tree asmspec_tree)
3149 tree type = TREE_TYPE (decl);
3150 int was_incomplete = (DECL_SIZE (decl) == 0);
3151 const char *asmspec = 0;
3153 /* If a name was specified, get the string. */
3154 if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
3155 && DECL_FILE_SCOPE_P (decl))
3156 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
3157 if (asmspec_tree)
3158 asmspec = TREE_STRING_POINTER (asmspec_tree);
3160 /* If `start_decl' didn't like having an initialization, ignore it now. */
3161 if (init != 0 && DECL_INITIAL (decl) == 0)
3162 init = 0;
3164 /* Don't crash if parm is initialized. */
3165 if (TREE_CODE (decl) == PARM_DECL)
3166 init = 0;
3168 if (init)
3169 store_init_value (decl, init);
3171 if (c_dialect_objc () && (TREE_CODE (decl) == VAR_DECL
3172 || TREE_CODE (decl) == FUNCTION_DECL
3173 || TREE_CODE (decl) == FIELD_DECL))
3174 objc_check_decl (decl);
3176 /* Deduce size of array from initialization, if not already known. */
3177 if (TREE_CODE (type) == ARRAY_TYPE
3178 && TYPE_DOMAIN (type) == 0
3179 && TREE_CODE (decl) != TYPE_DECL)
3181 int do_default
3182 = (TREE_STATIC (decl)
3183 /* Even if pedantic, an external linkage array
3184 may have incomplete type at first. */
3185 ? pedantic && !TREE_PUBLIC (decl)
3186 : !DECL_EXTERNAL (decl));
3187 int failure
3188 = complete_array_type (type, DECL_INITIAL (decl), do_default);
3190 /* Get the completed type made by complete_array_type. */
3191 type = TREE_TYPE (decl);
3193 if (failure == 1)
3194 error ("%Jinitializer fails to determine size of %qD", decl, decl);
3196 else if (failure == 2)
3198 if (do_default)
3199 error ("%Jarray size missing in %qD", decl, decl);
3200 /* If a `static' var's size isn't known,
3201 make it extern as well as static, so it does not get
3202 allocated.
3203 If it is not `static', then do not mark extern;
3204 finish_incomplete_decl will give it a default size
3205 and it will get allocated. */
3206 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
3207 DECL_EXTERNAL (decl) = 1;
3210 /* TYPE_MAX_VALUE is always one less than the number of elements
3211 in the array, because we start counting at zero. Therefore,
3212 warn only if the value is less than zero. */
3213 else if (pedantic && TYPE_DOMAIN (type) != 0
3214 && tree_int_cst_sgn (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) < 0)
3215 error ("%Jzero or negative size array %qD", decl, decl);
3217 layout_decl (decl, 0);
3220 if (TREE_CODE (decl) == VAR_DECL)
3222 if (DECL_SIZE (decl) == 0 && TREE_TYPE (decl) != error_mark_node
3223 && COMPLETE_TYPE_P (TREE_TYPE (decl)))
3224 layout_decl (decl, 0);
3226 if (DECL_SIZE (decl) == 0
3227 /* Don't give an error if we already gave one earlier. */
3228 && TREE_TYPE (decl) != error_mark_node
3229 && (TREE_STATIC (decl)
3230 /* A static variable with an incomplete type
3231 is an error if it is initialized.
3232 Also if it is not file scope.
3233 Otherwise, let it through, but if it is not `extern'
3234 then it may cause an error message later. */
3235 ? (DECL_INITIAL (decl) != 0
3236 || !DECL_FILE_SCOPE_P (decl))
3237 /* An automatic variable with an incomplete type
3238 is an error. */
3239 : !DECL_EXTERNAL (decl)))
3241 error ("%Jstorage size of %qD isn%'t known", decl, decl);
3242 TREE_TYPE (decl) = error_mark_node;
3245 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
3246 && DECL_SIZE (decl) != 0)
3248 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
3249 constant_expression_warning (DECL_SIZE (decl));
3250 else
3251 error ("%Jstorage size of %qD isn%'t constant", decl, decl);
3254 if (TREE_USED (type))
3255 TREE_USED (decl) = 1;
3258 /* If this is a function and an assembler name is specified, reset DECL_RTL
3259 so we can give it its new name. Also, update built_in_decls if it
3260 was a normal built-in. */
3261 if (TREE_CODE (decl) == FUNCTION_DECL && asmspec)
3263 if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
3264 set_builtin_user_assembler_name (decl, asmspec);
3265 set_user_assembler_name (decl, asmspec);
3268 /* If #pragma weak was used, mark the decl weak now. */
3269 if (current_scope == file_scope)
3270 maybe_apply_pragma_weak (decl);
3272 /* If this is a variable definition, determine its ELF visibility. */
3273 if (TREE_CODE (decl) == VAR_DECL
3274 && TREE_STATIC (decl)
3275 && !DECL_EXTERNAL (decl))
3276 c_determine_visibility (decl);
3278 /* Output the assembler code and/or RTL code for variables and functions,
3279 unless the type is an undefined structure or union.
3280 If not, it will get done when the type is completed. */
3282 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
3284 /* This is a no-op in c-lang.c or something real in objc-act.c. */
3285 if (c_dialect_objc ())
3286 objc_check_decl (decl);
3288 if (asmspec)
3290 /* If this is not a static variable, issue a warning.
3291 It doesn't make any sense to give an ASMSPEC for an
3292 ordinary, non-register local variable. Historically,
3293 GCC has accepted -- but ignored -- the ASMSPEC in
3294 this case. */
3295 if (!DECL_FILE_SCOPE_P (decl)
3296 && TREE_CODE (decl) == VAR_DECL
3297 && !C_DECL_REGISTER (decl)
3298 && !TREE_STATIC (decl))
3299 warning ("%Jignoring asm-specifier for non-static local "
3300 "variable %qD", decl, decl);
3301 else if (C_DECL_REGISTER (decl))
3302 change_decl_assembler_name (decl, get_identifier (asmspec));
3303 else
3304 set_user_assembler_name (decl, asmspec);
3307 if (DECL_FILE_SCOPE_P (decl))
3309 if (DECL_INITIAL (decl) == NULL_TREE
3310 || DECL_INITIAL (decl) == error_mark_node)
3311 /* Don't output anything
3312 when a tentative file-scope definition is seen.
3313 But at end of compilation, do output code for them. */
3314 DECL_DEFER_OUTPUT (decl) = 1;
3315 rest_of_decl_compilation (decl, true, 0);
3317 else
3319 /* In conjunction with an ASMSPEC, the `register'
3320 keyword indicates that we should place the variable
3321 in a particular register. */
3322 if (asmspec && C_DECL_REGISTER (decl))
3324 DECL_HARD_REGISTER (decl) = 1;
3325 /* This cannot be done for a structure with volatile
3326 fields, on which DECL_REGISTER will have been
3327 reset. */
3328 if (!DECL_REGISTER (decl))
3329 error ("cannot put object with volatile field into register");
3332 if (TREE_CODE (decl) != FUNCTION_DECL)
3334 /* If we're building a variable sized type, and we might be
3335 reachable other than via the top of the current binding
3336 level, then create a new BIND_EXPR so that we deallocate
3337 the object at the right time. */
3338 /* Note that DECL_SIZE can be null due to errors. */
3339 if (DECL_SIZE (decl)
3340 && !TREE_CONSTANT (DECL_SIZE (decl))
3341 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
3343 tree bind;
3344 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
3345 TREE_SIDE_EFFECTS (bind) = 1;
3346 add_stmt (bind);
3347 BIND_EXPR_BODY (bind) = push_stmt_list ();
3349 add_stmt (build_stmt (DECL_EXPR, decl));
3354 if (!DECL_FILE_SCOPE_P (decl))
3356 /* Recompute the RTL of a local array now
3357 if it used to be an incomplete type. */
3358 if (was_incomplete
3359 && !TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
3361 /* If we used it already as memory, it must stay in memory. */
3362 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
3363 /* If it's still incomplete now, no init will save it. */
3364 if (DECL_SIZE (decl) == 0)
3365 DECL_INITIAL (decl) = 0;
3370 /* If this was marked 'used', be sure it will be output. */
3371 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
3372 mark_decl_referenced (decl);
3374 if (TREE_CODE (decl) == TYPE_DECL)
3376 if (!DECL_FILE_SCOPE_P (decl)
3377 && variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
3378 add_stmt (build_stmt (DECL_EXPR, decl));
3380 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl), 0);
3383 /* At the end of a declaration, throw away any variable type sizes
3384 of types defined inside that declaration. There is no use
3385 computing them in the following function definition. */
3386 if (current_scope == file_scope)
3387 get_pending_sizes ();
3389 /* Install a cleanup (aka destructor) if one was given. */
3390 if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
3392 tree attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
3393 if (attr)
3395 tree cleanup_id = TREE_VALUE (TREE_VALUE (attr));
3396 tree cleanup_decl = lookup_name (cleanup_id);
3397 tree cleanup;
3399 /* Build "cleanup(&decl)" for the destructor. */
3400 cleanup = build_unary_op (ADDR_EXPR, decl, 0);
3401 cleanup = build_tree_list (NULL_TREE, cleanup);
3402 cleanup = build_function_call (cleanup_decl, cleanup);
3404 /* Don't warn about decl unused; the cleanup uses it. */
3405 TREE_USED (decl) = 1;
3406 TREE_USED (cleanup_decl) = 1;
3408 /* Initialize EH, if we've been told to do so. */
3409 if (flag_exceptions && !c_eh_initialized_p)
3411 c_eh_initialized_p = true;
3412 eh_personality_libfunc
3413 = init_one_libfunc (USING_SJLJ_EXCEPTIONS
3414 ? "__gcc_personality_sj0"
3415 : "__gcc_personality_v0");
3416 using_eh_for_cleanups ();
3419 push_cleanup (decl, cleanup, false);
3424 /* Given a parsed parameter declaration, decode it into a PARM_DECL. */
3426 tree
3427 grokparm (const struct c_parm *parm)
3429 tree decl = grokdeclarator (parm->declarator, parm->specs, PARM, false,
3430 NULL);
3432 decl_attributes (&decl, parm->attrs, 0);
3434 return decl;
3437 /* Given a parsed parameter declaration, decode it into a PARM_DECL
3438 and push that on the current scope. */
3440 void
3441 push_parm_decl (const struct c_parm *parm)
3443 tree decl;
3445 decl = grokdeclarator (parm->declarator, parm->specs, PARM, false, NULL);
3446 decl_attributes (&decl, parm->attrs, 0);
3448 decl = pushdecl (decl);
3450 finish_decl (decl, NULL_TREE, NULL_TREE);
3453 /* Mark all the parameter declarations to date as forward decls.
3454 Also diagnose use of this extension. */
3456 void
3457 mark_forward_parm_decls (void)
3459 struct c_binding *b;
3461 if (pedantic && !current_scope->warned_forward_parm_decls)
3463 pedwarn ("ISO C forbids forward parameter declarations");
3464 current_scope->warned_forward_parm_decls = true;
3467 for (b = current_scope->bindings; b; b = b->prev)
3468 if (TREE_CODE (b->decl) == PARM_DECL)
3469 TREE_ASM_WRITTEN (b->decl) = 1;
3472 static GTY(()) int compound_literal_number;
3474 /* Build a COMPOUND_LITERAL_EXPR. TYPE is the type given in the compound
3475 literal, which may be an incomplete array type completed by the
3476 initializer; INIT is a CONSTRUCTOR that initializes the compound
3477 literal. */
3479 tree
3480 build_compound_literal (tree type, tree init)
3482 /* We do not use start_decl here because we have a type, not a declarator;
3483 and do not use finish_decl because the decl should be stored inside
3484 the COMPOUND_LITERAL_EXPR rather than added elsewhere as a DECL_EXPR. */
3485 tree decl;
3486 tree complit;
3487 tree stmt;
3489 if (type == error_mark_node)
3490 return error_mark_node;
3492 decl = build_decl (VAR_DECL, NULL_TREE, type);
3493 DECL_EXTERNAL (decl) = 0;
3494 TREE_PUBLIC (decl) = 0;
3495 TREE_STATIC (decl) = (current_scope == file_scope);
3496 DECL_CONTEXT (decl) = current_function_decl;
3497 TREE_USED (decl) = 1;
3498 TREE_TYPE (decl) = type;
3499 TREE_READONLY (decl) = TYPE_READONLY (type);
3500 store_init_value (decl, init);
3502 if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
3504 int failure = complete_array_type (type, DECL_INITIAL (decl), 1);
3506 gcc_assert (!failure);
3509 type = TREE_TYPE (decl);
3510 if (type == error_mark_node || !COMPLETE_TYPE_P (type))
3511 return error_mark_node;
3513 stmt = build_stmt (DECL_EXPR, decl);
3514 complit = build1 (COMPOUND_LITERAL_EXPR, TREE_TYPE (decl), stmt);
3515 TREE_SIDE_EFFECTS (complit) = 1;
3517 layout_decl (decl, 0);
3519 if (TREE_STATIC (decl))
3521 /* This decl needs a name for the assembler output. We also need
3522 a unique suffix to be added to the name. */
3523 char *name;
3525 ASM_FORMAT_PRIVATE_NAME (name, "__compound_literal",
3526 compound_literal_number);
3527 compound_literal_number++;
3528 DECL_NAME (decl) = get_identifier (name);
3529 DECL_DEFER_OUTPUT (decl) = 1;
3530 DECL_COMDAT (decl) = 1;
3531 DECL_ARTIFICIAL (decl) = 1;
3532 DECL_IGNORED_P (decl) = 1;
3533 pushdecl (decl);
3534 rest_of_decl_compilation (decl, 1, 0);
3537 return complit;
3540 /* Make TYPE a complete type based on INITIAL_VALUE.
3541 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
3542 2 if there was no information (in which case assume 1 if DO_DEFAULT). */
3545 complete_array_type (tree type, tree initial_value, int do_default)
3547 tree maxindex = NULL_TREE;
3548 int value = 0;
3550 if (initial_value)
3552 /* Note MAXINDEX is really the maximum index,
3553 one less than the size. */
3554 if (TREE_CODE (initial_value) == STRING_CST)
3556 int eltsize
3557 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
3558 maxindex = build_int_cst (NULL_TREE,
3559 (TREE_STRING_LENGTH (initial_value)
3560 / eltsize) - 1);
3562 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
3564 tree elts = CONSTRUCTOR_ELTS (initial_value);
3565 maxindex = build_int_cst (NULL_TREE, -1);
3566 for (; elts; elts = TREE_CHAIN (elts))
3568 if (TREE_PURPOSE (elts))
3569 maxindex = TREE_PURPOSE (elts);
3570 else
3571 maxindex = fold (build2 (PLUS_EXPR, integer_type_node,
3572 maxindex, integer_one_node));
3575 else
3577 /* Make an error message unless that happened already. */
3578 if (initial_value != error_mark_node)
3579 value = 1;
3581 /* Prevent further error messages. */
3582 maxindex = build_int_cst (NULL_TREE, 0);
3586 if (!maxindex)
3588 if (do_default)
3589 maxindex = build_int_cst (NULL_TREE, 0);
3590 value = 2;
3593 if (maxindex)
3595 TYPE_DOMAIN (type) = build_index_type (maxindex);
3597 gcc_assert (TREE_TYPE (maxindex));
3600 /* Lay out the type now that we can get the real answer. */
3602 layout_type (type);
3604 return value;
3607 /* Determine whether TYPE is a structure with a flexible array member,
3608 or a union containing such a structure (possibly recursively). */
3610 static bool
3611 flexible_array_type_p (tree type)
3613 tree x;
3614 switch (TREE_CODE (type))
3616 case RECORD_TYPE:
3617 x = TYPE_FIELDS (type);
3618 if (x == NULL_TREE)
3619 return false;
3620 while (TREE_CHAIN (x) != NULL_TREE)
3621 x = TREE_CHAIN (x);
3622 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
3623 && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
3624 && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
3625 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
3626 return true;
3627 return false;
3628 case UNION_TYPE:
3629 for (x = TYPE_FIELDS (type); x != NULL_TREE; x = TREE_CHAIN (x))
3631 if (flexible_array_type_p (TREE_TYPE (x)))
3632 return true;
3634 return false;
3635 default:
3636 return false;
3640 /* Performs sanity checks on the TYPE and WIDTH of the bit-field NAME,
3641 replacing with appropriate values if they are invalid. */
3642 static void
3643 check_bitfield_type_and_width (tree *type, tree *width, const char *orig_name)
3645 tree type_mv;
3646 unsigned int max_width;
3647 unsigned HOST_WIDE_INT w;
3648 const char *name = orig_name ? orig_name: _("<anonymous>");
3650 /* Necessary? */
3651 STRIP_NOPS (*width);
3653 /* Detect and ignore out of range field width and process valid
3654 field widths. */
3655 if (TREE_CODE (*width) != INTEGER_CST)
3657 error ("bit-field %qs width not an integer constant", name);
3658 *width = integer_one_node;
3660 else
3662 constant_expression_warning (*width);
3663 if (tree_int_cst_sgn (*width) < 0)
3665 error ("negative width in bit-field %qs", name);
3666 *width = integer_one_node;
3668 else if (integer_zerop (*width) && orig_name)
3670 error ("zero width for bit-field %qs", name);
3671 *width = integer_one_node;
3675 /* Detect invalid bit-field type. */
3676 if (TREE_CODE (*type) != INTEGER_TYPE
3677 && TREE_CODE (*type) != BOOLEAN_TYPE
3678 && TREE_CODE (*type) != ENUMERAL_TYPE)
3680 error ("bit-field %qs has invalid type", name);
3681 *type = unsigned_type_node;
3684 type_mv = TYPE_MAIN_VARIANT (*type);
3685 if (pedantic
3686 && type_mv != integer_type_node
3687 && type_mv != unsigned_type_node
3688 && type_mv != boolean_type_node)
3689 pedwarn ("type of bit-field %qs is a GCC extension", name);
3691 if (type_mv == boolean_type_node)
3692 max_width = CHAR_TYPE_SIZE;
3693 else
3694 max_width = TYPE_PRECISION (*type);
3696 if (0 < compare_tree_int (*width, max_width))
3698 error ("width of %qs exceeds its type", name);
3699 w = max_width;
3700 *width = build_int_cst (NULL_TREE, w);
3702 else
3703 w = tree_low_cst (*width, 1);
3705 if (TREE_CODE (*type) == ENUMERAL_TYPE)
3707 struct lang_type *lt = TYPE_LANG_SPECIFIC (*type);
3708 if (!lt
3709 || w < min_precision (lt->enum_min, TYPE_UNSIGNED (*type))
3710 || w < min_precision (lt->enum_max, TYPE_UNSIGNED (*type)))
3711 warning ("%qs is narrower than values of its type", name);
3715 /* Given declspecs and a declarator,
3716 determine the name and type of the object declared
3717 and construct a ..._DECL node for it.
3718 (In one case we can return a ..._TYPE node instead.
3719 For invalid input we sometimes return 0.)
3721 DECLSPECS is a c_declspecs structure for the declaration specifiers.
3723 DECL_CONTEXT says which syntactic context this declaration is in:
3724 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
3725 FUNCDEF for a function definition. Like NORMAL but a few different
3726 error messages in each case. Return value may be zero meaning
3727 this definition is too screwy to try to parse.
3728 PARM for a parameter declaration (either within a function prototype
3729 or before a function body). Make a PARM_DECL, or return void_type_node.
3730 TYPENAME if for a typename (in a cast or sizeof).
3731 Don't make a DECL node; just return the ..._TYPE node.
3732 FIELD for a struct or union field; make a FIELD_DECL.
3733 INITIALIZED is true if the decl has an initializer.
3734 WIDTH is non-NULL for bit-fields, and is a pointer to an INTEGER_CST node
3735 representing the width of the bit-field.
3737 In the TYPENAME case, DECLARATOR is really an absolute declarator.
3738 It may also be so in the PARM case, for a prototype where the
3739 argument type is specified but not the name.
3741 This function is where the complicated C meanings of `static'
3742 and `extern' are interpreted. */
3744 static tree
3745 grokdeclarator (const struct c_declarator *declarator,
3746 struct c_declspecs *declspecs,
3747 enum decl_context decl_context, bool initialized, tree *width)
3749 tree type = declspecs->type;
3750 bool threadp = declspecs->thread_p;
3751 enum c_storage_class storage_class = declspecs->storage_class;
3752 int constp;
3753 int restrictp;
3754 int volatilep;
3755 int type_quals = TYPE_UNQUALIFIED;
3756 const char *name, *orig_name;
3757 tree typedef_type = 0;
3758 int funcdef_flag = 0;
3759 bool funcdef_syntax = false;
3760 int size_varies = 0;
3761 tree decl_attr = declspecs->decl_attr;
3762 int array_ptr_quals = TYPE_UNQUALIFIED;
3763 tree array_ptr_attrs = NULL_TREE;
3764 int array_parm_static = 0;
3765 tree returned_attrs = NULL_TREE;
3766 bool bitfield = width != NULL;
3767 tree element_type;
3768 struct c_arg_info *arg_info = 0;
3770 if (decl_context == FUNCDEF)
3771 funcdef_flag = 1, decl_context = NORMAL;
3773 /* Look inside a declarator for the name being declared
3774 and get it as a string, for an error message. */
3776 const struct c_declarator *decl = declarator;
3777 name = 0;
3779 while (decl)
3780 switch (decl->kind)
3782 case cdk_function:
3783 case cdk_array:
3784 case cdk_pointer:
3785 funcdef_syntax = (decl->kind == cdk_function);
3786 decl = decl->declarator;
3787 break;
3789 case cdk_attrs:
3790 decl = decl->declarator;
3791 break;
3793 case cdk_id:
3794 if (decl->u.id)
3795 name = IDENTIFIER_POINTER (decl->u.id);
3796 decl = 0;
3797 break;
3799 default:
3800 gcc_unreachable ();
3802 orig_name = name;
3803 if (name == 0)
3804 name = "type name";
3807 /* A function definition's declarator must have the form of
3808 a function declarator. */
3810 if (funcdef_flag && !funcdef_syntax)
3811 return 0;
3813 /* If this looks like a function definition, make it one,
3814 even if it occurs where parms are expected.
3815 Then store_parm_decls will reject it and not use it as a parm. */
3816 if (decl_context == NORMAL && !funcdef_flag && current_scope->parm_flag)
3817 decl_context = PARM;
3819 if (declspecs->deprecated_p && deprecated_state != DEPRECATED_SUPPRESS)
3820 warn_deprecated_use (declspecs->type);
3822 typedef_type = type;
3823 size_varies = C_TYPE_VARIABLE_SIZE (type);
3825 /* Diagnose defaulting to "int". */
3827 if (declspecs->default_int_p && !in_system_header)
3829 /* Issue a warning if this is an ISO C 99 program or if
3830 -Wreturn-type and this is a function, or if -Wimplicit;
3831 prefer the former warning since it is more explicit. */
3832 if ((warn_implicit_int || warn_return_type || flag_isoc99)
3833 && funcdef_flag)
3834 warn_about_return_type = 1;
3835 else if (warn_implicit_int || flag_isoc99)
3836 pedwarn_c99 ("type defaults to %<int%> in declaration of %qs", name);
3839 /* Adjust the type if a bit-field is being declared,
3840 -funsigned-bitfields applied and the type is not explicitly
3841 "signed". */
3842 if (bitfield && !flag_signed_bitfields && !declspecs->explicit_signed_p
3843 && TREE_CODE (type) == INTEGER_TYPE)
3844 type = c_common_unsigned_type (type);
3846 /* Figure out the type qualifiers for the declaration. There are
3847 two ways a declaration can become qualified. One is something
3848 like `const int i' where the `const' is explicit. Another is
3849 something like `typedef const int CI; CI i' where the type of the
3850 declaration contains the `const'. A third possibility is that
3851 there is a type qualifier on the element type of a typedefed
3852 array type, in which case we should extract that qualifier so
3853 that c_apply_type_quals_to_decls receives the full list of
3854 qualifiers to work with (C90 is not entirely clear about whether
3855 duplicate qualifiers should be diagnosed in this case, but it
3856 seems most appropriate to do so). */
3857 element_type = strip_array_types (type);
3858 constp = declspecs->const_p + TYPE_READONLY (element_type);
3859 restrictp = declspecs->restrict_p + TYPE_RESTRICT (element_type);
3860 volatilep = declspecs->volatile_p + TYPE_VOLATILE (element_type);
3861 if (pedantic && !flag_isoc99)
3863 if (constp > 1)
3864 pedwarn ("duplicate %<const%>");
3865 if (restrictp > 1)
3866 pedwarn ("duplicate %<restrict%>");
3867 if (volatilep > 1)
3868 pedwarn ("duplicate %<volatile%>");
3870 if (!flag_gen_aux_info && (TYPE_QUALS (element_type)))
3871 type = TYPE_MAIN_VARIANT (type);
3872 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
3873 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
3874 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
3876 /* Warn about storage classes that are invalid for certain
3877 kinds of declarations (parameters, typenames, etc.). */
3879 if (funcdef_flag
3880 && (threadp
3881 || storage_class == csc_auto
3882 || storage_class == csc_register
3883 || storage_class == csc_typedef))
3885 if (storage_class == csc_auto
3886 && (pedantic || current_scope == file_scope))
3887 pedwarn ("function definition declared %<auto%>");
3888 if (storage_class == csc_register)
3889 error ("function definition declared %<register%>");
3890 if (storage_class == csc_typedef)
3891 error ("function definition declared %<typedef%>");
3892 if (threadp)
3893 error ("function definition declared %<__thread%>");
3894 threadp = false;
3895 if (storage_class == csc_auto
3896 || storage_class == csc_register
3897 || storage_class == csc_typedef)
3898 storage_class = csc_none;
3900 else if (decl_context != NORMAL && (storage_class != csc_none || threadp))
3902 if (decl_context == PARM && storage_class == csc_register)
3904 else
3906 switch (decl_context)
3908 case FIELD:
3909 error ("storage class specified for structure field %qs",
3910 name);
3911 break;
3912 case PARM:
3913 error ("storage class specified for parameter %qs", name);
3914 break;
3915 default:
3916 error ("storage class specified for typename");
3917 break;
3919 storage_class = csc_none;
3920 threadp = false;
3923 else if (storage_class == csc_extern
3924 && initialized
3925 && !funcdef_flag)
3927 /* 'extern' with initialization is invalid if not at file scope. */
3928 if (current_scope == file_scope)
3929 warning ("%qs initialized and declared %<extern%>", name);
3930 else
3931 error ("%qs has both %<extern%> and initializer", name);
3933 else if (current_scope == file_scope)
3935 if (storage_class == csc_auto)
3936 error ("file-scope declaration of %qs specifies %<auto%>", name);
3937 if (pedantic && storage_class == csc_register)
3938 pedwarn ("file-scope declaration of %qs specifies %<register%>", name);
3940 else
3942 if (storage_class == csc_extern && funcdef_flag)
3943 error ("nested function %qs declared %<extern%>", name);
3944 else if (threadp && storage_class == csc_none)
3946 error ("function-scope %qs implicitly auto and declared "
3947 "%<__thread%>",
3948 name);
3949 threadp = false;
3953 /* Now figure out the structure of the declarator proper.
3954 Descend through it, creating more complex types, until we reach
3955 the declared identifier (or NULL_TREE, in an absolute declarator).
3956 At each stage we maintain an unqualified version of the type
3957 together with any qualifiers that should be applied to it with
3958 c_build_qualified_type; this way, array types including
3959 multidimensional array types are first built up in unqualified
3960 form and then the qualified form is created with
3961 TYPE_MAIN_VARIANT pointing to the unqualified form. */
3963 while (declarator && declarator->kind != cdk_id)
3965 if (type == error_mark_node)
3967 declarator = declarator->declarator;
3968 continue;
3971 /* Each level of DECLARATOR is either a cdk_array (for ...[..]),
3972 a cdk_pointer (for *...),
3973 a cdk_function (for ...(...)),
3974 a cdk_attrs (for nested attributes),
3975 or a cdk_id (for the name being declared
3976 or the place in an absolute declarator
3977 where the name was omitted).
3978 For the last case, we have just exited the loop.
3980 At this point, TYPE is the type of elements of an array,
3981 or for a function to return, or for a pointer to point to.
3982 After this sequence of ifs, TYPE is the type of the
3983 array or function or pointer, and DECLARATOR has had its
3984 outermost layer removed. */
3986 if (array_ptr_quals != TYPE_UNQUALIFIED
3987 || array_ptr_attrs != NULL_TREE
3988 || array_parm_static)
3990 /* Only the innermost declarator (making a parameter be of
3991 array type which is converted to pointer type)
3992 may have static or type qualifiers. */
3993 error ("static or type qualifiers in non-parameter array declarator");
3994 array_ptr_quals = TYPE_UNQUALIFIED;
3995 array_ptr_attrs = NULL_TREE;
3996 array_parm_static = 0;
3999 switch (declarator->kind)
4001 case cdk_attrs:
4003 /* A declarator with embedded attributes. */
4004 tree attrs = declarator->u.attrs;
4005 const struct c_declarator *inner_decl;
4006 int attr_flags = 0;
4007 declarator = declarator->declarator;
4008 inner_decl = declarator;
4009 while (inner_decl->kind == cdk_attrs)
4010 inner_decl = inner_decl->declarator;
4011 if (inner_decl->kind == cdk_id)
4012 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
4013 else if (inner_decl->kind == cdk_function)
4014 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
4015 else if (inner_decl->kind == cdk_array)
4016 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
4017 returned_attrs = decl_attributes (&type,
4018 chainon (returned_attrs, attrs),
4019 attr_flags);
4020 break;
4022 case cdk_array:
4024 tree itype = NULL_TREE;
4025 tree size = declarator->u.array.dimen;
4026 /* The index is a signed object `sizetype' bits wide. */
4027 tree index_type = c_common_signed_type (sizetype);
4029 array_ptr_quals = declarator->u.array.quals;
4030 array_ptr_attrs = declarator->u.array.attrs;
4031 array_parm_static = declarator->u.array.static_p;
4033 declarator = declarator->declarator;
4035 /* Check for some types that there cannot be arrays of. */
4037 if (VOID_TYPE_P (type))
4039 error ("declaration of %qs as array of voids", name);
4040 type = error_mark_node;
4043 if (TREE_CODE (type) == FUNCTION_TYPE)
4045 error ("declaration of %qs as array of functions", name);
4046 type = error_mark_node;
4049 if (pedantic && !in_system_header && flexible_array_type_p (type))
4050 pedwarn ("invalid use of structure with flexible array member");
4052 if (size == error_mark_node)
4053 type = error_mark_node;
4055 if (type == error_mark_node)
4056 continue;
4058 /* If size was specified, set ITYPE to a range-type for
4059 that size. Otherwise, ITYPE remains null. finish_decl
4060 may figure it out from an initial value. */
4062 if (size)
4064 /* Strip NON_LVALUE_EXPRs since we aren't using as an
4065 lvalue. */
4066 STRIP_TYPE_NOPS (size);
4068 if (!INTEGRAL_TYPE_P (TREE_TYPE (size)))
4070 error ("size of array %qs has non-integer type", name);
4071 size = integer_one_node;
4074 if (pedantic && integer_zerop (size))
4075 pedwarn ("ISO C forbids zero-size array %qs", name);
4077 if (TREE_CODE (size) == INTEGER_CST)
4079 constant_expression_warning (size);
4080 if (tree_int_cst_sgn (size) < 0)
4082 error ("size of array %qs is negative", name);
4083 size = integer_one_node;
4086 else
4088 /* Make sure the array size remains visibly
4089 nonconstant even if it is (eg) a const variable
4090 with known value. */
4091 size_varies = 1;
4093 if (!flag_isoc99 && pedantic)
4095 if (TREE_CONSTANT (size))
4096 pedwarn ("ISO C90 forbids array %qs whose size "
4097 "can%'t be evaluated",
4098 name);
4099 else
4100 pedwarn ("ISO C90 forbids variable-size array %qs",
4101 name);
4105 if (integer_zerop (size))
4107 /* A zero-length array cannot be represented with
4108 an unsigned index type, which is what we'll
4109 get with build_index_type. Create an
4110 open-ended range instead. */
4111 itype = build_range_type (sizetype, size, NULL_TREE);
4113 else
4115 /* Arrange for the SAVE_EXPR on the inside of the
4116 MINUS_EXPR, which allows the -1 to get folded
4117 with the +1 that happens when building TYPE_SIZE. */
4118 if (size_varies)
4119 size = variable_size (size);
4121 /* Compute the maximum valid index, that is, size
4122 - 1. Do the calculation in index_type, so that
4123 if it is a variable the computations will be
4124 done in the proper mode. */
4125 itype = fold (build2 (MINUS_EXPR, index_type,
4126 convert (index_type, size),
4127 convert (index_type,
4128 size_one_node)));
4130 /* If that overflowed, the array is too big. ???
4131 While a size of INT_MAX+1 technically shouldn't
4132 cause an overflow (because we subtract 1), the
4133 overflow is recorded during the conversion to
4134 index_type, before the subtraction. Handling
4135 this case seems like an unnecessary
4136 complication. */
4137 if (TREE_OVERFLOW (itype))
4139 error ("size of array %qs is too large", name);
4140 type = error_mark_node;
4141 continue;
4144 itype = build_index_type (itype);
4147 else if (decl_context == FIELD)
4149 if (pedantic && !flag_isoc99 && !in_system_header)
4150 pedwarn ("ISO C90 does not support flexible array members");
4152 /* ISO C99 Flexible array members are effectively
4153 identical to GCC's zero-length array extension. */
4154 itype = build_range_type (sizetype, size_zero_node, NULL_TREE);
4157 /* Complain about arrays of incomplete types. */
4158 if (!COMPLETE_TYPE_P (type))
4160 error ("array type has incomplete element type");
4161 type = error_mark_node;
4163 else
4164 type = build_array_type (type, itype);
4166 if (size_varies)
4167 C_TYPE_VARIABLE_SIZE (type) = 1;
4169 /* The GCC extension for zero-length arrays differs from
4170 ISO flexible array members in that sizeof yields
4171 zero. */
4172 if (size && integer_zerop (size))
4174 TYPE_SIZE (type) = bitsize_zero_node;
4175 TYPE_SIZE_UNIT (type) = size_zero_node;
4178 if (decl_context != PARM
4179 && (array_ptr_quals != TYPE_UNQUALIFIED
4180 || array_ptr_attrs != NULL_TREE
4181 || array_parm_static))
4183 error ("static or type qualifiers in non-parameter array declarator");
4184 array_ptr_quals = TYPE_UNQUALIFIED;
4185 array_ptr_attrs = NULL_TREE;
4186 array_parm_static = 0;
4188 break;
4190 case cdk_function:
4192 /* Say it's a definition only for the declarator closest
4193 to the identifier, apart possibly from some
4194 attributes. */
4195 bool really_funcdef = false;
4196 tree arg_types;
4197 if (funcdef_flag)
4199 const struct c_declarator *t = declarator->declarator;
4200 while (t->kind == cdk_attrs)
4201 t = t->declarator;
4202 really_funcdef = (t->kind == cdk_id);
4205 /* Declaring a function type. Make sure we have a valid
4206 type for the function to return. */
4207 if (type == error_mark_node)
4208 continue;
4210 size_varies = 0;
4212 /* Warn about some types functions can't return. */
4213 if (TREE_CODE (type) == FUNCTION_TYPE)
4215 error ("%qs declared as function returning a function", name);
4216 type = integer_type_node;
4218 if (TREE_CODE (type) == ARRAY_TYPE)
4220 error ("%qs declared as function returning an array", name);
4221 type = integer_type_node;
4224 /* Construct the function type and go to the next
4225 inner layer of declarator. */
4226 arg_info = declarator->u.arg_info;
4227 arg_types = grokparms (arg_info, really_funcdef);
4229 /* Type qualifiers before the return type of the function
4230 qualify the return type, not the function type. */
4231 if (type_quals)
4233 /* Type qualifiers on a function return type are
4234 normally permitted by the standard but have no
4235 effect, so give a warning at -Wreturn-type.
4236 Qualifiers on a void return type are banned on
4237 function definitions in ISO C; GCC used to used
4238 them for noreturn functions. */
4239 if (VOID_TYPE_P (type) && really_funcdef)
4240 pedwarn ("function definition has qualified void return type");
4241 else if (warn_return_type)
4242 warning ("type qualifiers ignored on function return type");
4244 type = c_build_qualified_type (type, type_quals);
4246 type_quals = TYPE_UNQUALIFIED;
4248 type = build_function_type (type, arg_types);
4249 declarator = declarator->declarator;
4251 /* Set the TYPE_CONTEXTs for each tagged type which is local to
4252 the formal parameter list of this FUNCTION_TYPE to point to
4253 the FUNCTION_TYPE node itself. */
4255 tree link;
4257 for (link = arg_info->tags;
4258 link;
4259 link = TREE_CHAIN (link))
4260 TYPE_CONTEXT (TREE_VALUE (link)) = type;
4262 break;
4264 case cdk_pointer:
4266 /* Merge any constancy or volatility into the target type
4267 for the pointer. */
4269 if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4270 && type_quals)
4271 pedwarn ("ISO C forbids qualified function types");
4272 if (type_quals)
4273 type = c_build_qualified_type (type, type_quals);
4274 size_varies = 0;
4276 type = build_pointer_type (type);
4278 /* Process type qualifiers (such as const or volatile)
4279 that were given inside the `*'. */
4280 type_quals = declarator->u.pointer_quals;
4282 declarator = declarator->declarator;
4283 break;
4285 default:
4286 gcc_unreachable ();
4290 /* Now TYPE has the actual type, apart from any qualifiers in
4291 TYPE_QUALS. */
4293 /* Check the type and width of a bit-field. */
4294 if (bitfield)
4295 check_bitfield_type_and_width (&type, width, orig_name);
4297 /* Did array size calculations overflow? */
4299 if (TREE_CODE (type) == ARRAY_TYPE
4300 && COMPLETE_TYPE_P (type)
4301 && TREE_OVERFLOW (TYPE_SIZE (type)))
4303 error ("size of array %qs is too large", name);
4304 /* If we proceed with the array type as it is, we'll eventually
4305 crash in tree_low_cst(). */
4306 type = error_mark_node;
4309 /* If this is declaring a typedef name, return a TYPE_DECL. */
4311 if (storage_class == csc_typedef)
4313 tree decl;
4314 if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4315 && type_quals)
4316 pedwarn ("ISO C forbids qualified function types");
4317 if (type_quals)
4318 type = c_build_qualified_type (type, type_quals);
4319 decl = build_decl (TYPE_DECL, declarator->u.id, type);
4320 if (declspecs->explicit_signed_p)
4321 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
4322 decl_attributes (&decl, returned_attrs, 0);
4323 if (declspecs->inline_p)
4324 pedwarn ("%Jtypedef %qD declared %<inline%>", decl, decl);
4325 return decl;
4328 /* Detect the case of an array type of unspecified size
4329 which came, as such, direct from a typedef name.
4330 We must copy the type, so that each identifier gets
4331 a distinct type, so that each identifier's size can be
4332 controlled separately by its own initializer. */
4334 if (type != 0 && typedef_type != 0
4335 && TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == 0
4336 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
4338 type = build_array_type (TREE_TYPE (type), 0);
4339 if (size_varies)
4340 C_TYPE_VARIABLE_SIZE (type) = 1;
4343 /* If this is a type name (such as, in a cast or sizeof),
4344 compute the type and return it now. */
4346 if (decl_context == TYPENAME)
4348 /* Note that the grammar rejects storage classes in typenames
4349 and fields. */
4350 gcc_assert (storage_class == csc_none && !threadp
4351 && !declspecs->inline_p);
4352 if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4353 && type_quals)
4354 pedwarn ("ISO C forbids const or volatile function types");
4355 if (type_quals)
4356 type = c_build_qualified_type (type, type_quals);
4357 decl_attributes (&type, returned_attrs, 0);
4358 return type;
4361 /* Aside from typedefs and type names (handle above),
4362 `void' at top level (not within pointer)
4363 is allowed only in public variables.
4364 We don't complain about parms either, but that is because
4365 a better error message can be made later. */
4367 if (VOID_TYPE_P (type) && decl_context != PARM
4368 && !((decl_context != FIELD && TREE_CODE (type) != FUNCTION_TYPE)
4369 && (storage_class == csc_extern
4370 || (current_scope == file_scope
4371 && !(storage_class == csc_static
4372 || storage_class == csc_register)))))
4374 error ("variable or field %qs declared void", name);
4375 type = integer_type_node;
4378 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
4379 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
4382 tree decl;
4384 if (decl_context == PARM)
4386 tree type_as_written;
4387 tree promoted_type;
4389 /* A parameter declared as an array of T is really a pointer to T.
4390 One declared as a function is really a pointer to a function. */
4392 if (TREE_CODE (type) == ARRAY_TYPE)
4394 /* Transfer const-ness of array into that of type pointed to. */
4395 type = TREE_TYPE (type);
4396 if (type_quals)
4397 type = c_build_qualified_type (type, type_quals);
4398 type = build_pointer_type (type);
4399 type_quals = array_ptr_quals;
4401 /* We don't yet implement attributes in this context. */
4402 if (array_ptr_attrs != NULL_TREE)
4403 warning ("attributes in parameter array declarator ignored");
4405 size_varies = 0;
4407 else if (TREE_CODE (type) == FUNCTION_TYPE)
4409 if (pedantic && type_quals)
4410 pedwarn ("ISO C forbids qualified function types");
4411 if (type_quals)
4412 type = c_build_qualified_type (type, type_quals);
4413 type = build_pointer_type (type);
4414 type_quals = TYPE_UNQUALIFIED;
4416 else if (type_quals)
4417 type = c_build_qualified_type (type, type_quals);
4419 type_as_written = type;
4421 decl = build_decl (PARM_DECL, declarator->u.id, type);
4422 if (size_varies)
4423 C_DECL_VARIABLE_SIZE (decl) = 1;
4425 /* Compute the type actually passed in the parmlist,
4426 for the case where there is no prototype.
4427 (For example, shorts and chars are passed as ints.)
4428 When there is a prototype, this is overridden later. */
4430 if (type == error_mark_node)
4431 promoted_type = type;
4432 else
4433 promoted_type = c_type_promotes_to (type);
4435 DECL_ARG_TYPE (decl) = promoted_type;
4436 DECL_ARG_TYPE_AS_WRITTEN (decl) = type_as_written;
4437 if (declspecs->inline_p)
4438 pedwarn ("%Jparameter %qD declared %<inline%>", decl, decl);
4440 else if (decl_context == FIELD)
4442 /* Note that the grammar rejects storage classes in typenames
4443 and fields. */
4444 gcc_assert (storage_class == csc_none && !threadp
4445 && !declspecs->inline_p);
4447 /* Structure field. It may not be a function. */
4449 if (TREE_CODE (type) == FUNCTION_TYPE)
4451 error ("field %qs declared as a function", name);
4452 type = build_pointer_type (type);
4454 else if (TREE_CODE (type) != ERROR_MARK
4455 && !COMPLETE_OR_UNBOUND_ARRAY_TYPE_P (type))
4457 error ("field %qs has incomplete type", name);
4458 type = error_mark_node;
4460 type = c_build_qualified_type (type, type_quals);
4461 decl = build_decl (FIELD_DECL, declarator->u.id, type);
4462 DECL_NONADDRESSABLE_P (decl) = bitfield;
4464 if (size_varies)
4465 C_DECL_VARIABLE_SIZE (decl) = 1;
4467 else if (TREE_CODE (type) == FUNCTION_TYPE)
4469 if (storage_class == csc_register || threadp)
4471 error ("invalid storage class for function %qs", name);
4473 else if (current_scope != file_scope)
4475 /* Function declaration not at file scope. Storage
4476 classes other than `extern' are not allowed, C99
4477 6.7.1p5, and `extern' makes no difference. However,
4478 GCC allows 'auto', perhaps with 'inline', to support
4479 nested functions. */
4480 if (storage_class == csc_auto)
4482 if (pedantic)
4483 pedwarn ("invalid storage class for function %qs", name);
4485 else if (storage_class == csc_static)
4487 error ("invalid storage class for function %qs", name);
4488 if (funcdef_flag)
4489 storage_class = declspecs->storage_class = csc_none;
4490 else
4491 return 0;
4495 decl = build_decl (FUNCTION_DECL, declarator->u.id, type);
4496 decl = build_decl_attribute_variant (decl, decl_attr);
4498 DECL_LANG_SPECIFIC (decl) = GGC_CNEW (struct lang_decl);
4500 if (pedantic && type_quals && !DECL_IN_SYSTEM_HEADER (decl))
4501 pedwarn ("ISO C forbids qualified function types");
4503 /* GNU C interprets a volatile-qualified function type to indicate
4504 that the function does not return. */
4505 if ((type_quals & TYPE_QUAL_VOLATILE)
4506 && !VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
4507 warning ("%<noreturn%> function returns non-void value");
4509 /* Every function declaration is an external reference
4510 (DECL_EXTERNAL) except for those which are not at file
4511 scope and are explicitly declared "auto". This is
4512 forbidden by standard C (C99 6.7.1p5) and is interpreted by
4513 GCC to signify a forward declaration of a nested function. */
4514 if (storage_class == csc_auto && current_scope != file_scope)
4515 DECL_EXTERNAL (decl) = 0;
4516 else
4517 DECL_EXTERNAL (decl) = 1;
4519 /* Record absence of global scope for `static' or `auto'. */
4520 TREE_PUBLIC (decl)
4521 = !(storage_class == csc_static || storage_class == csc_auto);
4523 /* For a function definition, record the argument information
4524 block where store_parm_decls will look for it. */
4525 if (funcdef_flag)
4526 current_function_arg_info = arg_info;
4528 if (declspecs->default_int_p)
4529 C_FUNCTION_IMPLICIT_INT (decl) = 1;
4531 /* Record presence of `inline', if it is reasonable. */
4532 if (flag_hosted && MAIN_NAME_P (declarator->u.id))
4534 if (declspecs->inline_p)
4535 pedwarn ("cannot inline function %<main%>");
4537 else if (declspecs->inline_p)
4539 /* Record that the function is declared `inline'. */
4540 DECL_DECLARED_INLINE_P (decl) = 1;
4542 /* Do not mark bare declarations as DECL_INLINE. Doing so
4543 in the presence of multiple declarations can result in
4544 the abstract origin pointing between the declarations,
4545 which will confuse dwarf2out. */
4546 if (initialized)
4548 DECL_INLINE (decl) = 1;
4549 if (storage_class == csc_extern)
4550 current_extern_inline = 1;
4553 /* If -finline-functions, assume it can be inlined. This does
4554 two things: let the function be deferred until it is actually
4555 needed, and let dwarf2 know that the function is inlinable. */
4556 else if (flag_inline_trees == 2 && initialized)
4557 DECL_INLINE (decl) = 1;
4559 else
4561 /* It's a variable. */
4562 /* An uninitialized decl with `extern' is a reference. */
4563 int extern_ref = !initialized && storage_class == csc_extern;
4565 type = c_build_qualified_type (type, type_quals);
4567 /* C99 6.2.2p7: It is invalid (compile-time undefined
4568 behavior) to create an 'extern' declaration for a
4569 variable if there is a global declaration that is
4570 'static' and the global declaration is not visible.
4571 (If the static declaration _is_ currently visible,
4572 the 'extern' declaration is taken to refer to that decl.) */
4573 if (extern_ref && current_scope != file_scope)
4575 tree global_decl = identifier_global_value (declarator->u.id);
4576 tree visible_decl = lookup_name (declarator->u.id);
4578 if (global_decl
4579 && global_decl != visible_decl
4580 && TREE_CODE (global_decl) == VAR_DECL
4581 && !TREE_PUBLIC (global_decl))
4582 error ("variable previously declared %<static%> redeclared "
4583 "%<extern%>");
4586 decl = build_decl (VAR_DECL, declarator->u.id, type);
4587 if (size_varies)
4588 C_DECL_VARIABLE_SIZE (decl) = 1;
4590 if (declspecs->inline_p)
4591 pedwarn ("%Jvariable %qD declared %<inline%>", decl, decl);
4593 /* At file scope, an initialized extern declaration may follow
4594 a static declaration. In that case, DECL_EXTERNAL will be
4595 reset later in start_decl. */
4596 DECL_EXTERNAL (decl) = (storage_class == csc_extern);
4598 /* At file scope, the presence of a `static' or `register' storage
4599 class specifier, or the absence of all storage class specifiers
4600 makes this declaration a definition (perhaps tentative). Also,
4601 the absence of both `static' and `register' makes it public. */
4602 if (current_scope == file_scope)
4604 TREE_PUBLIC (decl) = !(storage_class == csc_static
4605 || storage_class == csc_register);
4606 TREE_STATIC (decl) = !extern_ref;
4608 /* Not at file scope, only `static' makes a static definition. */
4609 else
4611 TREE_STATIC (decl) = (storage_class == csc_static);
4612 TREE_PUBLIC (decl) = extern_ref;
4615 if (threadp)
4617 if (targetm.have_tls)
4618 DECL_THREAD_LOCAL (decl) = 1;
4619 else
4620 /* A mere warning is sure to result in improper semantics
4621 at runtime. Don't bother to allow this to compile. */
4622 error ("thread-local storage not supported for this target");
4626 /* Record `register' declaration for warnings on &
4627 and in case doing stupid register allocation. */
4629 if (storage_class == csc_register)
4631 C_DECL_REGISTER (decl) = 1;
4632 DECL_REGISTER (decl) = 1;
4635 /* Record constancy and volatility. */
4636 c_apply_type_quals_to_decl (type_quals, decl);
4638 /* If a type has volatile components, it should be stored in memory.
4639 Otherwise, the fact that those components are volatile
4640 will be ignored, and would even crash the compiler. */
4641 if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl)))
4643 /* It is not an error for a structure with volatile fields to
4644 be declared register, but reset DECL_REGISTER since it
4645 cannot actually go in a register. */
4646 int was_reg = C_DECL_REGISTER (decl);
4647 C_DECL_REGISTER (decl) = 0;
4648 DECL_REGISTER (decl) = 0;
4649 c_mark_addressable (decl);
4650 C_DECL_REGISTER (decl) = was_reg;
4653 /* This is the earliest point at which we might know the assembler
4654 name of a variable. Thus, if it's known before this, die horribly. */
4655 gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl));
4657 decl_attributes (&decl, returned_attrs, 0);
4659 return decl;
4663 /* Decode the parameter-list info for a function type or function definition.
4664 The argument is the value returned by `get_parm_info' (or made in parse.y
4665 if there is an identifier list instead of a parameter decl list).
4666 These two functions are separate because when a function returns
4667 or receives functions then each is called multiple times but the order
4668 of calls is different. The last call to `grokparms' is always the one
4669 that contains the formal parameter names of a function definition.
4671 Return a list of arg types to use in the FUNCTION_TYPE for this function.
4673 FUNCDEF_FLAG is true for a function definition, false for
4674 a mere declaration. A nonempty identifier-list gets an error message
4675 when FUNCDEF_FLAG is false. */
4677 static tree
4678 grokparms (struct c_arg_info *arg_info, bool funcdef_flag)
4680 tree arg_types = arg_info->types;
4682 if (warn_strict_prototypes && arg_types == 0 && !funcdef_flag
4683 && !in_system_header)
4684 warning ("function declaration isn%'t a prototype");
4686 if (arg_types == error_mark_node)
4687 return 0; /* don't set TYPE_ARG_TYPES in this case */
4689 else if (arg_types && TREE_CODE (TREE_VALUE (arg_types)) == IDENTIFIER_NODE)
4691 if (!funcdef_flag)
4692 pedwarn ("parameter names (without types) in function declaration");
4694 arg_info->parms = arg_info->types;
4695 arg_info->types = 0;
4696 return 0;
4698 else
4700 tree parm, type, typelt;
4701 unsigned int parmno;
4703 /* If there is a parameter of incomplete type in a definition,
4704 this is an error. In a declaration this is valid, and a
4705 struct or union type may be completed later, before any calls
4706 or definition of the function. In the case where the tag was
4707 first declared within the parameter list, a warning has
4708 already been given. If a parameter has void type, then
4709 however the function cannot be defined or called, so
4710 warn. */
4712 for (parm = arg_info->parms, typelt = arg_types, parmno = 1;
4713 parm;
4714 parm = TREE_CHAIN (parm), typelt = TREE_CHAIN (typelt), parmno++)
4716 type = TREE_VALUE (typelt);
4717 if (type == error_mark_node)
4718 continue;
4720 if (!COMPLETE_TYPE_P (type))
4722 if (funcdef_flag)
4724 if (DECL_NAME (parm))
4725 error ("%Jparameter %u (%qD) has incomplete type",
4726 parm, parmno, parm);
4727 else
4728 error ("%Jparameter %u has incomplete type",
4729 parm, parmno);
4731 TREE_VALUE (typelt) = error_mark_node;
4732 TREE_TYPE (parm) = error_mark_node;
4734 else if (VOID_TYPE_P (type))
4736 if (DECL_NAME (parm))
4737 warning ("%Jparameter %u (%qD) has void type",
4738 parm, parmno, parm);
4739 else
4740 warning ("%Jparameter %u has void type",
4741 parm, parmno);
4745 return arg_types;
4749 /* Take apart the current scope and return a c_arg_info structure with
4750 info on a parameter list just parsed.
4752 This structure is later fed to 'grokparms' and 'store_parm_decls'.
4754 ELLIPSIS being true means the argument list ended in '...' so don't
4755 append a sentinel (void_list_node) to the end of the type-list. */
4757 struct c_arg_info *
4758 get_parm_info (bool ellipsis)
4760 struct c_binding *b = current_scope->bindings;
4761 struct c_arg_info *arg_info = XOBNEW (&parser_obstack,
4762 struct c_arg_info);
4763 tree parms = 0;
4764 tree tags = 0;
4765 tree types = 0;
4766 tree others = 0;
4768 static bool explained_incomplete_types = false;
4769 bool gave_void_only_once_err = false;
4771 arg_info->parms = 0;
4772 arg_info->tags = 0;
4773 arg_info->types = 0;
4774 arg_info->others = 0;
4776 /* The bindings in this scope must not get put into a block.
4777 We will take care of deleting the binding nodes. */
4778 current_scope->bindings = 0;
4780 /* This function is only called if there was *something* on the
4781 parameter list. */
4782 gcc_assert (b);
4784 /* A parameter list consisting solely of 'void' indicates that the
4785 function takes no arguments. But if the 'void' is qualified
4786 (by 'const' or 'volatile'), or has a storage class specifier
4787 ('register'), then the behavior is undefined; issue an error.
4788 Typedefs for 'void' are OK (see DR#157). */
4789 if (b->prev == 0 /* one binding */
4790 && TREE_CODE (b->decl) == PARM_DECL /* which is a parameter */
4791 && !DECL_NAME (b->decl) /* anonymous */
4792 && VOID_TYPE_P (TREE_TYPE (b->decl))) /* of void type */
4794 if (TREE_THIS_VOLATILE (b->decl)
4795 || TREE_READONLY (b->decl)
4796 || C_DECL_REGISTER (b->decl))
4797 error ("%<void%> as only parameter may not be qualified");
4799 /* There cannot be an ellipsis. */
4800 if (ellipsis)
4801 error ("%<void%> must be the only parameter");
4803 arg_info->types = void_list_node;
4804 return arg_info;
4807 if (!ellipsis)
4808 types = void_list_node;
4810 /* Break up the bindings list into parms, tags, types, and others;
4811 apply sanity checks; purge the name-to-decl bindings. */
4812 while (b)
4814 tree decl = b->decl;
4815 tree type = TREE_TYPE (decl);
4816 const char *keyword;
4818 switch (TREE_CODE (decl))
4820 case PARM_DECL:
4821 if (b->id)
4823 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
4824 I_SYMBOL_BINDING (b->id) = b->shadowed;
4827 /* Check for forward decls that never got their actual decl. */
4828 if (TREE_ASM_WRITTEN (decl))
4829 error ("%Jparameter %qD has just a forward declaration",
4830 decl, decl);
4831 /* Check for (..., void, ...) and issue an error. */
4832 else if (VOID_TYPE_P (type) && !DECL_NAME (decl))
4834 if (!gave_void_only_once_err)
4836 error ("%<void%> must be the only parameter");
4837 gave_void_only_once_err = true;
4840 else
4842 /* Valid parameter, add it to the list. */
4843 TREE_CHAIN (decl) = parms;
4844 parms = decl;
4846 /* Since there is a prototype, args are passed in their
4847 declared types. The back end may override this later. */
4848 DECL_ARG_TYPE (decl) = type;
4849 types = tree_cons (0, type, types);
4851 break;
4853 case ENUMERAL_TYPE: keyword = "enum"; goto tag;
4854 case UNION_TYPE: keyword = "union"; goto tag;
4855 case RECORD_TYPE: keyword = "struct"; goto tag;
4856 tag:
4857 /* Types may not have tag-names, in which case the type
4858 appears in the bindings list with b->id NULL. */
4859 if (b->id)
4861 gcc_assert (I_TAG_BINDING (b->id) == b);
4862 I_TAG_BINDING (b->id) = b->shadowed;
4865 /* Warn about any struct, union or enum tags defined in a
4866 parameter list. The scope of such types is limited to
4867 the parameter list, which is rarely if ever desirable
4868 (it's impossible to call such a function with type-
4869 correct arguments). An anonymous union parm type is
4870 meaningful as a GNU extension, so don't warn for that. */
4871 if (TREE_CODE (decl) != UNION_TYPE || b->id != 0)
4873 if (b->id)
4874 /* The %s will be one of 'struct', 'union', or 'enum'. */
4875 warning ("%<%s %E%> declared inside parameter list",
4876 keyword, b->id);
4877 else
4878 /* The %s will be one of 'struct', 'union', or 'enum'. */
4879 warning ("anonymous %s declared inside parameter list",
4880 keyword);
4882 if (!explained_incomplete_types)
4884 warning ("its scope is only this definition or declaration,"
4885 " which is probably not what you want");
4886 explained_incomplete_types = true;
4890 tags = tree_cons (b->id, decl, tags);
4891 break;
4893 case CONST_DECL:
4894 case TYPE_DECL:
4895 case FUNCTION_DECL:
4896 /* CONST_DECLs appear here when we have an embedded enum,
4897 and TYPE_DECLs appear here when we have an embedded struct
4898 or union. No warnings for this - we already warned about the
4899 type itself. FUNCTION_DECLs appear when there is an implicit
4900 function declaration in the parameter list. */
4902 TREE_CHAIN (decl) = others;
4903 others = decl;
4904 /* fall through */
4906 case ERROR_MARK:
4907 /* error_mark_node appears here when we have an undeclared
4908 variable. Just throw it away. */
4909 if (b->id)
4911 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
4912 I_SYMBOL_BINDING (b->id) = b->shadowed;
4914 break;
4916 /* Other things that might be encountered. */
4917 case LABEL_DECL:
4918 case VAR_DECL:
4919 default:
4920 gcc_unreachable ();
4923 b = free_binding_and_advance (b);
4926 arg_info->parms = parms;
4927 arg_info->tags = tags;
4928 arg_info->types = types;
4929 arg_info->others = others;
4930 return arg_info;
4933 /* Get the struct, enum or union (CODE says which) with tag NAME.
4934 Define the tag as a forward-reference if it is not defined.
4935 Return a c_typespec structure for the type specifier. */
4937 struct c_typespec
4938 parser_xref_tag (enum tree_code code, tree name)
4940 struct c_typespec ret;
4941 /* If a cross reference is requested, look up the type
4942 already defined for this tag and return it. */
4944 tree ref = lookup_tag (code, name, 0);
4945 /* If this is the right type of tag, return what we found.
4946 (This reference will be shadowed by shadow_tag later if appropriate.)
4947 If this is the wrong type of tag, do not return it. If it was the
4948 wrong type in the same scope, we will have had an error
4949 message already; if in a different scope and declaring
4950 a name, pending_xref_error will give an error message; but if in a
4951 different scope and not declaring a name, this tag should
4952 shadow the previous declaration of a different type of tag, and
4953 this would not work properly if we return the reference found.
4954 (For example, with "struct foo" in an outer scope, "union foo;"
4955 must shadow that tag with a new one of union type.) */
4956 ret.kind = (ref ? ctsk_tagref : ctsk_tagfirstref);
4957 if (ref && TREE_CODE (ref) == code)
4959 ret.spec = ref;
4960 return ret;
4963 /* If no such tag is yet defined, create a forward-reference node
4964 and record it as the "definition".
4965 When a real declaration of this type is found,
4966 the forward-reference will be altered into a real type. */
4968 ref = make_node (code);
4969 if (code == ENUMERAL_TYPE)
4971 /* Give the type a default layout like unsigned int
4972 to avoid crashing if it does not get defined. */
4973 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
4974 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
4975 TYPE_USER_ALIGN (ref) = 0;
4976 TYPE_UNSIGNED (ref) = 1;
4977 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
4978 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
4979 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
4982 pushtag (name, ref);
4984 ret.spec = ref;
4985 return ret;
4988 /* Get the struct, enum or union (CODE says which) with tag NAME.
4989 Define the tag as a forward-reference if it is not defined.
4990 Return a tree for the type. */
4992 tree
4993 xref_tag (enum tree_code code, tree name)
4995 return parser_xref_tag (code, name).spec;
4998 /* Make sure that the tag NAME is defined *in the current scope*
4999 at least as a forward reference.
5000 CODE says which kind of tag NAME ought to be. */
5002 tree
5003 start_struct (enum tree_code code, tree name)
5005 /* If there is already a tag defined at this scope
5006 (as a forward reference), just return it. */
5008 tree ref = 0;
5010 if (name != 0)
5011 ref = lookup_tag (code, name, 1);
5012 if (ref && TREE_CODE (ref) == code)
5014 if (TYPE_SIZE (ref))
5016 if (code == UNION_TYPE)
5017 error ("redefinition of %<union %s%>", IDENTIFIER_POINTER (name));
5018 else
5019 error ("redefinition of %<struct %s%>", IDENTIFIER_POINTER (name));
5021 else if (C_TYPE_BEING_DEFINED (ref))
5023 if (code == UNION_TYPE)
5024 error ("nested redefinition of %<union %s%>",
5025 IDENTIFIER_POINTER (name));
5026 else
5027 error ("nested redefinition of %<struct %s%>",
5028 IDENTIFIER_POINTER (name));
5031 else
5033 /* Otherwise create a forward-reference just so the tag is in scope. */
5035 ref = make_node (code);
5036 pushtag (name, ref);
5039 C_TYPE_BEING_DEFINED (ref) = 1;
5040 TYPE_PACKED (ref) = flag_pack_struct;
5041 return ref;
5044 /* Process the specs, declarator and width (NULL if omitted)
5045 of a structure component, returning a FIELD_DECL node.
5046 WIDTH is non-NULL for bit-fields only, and is an INTEGER_CST node.
5048 This is done during the parsing of the struct declaration.
5049 The FIELD_DECL nodes are chained together and the lot of them
5050 are ultimately passed to `build_struct' to make the RECORD_TYPE node. */
5052 tree
5053 grokfield (struct c_declarator *declarator, struct c_declspecs *declspecs,
5054 tree width)
5056 tree value;
5058 if (declarator->kind == cdk_id && declarator->u.id == NULL_TREE
5059 && width == NULL_TREE)
5061 /* This is an unnamed decl.
5063 If we have something of the form "union { list } ;" then this
5064 is the anonymous union extension. Similarly for struct.
5066 If this is something of the form "struct foo;", then
5067 If MS extensions are enabled, this is handled as an
5068 anonymous struct.
5069 Otherwise this is a forward declaration of a structure tag.
5071 If this is something of the form "foo;" and foo is a TYPE_DECL, then
5072 If MS extensions are enabled and foo names a structure, then
5073 again this is an anonymous struct.
5074 Otherwise this is an error.
5076 Oh what a horrid tangled web we weave. I wonder if MS consciously
5077 took this from Plan 9 or if it was an accident of implementation
5078 that took root before someone noticed the bug... */
5080 tree type = declspecs->type;
5081 bool type_ok = (TREE_CODE (type) == RECORD_TYPE
5082 || TREE_CODE (type) == UNION_TYPE);
5083 bool ok = false;
5085 if (type_ok
5086 && (flag_ms_extensions || !declspecs->typedef_p))
5088 if (flag_ms_extensions)
5089 ok = true;
5090 else if (flag_iso)
5091 ok = false;
5092 else if (TYPE_NAME (type) == NULL)
5093 ok = true;
5094 else
5095 ok = false;
5097 if (!ok)
5099 pedwarn ("declaration does not declare anything");
5100 return NULL_TREE;
5102 if (pedantic)
5103 pedwarn ("ISO C doesn%'t support unnamed structs/unions");
5106 value = grokdeclarator (declarator, declspecs, FIELD, false,
5107 width ? &width : NULL);
5109 finish_decl (value, NULL_TREE, NULL_TREE);
5110 DECL_INITIAL (value) = width;
5112 return value;
5115 /* Generate an error for any duplicate field names in FIELDLIST. Munge
5116 the list such that this does not present a problem later. */
5118 static void
5119 detect_field_duplicates (tree fieldlist)
5121 tree x, y;
5122 int timeout = 10;
5124 /* First, see if there are more than "a few" fields.
5125 This is trivially true if there are zero or one fields. */
5126 if (!fieldlist)
5127 return;
5128 x = TREE_CHAIN (fieldlist);
5129 if (!x)
5130 return;
5131 do {
5132 timeout--;
5133 x = TREE_CHAIN (x);
5134 } while (timeout > 0 && x);
5136 /* If there were "few" fields, avoid the overhead of allocating
5137 a hash table. Instead just do the nested traversal thing. */
5138 if (timeout > 0)
5140 for (x = TREE_CHAIN (fieldlist); x ; x = TREE_CHAIN (x))
5141 if (DECL_NAME (x))
5143 for (y = fieldlist; y != x; y = TREE_CHAIN (y))
5144 if (DECL_NAME (y) == DECL_NAME (x))
5146 error ("%Jduplicate member %qD", x, x);
5147 DECL_NAME (x) = NULL_TREE;
5151 else
5153 htab_t htab = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
5154 void **slot;
5156 for (x = fieldlist; x ; x = TREE_CHAIN (x))
5157 if ((y = DECL_NAME (x)) != 0)
5159 slot = htab_find_slot (htab, y, INSERT);
5160 if (*slot)
5162 error ("%Jduplicate member %qD", x, x);
5163 DECL_NAME (x) = NULL_TREE;
5165 *slot = y;
5168 htab_delete (htab);
5172 /* Fill in the fields of a RECORD_TYPE or UNION_TYPE node, T.
5173 FIELDLIST is a chain of FIELD_DECL nodes for the fields.
5174 ATTRIBUTES are attributes to be applied to the structure. */
5176 tree
5177 finish_struct (tree t, tree fieldlist, tree attributes)
5179 tree x;
5180 bool toplevel = file_scope == current_scope;
5181 int saw_named_field;
5183 /* If this type was previously laid out as a forward reference,
5184 make sure we lay it out again. */
5186 TYPE_SIZE (t) = 0;
5188 decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
5190 if (pedantic)
5192 for (x = fieldlist; x; x = TREE_CHAIN (x))
5193 if (DECL_NAME (x) != 0)
5194 break;
5196 if (x == 0)
5198 if (TREE_CODE (t) == UNION_TYPE)
5200 if (fieldlist)
5201 pedwarn ("union has no named members");
5202 else
5203 pedwarn ("union has no members");
5205 else
5207 if (fieldlist)
5208 pedwarn ("struct has no named members");
5209 else
5210 pedwarn ("struct has no members");
5215 /* Install struct as DECL_CONTEXT of each field decl.
5216 Also process specified field sizes, found in the DECL_INITIAL,
5217 storing 0 there after the type has been changed to precision equal
5218 to its width, rather than the precision of the specified standard
5219 type. (Correct layout requires the original type to have been preserved
5220 until now.) */
5222 saw_named_field = 0;
5223 for (x = fieldlist; x; x = TREE_CHAIN (x))
5225 DECL_CONTEXT (x) = t;
5226 DECL_PACKED (x) |= TYPE_PACKED (t);
5228 /* If any field is const, the structure type is pseudo-const. */
5229 if (TREE_READONLY (x))
5230 C_TYPE_FIELDS_READONLY (t) = 1;
5231 else
5233 /* A field that is pseudo-const makes the structure likewise. */
5234 tree t1 = TREE_TYPE (x);
5235 while (TREE_CODE (t1) == ARRAY_TYPE)
5236 t1 = TREE_TYPE (t1);
5237 if ((TREE_CODE (t1) == RECORD_TYPE || TREE_CODE (t1) == UNION_TYPE)
5238 && C_TYPE_FIELDS_READONLY (t1))
5239 C_TYPE_FIELDS_READONLY (t) = 1;
5242 /* Any field that is volatile means variables of this type must be
5243 treated in some ways as volatile. */
5244 if (TREE_THIS_VOLATILE (x))
5245 C_TYPE_FIELDS_VOLATILE (t) = 1;
5247 /* Any field of nominal variable size implies structure is too. */
5248 if (C_DECL_VARIABLE_SIZE (x))
5249 C_TYPE_VARIABLE_SIZE (t) = 1;
5251 if (DECL_INITIAL (x))
5253 unsigned HOST_WIDE_INT width = tree_low_cst (DECL_INITIAL (x), 1);
5254 DECL_SIZE (x) = bitsize_int (width);
5255 DECL_BIT_FIELD (x) = 1;
5256 SET_DECL_C_BIT_FIELD (x);
5259 /* Detect flexible array member in an invalid context. */
5260 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
5261 && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
5262 && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
5263 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
5265 if (TREE_CODE (t) == UNION_TYPE)
5267 error ("%Jflexible array member in union", x);
5268 TREE_TYPE (x) = error_mark_node;
5270 else if (TREE_CHAIN (x) != NULL_TREE)
5272 error ("%Jflexible array member not at end of struct", x);
5273 TREE_TYPE (x) = error_mark_node;
5275 else if (!saw_named_field)
5277 error ("%Jflexible array member in otherwise empty struct", x);
5278 TREE_TYPE (x) = error_mark_node;
5282 if (pedantic && !in_system_header && TREE_CODE (t) == RECORD_TYPE
5283 && flexible_array_type_p (TREE_TYPE (x)))
5284 pedwarn ("%Jinvalid use of structure with flexible array member", x);
5286 if (DECL_NAME (x))
5287 saw_named_field = 1;
5290 detect_field_duplicates (fieldlist);
5292 /* Now we have the nearly final fieldlist. Record it,
5293 then lay out the structure or union (including the fields). */
5295 TYPE_FIELDS (t) = fieldlist;
5297 layout_type (t);
5299 /* Give bit-fields their proper types. */
5301 tree *fieldlistp = &fieldlist;
5302 while (*fieldlistp)
5303 if (TREE_CODE (*fieldlistp) == FIELD_DECL && DECL_INITIAL (*fieldlistp)
5304 && TREE_TYPE (*fieldlistp) != error_mark_node)
5306 unsigned HOST_WIDE_INT width
5307 = tree_low_cst (DECL_INITIAL (*fieldlistp), 1);
5308 tree type = TREE_TYPE (*fieldlistp);
5309 if (width != TYPE_PRECISION (type))
5311 TREE_TYPE (*fieldlistp)
5312 = build_nonstandard_integer_type (width, TYPE_UNSIGNED (type));
5313 DECL_MODE (*fieldlistp) = TYPE_MODE (TREE_TYPE (*fieldlistp));
5315 DECL_INITIAL (*fieldlistp) = 0;
5317 else
5318 fieldlistp = &TREE_CHAIN (*fieldlistp);
5321 /* Now we have the truly final field list.
5322 Store it in this type and in the variants. */
5324 TYPE_FIELDS (t) = fieldlist;
5326 /* If there are lots of fields, sort so we can look through them fast.
5327 We arbitrarily consider 16 or more elts to be "a lot". */
5330 int len = 0;
5332 for (x = fieldlist; x; x = TREE_CHAIN (x))
5334 if (len > 15 || DECL_NAME (x) == NULL)
5335 break;
5336 len += 1;
5339 if (len > 15)
5341 tree *field_array;
5342 struct lang_type *space;
5343 struct sorted_fields_type *space2;
5345 len += list_length (x);
5347 /* Use the same allocation policy here that make_node uses, to
5348 ensure that this lives as long as the rest of the struct decl.
5349 All decls in an inline function need to be saved. */
5351 space = GGC_CNEW (struct lang_type);
5352 space2 = GGC_NEWVAR (struct sorted_fields_type,
5353 sizeof (struct sorted_fields_type) + len * sizeof (tree));
5355 len = 0;
5356 space->s = space2;
5357 field_array = &space2->elts[0];
5358 for (x = fieldlist; x; x = TREE_CHAIN (x))
5360 field_array[len++] = x;
5362 /* If there is anonymous struct or union, break out of the loop. */
5363 if (DECL_NAME (x) == NULL)
5364 break;
5366 /* Found no anonymous struct/union. Add the TYPE_LANG_SPECIFIC. */
5367 if (x == NULL)
5369 TYPE_LANG_SPECIFIC (t) = space;
5370 TYPE_LANG_SPECIFIC (t)->s->len = len;
5371 field_array = TYPE_LANG_SPECIFIC (t)->s->elts;
5372 qsort (field_array, len, sizeof (tree), field_decl_cmp);
5377 for (x = TYPE_MAIN_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
5379 TYPE_FIELDS (x) = TYPE_FIELDS (t);
5380 TYPE_LANG_SPECIFIC (x) = TYPE_LANG_SPECIFIC (t);
5381 TYPE_ALIGN (x) = TYPE_ALIGN (t);
5382 TYPE_USER_ALIGN (x) = TYPE_USER_ALIGN (t);
5385 /* If this was supposed to be a transparent union, but we can't
5386 make it one, warn and turn off the flag. */
5387 if (TREE_CODE (t) == UNION_TYPE
5388 && TYPE_TRANSPARENT_UNION (t)
5389 && TYPE_MODE (t) != DECL_MODE (TYPE_FIELDS (t)))
5391 TYPE_TRANSPARENT_UNION (t) = 0;
5392 warning ("union cannot be made transparent");
5395 /* If this structure or union completes the type of any previous
5396 variable declaration, lay it out and output its rtl. */
5397 for (x = C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t));
5399 x = TREE_CHAIN (x))
5401 tree decl = TREE_VALUE (x);
5402 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
5403 layout_array_type (TREE_TYPE (decl));
5404 if (TREE_CODE (decl) != TYPE_DECL)
5406 layout_decl (decl, 0);
5407 if (c_dialect_objc ())
5408 objc_check_decl (decl);
5409 rest_of_decl_compilation (decl, toplevel, 0);
5410 if (!toplevel)
5411 expand_decl (decl);
5414 C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t)) = 0;
5416 /* Finish debugging output for this type. */
5417 rest_of_type_compilation (t, toplevel);
5419 /* If we're inside a function proper, i.e. not file-scope and not still
5420 parsing parameters, then arrange for the size of a variable sized type
5421 to be bound now. */
5422 if (cur_stmt_list && variably_modified_type_p (t, NULL))
5423 add_stmt (build_stmt (DECL_EXPR, build_decl (TYPE_DECL, NULL, t)));
5425 return t;
5428 /* Lay out the type T, and its element type, and so on. */
5430 static void
5431 layout_array_type (tree t)
5433 if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
5434 layout_array_type (TREE_TYPE (t));
5435 layout_type (t);
5438 /* Begin compiling the definition of an enumeration type.
5439 NAME is its name (or null if anonymous).
5440 Returns the type object, as yet incomplete.
5441 Also records info about it so that build_enumerator
5442 may be used to declare the individual values as they are read. */
5444 tree
5445 start_enum (tree name)
5447 tree enumtype = 0;
5449 /* If this is the real definition for a previous forward reference,
5450 fill in the contents in the same object that used to be the
5451 forward reference. */
5453 if (name != 0)
5454 enumtype = lookup_tag (ENUMERAL_TYPE, name, 1);
5456 if (enumtype == 0 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
5458 enumtype = make_node (ENUMERAL_TYPE);
5459 pushtag (name, enumtype);
5462 if (C_TYPE_BEING_DEFINED (enumtype))
5463 error ("nested redefinition of %<enum %s%>", IDENTIFIER_POINTER (name));
5465 C_TYPE_BEING_DEFINED (enumtype) = 1;
5467 if (TYPE_VALUES (enumtype) != 0)
5469 /* This enum is a named one that has been declared already. */
5470 error ("redeclaration of %<enum %s%>", IDENTIFIER_POINTER (name));
5472 /* Completely replace its old definition.
5473 The old enumerators remain defined, however. */
5474 TYPE_VALUES (enumtype) = 0;
5477 enum_next_value = integer_zero_node;
5478 enum_overflow = 0;
5480 if (flag_short_enums)
5481 TYPE_PACKED (enumtype) = 1;
5483 return enumtype;
5486 /* After processing and defining all the values of an enumeration type,
5487 install their decls in the enumeration type and finish it off.
5488 ENUMTYPE is the type object, VALUES a list of decl-value pairs,
5489 and ATTRIBUTES are the specified attributes.
5490 Returns ENUMTYPE. */
5492 tree
5493 finish_enum (tree enumtype, tree values, tree attributes)
5495 tree pair, tem;
5496 tree minnode = 0, maxnode = 0;
5497 int precision, unsign;
5498 bool toplevel = (file_scope == current_scope);
5499 struct lang_type *lt;
5501 decl_attributes (&enumtype, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
5503 /* Calculate the maximum value of any enumerator in this type. */
5505 if (values == error_mark_node)
5506 minnode = maxnode = integer_zero_node;
5507 else
5509 minnode = maxnode = TREE_VALUE (values);
5510 for (pair = TREE_CHAIN (values); pair; pair = TREE_CHAIN (pair))
5512 tree value = TREE_VALUE (pair);
5513 if (tree_int_cst_lt (maxnode, value))
5514 maxnode = value;
5515 if (tree_int_cst_lt (value, minnode))
5516 minnode = value;
5520 /* Construct the final type of this enumeration. It is the same
5521 as one of the integral types - the narrowest one that fits, except
5522 that normally we only go as narrow as int - and signed iff any of
5523 the values are negative. */
5524 unsign = (tree_int_cst_sgn (minnode) >= 0);
5525 precision = MAX (min_precision (minnode, unsign),
5526 min_precision (maxnode, unsign));
5528 if (TYPE_PACKED (enumtype) || precision > TYPE_PRECISION (integer_type_node))
5530 tem = c_common_type_for_size (precision, unsign);
5531 if (tem == NULL)
5533 warning ("enumeration values exceed range of largest integer");
5534 tem = long_long_integer_type_node;
5537 else
5538 tem = unsign ? unsigned_type_node : integer_type_node;
5540 TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (tem);
5541 TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (tem);
5542 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (tem);
5543 TYPE_SIZE (enumtype) = 0;
5545 /* If the precision of the type was specific with an attribute and it
5546 was too small, give an error. Otherwise, use it. */
5547 if (TYPE_PRECISION (enumtype))
5549 if (precision > TYPE_PRECISION (enumtype))
5550 error ("specified mode too small for enumeral values");
5552 else
5553 TYPE_PRECISION (enumtype) = TYPE_PRECISION (tem);
5555 layout_type (enumtype);
5557 if (values != error_mark_node)
5559 /* Change the type of the enumerators to be the enum type. We
5560 need to do this irrespective of the size of the enum, for
5561 proper type checking. Replace the DECL_INITIALs of the
5562 enumerators, and the value slots of the list, with copies
5563 that have the enum type; they cannot be modified in place
5564 because they may be shared (e.g. integer_zero_node) Finally,
5565 change the purpose slots to point to the names of the decls. */
5566 for (pair = values; pair; pair = TREE_CHAIN (pair))
5568 tree enu = TREE_PURPOSE (pair);
5569 tree ini = DECL_INITIAL (enu);
5571 TREE_TYPE (enu) = enumtype;
5573 /* The ISO C Standard mandates enumerators to have type int,
5574 even though the underlying type of an enum type is
5575 unspecified. Here we convert any enumerators that fit in
5576 an int to type int, to avoid promotions to unsigned types
5577 when comparing integers with enumerators that fit in the
5578 int range. When -pedantic is given, build_enumerator()
5579 would have already taken care of those that don't fit. */
5580 if (int_fits_type_p (ini, integer_type_node))
5581 tem = integer_type_node;
5582 else
5583 tem = enumtype;
5584 ini = convert (tem, ini);
5586 DECL_INITIAL (enu) = ini;
5587 TREE_PURPOSE (pair) = DECL_NAME (enu);
5588 TREE_VALUE (pair) = ini;
5591 TYPE_VALUES (enumtype) = values;
5594 /* Record the min/max values so that we can warn about bit-field
5595 enumerations that are too small for the values. */
5596 lt = GGC_CNEW (struct lang_type);
5597 lt->enum_min = minnode;
5598 lt->enum_max = maxnode;
5599 TYPE_LANG_SPECIFIC (enumtype) = lt;
5601 /* Fix up all variant types of this enum type. */
5602 for (tem = TYPE_MAIN_VARIANT (enumtype); tem; tem = TYPE_NEXT_VARIANT (tem))
5604 if (tem == enumtype)
5605 continue;
5606 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
5607 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
5608 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
5609 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
5610 TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
5611 TYPE_MODE (tem) = TYPE_MODE (enumtype);
5612 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
5613 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
5614 TYPE_USER_ALIGN (tem) = TYPE_USER_ALIGN (enumtype);
5615 TYPE_UNSIGNED (tem) = TYPE_UNSIGNED (enumtype);
5616 TYPE_LANG_SPECIFIC (tem) = TYPE_LANG_SPECIFIC (enumtype);
5619 /* Finish debugging output for this type. */
5620 rest_of_type_compilation (enumtype, toplevel);
5622 return enumtype;
5625 /* Build and install a CONST_DECL for one value of the
5626 current enumeration type (one that was begun with start_enum).
5627 Return a tree-list containing the CONST_DECL and its value.
5628 Assignment of sequential values by default is handled here. */
5630 tree
5631 build_enumerator (tree name, tree value)
5633 tree decl, type;
5635 /* Validate and default VALUE. */
5637 /* Remove no-op casts from the value. */
5638 if (value)
5639 STRIP_TYPE_NOPS (value);
5641 if (value != 0)
5643 /* Don't issue more errors for error_mark_node (i.e. an
5644 undeclared identifier) - just ignore the value expression. */
5645 if (value == error_mark_node)
5646 value = 0;
5647 else if (TREE_CODE (value) != INTEGER_CST)
5649 error ("enumerator value for %qE is not an integer constant", name);
5650 value = 0;
5652 else
5654 value = default_conversion (value);
5655 constant_expression_warning (value);
5659 /* Default based on previous value. */
5660 /* It should no longer be possible to have NON_LVALUE_EXPR
5661 in the default. */
5662 if (value == 0)
5664 value = enum_next_value;
5665 if (enum_overflow)
5666 error ("overflow in enumeration values");
5669 if (pedantic && !int_fits_type_p (value, integer_type_node))
5671 pedwarn ("ISO C restricts enumerator values to range of %<int%>");
5672 /* XXX This causes -pedantic to change the meaning of the program.
5673 Remove? -zw 2004-03-15 */
5674 value = convert (integer_type_node, value);
5677 /* Set basis for default for next value. */
5678 enum_next_value = build_binary_op (PLUS_EXPR, value, integer_one_node, 0);
5679 enum_overflow = tree_int_cst_lt (enum_next_value, value);
5681 /* Now create a declaration for the enum value name. */
5683 type = TREE_TYPE (value);
5684 type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
5685 TYPE_PRECISION (integer_type_node)),
5686 (TYPE_PRECISION (type)
5687 >= TYPE_PRECISION (integer_type_node)
5688 && TYPE_UNSIGNED (type)));
5690 decl = build_decl (CONST_DECL, name, type);
5691 DECL_INITIAL (decl) = convert (type, value);
5692 pushdecl (decl);
5694 return tree_cons (decl, value, NULL_TREE);
5698 /* Create the FUNCTION_DECL for a function definition.
5699 DECLSPECS, DECLARATOR and ATTRIBUTES are the parts of
5700 the declaration; they describe the function's name and the type it returns,
5701 but twisted together in a fashion that parallels the syntax of C.
5703 This function creates a binding context for the function body
5704 as well as setting up the FUNCTION_DECL in current_function_decl.
5706 Returns 1 on success. If the DECLARATOR is not suitable for a function
5707 (it defines a datum instead), we return 0, which tells
5708 yyparse to report a parse error. */
5711 start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
5712 tree attributes)
5714 tree decl1, old_decl;
5715 tree restype, resdecl;
5717 current_function_returns_value = 0; /* Assume, until we see it does. */
5718 current_function_returns_null = 0;
5719 current_function_returns_abnormally = 0;
5720 warn_about_return_type = 0;
5721 current_extern_inline = 0;
5722 c_switch_stack = NULL;
5724 /* Indicate no valid break/continue context by setting these variables
5725 to some non-null, non-label value. We'll notice and emit the proper
5726 error message in c_finish_bc_stmt. */
5727 c_break_label = c_cont_label = size_zero_node;
5729 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, true, NULL);
5731 /* If the declarator is not suitable for a function definition,
5732 cause a syntax error. */
5733 if (decl1 == 0)
5734 return 0;
5736 decl_attributes (&decl1, attributes, 0);
5738 if (DECL_DECLARED_INLINE_P (decl1)
5739 && DECL_UNINLINABLE (decl1)
5740 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl1)))
5741 warning ("%Jinline function %qD given attribute noinline", decl1, decl1);
5743 announce_function (decl1);
5745 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl1))))
5747 error ("return type is an incomplete type");
5748 /* Make it return void instead. */
5749 TREE_TYPE (decl1)
5750 = build_function_type (void_type_node,
5751 TYPE_ARG_TYPES (TREE_TYPE (decl1)));
5754 if (warn_about_return_type)
5755 pedwarn_c99 ("return type defaults to %<int%>");
5757 /* Make the init_value nonzero so pushdecl knows this is not tentative.
5758 error_mark_node is replaced below (in pop_scope) with the BLOCK. */
5759 DECL_INITIAL (decl1) = error_mark_node;
5761 /* If this definition isn't a prototype and we had a prototype declaration
5762 before, copy the arg type info from that prototype. */
5763 old_decl = lookup_name_in_scope (DECL_NAME (decl1), current_scope);
5764 if (old_decl != 0 && TREE_CODE (TREE_TYPE (old_decl)) == FUNCTION_TYPE
5765 && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
5766 TREE_TYPE (TREE_TYPE (old_decl)))
5767 && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0)
5769 TREE_TYPE (decl1) = composite_type (TREE_TYPE (old_decl),
5770 TREE_TYPE (decl1));
5771 current_function_prototype_locus = DECL_SOURCE_LOCATION (old_decl);
5774 /* Optionally warn of old-fashioned def with no previous prototype. */
5775 if (warn_strict_prototypes
5776 && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0
5777 && C_DECL_ISNT_PROTOTYPE (old_decl))
5778 warning ("function declaration isn%'t a prototype");
5779 /* Optionally warn of any global def with no previous prototype. */
5780 else if (warn_missing_prototypes
5781 && TREE_PUBLIC (decl1)
5782 && !MAIN_NAME_P (DECL_NAME (decl1))
5783 && C_DECL_ISNT_PROTOTYPE (old_decl))
5784 warning ("%Jno previous prototype for %qD", decl1, decl1);
5785 /* Optionally warn of any def with no previous prototype
5786 if the function has already been used. */
5787 else if (warn_missing_prototypes
5788 && old_decl != 0 && TREE_USED (old_decl)
5789 && TYPE_ARG_TYPES (TREE_TYPE (old_decl)) == 0)
5790 warning ("%J%qD was used with no prototype before its definition",
5791 decl1, decl1);
5792 /* Optionally warn of any global def with no previous declaration. */
5793 else if (warn_missing_declarations
5794 && TREE_PUBLIC (decl1)
5795 && old_decl == 0
5796 && !MAIN_NAME_P (DECL_NAME (decl1)))
5797 warning ("%Jno previous declaration for %qD", decl1, decl1);
5798 /* Optionally warn of any def with no previous declaration
5799 if the function has already been used. */
5800 else if (warn_missing_declarations
5801 && old_decl != 0 && TREE_USED (old_decl)
5802 && C_DECL_IMPLICIT (old_decl))
5803 warning ("%J%qD was used with no declaration before its definition",
5804 decl1, decl1);
5806 /* This is a definition, not a reference.
5807 So normally clear DECL_EXTERNAL.
5808 However, `extern inline' acts like a declaration
5809 except for defining how to inline. So set DECL_EXTERNAL in that case. */
5810 DECL_EXTERNAL (decl1) = current_extern_inline;
5812 /* This function exists in static storage.
5813 (This does not mean `static' in the C sense!) */
5814 TREE_STATIC (decl1) = 1;
5816 /* A nested function is not global. */
5817 if (current_function_decl != 0)
5818 TREE_PUBLIC (decl1) = 0;
5820 /* This is the earliest point at which we might know the assembler
5821 name of the function. Thus, if it's set before this, die horribly. */
5822 gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl1));
5824 /* If #pragma weak was used, mark the decl weak now. */
5825 if (current_scope == file_scope)
5826 maybe_apply_pragma_weak (decl1);
5828 /* Warn for unlikely, improbable, or stupid declarations of `main'. */
5829 if (warn_main > 0 && MAIN_NAME_P (DECL_NAME (decl1)))
5831 tree args;
5832 int argct = 0;
5834 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1)))
5835 != integer_type_node)
5836 pedwarn ("%Jreturn type of %qD is not %<int%>", decl1, decl1);
5838 for (args = TYPE_ARG_TYPES (TREE_TYPE (decl1)); args;
5839 args = TREE_CHAIN (args))
5841 tree type = args ? TREE_VALUE (args) : 0;
5843 if (type == void_type_node)
5844 break;
5846 ++argct;
5847 switch (argct)
5849 case 1:
5850 if (TYPE_MAIN_VARIANT (type) != integer_type_node)
5851 pedwarn ("%Jfirst argument of %qD should be %<int%>",
5852 decl1, decl1);
5853 break;
5855 case 2:
5856 if (TREE_CODE (type) != POINTER_TYPE
5857 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
5858 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
5859 != char_type_node))
5860 pedwarn ("%Jsecond argument of %qD should be %<char **%>",
5861 decl1, decl1);
5862 break;
5864 case 3:
5865 if (TREE_CODE (type) != POINTER_TYPE
5866 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
5867 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
5868 != char_type_node))
5869 pedwarn ("%Jthird argument of %qD should probably be "
5870 "%<char **%>", decl1, decl1);
5871 break;
5875 /* It is intentional that this message does not mention the third
5876 argument because it's only mentioned in an appendix of the
5877 standard. */
5878 if (argct > 0 && (argct < 2 || argct > 3))
5879 pedwarn ("%J%qD takes only zero or two arguments", decl1, decl1);
5881 if (!TREE_PUBLIC (decl1))
5882 pedwarn ("%J%qD is normally a non-static function", decl1, decl1);
5885 /* Record the decl so that the function name is defined.
5886 If we already have a decl for this name, and it is a FUNCTION_DECL,
5887 use the old decl. */
5889 current_function_decl = pushdecl (decl1);
5891 push_scope ();
5892 declare_parm_level ();
5894 restype = TREE_TYPE (TREE_TYPE (current_function_decl));
5895 /* Promote the value to int before returning it. */
5896 if (c_promoting_integer_type_p (restype))
5898 /* It retains unsignedness if not really getting wider. */
5899 if (TYPE_UNSIGNED (restype)
5900 && (TYPE_PRECISION (restype)
5901 == TYPE_PRECISION (integer_type_node)))
5902 restype = unsigned_type_node;
5903 else
5904 restype = integer_type_node;
5907 resdecl = build_decl (RESULT_DECL, NULL_TREE, restype);
5908 DECL_ARTIFICIAL (resdecl) = 1;
5909 DECL_IGNORED_P (resdecl) = 1;
5910 DECL_RESULT (current_function_decl) = resdecl;
5912 start_fname_decls ();
5914 return 1;
5917 /* Subroutine of store_parm_decls which handles new-style function
5918 definitions (prototype format). The parms already have decls, so we
5919 need only record them as in effect and complain if any redundant
5920 old-style parm decls were written. */
5921 static void
5922 store_parm_decls_newstyle (tree fndecl, const struct c_arg_info *arg_info)
5924 tree decl;
5926 if (current_scope->bindings)
5928 error ("%Jold-style parameter declarations in prototyped "
5929 "function definition", fndecl);
5931 /* Get rid of the old-style declarations. */
5932 pop_scope ();
5933 push_scope ();
5935 /* Don't issue this warning for nested functions, and don't issue this
5936 warning if we got here because ARG_INFO_TYPES was error_mark_node
5937 (this happens when a function definition has just an ellipsis in
5938 its parameter list). */
5939 else if (warn_traditional && !in_system_header && !current_function_scope
5940 && arg_info->types != error_mark_node)
5941 warning ("%Jtraditional C rejects ISO C style function definitions",
5942 fndecl);
5944 /* Now make all the parameter declarations visible in the function body.
5945 We can bypass most of the grunt work of pushdecl. */
5946 for (decl = arg_info->parms; decl; decl = TREE_CHAIN (decl))
5948 DECL_CONTEXT (decl) = current_function_decl;
5949 if (DECL_NAME (decl))
5950 bind (DECL_NAME (decl), decl, current_scope,
5951 /*invisible=*/false, /*nested=*/false);
5952 else
5953 error ("%Jparameter name omitted", decl);
5956 /* Record the parameter list in the function declaration. */
5957 DECL_ARGUMENTS (fndecl) = arg_info->parms;
5959 /* Now make all the ancillary declarations visible, likewise. */
5960 for (decl = arg_info->others; decl; decl = TREE_CHAIN (decl))
5962 DECL_CONTEXT (decl) = current_function_decl;
5963 if (DECL_NAME (decl))
5964 bind (DECL_NAME (decl), decl, current_scope,
5965 /*invisible=*/false, /*nested=*/false);
5968 /* And all the tag declarations. */
5969 for (decl = arg_info->tags; decl; decl = TREE_CHAIN (decl))
5970 if (TREE_PURPOSE (decl))
5971 bind (TREE_PURPOSE (decl), TREE_VALUE (decl), current_scope,
5972 /*invisible=*/false, /*nested=*/false);
5975 /* Subroutine of store_parm_decls which handles old-style function
5976 definitions (separate parameter list and declarations). */
5978 static void
5979 store_parm_decls_oldstyle (tree fndecl, const struct c_arg_info *arg_info)
5981 struct c_binding *b;
5982 tree parm, decl, last;
5983 tree parmids = arg_info->parms;
5985 /* We use DECL_WEAK as a flag to show which parameters have been
5986 seen already, since it is not used on PARM_DECL. */
5987 #ifdef ENABLE_CHECKING
5988 for (b = current_scope->bindings; b; b = b->prev)
5989 gcc_assert (TREE_CODE (b->decl) != PARM_DECL || !DECL_WEAK (b->decl));
5990 #endif
5992 if (warn_old_style_definition && !in_system_header)
5993 warning ("%Jold-style function definition", fndecl);
5995 /* Match each formal parameter name with its declaration. Save each
5996 decl in the appropriate TREE_PURPOSE slot of the parmids chain. */
5997 for (parm = parmids; parm; parm = TREE_CHAIN (parm))
5999 if (TREE_VALUE (parm) == 0)
6001 error ("%Jparameter name missing from parameter list", fndecl);
6002 TREE_PURPOSE (parm) = 0;
6003 continue;
6006 b = I_SYMBOL_BINDING (TREE_VALUE (parm));
6007 if (b && B_IN_CURRENT_SCOPE (b))
6009 decl = b->decl;
6010 /* If we got something other than a PARM_DECL it is an error. */
6011 if (TREE_CODE (decl) != PARM_DECL)
6012 error ("%J%qD declared as a non-parameter", decl, decl);
6013 /* If the declaration is already marked, we have a duplicate
6014 name. Complain and ignore the duplicate. */
6015 else if (DECL_WEAK (decl))
6017 error ("%Jmultiple parameters named %qD", decl, decl);
6018 TREE_PURPOSE (parm) = 0;
6019 continue;
6021 /* If the declaration says "void", complain and turn it into
6022 an int. */
6023 else if (VOID_TYPE_P (TREE_TYPE (decl)))
6025 error ("%Jparameter %qD declared with void type", decl, decl);
6026 TREE_TYPE (decl) = integer_type_node;
6027 DECL_ARG_TYPE (decl) = integer_type_node;
6028 layout_decl (decl, 0);
6031 /* If no declaration found, default to int. */
6032 else
6034 decl = build_decl (PARM_DECL, TREE_VALUE (parm), integer_type_node);
6035 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
6036 DECL_SOURCE_LOCATION (decl) = DECL_SOURCE_LOCATION (fndecl);
6037 pushdecl (decl);
6039 if (flag_isoc99)
6040 pedwarn ("%Jtype of %qD defaults to %<int%>", decl, decl);
6041 else if (extra_warnings)
6042 warning ("%Jtype of %qD defaults to %<int%>", decl, decl);
6045 TREE_PURPOSE (parm) = decl;
6046 DECL_WEAK (decl) = 1;
6049 /* Now examine the parms chain for incomplete declarations
6050 and declarations with no corresponding names. */
6052 for (b = current_scope->bindings; b; b = b->prev)
6054 parm = b->decl;
6055 if (TREE_CODE (parm) != PARM_DECL)
6056 continue;
6058 if (TREE_TYPE (parm) != error_mark_node
6059 && !COMPLETE_TYPE_P (TREE_TYPE (parm)))
6061 error ("%Jparameter %qD has incomplete type", parm, parm);
6062 TREE_TYPE (parm) = error_mark_node;
6065 if (!DECL_WEAK (parm))
6067 error ("%Jdeclaration for parameter %qD but no such parameter",
6068 parm, parm);
6070 /* Pretend the parameter was not missing.
6071 This gets us to a standard state and minimizes
6072 further error messages. */
6073 parmids = chainon (parmids, tree_cons (parm, 0, 0));
6077 /* Chain the declarations together in the order of the list of
6078 names. Store that chain in the function decl, replacing the
6079 list of names. Update the current scope to match. */
6080 DECL_ARGUMENTS (fndecl) = 0;
6082 for (parm = parmids; parm; parm = TREE_CHAIN (parm))
6083 if (TREE_PURPOSE (parm))
6084 break;
6085 if (parm && TREE_PURPOSE (parm))
6087 last = TREE_PURPOSE (parm);
6088 DECL_ARGUMENTS (fndecl) = last;
6089 DECL_WEAK (last) = 0;
6091 for (parm = TREE_CHAIN (parm); parm; parm = TREE_CHAIN (parm))
6092 if (TREE_PURPOSE (parm))
6094 TREE_CHAIN (last) = TREE_PURPOSE (parm);
6095 last = TREE_PURPOSE (parm);
6096 DECL_WEAK (last) = 0;
6098 TREE_CHAIN (last) = 0;
6101 /* If there was a previous prototype,
6102 set the DECL_ARG_TYPE of each argument according to
6103 the type previously specified, and report any mismatches. */
6105 if (TYPE_ARG_TYPES (TREE_TYPE (fndecl)))
6107 tree type;
6108 for (parm = DECL_ARGUMENTS (fndecl),
6109 type = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
6110 parm || (type && (TYPE_MAIN_VARIANT (TREE_VALUE (type))
6111 != void_type_node));
6112 parm = TREE_CHAIN (parm), type = TREE_CHAIN (type))
6114 if (parm == 0 || type == 0
6115 || TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
6117 error ("number of arguments doesn%'t match prototype");
6118 error ("%Hprototype declaration",
6119 &current_function_prototype_locus);
6120 break;
6122 /* Type for passing arg must be consistent with that
6123 declared for the arg. ISO C says we take the unqualified
6124 type for parameters declared with qualified type. */
6125 if (!comptypes (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (parm)),
6126 TYPE_MAIN_VARIANT (TREE_VALUE (type))))
6128 if (TYPE_MAIN_VARIANT (TREE_TYPE (parm))
6129 == TYPE_MAIN_VARIANT (TREE_VALUE (type)))
6131 /* Adjust argument to match prototype. E.g. a previous
6132 `int foo(float);' prototype causes
6133 `int foo(x) float x; {...}' to be treated like
6134 `int foo(float x) {...}'. This is particularly
6135 useful for argument types like uid_t. */
6136 DECL_ARG_TYPE (parm) = TREE_TYPE (parm);
6138 if (targetm.calls.promote_prototypes (TREE_TYPE (current_function_decl))
6139 && INTEGRAL_TYPE_P (TREE_TYPE (parm))
6140 && TYPE_PRECISION (TREE_TYPE (parm))
6141 < TYPE_PRECISION (integer_type_node))
6142 DECL_ARG_TYPE (parm) = integer_type_node;
6144 if (pedantic)
6146 pedwarn ("promoted argument %qD "
6147 "doesn%'t match prototype", parm);
6148 pedwarn ("%Hprototype declaration",
6149 &current_function_prototype_locus);
6152 else
6154 error ("argument %qD doesn%'t match prototype", parm);
6155 error ("%Hprototype declaration",
6156 &current_function_prototype_locus);
6160 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = 0;
6163 /* Otherwise, create a prototype that would match. */
6165 else
6167 tree actual = 0, last = 0, type;
6169 for (parm = DECL_ARGUMENTS (fndecl); parm; parm = TREE_CHAIN (parm))
6171 type = tree_cons (NULL_TREE, DECL_ARG_TYPE (parm), NULL_TREE);
6172 if (last)
6173 TREE_CHAIN (last) = type;
6174 else
6175 actual = type;
6176 last = type;
6178 type = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
6179 if (last)
6180 TREE_CHAIN (last) = type;
6181 else
6182 actual = type;
6184 /* We are going to assign a new value for the TYPE_ACTUAL_ARG_TYPES
6185 of the type of this function, but we need to avoid having this
6186 affect the types of other similarly-typed functions, so we must
6187 first force the generation of an identical (but separate) type
6188 node for the relevant function type. The new node we create
6189 will be a variant of the main variant of the original function
6190 type. */
6192 TREE_TYPE (fndecl) = build_variant_type_copy (TREE_TYPE (fndecl));
6194 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = actual;
6198 /* Store parameter declarations passed in ARG_INFO into the current
6199 function declaration. */
6201 void
6202 store_parm_decls_from (struct c_arg_info *arg_info)
6204 current_function_arg_info = arg_info;
6205 store_parm_decls ();
6208 /* Store the parameter declarations into the current function declaration.
6209 This is called after parsing the parameter declarations, before
6210 digesting the body of the function.
6212 For an old-style definition, construct a prototype out of the old-style
6213 parameter declarations and inject it into the function's type. */
6215 void
6216 store_parm_decls (void)
6218 tree fndecl = current_function_decl;
6219 bool proto;
6221 /* The argument information block for FNDECL. */
6222 struct c_arg_info *arg_info = current_function_arg_info;
6223 current_function_arg_info = 0;
6225 /* True if this definition is written with a prototype. Note:
6226 despite C99 6.7.5.3p14, we can *not* treat an empty argument
6227 list in a function definition as equivalent to (void) -- an
6228 empty argument list specifies the function has no parameters,
6229 but only (void) sets up a prototype for future calls. */
6230 proto = arg_info->types != 0;
6232 if (proto)
6233 store_parm_decls_newstyle (fndecl, arg_info);
6234 else
6235 store_parm_decls_oldstyle (fndecl, arg_info);
6237 /* The next call to push_scope will be a function body. */
6239 next_is_function_body = true;
6241 /* Write a record describing this function definition to the prototypes
6242 file (if requested). */
6244 gen_aux_info_record (fndecl, 1, 0, proto);
6246 /* Initialize the RTL code for the function. */
6247 allocate_struct_function (fndecl);
6249 /* Begin the statement tree for this function. */
6250 DECL_SAVED_TREE (fndecl) = push_stmt_list ();
6252 /* ??? Insert the contents of the pending sizes list into the function
6253 to be evaluated. The only reason left to have this is
6254 void foo(int n, int array[n++])
6255 because we throw away the array type in favor of a pointer type, and
6256 thus won't naturally see the SAVE_EXPR containing the increment. All
6257 other pending sizes would be handled by gimplify_parameters. */
6259 tree t;
6260 for (t = nreverse (get_pending_sizes ()); t ; t = TREE_CHAIN (t))
6261 add_stmt (TREE_VALUE (t));
6264 /* Even though we're inside a function body, we still don't want to
6265 call expand_expr to calculate the size of a variable-sized array.
6266 We haven't necessarily assigned RTL to all variables yet, so it's
6267 not safe to try to expand expressions involving them. */
6268 cfun->x_dont_save_pending_sizes_p = 1;
6271 /* Handle attribute((warn_unused_result)) on FNDECL and all its nested
6272 functions. */
6274 static void
6275 c_warn_unused_result_recursively (tree fndecl)
6277 struct cgraph_node *cgn;
6279 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
6280 c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
6282 /* Finalize all nested functions now. */
6283 cgn = cgraph_node (fndecl);
6284 for (cgn = cgn->nested; cgn ; cgn = cgn->next_nested)
6285 c_warn_unused_result_recursively (cgn->decl);
6288 /* Finish up a function declaration and compile that function
6289 all the way to assembler language output. The free the storage
6290 for the function definition.
6292 This is called after parsing the body of the function definition. */
6294 void
6295 finish_function (void)
6297 tree fndecl = current_function_decl;
6299 if (TREE_CODE (fndecl) == FUNCTION_DECL
6300 && targetm.calls.promote_prototypes (TREE_TYPE (fndecl)))
6302 tree args = DECL_ARGUMENTS (fndecl);
6303 for (; args; args = TREE_CHAIN (args))
6305 tree type = TREE_TYPE (args);
6306 if (INTEGRAL_TYPE_P (type)
6307 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
6308 DECL_ARG_TYPE (args) = integer_type_node;
6312 if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node)
6313 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
6315 /* Must mark the RESULT_DECL as being in this function. */
6317 if (DECL_RESULT (fndecl) && DECL_RESULT (fndecl) != error_mark_node)
6318 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
6320 if (MAIN_NAME_P (DECL_NAME (fndecl)) && flag_hosted)
6322 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (fndecl)))
6323 != integer_type_node)
6325 /* If warn_main is 1 (-Wmain) or 2 (-Wall), we have already warned.
6326 If warn_main is -1 (-Wno-main) we don't want to be warned. */
6327 if (!warn_main)
6328 pedwarn ("%Jreturn type of %qD is not %<int%>", fndecl, fndecl);
6330 else
6332 if (flag_isoc99)
6334 tree stmt = c_finish_return (integer_zero_node);
6335 /* Hack. We don't want the middle-end to warn that this
6336 return is unreachable, so put the statement on the
6337 special line 0. */
6338 annotate_with_file_line (stmt, input_filename, 0);
6343 /* Tie off the statement tree for this function. */
6344 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
6346 finish_fname_decls ();
6348 /* Complain if there's just no return statement. */
6349 if (warn_return_type
6350 && TREE_CODE (TREE_TYPE (TREE_TYPE (fndecl))) != VOID_TYPE
6351 && !current_function_returns_value && !current_function_returns_null
6352 /* Don't complain if we abort. */
6353 && !current_function_returns_abnormally
6354 /* Don't warn for main(). */
6355 && !MAIN_NAME_P (DECL_NAME (fndecl))
6356 /* Or if they didn't actually specify a return type. */
6357 && !C_FUNCTION_IMPLICIT_INT (fndecl)
6358 /* Normally, with -Wreturn-type, flow will complain. Unless we're an
6359 inline function, as we might never be compiled separately. */
6360 && DECL_INLINE (fndecl))
6361 warning ("no return statement in function returning non-void");
6363 /* With just -Wextra, complain only if function returns both with
6364 and without a value. */
6365 if (extra_warnings
6366 && current_function_returns_value
6367 && current_function_returns_null)
6368 warning ("this function may return with or without a value");
6370 /* Store the end of the function, so that we get good line number
6371 info for the epilogue. */
6372 cfun->function_end_locus = input_location;
6374 /* If we don't have ctors/dtors sections, and this is a static
6375 constructor or destructor, it must be recorded now. */
6376 if (DECL_STATIC_CONSTRUCTOR (fndecl)
6377 && !targetm.have_ctors_dtors)
6378 static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
6379 if (DECL_STATIC_DESTRUCTOR (fndecl)
6380 && !targetm.have_ctors_dtors)
6381 static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
6383 /* Finalize the ELF visibility for the function. */
6384 c_determine_visibility (fndecl);
6386 /* Genericize before inlining. Delay genericizing nested functions
6387 until their parent function is genericized. Since finalizing
6388 requires GENERIC, delay that as well. */
6390 if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node
6391 && !undef_nested_function)
6393 if (!decl_function_context (fndecl))
6395 c_genericize (fndecl);
6396 c_warn_unused_result_recursively (fndecl);
6398 /* ??? Objc emits functions after finalizing the compilation unit.
6399 This should be cleaned up later and this conditional removed. */
6400 if (cgraph_global_info_ready)
6402 c_expand_body (fndecl);
6403 return;
6406 cgraph_finalize_function (fndecl, false);
6408 else
6410 /* Register this function with cgraph just far enough to get it
6411 added to our parent's nested function list. Handy, since the
6412 C front end doesn't have such a list. */
6413 (void) cgraph_node (fndecl);
6417 if (!decl_function_context (fndecl))
6418 undef_nested_function = false;
6420 /* We're leaving the context of this function, so zap cfun.
6421 It's still in DECL_STRUCT_FUNCTION, and we'll restore it in
6422 tree_rest_of_compilation. */
6423 cfun = NULL;
6424 current_function_decl = NULL;
6427 /* Generate the RTL for the body of FNDECL. */
6429 void
6430 c_expand_body (tree fndecl)
6433 if (!DECL_INITIAL (fndecl)
6434 || DECL_INITIAL (fndecl) == error_mark_node)
6435 return;
6437 tree_rest_of_compilation (fndecl);
6439 if (DECL_STATIC_CONSTRUCTOR (fndecl)
6440 && targetm.have_ctors_dtors)
6441 targetm.asm_out.constructor (XEXP (DECL_RTL (fndecl), 0),
6442 DEFAULT_INIT_PRIORITY);
6443 if (DECL_STATIC_DESTRUCTOR (fndecl)
6444 && targetm.have_ctors_dtors)
6445 targetm.asm_out.destructor (XEXP (DECL_RTL (fndecl), 0),
6446 DEFAULT_INIT_PRIORITY);
6449 /* Check the declarations given in a for-loop for satisfying the C99
6450 constraints. */
6451 void
6452 check_for_loop_decls (void)
6454 struct c_binding *b;
6456 if (!flag_isoc99)
6458 /* If we get here, declarations have been used in a for loop without
6459 the C99 for loop scope. This doesn't make much sense, so don't
6460 allow it. */
6461 error ("%<for%> loop initial declaration used outside C99 mode");
6462 return;
6464 /* C99 subclause 6.8.5 paragraph 3:
6466 [#3] The declaration part of a for statement shall only
6467 declare identifiers for objects having storage class auto or
6468 register.
6470 It isn't clear whether, in this sentence, "identifiers" binds to
6471 "shall only declare" or to "objects" - that is, whether all identifiers
6472 declared must be identifiers for objects, or whether the restriction
6473 only applies to those that are. (A question on this in comp.std.c
6474 in November 2000 received no answer.) We implement the strictest
6475 interpretation, to avoid creating an extension which later causes
6476 problems. */
6478 for (b = current_scope->bindings; b; b = b->prev)
6480 tree id = b->id;
6481 tree decl = b->decl;
6483 if (!id)
6484 continue;
6486 switch (TREE_CODE (decl))
6488 case VAR_DECL:
6489 if (TREE_STATIC (decl))
6490 error ("%Jdeclaration of static variable %qD in %<for%> loop "
6491 "initial declaration", decl, decl);
6492 else if (DECL_EXTERNAL (decl))
6493 error ("%Jdeclaration of %<extern%> variable %qD in %<for%> loop "
6494 "initial declaration", decl, decl);
6495 break;
6497 case RECORD_TYPE:
6498 error ("%<struct %E%> declared in %<for%> loop initial declaration",
6499 id);
6500 break;
6501 case UNION_TYPE:
6502 error ("%<union %E%> declared in %<for%> loop initial declaration",
6503 id);
6504 break;
6505 case ENUMERAL_TYPE:
6506 error ("%<enum %E%> declared in %<for%> loop initial declaration",
6507 id);
6508 break;
6509 default:
6510 error ("%Jdeclaration of non-variable %qD in %<for%> loop "
6511 "initial declaration", decl, decl);
6516 /* Save and reinitialize the variables
6517 used during compilation of a C function. */
6519 void
6520 c_push_function_context (struct function *f)
6522 struct language_function *p;
6523 p = GGC_NEW (struct language_function);
6524 f->language = p;
6526 p->base.x_stmt_tree = c_stmt_tree;
6527 p->x_break_label = c_break_label;
6528 p->x_cont_label = c_cont_label;
6529 p->x_switch_stack = c_switch_stack;
6530 p->arg_info = current_function_arg_info;
6531 p->returns_value = current_function_returns_value;
6532 p->returns_null = current_function_returns_null;
6533 p->returns_abnormally = current_function_returns_abnormally;
6534 p->warn_about_return_type = warn_about_return_type;
6535 p->extern_inline = current_extern_inline;
6538 /* Restore the variables used during compilation of a C function. */
6540 void
6541 c_pop_function_context (struct function *f)
6543 struct language_function *p = f->language;
6545 if (DECL_STRUCT_FUNCTION (current_function_decl) == 0
6546 && DECL_SAVED_TREE (current_function_decl) == NULL_TREE)
6548 /* Stop pointing to the local nodes about to be freed. */
6549 /* But DECL_INITIAL must remain nonzero so we know this
6550 was an actual function definition. */
6551 DECL_INITIAL (current_function_decl) = error_mark_node;
6552 DECL_ARGUMENTS (current_function_decl) = 0;
6555 c_stmt_tree = p->base.x_stmt_tree;
6556 c_break_label = p->x_break_label;
6557 c_cont_label = p->x_cont_label;
6558 c_switch_stack = p->x_switch_stack;
6559 current_function_arg_info = p->arg_info;
6560 current_function_returns_value = p->returns_value;
6561 current_function_returns_null = p->returns_null;
6562 current_function_returns_abnormally = p->returns_abnormally;
6563 warn_about_return_type = p->warn_about_return_type;
6564 current_extern_inline = p->extern_inline;
6566 f->language = NULL;
6569 /* Copy the DECL_LANG_SPECIFIC data associated with DECL. */
6571 void
6572 c_dup_lang_specific_decl (tree decl)
6574 struct lang_decl *ld;
6576 if (!DECL_LANG_SPECIFIC (decl))
6577 return;
6579 ld = GGC_NEW (struct lang_decl);
6580 memcpy (ld, DECL_LANG_SPECIFIC (decl), sizeof (struct lang_decl));
6581 DECL_LANG_SPECIFIC (decl) = ld;
6584 /* The functions below are required for functionality of doing
6585 function at once processing in the C front end. Currently these
6586 functions are not called from anywhere in the C front end, but as
6587 these changes continue, that will change. */
6589 /* Returns nonzero if the current statement is a full expression,
6590 i.e. temporaries created during that statement should be destroyed
6591 at the end of the statement. */
6594 stmts_are_full_exprs_p (void)
6596 return 0;
6599 /* Returns the stmt_tree (if any) to which statements are currently
6600 being added. If there is no active statement-tree, NULL is
6601 returned. */
6603 stmt_tree
6604 current_stmt_tree (void)
6606 return &c_stmt_tree;
6609 /* Nonzero if TYPE is an anonymous union or struct type. Always 0 in
6610 C. */
6613 anon_aggr_type_p (tree ARG_UNUSED (node))
6615 return 0;
6618 /* Return the global value of T as a symbol. */
6620 tree
6621 identifier_global_value (tree t)
6623 struct c_binding *b;
6625 for (b = I_SYMBOL_BINDING (t); b; b = b->shadowed)
6626 if (B_IN_FILE_SCOPE (b) || B_IN_EXTERNAL_SCOPE (b))
6627 return b->decl;
6629 return 0;
6632 /* Record a builtin type for C. If NAME is non-NULL, it is the name used;
6633 otherwise the name is found in ridpointers from RID_INDEX. */
6635 void
6636 record_builtin_type (enum rid rid_index, const char *name, tree type)
6638 tree id, decl;
6639 if (name == 0)
6640 id = ridpointers[(int) rid_index];
6641 else
6642 id = get_identifier (name);
6643 decl = build_decl (TYPE_DECL, id, type);
6644 pushdecl (decl);
6645 if (debug_hooks->type_decl)
6646 debug_hooks->type_decl (decl, false);
6649 /* Build the void_list_node (void_type_node having been created). */
6650 tree
6651 build_void_list_node (void)
6653 tree t = build_tree_list (NULL_TREE, void_type_node);
6654 return t;
6657 /* Return a c_parm structure with the given SPECS, ATTRS and DECLARATOR. */
6659 struct c_parm *
6660 build_c_parm (struct c_declspecs *specs, tree attrs,
6661 struct c_declarator *declarator)
6663 struct c_parm *ret = XOBNEW (&parser_obstack, struct c_parm);
6664 ret->specs = specs;
6665 ret->attrs = attrs;
6666 ret->declarator = declarator;
6667 return ret;
6670 /* Return a declarator with nested attributes. TARGET is the inner
6671 declarator to which these attributes apply. ATTRS are the
6672 attributes. */
6674 struct c_declarator *
6675 build_attrs_declarator (tree attrs, struct c_declarator *target)
6677 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
6678 ret->kind = cdk_attrs;
6679 ret->declarator = target;
6680 ret->u.attrs = attrs;
6681 return ret;
6684 /* Return a declarator for a function with arguments specified by ARGS
6685 and return type specified by TARGET. */
6687 struct c_declarator *
6688 build_function_declarator (struct c_arg_info *args,
6689 struct c_declarator *target)
6691 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
6692 ret->kind = cdk_function;
6693 ret->declarator = target;
6694 ret->u.arg_info = args;
6695 return ret;
6698 /* Return a declarator for the identifier IDENT (which may be
6699 NULL_TREE for an abstract declarator). */
6701 struct c_declarator *
6702 build_id_declarator (tree ident)
6704 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
6705 ret->kind = cdk_id;
6706 ret->declarator = 0;
6707 ret->u.id = ident;
6708 return ret;
6711 /* Return something to represent absolute declarators containing a *.
6712 TARGET is the absolute declarator that the * contains.
6713 TYPE_QUALS_ATTRS is a structure for type qualifiers and attributes
6714 to apply to the pointer type. */
6716 struct c_declarator *
6717 make_pointer_declarator (struct c_declspecs *type_quals_attrs,
6718 struct c_declarator *target)
6720 tree attrs;
6721 int quals = 0;
6722 struct c_declarator *itarget = target;
6723 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
6724 if (type_quals_attrs)
6726 attrs = type_quals_attrs->attrs;
6727 quals = quals_from_declspecs (type_quals_attrs);
6728 if (attrs != NULL_TREE)
6729 itarget = build_attrs_declarator (attrs, target);
6731 ret->kind = cdk_pointer;
6732 ret->declarator = itarget;
6733 ret->u.pointer_quals = quals;
6734 return ret;
6737 /* Return a pointer to a structure for an empty list of declaration
6738 specifiers. */
6740 struct c_declspecs *
6741 build_null_declspecs (void)
6743 struct c_declspecs *ret = XOBNEW (&parser_obstack, struct c_declspecs);
6744 ret->type = 0;
6745 ret->decl_attr = 0;
6746 ret->attrs = 0;
6747 ret->typespec_word = cts_none;
6748 ret->storage_class = csc_none;
6749 ret->non_sc_seen_p = false;
6750 ret->typedef_p = false;
6751 ret->tag_defined_p = false;
6752 ret->explicit_signed_p = false;
6753 ret->deprecated_p = false;
6754 ret->default_int_p = false;
6755 ret->long_p = false;
6756 ret->long_long_p = false;
6757 ret->short_p = false;
6758 ret->signed_p = false;
6759 ret->unsigned_p = false;
6760 ret->complex_p = false;
6761 ret->inline_p = false;
6762 ret->thread_p = false;
6763 ret->const_p = false;
6764 ret->volatile_p = false;
6765 ret->restrict_p = false;
6766 return ret;
6769 /* Add the type qualifier QUAL to the declaration specifiers SPECS,
6770 returning SPECS. */
6772 struct c_declspecs *
6773 declspecs_add_qual (struct c_declspecs *specs, tree qual)
6775 enum rid i;
6776 bool dupe = false;
6777 specs->non_sc_seen_p = true;
6778 gcc_assert (TREE_CODE (qual) == IDENTIFIER_NODE
6779 && C_IS_RESERVED_WORD (qual));
6780 i = C_RID_CODE (qual);
6781 switch (i)
6783 case RID_CONST:
6784 dupe = specs->const_p;
6785 specs->const_p = true;
6786 break;
6787 case RID_VOLATILE:
6788 dupe = specs->volatile_p;
6789 specs->volatile_p = true;
6790 break;
6791 case RID_RESTRICT:
6792 dupe = specs->restrict_p;
6793 specs->restrict_p = true;
6794 break;
6795 default:
6796 gcc_unreachable ();
6798 if (dupe && pedantic && !flag_isoc99)
6799 pedwarn ("duplicate %qs", IDENTIFIER_POINTER (qual));
6800 return specs;
6803 /* Add the type specifier TYPE to the declaration specifiers SPECS,
6804 returning SPECS. */
6806 struct c_declspecs *
6807 declspecs_add_type (struct c_declspecs *specs, struct c_typespec spec)
6809 tree type = spec.spec;
6810 specs->non_sc_seen_p = true;
6811 if (TREE_DEPRECATED (type))
6812 specs->deprecated_p = true;
6814 /* Handle type specifier keywords. */
6815 if (TREE_CODE (type) == IDENTIFIER_NODE && C_IS_RESERVED_WORD (type))
6817 enum rid i = C_RID_CODE (type);
6818 if (specs->type)
6820 error ("two or more data types in declaration specifiers");
6821 return specs;
6823 if ((int) i <= (int) RID_LAST_MODIFIER)
6825 /* "long", "short", "signed", "unsigned" or "_Complex". */
6826 bool dupe = false;
6827 switch (i)
6829 case RID_LONG:
6830 if (specs->long_long_p)
6832 error ("%<long long long%> is too long for GCC");
6833 break;
6835 if (specs->long_p)
6837 if (specs->typespec_word == cts_double)
6839 error ("both %<long long%> and %<double%> in "
6840 "declaration specifiers");
6841 break;
6843 if (pedantic && !flag_isoc99 && !in_system_header
6844 && warn_long_long)
6845 pedwarn ("ISO C90 does not support %<long long%>");
6846 specs->long_long_p = 1;
6847 break;
6849 if (specs->short_p)
6850 error ("both %<long%> and %<short%> in "
6851 "declaration specifiers");
6852 else if (specs->typespec_word == cts_void)
6853 error ("both %<long%> and %<void%> in "
6854 "declaration specifiers");
6855 else if (specs->typespec_word == cts_bool)
6856 error ("both %<long%> and %<_Bool%> in "
6857 "declaration specifiers");
6858 else if (specs->typespec_word == cts_char)
6859 error ("both %<long%> and %<char%> in "
6860 "declaration specifiers");
6861 else if (specs->typespec_word == cts_float)
6862 error ("both %<long%> and %<float%> in "
6863 "declaration specifiers");
6864 else
6865 specs->long_p = true;
6866 break;
6867 case RID_SHORT:
6868 dupe = specs->short_p;
6869 if (specs->long_p)
6870 error ("both %<long%> and %<short%> in "
6871 "declaration specifiers");
6872 else if (specs->typespec_word == cts_void)
6873 error ("both %<short%> and %<void%> in "
6874 "declaration specifiers");
6875 else if (specs->typespec_word == cts_bool)
6876 error ("both %<short%> and %<_Bool%> in "
6877 "declaration specifiers");
6878 else if (specs->typespec_word == cts_char)
6879 error ("both %<short%> and %<char%> in "
6880 "declaration specifiers");
6881 else if (specs->typespec_word == cts_float)
6882 error ("both %<short%> and %<float%> in "
6883 "declaration specifiers");
6884 else if (specs->typespec_word == cts_double)
6885 error ("both %<short%> and %<double%> in "
6886 "declaration specifiers");
6887 else
6888 specs->short_p = true;
6889 break;
6890 case RID_SIGNED:
6891 dupe = specs->signed_p;
6892 if (specs->unsigned_p)
6893 error ("both %<signed%> and %<unsigned%> in "
6894 "declaration specifiers");
6895 else if (specs->typespec_word == cts_void)
6896 error ("both %<signed%> and %<void%> in "
6897 "declaration specifiers");
6898 else if (specs->typespec_word == cts_bool)
6899 error ("both %<signed%> and %<_Bool%> in "
6900 "declaration specifiers");
6901 else if (specs->typespec_word == cts_float)
6902 error ("both %<signed%> and %<float%> in "
6903 "declaration specifiers");
6904 else if (specs->typespec_word == cts_double)
6905 error ("both %<signed%> and %<double%> in "
6906 "declaration specifiers");
6907 else
6908 specs->signed_p = true;
6909 break;
6910 case RID_UNSIGNED:
6911 dupe = specs->unsigned_p;
6912 if (specs->signed_p)
6913 error ("both %<signed%> and %<unsigned%> in "
6914 "declaration specifiers");
6915 else if (specs->typespec_word == cts_void)
6916 error ("both %<unsigned%> and %<void%> in "
6917 "declaration specifiers");
6918 else if (specs->typespec_word == cts_bool)
6919 error ("both %<unsigned%> and %<_Bool%> in "
6920 "declaration specifiers");
6921 else if (specs->typespec_word == cts_float)
6922 error ("both %<unsigned%> and %<float%> in "
6923 "declaration specifiers");
6924 else if (specs->typespec_word == cts_double)
6925 error ("both %<unsigned%> and %<double%> in "
6926 "declaration specifiers");
6927 else
6928 specs->unsigned_p = true;
6929 break;
6930 case RID_COMPLEX:
6931 dupe = specs->complex_p;
6932 if (pedantic && !flag_isoc99 && !in_system_header)
6933 pedwarn ("ISO C90 does not support complex types");
6934 if (specs->typespec_word == cts_void)
6935 error ("both %<complex%> and %<void%> in "
6936 "declaration specifiers");
6937 else if (specs->typespec_word == cts_bool)
6938 error ("both %<complex%> and %<_Bool%> in "
6939 "declaration specifiers");
6940 else
6941 specs->complex_p = true;
6942 break;
6943 default:
6944 gcc_unreachable ();
6947 if (dupe)
6948 error ("duplicate %qs", IDENTIFIER_POINTER (type));
6950 return specs;
6952 else
6954 /* "void", "_Bool", "char", "int", "float" or "double". */
6955 if (specs->typespec_word != cts_none)
6957 error ("two or more data types in declaration specifiers");
6958 return specs;
6960 switch (i)
6962 case RID_VOID:
6963 if (specs->long_p)
6964 error ("both %<long%> and %<void%> in "
6965 "declaration specifiers");
6966 else if (specs->short_p)
6967 error ("both %<short%> and %<void%> in "
6968 "declaration specifiers");
6969 else if (specs->signed_p)
6970 error ("both %<signed%> and %<void%> in "
6971 "declaration specifiers");
6972 else if (specs->unsigned_p)
6973 error ("both %<unsigned%> and %<void%> in "
6974 "declaration specifiers");
6975 else if (specs->complex_p)
6976 error ("both %<complex%> and %<void%> in "
6977 "declaration specifiers");
6978 else
6979 specs->typespec_word = cts_void;
6980 return specs;
6981 case RID_BOOL:
6982 if (specs->long_p)
6983 error ("both %<long%> and %<_Bool%> in "
6984 "declaration specifiers");
6985 else if (specs->short_p)
6986 error ("both %<short%> and %<_Bool%> in "
6987 "declaration specifiers");
6988 else if (specs->signed_p)
6989 error ("both %<signed%> and %<_Bool%> in "
6990 "declaration specifiers");
6991 else if (specs->unsigned_p)
6992 error ("both %<unsigned%> and %<_Bool%> in "
6993 "declaration specifiers");
6994 else if (specs->complex_p)
6995 error ("both %<complex%> and %<_Bool%> in "
6996 "declaration specifiers");
6997 else
6998 specs->typespec_word = cts_bool;
6999 return specs;
7000 case RID_CHAR:
7001 if (specs->long_p)
7002 error ("both %<long%> and %<char%> in "
7003 "declaration specifiers");
7004 else if (specs->short_p)
7005 error ("both %<short%> and %<char%> in "
7006 "declaration specifiers");
7007 else
7008 specs->typespec_word = cts_char;
7009 return specs;
7010 case RID_INT:
7011 specs->typespec_word = cts_int;
7012 return specs;
7013 case RID_FLOAT:
7014 if (specs->long_p)
7015 error ("both %<long%> and %<float%> in "
7016 "declaration specifiers");
7017 else if (specs->short_p)
7018 error ("both %<short%> and %<float%> in "
7019 "declaration specifiers");
7020 else if (specs->signed_p)
7021 error ("both %<signed%> and %<float%> in "
7022 "declaration specifiers");
7023 else if (specs->unsigned_p)
7024 error ("both %<unsigned%> and %<float%> in "
7025 "declaration specifiers");
7026 else
7027 specs->typespec_word = cts_float;
7028 return specs;
7029 case RID_DOUBLE:
7030 if (specs->long_long_p)
7031 error ("both %<long long%> and %<double%> in "
7032 "declaration specifiers");
7033 else if (specs->short_p)
7034 error ("both %<short%> and %<double%> in "
7035 "declaration specifiers");
7036 else if (specs->signed_p)
7037 error ("both %<signed%> and %<double%> in "
7038 "declaration specifiers");
7039 else if (specs->unsigned_p)
7040 error ("both %<unsigned%> and %<double%> in "
7041 "declaration specifiers");
7042 else
7043 specs->typespec_word = cts_double;
7044 return specs;
7045 default:
7046 /* ObjC reserved word "id", handled below. */
7047 break;
7052 /* Now we have a typedef (a TYPE_DECL node), an identifier (some
7053 form of ObjC type, cases such as "int" and "long" being handled
7054 above), a TYPE (struct, union, enum and typeof specifiers) or an
7055 ERROR_MARK. In none of these cases may there have previously
7056 been any type specifiers. */
7057 if (specs->type || specs->typespec_word != cts_none
7058 || specs->long_p || specs->short_p || specs->signed_p
7059 || specs->unsigned_p || specs->complex_p)
7060 error ("two or more data types in declaration specifiers");
7061 else if (TREE_CODE (type) == TYPE_DECL)
7063 if (TREE_TYPE (type) == error_mark_node)
7064 ; /* Allow the type to default to int to avoid cascading errors. */
7065 else
7067 specs->type = TREE_TYPE (type);
7068 specs->decl_attr = DECL_ATTRIBUTES (type);
7069 specs->typedef_p = true;
7070 specs->explicit_signed_p = C_TYPEDEF_EXPLICITLY_SIGNED (type);
7073 else if (TREE_CODE (type) == IDENTIFIER_NODE)
7075 tree t = lookup_name (type);
7076 if (!t || TREE_CODE (t) != TYPE_DECL)
7077 error ("%qs fails to be a typedef or built in type",
7078 IDENTIFIER_POINTER (type));
7079 else if (TREE_TYPE (t) == error_mark_node)
7081 else
7082 specs->type = TREE_TYPE (t);
7084 else if (TREE_CODE (type) != ERROR_MARK)
7086 if (spec.kind == ctsk_tagdef || spec.kind == ctsk_tagfirstref)
7087 specs->tag_defined_p = true;
7088 if (spec.kind == ctsk_typeof)
7089 specs->typedef_p = true;
7090 specs->type = type;
7093 return specs;
7096 /* Add the storage class specifier or function specifier SCSPEC to the
7097 declaration specifiers SPECS, returning SPECS. */
7099 struct c_declspecs *
7100 declspecs_add_scspec (struct c_declspecs *specs, tree scspec)
7102 enum rid i;
7103 enum c_storage_class n = csc_none;
7104 bool dupe = false;
7105 gcc_assert (TREE_CODE (scspec) == IDENTIFIER_NODE
7106 && C_IS_RESERVED_WORD (scspec));
7107 i = C_RID_CODE (scspec);
7108 if (extra_warnings && specs->non_sc_seen_p)
7109 warning ("%qs is not at beginning of declaration",
7110 IDENTIFIER_POINTER (scspec));
7111 switch (i)
7113 case RID_INLINE:
7114 /* C99 permits duplicate inline. Although of doubtful utility,
7115 it seems simplest to permit it in gnu89 mode as well, as
7116 there is also little utility in maintaining this as a
7117 difference between gnu89 and C99 inline. */
7118 dupe = false;
7119 specs->inline_p = true;
7120 break;
7121 case RID_THREAD:
7122 dupe = specs->thread_p;
7123 if (specs->storage_class == csc_auto)
7124 error ("%<__thread%> used with %<auto%>");
7125 else if (specs->storage_class == csc_register)
7126 error ("%<__thread%> used with %<register%>");
7127 else if (specs->storage_class == csc_typedef)
7128 error ("%<__thread%> used with %<typedef%>");
7129 else
7130 specs->thread_p = true;
7131 break;
7132 case RID_AUTO:
7133 n = csc_auto;
7134 break;
7135 case RID_EXTERN:
7136 n = csc_extern;
7137 /* Diagnose "__thread extern". */
7138 if (specs->thread_p)
7139 error ("%<__thread%> before %<extern%>");
7140 break;
7141 case RID_REGISTER:
7142 n = csc_register;
7143 break;
7144 case RID_STATIC:
7145 n = csc_static;
7146 /* Diagnose "__thread static". */
7147 if (specs->thread_p)
7148 error ("%<__thread%> before %<static%>");
7149 break;
7150 case RID_TYPEDEF:
7151 n = csc_typedef;
7152 break;
7153 default:
7154 gcc_unreachable ();
7156 if (n != csc_none && n == specs->storage_class)
7157 dupe = true;
7158 if (dupe)
7159 error ("duplicate %qs", IDENTIFIER_POINTER (scspec));
7160 if (n != csc_none)
7162 if (specs->storage_class != csc_none && n != specs->storage_class)
7164 error ("multiple storage classes in declaration specifiers");
7166 else
7168 specs->storage_class = n;
7169 if (n != csc_extern && n != csc_static && specs->thread_p)
7171 error ("%<__thread%> used with %qs",
7172 IDENTIFIER_POINTER (scspec));
7173 specs->thread_p = false;
7177 return specs;
7180 /* Add the attributes ATTRS to the declaration specifiers SPECS,
7181 returning SPECS. */
7183 struct c_declspecs *
7184 declspecs_add_attrs (struct c_declspecs *specs, tree attrs)
7186 specs->attrs = chainon (attrs, specs->attrs);
7187 return specs;
7190 /* Combine "long", "short", "signed", "unsigned" and "_Complex" type
7191 specifiers with any other type specifier to determine the resulting
7192 type. This is where ISO C checks on complex types are made, since
7193 "_Complex long" is a prefix of the valid ISO C type "_Complex long
7194 double". */
7196 struct c_declspecs *
7197 finish_declspecs (struct c_declspecs *specs)
7199 /* If a type was specified as a whole, we have no modifiers and are
7200 done. */
7201 if (specs->type != NULL_TREE)
7203 gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
7204 && !specs->signed_p && !specs->unsigned_p
7205 && !specs->complex_p);
7206 return specs;
7209 /* If none of "void", "_Bool", "char", "int", "float" or "double"
7210 has been specified, treat it as "int" unless "_Complex" is
7211 present and there are no other specifiers. If we just have
7212 "_Complex", it is equivalent to "_Complex double", but e.g.
7213 "_Complex short" is equivalent to "_Complex short int". */
7214 if (specs->typespec_word == cts_none)
7216 if (specs->long_p || specs->short_p
7217 || specs->signed_p || specs->unsigned_p)
7219 specs->typespec_word = cts_int;
7221 else if (specs->complex_p)
7223 specs->typespec_word = cts_double;
7224 if (pedantic)
7225 pedwarn ("ISO C does not support plain %<complex%> meaning "
7226 "%<double complex%>");
7228 else
7230 specs->typespec_word = cts_int;
7231 specs->default_int_p = true;
7232 /* We don't diagnose this here because grokdeclarator will
7233 give more specific diagnostics according to whether it is
7234 a function definition. */
7238 /* If "signed" was specified, record this to distinguish "int" and
7239 "signed int" in the case of a bit-field with
7240 -funsigned-bitfields. */
7241 specs->explicit_signed_p = specs->signed_p;
7243 /* Now compute the actual type. */
7244 switch (specs->typespec_word)
7246 case cts_void:
7247 gcc_assert (!specs->long_p && !specs->short_p
7248 && !specs->signed_p && !specs->unsigned_p
7249 && !specs->complex_p);
7250 specs->type = void_type_node;
7251 break;
7252 case cts_bool:
7253 gcc_assert (!specs->long_p && !specs->short_p
7254 && !specs->signed_p && !specs->unsigned_p
7255 && !specs->complex_p);
7256 specs->type = boolean_type_node;
7257 break;
7258 case cts_char:
7259 gcc_assert (!specs->long_p && !specs->short_p);
7260 gcc_assert (!(specs->signed_p && specs->unsigned_p));
7261 if (specs->signed_p)
7262 specs->type = signed_char_type_node;
7263 else if (specs->unsigned_p)
7264 specs->type = unsigned_char_type_node;
7265 else
7266 specs->type = char_type_node;
7267 if (specs->complex_p)
7269 if (pedantic)
7270 pedwarn ("ISO C does not support complex integer types");
7271 specs->type = build_complex_type (specs->type);
7273 break;
7274 case cts_int:
7275 gcc_assert (!(specs->long_p && specs->short_p));
7276 gcc_assert (!(specs->signed_p && specs->unsigned_p));
7277 if (specs->long_long_p)
7278 specs->type = (specs->unsigned_p
7279 ? long_long_unsigned_type_node
7280 : long_long_integer_type_node);
7281 else if (specs->long_p)
7282 specs->type = (specs->unsigned_p
7283 ? long_unsigned_type_node
7284 : long_integer_type_node);
7285 else if (specs->short_p)
7286 specs->type = (specs->unsigned_p
7287 ? short_unsigned_type_node
7288 : short_integer_type_node);
7289 else
7290 specs->type = (specs->unsigned_p
7291 ? unsigned_type_node
7292 : integer_type_node);
7293 if (specs->complex_p)
7295 if (pedantic)
7296 pedwarn ("ISO C does not support complex integer types");
7297 specs->type = build_complex_type (specs->type);
7299 break;
7300 case cts_float:
7301 gcc_assert (!specs->long_p && !specs->short_p
7302 && !specs->signed_p && !specs->unsigned_p);
7303 specs->type = (specs->complex_p
7304 ? complex_float_type_node
7305 : float_type_node);
7306 break;
7307 case cts_double:
7308 gcc_assert (!specs->long_long_p && !specs->short_p
7309 && !specs->signed_p && !specs->unsigned_p);
7310 if (specs->long_p)
7312 specs->type = (specs->complex_p
7313 ? complex_long_double_type_node
7314 : long_double_type_node);
7316 else
7318 specs->type = (specs->complex_p
7319 ? complex_double_type_node
7320 : double_type_node);
7322 break;
7323 default:
7324 gcc_unreachable ();
7327 return specs;
7330 /* Synthesize a function which calls all the global ctors or global
7331 dtors in this file. This is only used for targets which do not
7332 support .ctors/.dtors sections. FIXME: Migrate into cgraph. */
7333 static void
7334 build_cdtor (int method_type, tree cdtors)
7336 tree body = 0;
7338 if (!cdtors)
7339 return;
7341 for (; cdtors; cdtors = TREE_CHAIN (cdtors))
7342 append_to_statement_list (build_function_call (TREE_VALUE (cdtors), 0),
7343 &body);
7345 cgraph_build_static_cdtor (method_type, body, DEFAULT_INIT_PRIORITY);
7348 /* Perform final processing on one file scope's declarations (or the
7349 external scope's declarations), GLOBALS. */
7350 static void
7351 c_write_global_declarations_1 (tree globals)
7353 size_t len = list_length (globals);
7354 tree *vec = XNEWVEC (tree, len);
7355 size_t i;
7356 tree decl;
7358 /* Process the decls in the order they were written. */
7359 for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
7361 vec[i] = decl;
7362 /* Check for used but undefined static functions using the C
7363 standard's definition of "used", and set TREE_NO_WARNING so
7364 that check_global_declarations doesn't repeat the check. */
7365 if (TREE_CODE (decl) == FUNCTION_DECL
7366 && DECL_INITIAL (decl) == 0
7367 && DECL_EXTERNAL (decl)
7368 && !TREE_PUBLIC (decl)
7369 && C_DECL_USED (decl))
7371 pedwarn ("%J%qF used but never defined", decl, decl);
7372 TREE_NO_WARNING (decl) = 1;
7376 wrapup_global_declarations (vec, len);
7377 check_global_declarations (vec, len);
7379 free (vec);
7382 void
7383 c_write_global_declarations (void)
7385 tree ext_block, t;
7387 /* We don't want to do this if generating a PCH. */
7388 if (pch_file)
7389 return;
7391 /* Don't waste time on further processing if -fsyntax-only or we've
7392 encountered errors. */
7393 if (flag_syntax_only || errorcount || sorrycount || cpp_errors (parse_in))
7394 return;
7396 /* Close the external scope. */
7397 ext_block = pop_scope ();
7398 external_scope = 0;
7399 gcc_assert (!current_scope);
7401 /* Process all file scopes in this compilation, and the external_scope,
7402 through wrapup_global_declarations and check_global_declarations. */
7403 for (t = all_translation_units; t; t = TREE_CHAIN (t))
7404 c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t)));
7405 c_write_global_declarations_1 (BLOCK_VARS (ext_block));
7407 /* Generate functions to call static constructors and destructors
7408 for targets that do not support .ctors/.dtors sections. These
7409 functions have magic names which are detected by collect2. */
7410 build_cdtor ('I', static_ctors); static_ctors = 0;
7411 build_cdtor ('D', static_dtors); static_dtors = 0;
7413 /* We're done parsing; proceed to optimize and emit assembly.
7414 FIXME: shouldn't be the front end's responsibility to call this. */
7415 cgraph_optimize ();
7418 #include "gt-c-decl.h"