]> gcc.gnu.org Git - gcc.git/blob - gcc/c-decl.c
c-decl.c (grokdeclarator): If -Wc++-compat, warn about a global variable with an...
[gcc.git] / gcc / c-decl.c
1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
4 Free Software Foundation, Inc.
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
21
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. */
25
26 /* ??? not all decl nodes are given the most useful possible
27 line numbers. For example, the CONST_DECLs for enum values. */
28
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "input.h"
33 #include "tm.h"
34 #include "intl.h"
35 #include "tree.h"
36 #include "tree-inline.h"
37 #include "rtl.h"
38 #include "flags.h"
39 #include "function.h"
40 #include "output.h"
41 #include "expr.h"
42 #include "c-tree.h"
43 #include "toplev.h"
44 #include "ggc.h"
45 #include "tm_p.h"
46 #include "cpplib.h"
47 #include "target.h"
48 #include "debug.h"
49 #include "opts.h"
50 #include "timevar.h"
51 #include "c-common.h"
52 #include "c-pragma.h"
53 #include "langhooks.h"
54 #include "tree-mudflap.h"
55 #include "gimple.h"
56 #include "tree-iterator.h"
57 #include "diagnostic.h"
58 #include "tree-dump.h"
59 #include "cgraph.h"
60 #include "hashtab.h"
61 #include "libfuncs.h"
62 #include "except.h"
63 #include "langhooks-def.h"
64 #include "pointer-set.h"
65 #include "gimple.h"
66 #include "plugin.h"
67
68 /* In grokdeclarator, distinguish syntactic contexts of declarators. */
69 enum decl_context
70 { NORMAL, /* Ordinary declaration */
71 FUNCDEF, /* Function definition */
72 PARM, /* Declaration of parm before function body */
73 FIELD, /* Declaration inside struct or union */
74 TYPENAME}; /* Typename (inside cast or sizeof) */
75
76 /* States indicating how grokdeclarator() should handle declspecs marked
77 with __attribute__((deprecated)). An object declared as
78 __attribute__((deprecated)) suppresses warnings of uses of other
79 deprecated items. */
80
81 enum deprecated_states {
82 DEPRECATED_NORMAL,
83 DEPRECATED_SUPPRESS
84 };
85
86 \f
87 /* Nonzero if we have seen an invalid cross reference
88 to a struct, union, or enum, but not yet printed the message. */
89 tree pending_invalid_xref;
90
91 /* File and line to appear in the eventual error message. */
92 location_t pending_invalid_xref_location;
93
94 /* True means we've initialized exception handling. */
95 bool c_eh_initialized_p;
96
97 /* The file and line that the prototype came from if this is an
98 old-style definition; used for diagnostics in
99 store_parm_decls_oldstyle. */
100
101 static location_t current_function_prototype_locus;
102
103 /* Whether this prototype was built-in. */
104
105 static bool current_function_prototype_built_in;
106
107 /* The argument type information of this prototype. */
108
109 static tree current_function_prototype_arg_types;
110
111 /* The argument information structure for the function currently being
112 defined. */
113
114 static struct c_arg_info *current_function_arg_info;
115
116 /* The obstack on which parser and related data structures, which are
117 not live beyond their top-level declaration or definition, are
118 allocated. */
119 struct obstack parser_obstack;
120
121 /* The current statement tree. */
122
123 static GTY(()) struct stmt_tree_s c_stmt_tree;
124
125 /* State saving variables. */
126 tree c_break_label;
127 tree c_cont_label;
128
129 /* True if we are currently parsing the fields of a struct or
130 union. */
131
132 static bool in_struct;
133
134 /* A list of types defined in the current struct or union. */
135
136 static VEC(tree,heap) *struct_types;
137
138 /* Linked list of TRANSLATION_UNIT_DECLS for the translation units
139 included in this invocation. Note that the current translation
140 unit is not included in this list. */
141
142 static GTY(()) tree all_translation_units;
143
144 /* A list of decls to be made automatically visible in each file scope. */
145 static GTY(()) tree visible_builtins;
146
147 /* Set to 0 at beginning of a function definition, set to 1 if
148 a return statement that specifies a return value is seen. */
149
150 int current_function_returns_value;
151
152 /* Set to 0 at beginning of a function definition, set to 1 if
153 a return statement with no argument is seen. */
154
155 int current_function_returns_null;
156
157 /* Set to 0 at beginning of a function definition, set to 1 if
158 a call to a noreturn function is seen. */
159
160 int current_function_returns_abnormally;
161
162 /* Set to nonzero by `grokdeclarator' for a function
163 whose return type is defaulted, if warnings for this are desired. */
164
165 static int warn_about_return_type;
166
167 /* Nonzero when the current toplevel function contains a declaration
168 of a nested function which is never defined. */
169
170 static bool undef_nested_function;
171
172 /* True means global_bindings_p should return false even if the scope stack
173 says we are in file scope. */
174 bool c_override_global_bindings_to_false;
175
176 \f
177 /* Each c_binding structure describes one binding of an identifier to
178 a decl. All the decls in a scope - irrespective of namespace - are
179 chained together by the ->prev field, which (as the name implies)
180 runs in reverse order. All the decls in a given namespace bound to
181 a given identifier are chained by the ->shadowed field, which runs
182 from inner to outer scopes.
183
184 The ->decl field usually points to a DECL node, but there are two
185 exceptions. In the namespace of type tags, the bound entity is a
186 RECORD_TYPE, UNION_TYPE, or ENUMERAL_TYPE node. If an undeclared
187 identifier is encountered, it is bound to error_mark_node to
188 suppress further errors about that identifier in the current
189 function.
190
191 The ->u.type field stores the type of the declaration in this scope;
192 if NULL, the type is the type of the ->decl field. This is only of
193 relevance for objects with external or internal linkage which may
194 be redeclared in inner scopes, forming composite types that only
195 persist for the duration of those scopes. In the external scope,
196 this stores the composite of all the types declared for this
197 object, visible or not. The ->inner_comp field (used only at file
198 scope) stores whether an incomplete array type at file scope was
199 completed at an inner scope to an array size other than 1.
200
201 The ->u.label field is used for labels. It points to a structure
202 which stores additional information used for warnings.
203
204 The depth field is copied from the scope structure that holds this
205 decl. It is used to preserve the proper ordering of the ->shadowed
206 field (see bind()) and also for a handful of special-case checks.
207 Finally, the invisible bit is true for a decl which should be
208 ignored for purposes of normal name lookup, and the nested bit is
209 true for a decl that's been bound a second time in an inner scope;
210 in all such cases, the binding in the outer scope will have its
211 invisible bit true. */
212
213 struct GTY((chain_next ("%h.prev"))) c_binding {
214 union GTY(()) { /* first so GTY desc can use decl */
215 tree GTY((tag ("0"))) type; /* the type in this scope */
216 struct c_label_vars * GTY((tag ("1"))) label; /* for warnings */
217 } GTY((desc ("TREE_CODE (%0.decl) == LABEL_DECL"))) u;
218 tree decl; /* the decl bound */
219 tree id; /* the identifier it's bound to */
220 struct c_binding *prev; /* the previous decl in this scope */
221 struct c_binding *shadowed; /* the innermost decl shadowed by this one */
222 unsigned int depth : 28; /* depth of this scope */
223 BOOL_BITFIELD invisible : 1; /* normal lookup should ignore this binding */
224 BOOL_BITFIELD nested : 1; /* do not set DECL_CONTEXT when popping */
225 BOOL_BITFIELD inner_comp : 1; /* incomplete array completed in inner scope */
226 /* one free bit */
227 location_t locus; /* location for nested bindings */
228 };
229 #define B_IN_SCOPE(b1, b2) ((b1)->depth == (b2)->depth)
230 #define B_IN_CURRENT_SCOPE(b) ((b)->depth == current_scope->depth)
231 #define B_IN_FILE_SCOPE(b) ((b)->depth == 1 /*file_scope->depth*/)
232 #define B_IN_EXTERNAL_SCOPE(b) ((b)->depth == 0 /*external_scope->depth*/)
233
234 #define I_SYMBOL_BINDING(node) \
235 (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->symbol_binding)
236 #define I_SYMBOL_DECL(node) \
237 (I_SYMBOL_BINDING(node) ? I_SYMBOL_BINDING(node)->decl : 0)
238
239 #define I_TAG_BINDING(node) \
240 (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->tag_binding)
241 #define I_TAG_DECL(node) \
242 (I_TAG_BINDING(node) ? I_TAG_BINDING(node)->decl : 0)
243
244 #define I_LABEL_BINDING(node) \
245 (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->label_binding)
246 #define I_LABEL_DECL(node) \
247 (I_LABEL_BINDING(node) ? I_LABEL_BINDING(node)->decl : 0)
248
249 /* Each C symbol points to three linked lists of c_binding structures.
250 These describe the values of the identifier in the three different
251 namespaces defined by the language. */
252
253 struct GTY(()) lang_identifier {
254 struct c_common_identifier common_id;
255 struct c_binding *symbol_binding; /* vars, funcs, constants, typedefs */
256 struct c_binding *tag_binding; /* struct/union/enum tags */
257 struct c_binding *label_binding; /* labels */
258 };
259
260 /* Validate c-lang.c's assumptions. */
261 extern char C_SIZEOF_STRUCT_LANG_IDENTIFIER_isnt_accurate
262 [(sizeof(struct lang_identifier) == C_SIZEOF_STRUCT_LANG_IDENTIFIER) ? 1 : -1];
263
264 /* The resulting tree type. */
265
266 union GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"),
267 chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE ? (union lang_tree_node *) TYPE_NEXT_VARIANT (&%h.generic) : ((union lang_tree_node *) TREE_CHAIN (&%h.generic))"))) lang_tree_node
268 {
269 union tree_node GTY ((tag ("0"),
270 desc ("tree_node_structure (&%h)")))
271 generic;
272 struct lang_identifier GTY ((tag ("1"))) identifier;
273 };
274
275 /* Track bindings and other things that matter for goto warnings. For
276 efficiency, we do not gather all the decls at the point of
277 definition. Instead, we point into the bindings structure. As
278 scopes are popped, we update these structures and gather the decls
279 that matter at that time. */
280
281 struct GTY(()) c_spot_bindings {
282 /* The currently open scope which holds bindings defined when the
283 label was defined or the goto statement was found. */
284 struct c_scope *scope;
285 /* The bindings in the scope field which were defined at the point
286 of the label or goto. This lets us look at older or newer
287 bindings in the scope, as appropriate. */
288 struct c_binding *bindings_in_scope;
289 /* The number of statement expressions that have started since this
290 label or goto statement was defined. This is zero if we are at
291 the same statement expression level. It is positive if we are in
292 a statement expression started since this spot. It is negative
293 if this spot was in a statement expression and we have left
294 it. */
295 int stmt_exprs;
296 /* Whether we started in a statement expression but are no longer in
297 it. This is set to true if stmt_exprs ever goes negative. */
298 bool left_stmt_expr;
299 };
300
301 /* This structure is used to keep track of bindings seen when a goto
302 statement is defined. This is only used if we see the goto
303 statement before we see the label. */
304
305 struct GTY(()) c_goto_bindings {
306 /* The location of the goto statement. */
307 location_t loc;
308 /* The bindings of the goto statement. */
309 struct c_spot_bindings goto_bindings;
310 };
311
312 typedef struct c_goto_bindings *c_goto_bindings_p;
313 DEF_VEC_P(c_goto_bindings_p);
314 DEF_VEC_ALLOC_P(c_goto_bindings_p,gc);
315
316 /* The additional information we keep track of for a label binding.
317 These fields are updated as scopes are popped. */
318
319 struct GTY(()) c_label_vars {
320 /* The shadowed c_label_vars, when one label shadows another (which
321 can only happen using a __label__ declaration). */
322 struct c_label_vars *shadowed;
323 /* The bindings when the label was defined. */
324 struct c_spot_bindings label_bindings;
325 /* A list of decls that we care about: decls about which we should
326 warn if a goto branches to this label from later in the function.
327 Decls are added to this list as scopes are popped. We only add
328 the decls that matter. */
329 VEC(tree,gc) *decls_in_scope;
330 /* A list of goto statements to this label. This is only used for
331 goto statements seen before the label was defined, so that we can
332 issue appropriate warnings for them. */
333 VEC(c_goto_bindings_p,gc) *gotos;
334 };
335
336 /* Each c_scope structure describes the complete contents of one
337 scope. Four scopes are distinguished specially: the innermost or
338 current scope, the innermost function scope, the file scope (always
339 the second to outermost) and the outermost or external scope.
340
341 Most declarations are recorded in the current scope.
342
343 All normal label declarations are recorded in the innermost
344 function scope, as are bindings of undeclared identifiers to
345 error_mark_node. (GCC permits nested functions as an extension,
346 hence the 'innermost' qualifier.) Explicitly declared labels
347 (using the __label__ extension) appear in the current scope.
348
349 Being in the file scope (current_scope == file_scope) causes
350 special behavior in several places below. Also, under some
351 conditions the Objective-C front end records declarations in the
352 file scope even though that isn't the current scope.
353
354 All declarations with external linkage are recorded in the external
355 scope, even if they aren't visible there; this models the fact that
356 such declarations are visible to the entire program, and (with a
357 bit of cleverness, see pushdecl) allows diagnosis of some violations
358 of C99 6.2.2p7 and 6.2.7p2:
359
360 If, within the same translation unit, the same identifier appears
361 with both internal and external linkage, the behavior is
362 undefined.
363
364 All declarations that refer to the same object or function shall
365 have compatible type; otherwise, the behavior is undefined.
366
367 Initially only the built-in declarations, which describe compiler
368 intrinsic functions plus a subset of the standard library, are in
369 this scope.
370
371 The order of the blocks list matters, and it is frequently appended
372 to. To avoid having to walk all the way to the end of the list on
373 each insertion, or reverse the list later, we maintain a pointer to
374 the last list entry. (FIXME: It should be feasible to use a reversed
375 list here.)
376
377 The bindings list is strictly in reverse order of declarations;
378 pop_scope relies on this. */
379
380
381 struct GTY((chain_next ("%h.outer"))) c_scope {
382 /* The scope containing this one. */
383 struct c_scope *outer;
384
385 /* The next outermost function scope. */
386 struct c_scope *outer_function;
387
388 /* All bindings in this scope. */
389 struct c_binding *bindings;
390
391 /* For each scope (except the global one), a chain of BLOCK nodes
392 for all the scopes that were entered and exited one level down. */
393 tree blocks;
394 tree blocks_last;
395
396 /* The depth of this scope. Used to keep the ->shadowed chain of
397 bindings sorted innermost to outermost. */
398 unsigned int depth : 28;
399
400 /* True if we are currently filling this scope with parameter
401 declarations. */
402 BOOL_BITFIELD parm_flag : 1;
403
404 /* True if we saw [*] in this scope. Used to give an error messages
405 if these appears in a function definition. */
406 BOOL_BITFIELD had_vla_unspec : 1;
407
408 /* True if we already complained about forward parameter decls
409 in this scope. This prevents double warnings on
410 foo (int a; int b; ...) */
411 BOOL_BITFIELD warned_forward_parm_decls : 1;
412
413 /* True if this is the outermost block scope of a function body.
414 This scope contains the parameters, the local variables declared
415 in the outermost block, and all the labels (except those in
416 nested functions, or declared at block scope with __label__). */
417 BOOL_BITFIELD function_body : 1;
418
419 /* True means make a BLOCK for this scope no matter what. */
420 BOOL_BITFIELD keep : 1;
421
422 /* True means that an unsuffixed float constant is _Decimal64. */
423 BOOL_BITFIELD float_const_decimal64 : 1;
424
425 /* True if this scope has any label bindings. This is used to speed
426 up searching for labels when popping scopes, particularly since
427 labels are normally only found at function scope. */
428 BOOL_BITFIELD has_label_bindings : 1;
429 };
430
431 /* The scope currently in effect. */
432
433 static GTY(()) struct c_scope *current_scope;
434
435 /* The innermost function scope. Ordinary (not explicitly declared)
436 labels, bindings to error_mark_node, and the lazily-created
437 bindings of __func__ and its friends get this scope. */
438
439 static GTY(()) struct c_scope *current_function_scope;
440
441 /* The C file scope. This is reset for each input translation unit. */
442
443 static GTY(()) struct c_scope *file_scope;
444
445 /* The outermost scope. This is used for all declarations with
446 external linkage, and only these, hence the name. */
447
448 static GTY(()) struct c_scope *external_scope;
449
450 /* A chain of c_scope structures awaiting reuse. */
451
452 static GTY((deletable)) struct c_scope *scope_freelist;
453
454 /* A chain of c_binding structures awaiting reuse. */
455
456 static GTY((deletable)) struct c_binding *binding_freelist;
457
458 /* Append VAR to LIST in scope SCOPE. */
459 #define SCOPE_LIST_APPEND(scope, list, decl) do { \
460 struct c_scope *s_ = (scope); \
461 tree d_ = (decl); \
462 if (s_->list##_last) \
463 BLOCK_CHAIN (s_->list##_last) = d_; \
464 else \
465 s_->list = d_; \
466 s_->list##_last = d_; \
467 } while (0)
468
469 /* Concatenate FROM in scope FSCOPE onto TO in scope TSCOPE. */
470 #define SCOPE_LIST_CONCAT(tscope, to, fscope, from) do { \
471 struct c_scope *t_ = (tscope); \
472 struct c_scope *f_ = (fscope); \
473 if (t_->to##_last) \
474 BLOCK_CHAIN (t_->to##_last) = f_->from; \
475 else \
476 t_->to = f_->from; \
477 t_->to##_last = f_->from##_last; \
478 } while (0)
479
480 /* A c_inline_static structure stores details of a static identifier
481 referenced in a definition of a function that may be an inline
482 definition if no subsequent declaration of that function uses
483 "extern" or does not use "inline". */
484
485 struct GTY((chain_next ("%h.next"))) c_inline_static {
486 /* The location for a diagnostic. */
487 location_t location;
488
489 /* The function that may be an inline definition. */
490 tree function;
491
492 /* The object or function referenced. */
493 tree static_decl;
494
495 /* What sort of reference this is. */
496 enum c_inline_static_type type;
497
498 /* The next such structure or NULL. */
499 struct c_inline_static *next;
500 };
501
502 /* List of static identifiers used or referenced in functions that may
503 be inline definitions. */
504 static GTY(()) struct c_inline_static *c_inline_statics;
505
506 /* True means unconditionally make a BLOCK for the next scope pushed. */
507
508 static bool keep_next_level_flag;
509
510 /* True means the next call to push_scope will be the outermost scope
511 of a function body, so do not push a new scope, merely cease
512 expecting parameter decls. */
513
514 static bool next_is_function_body;
515
516 /* Forward declarations. */
517 static tree lookup_name_in_scope (tree, struct c_scope *);
518 static tree c_make_fname_decl (location_t, tree, int);
519 static tree grokdeclarator (const struct c_declarator *,
520 struct c_declspecs *,
521 enum decl_context, bool, tree *, tree *, tree *,
522 bool *, enum deprecated_states);
523 static tree grokparms (struct c_arg_info *, bool);
524 static void layout_array_type (tree);
525 \f
526 /* T is a statement. Add it to the statement-tree. This is the
527 C/ObjC version--C++ has a slightly different version of this
528 function. */
529
530 tree
531 add_stmt (tree t)
532 {
533 enum tree_code code = TREE_CODE (t);
534
535 if (CAN_HAVE_LOCATION_P (t) && code != LABEL_EXPR)
536 {
537 if (!EXPR_HAS_LOCATION (t))
538 SET_EXPR_LOCATION (t, input_location);
539 }
540
541 if (code == LABEL_EXPR || code == CASE_LABEL_EXPR)
542 STATEMENT_LIST_HAS_LABEL (cur_stmt_list) = 1;
543
544 /* Add T to the statement-tree. Non-side-effect statements need to be
545 recorded during statement expressions. */
546 append_to_statement_list_force (t, &cur_stmt_list);
547
548 return t;
549 }
550 \f
551
552 void
553 c_print_identifier (FILE *file, tree node, int indent)
554 {
555 print_node (file, "symbol", I_SYMBOL_DECL (node), indent + 4);
556 print_node (file, "tag", I_TAG_DECL (node), indent + 4);
557 print_node (file, "label", I_LABEL_DECL (node), indent + 4);
558 if (C_IS_RESERVED_WORD (node) && C_RID_CODE (node) != RID_CXX_COMPAT_WARN)
559 {
560 tree rid = ridpointers[C_RID_CODE (node)];
561 indent_to (file, indent + 4);
562 fprintf (file, "rid %p \"%s\"",
563 (void *) rid, IDENTIFIER_POINTER (rid));
564 }
565 }
566
567 /* Establish a binding between NAME, an IDENTIFIER_NODE, and DECL,
568 which may be any of several kinds of DECL or TYPE or error_mark_node,
569 in the scope SCOPE. */
570 static void
571 bind (tree name, tree decl, struct c_scope *scope, bool invisible,
572 bool nested, location_t locus)
573 {
574 struct c_binding *b, **here;
575
576 if (binding_freelist)
577 {
578 b = binding_freelist;
579 binding_freelist = b->prev;
580 }
581 else
582 b = GGC_NEW (struct c_binding);
583
584 b->shadowed = 0;
585 b->decl = decl;
586 b->id = name;
587 b->depth = scope->depth;
588 b->invisible = invisible;
589 b->nested = nested;
590 b->inner_comp = 0;
591 b->locus = locus;
592
593 b->u.type = NULL;
594
595 b->prev = scope->bindings;
596 scope->bindings = b;
597
598 if (!name)
599 return;
600
601 switch (TREE_CODE (decl))
602 {
603 case LABEL_DECL: here = &I_LABEL_BINDING (name); break;
604 case ENUMERAL_TYPE:
605 case UNION_TYPE:
606 case RECORD_TYPE: here = &I_TAG_BINDING (name); break;
607 case VAR_DECL:
608 case FUNCTION_DECL:
609 case TYPE_DECL:
610 case CONST_DECL:
611 case PARM_DECL:
612 case ERROR_MARK: here = &I_SYMBOL_BINDING (name); break;
613
614 default:
615 gcc_unreachable ();
616 }
617
618 /* Locate the appropriate place in the chain of shadowed decls
619 to insert this binding. Normally, scope == current_scope and
620 this does nothing. */
621 while (*here && (*here)->depth > scope->depth)
622 here = &(*here)->shadowed;
623
624 b->shadowed = *here;
625 *here = b;
626 }
627
628 /* Clear the binding structure B, stick it on the binding_freelist,
629 and return the former value of b->prev. This is used by pop_scope
630 and get_parm_info to iterate destructively over all the bindings
631 from a given scope. */
632 static struct c_binding *
633 free_binding_and_advance (struct c_binding *b)
634 {
635 struct c_binding *prev = b->prev;
636
637 memset (b, 0, sizeof (struct c_binding));
638 b->prev = binding_freelist;
639 binding_freelist = b;
640
641 return prev;
642 }
643
644 /* Bind a label. Like bind, but skip fields which aren't used for
645 labels, and add the LABEL_VARS value. */
646 static void
647 bind_label (tree name, tree label, struct c_scope *scope,
648 struct c_label_vars *label_vars)
649 {
650 struct c_binding *b;
651
652 bind (name, label, scope, /*invisible=*/false, /*nested=*/false,
653 UNKNOWN_LOCATION);
654
655 scope->has_label_bindings = true;
656
657 b = scope->bindings;
658 gcc_assert (b->decl == label);
659 label_vars->shadowed = b->u.label;
660 b->u.label = label_vars;
661 }
662 \f
663 /* Hook called at end of compilation to assume 1 elt
664 for a file-scope tentative array defn that wasn't complete before. */
665
666 void
667 c_finish_incomplete_decl (tree decl)
668 {
669 if (TREE_CODE (decl) == VAR_DECL)
670 {
671 tree type = TREE_TYPE (decl);
672 if (type != error_mark_node
673 && TREE_CODE (type) == ARRAY_TYPE
674 && !DECL_EXTERNAL (decl)
675 && TYPE_DOMAIN (type) == 0)
676 {
677 warning_at (DECL_SOURCE_LOCATION (decl),
678 0, "array %q+D assumed to have one element", decl);
679
680 complete_array_type (&TREE_TYPE (decl), NULL_TREE, true);
681
682 layout_decl (decl, 0);
683 }
684 }
685 }
686 \f
687 /* Record that inline function FUNC contains a reference (location
688 LOC) to static DECL (file-scope or function-local according to
689 TYPE). */
690
691 void
692 record_inline_static (location_t loc, tree func, tree decl,
693 enum c_inline_static_type type)
694 {
695 struct c_inline_static *csi = GGC_NEW (struct c_inline_static);
696 csi->location = loc;
697 csi->function = func;
698 csi->static_decl = decl;
699 csi->type = type;
700 csi->next = c_inline_statics;
701 c_inline_statics = csi;
702 }
703
704 /* Check for references to static declarations in inline functions at
705 the end of the translation unit and diagnose them if the functions
706 are still inline definitions. */
707
708 static void
709 check_inline_statics (void)
710 {
711 struct c_inline_static *csi;
712 for (csi = c_inline_statics; csi; csi = csi->next)
713 {
714 if (DECL_EXTERNAL (csi->function))
715 switch (csi->type)
716 {
717 case csi_internal:
718 pedwarn (csi->location, 0,
719 "%qD is static but used in inline function %qD "
720 "which is not static", csi->static_decl, csi->function);
721 break;
722 case csi_modifiable:
723 pedwarn (csi->location, 0,
724 "%q+D is static but declared in inline function %qD "
725 "which is not static", csi->static_decl, csi->function);
726 break;
727 default:
728 gcc_unreachable ();
729 }
730 }
731 c_inline_statics = NULL;
732 }
733 \f
734 /* Fill in a c_spot_bindings structure. If DEFINING is true, set it
735 for the current state, otherwise set it to uninitialized. */
736
737 static void
738 set_spot_bindings (struct c_spot_bindings *p, bool defining)
739 {
740 if (defining)
741 {
742 p->scope = current_scope;
743 p->bindings_in_scope = current_scope->bindings;
744 }
745 else
746 {
747 p->scope = NULL;
748 p->bindings_in_scope = NULL;
749 }
750 p->stmt_exprs = 0;
751 p->left_stmt_expr = false;
752 }
753
754 /* Return true if we will want to say something if a goto statement
755 crosses DECL. */
756
757 static bool
758 decl_jump_unsafe (tree decl)
759 {
760 if (decl == error_mark_node || TREE_TYPE (decl) == error_mark_node)
761 return false;
762
763 /* Always warn about crossing variably modified types. */
764 if ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == TYPE_DECL)
765 && variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
766 return true;
767
768 /* Otherwise, only warn if -Wgoto-misses-init and this is an
769 initialized automatic decl. */
770 if (warn_jump_misses_init
771 && TREE_CODE (decl) == VAR_DECL
772 && !TREE_STATIC (decl)
773 && DECL_INITIAL (decl) != NULL_TREE)
774 return true;
775
776 return false;
777 }
778
779 /* Update spot bindings P as we pop out of SCOPE. Return true if we
780 should push decls for a label. */
781
782 static bool
783 update_spot_bindings (struct c_scope *scope, struct c_spot_bindings *p)
784 {
785 if (p->scope != scope)
786 {
787 /* This label or goto is defined in some other scope, or it is a
788 label which is not yet defined. There is nothing to
789 update. */
790 return false;
791 }
792
793 /* Adjust the spot bindings to refer to the bindings already defined
794 in the enclosing scope. */
795 p->scope = scope->outer;
796 p->bindings_in_scope = p->scope->bindings;
797
798 return true;
799 }
800 \f
801 /* The Objective-C front-end often needs to determine the current scope. */
802
803 void *
804 objc_get_current_scope (void)
805 {
806 return current_scope;
807 }
808
809 /* The following function is used only by Objective-C. It needs to live here
810 because it accesses the innards of c_scope. */
811
812 void
813 objc_mark_locals_volatile (void *enclosing_blk)
814 {
815 struct c_scope *scope;
816 struct c_binding *b;
817
818 for (scope = current_scope;
819 scope && scope != enclosing_blk;
820 scope = scope->outer)
821 {
822 for (b = scope->bindings; b; b = b->prev)
823 objc_volatilize_decl (b->decl);
824
825 /* Do not climb up past the current function. */
826 if (scope->function_body)
827 break;
828 }
829 }
830
831 /* Nonzero if we are currently in file scope. */
832
833 int
834 global_bindings_p (void)
835 {
836 return (current_scope == file_scope && !c_override_global_bindings_to_false
837 ? -1
838 : 0);
839 }
840
841 void
842 keep_next_level (void)
843 {
844 keep_next_level_flag = true;
845 }
846
847 /* Set the flag for the FLOAT_CONST_DECIMAL64 pragma being ON. */
848
849 void
850 set_float_const_decimal64 (void)
851 {
852 current_scope->float_const_decimal64 = true;
853 }
854
855 /* Clear the flag for the FLOAT_CONST_DECIMAL64 pragma. */
856
857 void
858 clear_float_const_decimal64 (void)
859 {
860 current_scope->float_const_decimal64 = false;
861 }
862
863 /* Return nonzero if an unsuffixed float constant is _Decimal64. */
864
865 bool
866 float_const_decimal64_p (void)
867 {
868 return current_scope->float_const_decimal64;
869 }
870
871 /* Identify this scope as currently being filled with parameters. */
872
873 void
874 declare_parm_level (void)
875 {
876 current_scope->parm_flag = true;
877 }
878
879 void
880 push_scope (void)
881 {
882 if (next_is_function_body)
883 {
884 /* This is the transition from the parameters to the top level
885 of the function body. These are the same scope
886 (C99 6.2.1p4,6) so we do not push another scope structure.
887 next_is_function_body is set only by store_parm_decls, which
888 in turn is called when and only when we are about to
889 encounter the opening curly brace for the function body.
890
891 The outermost block of a function always gets a BLOCK node,
892 because the debugging output routines expect that each
893 function has at least one BLOCK. */
894 current_scope->parm_flag = false;
895 current_scope->function_body = true;
896 current_scope->keep = true;
897 current_scope->outer_function = current_function_scope;
898 current_function_scope = current_scope;
899
900 keep_next_level_flag = false;
901 next_is_function_body = false;
902
903 /* The FLOAT_CONST_DECIMAL64 pragma applies to nested scopes. */
904 if (current_scope->outer)
905 current_scope->float_const_decimal64
906 = current_scope->outer->float_const_decimal64;
907 else
908 current_scope->float_const_decimal64 = false;
909 }
910 else
911 {
912 struct c_scope *scope;
913 if (scope_freelist)
914 {
915 scope = scope_freelist;
916 scope_freelist = scope->outer;
917 }
918 else
919 scope = GGC_CNEW (struct c_scope);
920
921 /* The FLOAT_CONST_DECIMAL64 pragma applies to nested scopes. */
922 if (current_scope)
923 scope->float_const_decimal64 = current_scope->float_const_decimal64;
924 else
925 scope->float_const_decimal64 = false;
926
927 scope->keep = keep_next_level_flag;
928 scope->outer = current_scope;
929 scope->depth = current_scope ? (current_scope->depth + 1) : 0;
930
931 /* Check for scope depth overflow. Unlikely (2^28 == 268,435,456) but
932 possible. */
933 if (current_scope && scope->depth == 0)
934 {
935 scope->depth--;
936 sorry ("GCC supports only %u nested scopes", scope->depth);
937 }
938
939 current_scope = scope;
940 keep_next_level_flag = false;
941 }
942 }
943
944 /* This is called when we are leaving SCOPE. For each label defined
945 in SCOPE, add any appropriate decls to its decls_in_scope fields.
946 These are the decls whose initialization will be skipped by a goto
947 later in the function. */
948
949 static void
950 update_label_decls (struct c_scope *scope)
951 {
952 struct c_scope *s;
953
954 s = scope;
955 while (s != NULL)
956 {
957 if (s->has_label_bindings)
958 {
959 struct c_binding *b;
960
961 for (b = s->bindings; b != NULL; b = b->prev)
962 {
963 struct c_label_vars *label_vars;
964 struct c_binding *b1;
965 unsigned int ix;
966 struct c_goto_bindings *g;
967
968 if (TREE_CODE (b->decl) != LABEL_DECL)
969 continue;
970 label_vars = b->u.label;
971
972 b1 = label_vars->label_bindings.bindings_in_scope;
973 if (update_spot_bindings (scope, &label_vars->label_bindings))
974 {
975 /* This label is defined in this scope. */
976 for (; b1 != NULL; b1 = b1->prev)
977 {
978 /* A goto from later in the function to this
979 label will never see the initialization of
980 B1, if any. Save it to issue a warning if
981 needed. */
982 if (decl_jump_unsafe (b1->decl))
983 VEC_safe_push (tree, gc, label_vars->decls_in_scope,
984 b1->decl);
985 }
986 }
987
988 /* Update the bindings of any goto statements associated
989 with this label. */
990 for (ix = 0;
991 VEC_iterate (c_goto_bindings_p, label_vars->gotos, ix, g);
992 ++ix)
993 update_spot_bindings (scope, &g->goto_bindings);
994 }
995 }
996
997 /* Don't search beyond the current function. */
998 if (s == current_function_scope)
999 break;
1000
1001 s = s->outer;
1002 }
1003 }
1004
1005 /* Set the TYPE_CONTEXT of all of TYPE's variants to CONTEXT. */
1006
1007 static void
1008 set_type_context (tree type, tree context)
1009 {
1010 for (type = TYPE_MAIN_VARIANT (type); type;
1011 type = TYPE_NEXT_VARIANT (type))
1012 TYPE_CONTEXT (type) = context;
1013 }
1014
1015 /* Exit a scope. Restore the state of the identifier-decl mappings
1016 that were in effect when this scope was entered. Return a BLOCK
1017 node containing all the DECLs in this scope that are of interest
1018 to debug info generation. */
1019
1020 tree
1021 pop_scope (void)
1022 {
1023 struct c_scope *scope = current_scope;
1024 tree block, context, p;
1025 struct c_binding *b;
1026
1027 bool functionbody = scope->function_body;
1028 bool keep = functionbody || scope->keep || scope->bindings;
1029
1030 update_label_decls (scope);
1031
1032 /* If appropriate, create a BLOCK to record the decls for the life
1033 of this function. */
1034 block = 0;
1035 if (keep)
1036 {
1037 block = make_node (BLOCK);
1038 BLOCK_SUBBLOCKS (block) = scope->blocks;
1039 TREE_USED (block) = 1;
1040
1041 /* In each subblock, record that this is its superior. */
1042 for (p = scope->blocks; p; p = BLOCK_CHAIN (p))
1043 BLOCK_SUPERCONTEXT (p) = block;
1044
1045 BLOCK_VARS (block) = 0;
1046 }
1047
1048 /* The TYPE_CONTEXTs for all of the tagged types belonging to this
1049 scope must be set so that they point to the appropriate
1050 construct, i.e. either to the current FUNCTION_DECL node, or
1051 else to the BLOCK node we just constructed.
1052
1053 Note that for tagged types whose scope is just the formal
1054 parameter list for some function type specification, we can't
1055 properly set their TYPE_CONTEXTs here, because we don't have a
1056 pointer to the appropriate FUNCTION_TYPE node readily available
1057 to us. For those cases, the TYPE_CONTEXTs of the relevant tagged
1058 type nodes get set in `grokdeclarator' as soon as we have created
1059 the FUNCTION_TYPE node which will represent the "scope" for these
1060 "parameter list local" tagged types. */
1061 if (scope->function_body)
1062 context = current_function_decl;
1063 else if (scope == file_scope)
1064 {
1065 tree file_decl = build_decl (UNKNOWN_LOCATION,
1066 TRANSLATION_UNIT_DECL, 0, 0);
1067 TREE_CHAIN (file_decl) = all_translation_units;
1068 all_translation_units = file_decl;
1069 context = file_decl;
1070 }
1071 else
1072 context = block;
1073
1074 /* Clear all bindings in this scope. */
1075 for (b = scope->bindings; b; b = free_binding_and_advance (b))
1076 {
1077 p = b->decl;
1078 switch (TREE_CODE (p))
1079 {
1080 case LABEL_DECL:
1081 /* Warnings for unused labels, errors for undefined labels. */
1082 if (TREE_USED (p) && !DECL_INITIAL (p))
1083 {
1084 error ("label %q+D used but not defined", p);
1085 DECL_INITIAL (p) = error_mark_node;
1086 }
1087 else
1088 warn_for_unused_label (p);
1089
1090 /* Labels go in BLOCK_VARS. */
1091 TREE_CHAIN (p) = BLOCK_VARS (block);
1092 BLOCK_VARS (block) = p;
1093 gcc_assert (I_LABEL_BINDING (b->id) == b);
1094 I_LABEL_BINDING (b->id) = b->shadowed;
1095
1096 /* Also pop back to the shadowed label_vars. */
1097 release_tree_vector (b->u.label->decls_in_scope);
1098 b->u.label = b->u.label->shadowed;
1099 break;
1100
1101 case ENUMERAL_TYPE:
1102 case UNION_TYPE:
1103 case RECORD_TYPE:
1104 set_type_context (p, context);
1105
1106 /* Types may not have tag-names, in which case the type
1107 appears in the bindings list with b->id NULL. */
1108 if (b->id)
1109 {
1110 gcc_assert (I_TAG_BINDING (b->id) == b);
1111 I_TAG_BINDING (b->id) = b->shadowed;
1112 }
1113 break;
1114
1115 case FUNCTION_DECL:
1116 /* Propagate TREE_ADDRESSABLE from nested functions to their
1117 containing functions. */
1118 if (!TREE_ASM_WRITTEN (p)
1119 && DECL_INITIAL (p) != 0
1120 && TREE_ADDRESSABLE (p)
1121 && DECL_ABSTRACT_ORIGIN (p) != 0
1122 && DECL_ABSTRACT_ORIGIN (p) != p)
1123 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (p)) = 1;
1124 if (!DECL_EXTERNAL (p)
1125 && !DECL_INITIAL (p)
1126 && scope != file_scope
1127 && scope != external_scope)
1128 {
1129 error ("nested function %q+D declared but never defined", p);
1130 undef_nested_function = true;
1131 }
1132 else if (DECL_DECLARED_INLINE_P (p)
1133 && TREE_PUBLIC (p)
1134 && !DECL_INITIAL (p))
1135 {
1136 /* C99 6.7.4p6: "a function with external linkage... declared
1137 with an inline function specifier ... shall also be defined
1138 in the same translation unit." */
1139 if (!flag_gnu89_inline)
1140 pedwarn (input_location, 0,
1141 "inline function %q+D declared but never defined", p);
1142 DECL_EXTERNAL (p) = 1;
1143 }
1144
1145 goto common_symbol;
1146
1147 case VAR_DECL:
1148 /* Warnings for unused variables. */
1149 if (!TREE_USED (p)
1150 && !TREE_NO_WARNING (p)
1151 && !DECL_IN_SYSTEM_HEADER (p)
1152 && DECL_NAME (p)
1153 && !DECL_ARTIFICIAL (p)
1154 && scope != file_scope
1155 && scope != external_scope)
1156 warning (OPT_Wunused_variable, "unused variable %q+D", p);
1157
1158 if (b->inner_comp)
1159 {
1160 error ("type of array %q+D completed incompatibly with"
1161 " implicit initialization", p);
1162 }
1163
1164 /* Fall through. */
1165 case TYPE_DECL:
1166 case CONST_DECL:
1167 common_symbol:
1168 /* All of these go in BLOCK_VARS, but only if this is the
1169 binding in the home scope. */
1170 if (!b->nested)
1171 {
1172 TREE_CHAIN (p) = BLOCK_VARS (block);
1173 BLOCK_VARS (block) = p;
1174 }
1175 else if (VAR_OR_FUNCTION_DECL_P (p))
1176 {
1177 /* For block local externs add a special
1178 DECL_EXTERNAL decl for debug info generation. */
1179 tree extp = copy_node (p);
1180
1181 DECL_EXTERNAL (extp) = 1;
1182 TREE_STATIC (extp) = 0;
1183 TREE_PUBLIC (extp) = 1;
1184 DECL_INITIAL (extp) = NULL_TREE;
1185 DECL_LANG_SPECIFIC (extp) = NULL;
1186 DECL_CONTEXT (extp) = current_function_decl;
1187 if (TREE_CODE (p) == FUNCTION_DECL)
1188 {
1189 DECL_RESULT (extp) = NULL_TREE;
1190 DECL_SAVED_TREE (extp) = NULL_TREE;
1191 DECL_STRUCT_FUNCTION (extp) = NULL;
1192 }
1193 if (b->locus != UNKNOWN_LOCATION)
1194 DECL_SOURCE_LOCATION (extp) = b->locus;
1195 TREE_CHAIN (extp) = BLOCK_VARS (block);
1196 BLOCK_VARS (block) = extp;
1197 }
1198 /* If this is the file scope, and we are processing more
1199 than one translation unit in this compilation, set
1200 DECL_CONTEXT of each decl to the TRANSLATION_UNIT_DECL.
1201 This makes same_translation_unit_p work, and causes
1202 static declarations to be given disambiguating suffixes. */
1203 if (scope == file_scope && num_in_fnames > 1)
1204 {
1205 DECL_CONTEXT (p) = context;
1206 if (TREE_CODE (p) == TYPE_DECL)
1207 set_type_context (TREE_TYPE (p), context);
1208 }
1209
1210 /* Fall through. */
1211 /* Parameters go in DECL_ARGUMENTS, not BLOCK_VARS, and have
1212 already been put there by store_parm_decls. Unused-
1213 parameter warnings are handled by function.c.
1214 error_mark_node obviously does not go in BLOCK_VARS and
1215 does not get unused-variable warnings. */
1216 case PARM_DECL:
1217 case ERROR_MARK:
1218 /* It is possible for a decl not to have a name. We get
1219 here with b->id NULL in this case. */
1220 if (b->id)
1221 {
1222 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
1223 I_SYMBOL_BINDING (b->id) = b->shadowed;
1224 if (b->shadowed && b->shadowed->u.type)
1225 TREE_TYPE (b->shadowed->decl) = b->shadowed->u.type;
1226 }
1227 break;
1228
1229 default:
1230 gcc_unreachable ();
1231 }
1232 }
1233
1234
1235 /* Dispose of the block that we just made inside some higher level. */
1236 if ((scope->function_body || scope == file_scope) && context)
1237 {
1238 DECL_INITIAL (context) = block;
1239 BLOCK_SUPERCONTEXT (block) = context;
1240 }
1241 else if (scope->outer)
1242 {
1243 if (block)
1244 SCOPE_LIST_APPEND (scope->outer, blocks, block);
1245 /* If we did not make a block for the scope just exited, any
1246 blocks made for inner scopes must be carried forward so they
1247 will later become subblocks of something else. */
1248 else if (scope->blocks)
1249 SCOPE_LIST_CONCAT (scope->outer, blocks, scope, blocks);
1250 }
1251
1252 /* Pop the current scope, and free the structure for reuse. */
1253 current_scope = scope->outer;
1254 if (scope->function_body)
1255 current_function_scope = scope->outer_function;
1256
1257 memset (scope, 0, sizeof (struct c_scope));
1258 scope->outer = scope_freelist;
1259 scope_freelist = scope;
1260
1261 return block;
1262 }
1263
1264 void
1265 push_file_scope (void)
1266 {
1267 tree decl;
1268
1269 if (file_scope)
1270 return;
1271
1272 push_scope ();
1273 file_scope = current_scope;
1274
1275 start_fname_decls ();
1276
1277 for (decl = visible_builtins; decl; decl = TREE_CHAIN (decl))
1278 bind (DECL_NAME (decl), decl, file_scope,
1279 /*invisible=*/false, /*nested=*/true, DECL_SOURCE_LOCATION (decl));
1280 }
1281
1282 void
1283 pop_file_scope (void)
1284 {
1285 /* In case there were missing closebraces, get us back to the global
1286 binding level. */
1287 while (current_scope != file_scope)
1288 pop_scope ();
1289
1290 /* __FUNCTION__ is defined at file scope (""). This
1291 call may not be necessary as my tests indicate it
1292 still works without it. */
1293 finish_fname_decls ();
1294
1295 check_inline_statics ();
1296
1297 /* This is the point to write out a PCH if we're doing that.
1298 In that case we do not want to do anything else. */
1299 if (pch_file)
1300 {
1301 c_common_write_pch ();
1302 return;
1303 }
1304
1305 /* Pop off the file scope and close this translation unit. */
1306 pop_scope ();
1307 file_scope = 0;
1308
1309 maybe_apply_pending_pragma_weaks ();
1310 cgraph_finalize_compilation_unit ();
1311 }
1312 \f
1313 /* Adjust the bindings for the start of a statement expression. */
1314
1315 void
1316 c_bindings_start_stmt_expr (struct c_spot_bindings* switch_bindings)
1317 {
1318 struct c_scope *scope;
1319
1320 for (scope = current_scope; scope != NULL; scope = scope->outer)
1321 {
1322 struct c_binding *b;
1323
1324 if (!scope->has_label_bindings)
1325 continue;
1326
1327 for (b = scope->bindings; b != NULL; b = b->prev)
1328 {
1329 struct c_label_vars *label_vars;
1330 unsigned int ix;
1331 struct c_goto_bindings *g;
1332
1333 if (TREE_CODE (b->decl) != LABEL_DECL)
1334 continue;
1335 label_vars = b->u.label;
1336 ++label_vars->label_bindings.stmt_exprs;
1337 for (ix = 0;
1338 VEC_iterate (c_goto_bindings_p, label_vars->gotos, ix, g);
1339 ++ix)
1340 ++g->goto_bindings.stmt_exprs;
1341 }
1342 }
1343
1344 if (switch_bindings != NULL)
1345 ++switch_bindings->stmt_exprs;
1346 }
1347
1348 /* Adjust the bindings for the end of a statement expression. */
1349
1350 void
1351 c_bindings_end_stmt_expr (struct c_spot_bindings *switch_bindings)
1352 {
1353 struct c_scope *scope;
1354
1355 for (scope = current_scope; scope != NULL; scope = scope->outer)
1356 {
1357 struct c_binding *b;
1358
1359 if (!scope->has_label_bindings)
1360 continue;
1361
1362 for (b = scope->bindings; b != NULL; b = b->prev)
1363 {
1364 struct c_label_vars *label_vars;
1365 unsigned int ix;
1366 struct c_goto_bindings *g;
1367
1368 if (TREE_CODE (b->decl) != LABEL_DECL)
1369 continue;
1370 label_vars = b->u.label;
1371 --label_vars->label_bindings.stmt_exprs;
1372 if (label_vars->label_bindings.stmt_exprs < 0)
1373 {
1374 label_vars->label_bindings.left_stmt_expr = true;
1375 label_vars->label_bindings.stmt_exprs = 0;
1376 }
1377 for (ix = 0;
1378 VEC_iterate (c_goto_bindings_p, label_vars->gotos, ix, g);
1379 ++ix)
1380 {
1381 --g->goto_bindings.stmt_exprs;
1382 if (g->goto_bindings.stmt_exprs < 0)
1383 {
1384 g->goto_bindings.left_stmt_expr = true;
1385 g->goto_bindings.stmt_exprs = 0;
1386 }
1387 }
1388 }
1389 }
1390
1391 if (switch_bindings != NULL)
1392 {
1393 --switch_bindings->stmt_exprs;
1394 gcc_assert (switch_bindings->stmt_exprs >= 0);
1395 }
1396 }
1397 \f
1398 /* Push a definition or a declaration of struct, union or enum tag "name".
1399 "type" should be the type node.
1400 We assume that the tag "name" is not already defined, and has a location
1401 of LOC.
1402
1403 Note that the definition may really be just a forward reference.
1404 In that case, the TYPE_SIZE will be zero. */
1405
1406 static void
1407 pushtag (location_t loc, tree name, tree type)
1408 {
1409 /* Record the identifier as the type's name if it has none. */
1410 if (name && !TYPE_NAME (type))
1411 TYPE_NAME (type) = name;
1412 bind (name, type, current_scope, /*invisible=*/false, /*nested=*/false, loc);
1413
1414 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE will be the
1415 tagged type we just added to the current scope. This fake
1416 NULL-named TYPE_DECL node helps dwarfout.c to know when it needs
1417 to output a representation of a tagged type, and it also gives
1418 us a convenient place to record the "scope start" address for the
1419 tagged type. */
1420
1421 TYPE_STUB_DECL (type) = pushdecl (build_decl (loc,
1422 TYPE_DECL, NULL_TREE, type));
1423
1424 /* An approximation for now, so we can tell this is a function-scope tag.
1425 This will be updated in pop_scope. */
1426 TYPE_CONTEXT (type) = DECL_CONTEXT (TYPE_STUB_DECL (type));
1427
1428 if (warn_cxx_compat && name != NULL_TREE)
1429 {
1430 struct c_binding *b = I_SYMBOL_BINDING (name);
1431
1432 if (b != NULL
1433 && b->decl != NULL_TREE
1434 && TREE_CODE (b->decl) == TYPE_DECL
1435 && (B_IN_CURRENT_SCOPE (b)
1436 || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
1437 && (TYPE_MAIN_VARIANT (TREE_TYPE (b->decl))
1438 != TYPE_MAIN_VARIANT (type)))
1439 {
1440 warning_at (loc, OPT_Wc___compat,
1441 ("using %qD as both a typedef and a tag is "
1442 "invalid in C++"),
1443 b->decl);
1444 if (b->locus != UNKNOWN_LOCATION)
1445 inform (b->locus, "originally defined here");
1446 }
1447 }
1448 }
1449 \f
1450 /* Subroutine of compare_decls. Allow harmless mismatches in return
1451 and argument types provided that the type modes match. This function
1452 return a unified type given a suitable match, and 0 otherwise. */
1453
1454 static tree
1455 match_builtin_function_types (tree newtype, tree oldtype)
1456 {
1457 tree newrettype, oldrettype;
1458 tree newargs, oldargs;
1459 tree trytype, tryargs;
1460
1461 /* Accept the return type of the new declaration if same modes. */
1462 oldrettype = TREE_TYPE (oldtype);
1463 newrettype = TREE_TYPE (newtype);
1464
1465 if (TYPE_MODE (oldrettype) != TYPE_MODE (newrettype))
1466 return 0;
1467
1468 oldargs = TYPE_ARG_TYPES (oldtype);
1469 newargs = TYPE_ARG_TYPES (newtype);
1470 tryargs = newargs;
1471
1472 while (oldargs || newargs)
1473 {
1474 if (!oldargs
1475 || !newargs
1476 || !TREE_VALUE (oldargs)
1477 || !TREE_VALUE (newargs)
1478 || TYPE_MODE (TREE_VALUE (oldargs))
1479 != TYPE_MODE (TREE_VALUE (newargs)))
1480 return 0;
1481
1482 oldargs = TREE_CHAIN (oldargs);
1483 newargs = TREE_CHAIN (newargs);
1484 }
1485
1486 trytype = build_function_type (newrettype, tryargs);
1487 return build_type_attribute_variant (trytype, TYPE_ATTRIBUTES (oldtype));
1488 }
1489
1490 /* Subroutine of diagnose_mismatched_decls. Check for function type
1491 mismatch involving an empty arglist vs a nonempty one and give clearer
1492 diagnostics. */
1493 static void
1494 diagnose_arglist_conflict (tree newdecl, tree olddecl,
1495 tree newtype, tree oldtype)
1496 {
1497 tree t;
1498
1499 if (TREE_CODE (olddecl) != FUNCTION_DECL
1500 || !comptypes (TREE_TYPE (oldtype), TREE_TYPE (newtype))
1501 || !((TYPE_ARG_TYPES (oldtype) == 0 && DECL_INITIAL (olddecl) == 0)
1502 ||
1503 (TYPE_ARG_TYPES (newtype) == 0 && DECL_INITIAL (newdecl) == 0)))
1504 return;
1505
1506 t = TYPE_ARG_TYPES (oldtype);
1507 if (t == 0)
1508 t = TYPE_ARG_TYPES (newtype);
1509 for (; t; t = TREE_CHAIN (t))
1510 {
1511 tree type = TREE_VALUE (t);
1512
1513 if (TREE_CHAIN (t) == 0
1514 && TYPE_MAIN_VARIANT (type) != void_type_node)
1515 {
1516 inform (input_location, "a parameter list with an ellipsis can%'t match "
1517 "an empty parameter name list declaration");
1518 break;
1519 }
1520
1521 if (c_type_promotes_to (type) != type)
1522 {
1523 inform (input_location, "an argument type that has a default promotion can%'t match "
1524 "an empty parameter name list declaration");
1525 break;
1526 }
1527 }
1528 }
1529
1530 /* Another subroutine of diagnose_mismatched_decls. OLDDECL is an
1531 old-style function definition, NEWDECL is a prototype declaration.
1532 Diagnose inconsistencies in the argument list. Returns TRUE if
1533 the prototype is compatible, FALSE if not. */
1534 static bool
1535 validate_proto_after_old_defn (tree newdecl, tree newtype, tree oldtype)
1536 {
1537 tree newargs, oldargs;
1538 int i;
1539
1540 #define END_OF_ARGLIST(t) ((t) == void_type_node)
1541
1542 oldargs = TYPE_ACTUAL_ARG_TYPES (oldtype);
1543 newargs = TYPE_ARG_TYPES (newtype);
1544 i = 1;
1545
1546 for (;;)
1547 {
1548 tree oldargtype = TREE_VALUE (oldargs);
1549 tree newargtype = TREE_VALUE (newargs);
1550
1551 if (oldargtype == error_mark_node || newargtype == error_mark_node)
1552 return false;
1553
1554 oldargtype = TYPE_MAIN_VARIANT (oldargtype);
1555 newargtype = TYPE_MAIN_VARIANT (newargtype);
1556
1557 if (END_OF_ARGLIST (oldargtype) && END_OF_ARGLIST (newargtype))
1558 break;
1559
1560 /* Reaching the end of just one list means the two decls don't
1561 agree on the number of arguments. */
1562 if (END_OF_ARGLIST (oldargtype))
1563 {
1564 error ("prototype for %q+D declares more arguments "
1565 "than previous old-style definition", newdecl);
1566 return false;
1567 }
1568 else if (END_OF_ARGLIST (newargtype))
1569 {
1570 error ("prototype for %q+D declares fewer arguments "
1571 "than previous old-style definition", newdecl);
1572 return false;
1573 }
1574
1575 /* Type for passing arg must be consistent with that declared
1576 for the arg. */
1577 else if (!comptypes (oldargtype, newargtype))
1578 {
1579 error ("prototype for %q+D declares argument %d"
1580 " with incompatible type",
1581 newdecl, i);
1582 return false;
1583 }
1584
1585 oldargs = TREE_CHAIN (oldargs);
1586 newargs = TREE_CHAIN (newargs);
1587 i++;
1588 }
1589
1590 /* If we get here, no errors were found, but do issue a warning
1591 for this poor-style construct. */
1592 warning (0, "prototype for %q+D follows non-prototype definition",
1593 newdecl);
1594 return true;
1595 #undef END_OF_ARGLIST
1596 }
1597
1598 /* Subroutine of diagnose_mismatched_decls. Report the location of DECL,
1599 first in a pair of mismatched declarations, using the diagnostic
1600 function DIAG. */
1601 static void
1602 locate_old_decl (tree decl)
1603 {
1604 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_BUILT_IN (decl))
1605 ;
1606 else if (DECL_INITIAL (decl))
1607 inform (input_location, "previous definition of %q+D was here", decl);
1608 else if (C_DECL_IMPLICIT (decl))
1609 inform (input_location, "previous implicit declaration of %q+D was here", decl);
1610 else
1611 inform (input_location, "previous declaration of %q+D was here", decl);
1612 }
1613
1614 /* Subroutine of duplicate_decls. Compare NEWDECL to OLDDECL.
1615 Returns true if the caller should proceed to merge the two, false
1616 if OLDDECL should simply be discarded. As a side effect, issues
1617 all necessary diagnostics for invalid or poor-style combinations.
1618 If it returns true, writes the types of NEWDECL and OLDDECL to
1619 *NEWTYPEP and *OLDTYPEP - these may have been adjusted from
1620 TREE_TYPE (NEWDECL, OLDDECL) respectively. */
1621
1622 static bool
1623 diagnose_mismatched_decls (tree newdecl, tree olddecl,
1624 tree *newtypep, tree *oldtypep)
1625 {
1626 tree newtype, oldtype;
1627 bool pedwarned = false;
1628 bool warned = false;
1629 bool retval = true;
1630
1631 #define DECL_EXTERN_INLINE(DECL) (DECL_DECLARED_INLINE_P (DECL) \
1632 && DECL_EXTERNAL (DECL))
1633
1634 /* If we have error_mark_node for either decl or type, just discard
1635 the previous decl - we're in an error cascade already. */
1636 if (olddecl == error_mark_node || newdecl == error_mark_node)
1637 return false;
1638 *oldtypep = oldtype = TREE_TYPE (olddecl);
1639 *newtypep = newtype = TREE_TYPE (newdecl);
1640 if (oldtype == error_mark_node || newtype == error_mark_node)
1641 return false;
1642
1643 /* Two different categories of symbol altogether. This is an error
1644 unless OLDDECL is a builtin. OLDDECL will be discarded in any case. */
1645 if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1646 {
1647 if (!(TREE_CODE (olddecl) == FUNCTION_DECL
1648 && DECL_BUILT_IN (olddecl)
1649 && !C_DECL_DECLARED_BUILTIN (olddecl)))
1650 {
1651 error ("%q+D redeclared as different kind of symbol", newdecl);
1652 locate_old_decl (olddecl);
1653 }
1654 else if (TREE_PUBLIC (newdecl))
1655 warning (0, "built-in function %q+D declared as non-function",
1656 newdecl);
1657 else
1658 warning (OPT_Wshadow, "declaration of %q+D shadows "
1659 "a built-in function", newdecl);
1660 return false;
1661 }
1662
1663 /* Enumerators have no linkage, so may only be declared once in a
1664 given scope. */
1665 if (TREE_CODE (olddecl) == CONST_DECL)
1666 {
1667 error ("redeclaration of enumerator %q+D", newdecl);
1668 locate_old_decl (olddecl);
1669 return false;
1670 }
1671
1672 if (!comptypes (oldtype, newtype))
1673 {
1674 if (TREE_CODE (olddecl) == FUNCTION_DECL
1675 && DECL_BUILT_IN (olddecl) && !C_DECL_DECLARED_BUILTIN (olddecl))
1676 {
1677 /* Accept harmless mismatch in function types.
1678 This is for the ffs and fprintf builtins. */
1679 tree trytype = match_builtin_function_types (newtype, oldtype);
1680
1681 if (trytype && comptypes (newtype, trytype))
1682 *oldtypep = oldtype = trytype;
1683 else
1684 {
1685 /* If types don't match for a built-in, throw away the
1686 built-in. No point in calling locate_old_decl here, it
1687 won't print anything. */
1688 warning (0, "conflicting types for built-in function %q+D",
1689 newdecl);
1690 return false;
1691 }
1692 }
1693 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1694 && DECL_IS_BUILTIN (olddecl))
1695 {
1696 /* A conflicting function declaration for a predeclared
1697 function that isn't actually built in. Objective C uses
1698 these. The new declaration silently overrides everything
1699 but the volatility (i.e. noreturn) indication. See also
1700 below. FIXME: Make Objective C use normal builtins. */
1701 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1702 return false;
1703 }
1704 /* Permit void foo (...) to match int foo (...) if the latter is
1705 the definition and implicit int was used. See
1706 c-torture/compile/920625-2.c. */
1707 else if (TREE_CODE (newdecl) == FUNCTION_DECL && DECL_INITIAL (newdecl)
1708 && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype)) == void_type_node
1709 && TYPE_MAIN_VARIANT (TREE_TYPE (newtype)) == integer_type_node
1710 && C_FUNCTION_IMPLICIT_INT (newdecl) && !DECL_INITIAL (olddecl))
1711 {
1712 pedwarned = pedwarn (input_location, 0,
1713 "conflicting types for %q+D", newdecl);
1714 /* Make sure we keep void as the return type. */
1715 TREE_TYPE (newdecl) = *newtypep = newtype = oldtype;
1716 C_FUNCTION_IMPLICIT_INT (newdecl) = 0;
1717 }
1718 /* Permit void foo (...) to match an earlier call to foo (...) with
1719 no declared type (thus, implicitly int). */
1720 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1721 && TYPE_MAIN_VARIANT (TREE_TYPE (newtype)) == void_type_node
1722 && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype)) == integer_type_node
1723 && C_DECL_IMPLICIT (olddecl) && !DECL_INITIAL (olddecl))
1724 {
1725 pedwarned = pedwarn (input_location, 0,
1726 "conflicting types for %q+D", newdecl);
1727 /* Make sure we keep void as the return type. */
1728 TREE_TYPE (olddecl) = *oldtypep = oldtype = newtype;
1729 }
1730 else
1731 {
1732 if (TYPE_QUALS (newtype) != TYPE_QUALS (oldtype))
1733 error ("conflicting type qualifiers for %q+D", newdecl);
1734 else
1735 error ("conflicting types for %q+D", newdecl);
1736 diagnose_arglist_conflict (newdecl, olddecl, newtype, oldtype);
1737 locate_old_decl (olddecl);
1738 return false;
1739 }
1740 }
1741
1742 /* Redeclaration of a type is a constraint violation (6.7.2.3p1),
1743 but silently ignore the redeclaration if either is in a system
1744 header. (Conflicting redeclarations were handled above.) */
1745 if (TREE_CODE (newdecl) == TYPE_DECL)
1746 {
1747 if (DECL_IN_SYSTEM_HEADER (newdecl)
1748 || DECL_IN_SYSTEM_HEADER (olddecl)
1749 || TREE_NO_WARNING (newdecl)
1750 || TREE_NO_WARNING (olddecl))
1751 return true; /* Allow OLDDECL to continue in use. */
1752
1753 error ("redefinition of typedef %q+D", newdecl);
1754 locate_old_decl (olddecl);
1755 return false;
1756 }
1757
1758 /* Function declarations can either be 'static' or 'extern' (no
1759 qualifier is equivalent to 'extern' - C99 6.2.2p5) and therefore
1760 can never conflict with each other on account of linkage
1761 (6.2.2p4). Multiple definitions are not allowed (6.9p3,5) but
1762 gnu89 mode permits two definitions if one is 'extern inline' and
1763 one is not. The non- extern-inline definition supersedes the
1764 extern-inline definition. */
1765
1766 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1767 {
1768 /* If you declare a built-in function name as static, or
1769 define the built-in with an old-style definition (so we
1770 can't validate the argument list) the built-in definition is
1771 overridden, but optionally warn this was a bad choice of name. */
1772 if (DECL_BUILT_IN (olddecl)
1773 && !C_DECL_DECLARED_BUILTIN (olddecl)
1774 && (!TREE_PUBLIC (newdecl)
1775 || (DECL_INITIAL (newdecl)
1776 && !TYPE_ARG_TYPES (TREE_TYPE (newdecl)))))
1777 {
1778 warning (OPT_Wshadow, "declaration of %q+D shadows "
1779 "a built-in function", newdecl);
1780 /* Discard the old built-in function. */
1781 return false;
1782 }
1783
1784 if (DECL_INITIAL (newdecl))
1785 {
1786 if (DECL_INITIAL (olddecl))
1787 {
1788 /* If both decls are in the same TU and the new declaration
1789 isn't overriding an extern inline reject the new decl.
1790 In c99, no overriding is allowed in the same translation
1791 unit. */
1792 if ((!DECL_EXTERN_INLINE (olddecl)
1793 || DECL_EXTERN_INLINE (newdecl)
1794 || (!flag_gnu89_inline
1795 && (!DECL_DECLARED_INLINE_P (olddecl)
1796 || !lookup_attribute ("gnu_inline",
1797 DECL_ATTRIBUTES (olddecl)))
1798 && (!DECL_DECLARED_INLINE_P (newdecl)
1799 || !lookup_attribute ("gnu_inline",
1800 DECL_ATTRIBUTES (newdecl))))
1801 )
1802 && same_translation_unit_p (newdecl, olddecl))
1803 {
1804 error ("redefinition of %q+D", newdecl);
1805 locate_old_decl (olddecl);
1806 return false;
1807 }
1808 }
1809 }
1810 /* If we have a prototype after an old-style function definition,
1811 the argument types must be checked specially. */
1812 else if (DECL_INITIAL (olddecl)
1813 && !TYPE_ARG_TYPES (oldtype) && TYPE_ARG_TYPES (newtype)
1814 && TYPE_ACTUAL_ARG_TYPES (oldtype)
1815 && !validate_proto_after_old_defn (newdecl, newtype, oldtype))
1816 {
1817 locate_old_decl (olddecl);
1818 return false;
1819 }
1820 /* A non-static declaration (even an "extern") followed by a
1821 static declaration is undefined behavior per C99 6.2.2p3-5,7.
1822 The same is true for a static forward declaration at block
1823 scope followed by a non-static declaration/definition at file
1824 scope. Static followed by non-static at the same scope is
1825 not undefined behavior, and is the most convenient way to get
1826 some effects (see e.g. what unwind-dw2-fde-glibc.c does to
1827 the definition of _Unwind_Find_FDE in unwind-dw2-fde.c), but
1828 we do diagnose it if -Wtraditional. */
1829 if (TREE_PUBLIC (olddecl) && !TREE_PUBLIC (newdecl))
1830 {
1831 /* Two exceptions to the rule. If olddecl is an extern
1832 inline, or a predeclared function that isn't actually
1833 built in, newdecl silently overrides olddecl. The latter
1834 occur only in Objective C; see also above. (FIXME: Make
1835 Objective C use normal builtins.) */
1836 if (!DECL_IS_BUILTIN (olddecl)
1837 && !DECL_EXTERN_INLINE (olddecl))
1838 {
1839 error ("static declaration of %q+D follows "
1840 "non-static declaration", newdecl);
1841 locate_old_decl (olddecl);
1842 }
1843 return false;
1844 }
1845 else if (TREE_PUBLIC (newdecl) && !TREE_PUBLIC (olddecl))
1846 {
1847 if (DECL_CONTEXT (olddecl))
1848 {
1849 error ("non-static declaration of %q+D follows "
1850 "static declaration", newdecl);
1851 locate_old_decl (olddecl);
1852 return false;
1853 }
1854 else if (warn_traditional)
1855 {
1856 warned |= warning (OPT_Wtraditional,
1857 "non-static declaration of %q+D "
1858 "follows static declaration", newdecl);
1859 }
1860 }
1861
1862 /* Make sure gnu_inline attribute is either not present, or
1863 present on all inline decls. */
1864 if (DECL_DECLARED_INLINE_P (olddecl)
1865 && DECL_DECLARED_INLINE_P (newdecl))
1866 {
1867 bool newa = lookup_attribute ("gnu_inline",
1868 DECL_ATTRIBUTES (newdecl)) != NULL;
1869 bool olda = lookup_attribute ("gnu_inline",
1870 DECL_ATTRIBUTES (olddecl)) != NULL;
1871 if (newa != olda)
1872 {
1873 error ("%<gnu_inline%> attribute present on %q+D",
1874 newa ? newdecl : olddecl);
1875 error ("%Jbut not here", newa ? olddecl : newdecl);
1876 }
1877 }
1878 }
1879 else if (TREE_CODE (newdecl) == VAR_DECL)
1880 {
1881 /* Only variables can be thread-local, and all declarations must
1882 agree on this property. */
1883 if (C_DECL_THREADPRIVATE_P (olddecl) && !DECL_THREAD_LOCAL_P (newdecl))
1884 {
1885 /* Nothing to check. Since OLDDECL is marked threadprivate
1886 and NEWDECL does not have a thread-local attribute, we
1887 will merge the threadprivate attribute into NEWDECL. */
1888 ;
1889 }
1890 else if (DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl))
1891 {
1892 if (DECL_THREAD_LOCAL_P (newdecl))
1893 error ("thread-local declaration of %q+D follows "
1894 "non-thread-local declaration", newdecl);
1895 else
1896 error ("non-thread-local declaration of %q+D follows "
1897 "thread-local declaration", newdecl);
1898
1899 locate_old_decl (olddecl);
1900 return false;
1901 }
1902
1903 /* Multiple initialized definitions are not allowed (6.9p3,5). */
1904 if (DECL_INITIAL (newdecl) && DECL_INITIAL (olddecl))
1905 {
1906 error ("redefinition of %q+D", newdecl);
1907 locate_old_decl (olddecl);
1908 return false;
1909 }
1910
1911 /* Objects declared at file scope: if the first declaration had
1912 external linkage (even if it was an external reference) the
1913 second must have external linkage as well, or the behavior is
1914 undefined. If the first declaration had internal linkage, then
1915 the second must too, or else be an external reference (in which
1916 case the composite declaration still has internal linkage).
1917 As for function declarations, we warn about the static-then-
1918 extern case only for -Wtraditional. See generally 6.2.2p3-5,7. */
1919 if (DECL_FILE_SCOPE_P (newdecl)
1920 && TREE_PUBLIC (newdecl) != TREE_PUBLIC (olddecl))
1921 {
1922 if (DECL_EXTERNAL (newdecl))
1923 {
1924 if (!DECL_FILE_SCOPE_P (olddecl))
1925 {
1926 error ("extern declaration of %q+D follows "
1927 "declaration with no linkage", newdecl);
1928 locate_old_decl (olddecl);
1929 return false;
1930 }
1931 else if (warn_traditional)
1932 {
1933 warned |= warning (OPT_Wtraditional,
1934 "non-static declaration of %q+D "
1935 "follows static declaration", newdecl);
1936 }
1937 }
1938 else
1939 {
1940 if (TREE_PUBLIC (newdecl))
1941 error ("non-static declaration of %q+D follows "
1942 "static declaration", newdecl);
1943 else
1944 error ("static declaration of %q+D follows "
1945 "non-static declaration", newdecl);
1946
1947 locate_old_decl (olddecl);
1948 return false;
1949 }
1950 }
1951 /* Two objects with the same name declared at the same block
1952 scope must both be external references (6.7p3). */
1953 else if (!DECL_FILE_SCOPE_P (newdecl))
1954 {
1955 if (DECL_EXTERNAL (newdecl))
1956 {
1957 /* Extern with initializer at block scope, which will
1958 already have received an error. */
1959 }
1960 else if (DECL_EXTERNAL (olddecl))
1961 {
1962 error ("declaration of %q+D with no linkage follows "
1963 "extern declaration", newdecl);
1964 locate_old_decl (olddecl);
1965 }
1966 else
1967 {
1968 error ("redeclaration of %q+D with no linkage", newdecl);
1969 locate_old_decl (olddecl);
1970 }
1971
1972 return false;
1973 }
1974 }
1975
1976 /* warnings */
1977 /* All decls must agree on a visibility. */
1978 if (CODE_CONTAINS_STRUCT (TREE_CODE (newdecl), TS_DECL_WITH_VIS)
1979 && DECL_VISIBILITY_SPECIFIED (newdecl) && DECL_VISIBILITY_SPECIFIED (olddecl)
1980 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
1981 {
1982 warned |= warning (0, "redeclaration of %q+D with different visibility "
1983 "(old visibility preserved)", newdecl);
1984 }
1985
1986 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1987 {
1988 /* Diagnose inline __attribute__ ((noinline)) which is silly. */
1989 if (DECL_DECLARED_INLINE_P (newdecl)
1990 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1991 {
1992 warned |= warning (OPT_Wattributes,
1993 "inline declaration of %qD follows "
1994 "declaration with attribute noinline", newdecl);
1995 }
1996 else if (DECL_DECLARED_INLINE_P (olddecl)
1997 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1998 {
1999 warned |= warning (OPT_Wattributes,
2000 "declaration of %q+D with attribute "
2001 "noinline follows inline declaration ", newdecl);
2002 }
2003 }
2004 else /* PARM_DECL, VAR_DECL */
2005 {
2006 /* Redeclaration of a parameter is a constraint violation (this is
2007 not explicitly stated, but follows from C99 6.7p3 [no more than
2008 one declaration of the same identifier with no linkage in the
2009 same scope, except type tags] and 6.2.2p6 [parameters have no
2010 linkage]). We must check for a forward parameter declaration,
2011 indicated by TREE_ASM_WRITTEN on the old declaration - this is
2012 an extension, the mandatory diagnostic for which is handled by
2013 mark_forward_parm_decls. */
2014
2015 if (TREE_CODE (newdecl) == PARM_DECL
2016 && (!TREE_ASM_WRITTEN (olddecl) || TREE_ASM_WRITTEN (newdecl)))
2017 {
2018 error ("redefinition of parameter %q+D", newdecl);
2019 locate_old_decl (olddecl);
2020 return false;
2021 }
2022 }
2023
2024 /* Optional warning for completely redundant decls. */
2025 if (!warned && !pedwarned
2026 && warn_redundant_decls
2027 /* Don't warn about a function declaration followed by a
2028 definition. */
2029 && !(TREE_CODE (newdecl) == FUNCTION_DECL
2030 && DECL_INITIAL (newdecl) && !DECL_INITIAL (olddecl))
2031 /* Don't warn about redundant redeclarations of builtins. */
2032 && !(TREE_CODE (newdecl) == FUNCTION_DECL
2033 && !DECL_BUILT_IN (newdecl)
2034 && DECL_BUILT_IN (olddecl)
2035 && !C_DECL_DECLARED_BUILTIN (olddecl))
2036 /* Don't warn about an extern followed by a definition. */
2037 && !(DECL_EXTERNAL (olddecl) && !DECL_EXTERNAL (newdecl))
2038 /* Don't warn about forward parameter decls. */
2039 && !(TREE_CODE (newdecl) == PARM_DECL
2040 && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
2041 /* Don't warn about a variable definition following a declaration. */
2042 && !(TREE_CODE (newdecl) == VAR_DECL
2043 && DECL_INITIAL (newdecl) && !DECL_INITIAL (olddecl)))
2044 {
2045 warned = warning (OPT_Wredundant_decls, "redundant redeclaration of %q+D",
2046 newdecl);
2047 }
2048
2049 /* Report location of previous decl/defn. */
2050 if (warned || pedwarned)
2051 locate_old_decl (olddecl);
2052
2053 #undef DECL_EXTERN_INLINE
2054
2055 return retval;
2056 }
2057
2058 /* Subroutine of duplicate_decls. NEWDECL has been found to be
2059 consistent with OLDDECL, but carries new information. Merge the
2060 new information into OLDDECL. This function issues no
2061 diagnostics. */
2062
2063 static void
2064 merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
2065 {
2066 bool new_is_definition = (TREE_CODE (newdecl) == FUNCTION_DECL
2067 && DECL_INITIAL (newdecl) != 0);
2068 bool new_is_prototype = (TREE_CODE (newdecl) == FUNCTION_DECL
2069 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != 0);
2070 bool old_is_prototype = (TREE_CODE (olddecl) == FUNCTION_DECL
2071 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) != 0);
2072 bool extern_changed = false;
2073
2074 /* For real parm decl following a forward decl, rechain the old decl
2075 in its new location and clear TREE_ASM_WRITTEN (it's not a
2076 forward decl anymore). */
2077 if (TREE_CODE (newdecl) == PARM_DECL
2078 && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
2079 {
2080 struct c_binding *b, **here;
2081
2082 for (here = &current_scope->bindings; *here; here = &(*here)->prev)
2083 if ((*here)->decl == olddecl)
2084 goto found;
2085 gcc_unreachable ();
2086
2087 found:
2088 b = *here;
2089 *here = b->prev;
2090 b->prev = current_scope->bindings;
2091 current_scope->bindings = b;
2092
2093 TREE_ASM_WRITTEN (olddecl) = 0;
2094 }
2095
2096 DECL_ATTRIBUTES (newdecl)
2097 = targetm.merge_decl_attributes (olddecl, newdecl);
2098
2099 /* Merge the data types specified in the two decls. */
2100 TREE_TYPE (newdecl)
2101 = TREE_TYPE (olddecl)
2102 = composite_type (newtype, oldtype);
2103
2104 /* Lay the type out, unless already done. */
2105 if (!comptypes (oldtype, TREE_TYPE (newdecl)))
2106 {
2107 if (TREE_TYPE (newdecl) != error_mark_node)
2108 layout_type (TREE_TYPE (newdecl));
2109 if (TREE_CODE (newdecl) != FUNCTION_DECL
2110 && TREE_CODE (newdecl) != TYPE_DECL
2111 && TREE_CODE (newdecl) != CONST_DECL)
2112 layout_decl (newdecl, 0);
2113 }
2114 else
2115 {
2116 /* Since the type is OLDDECL's, make OLDDECL's size go with. */
2117 DECL_SIZE (newdecl) = DECL_SIZE (olddecl);
2118 DECL_SIZE_UNIT (newdecl) = DECL_SIZE_UNIT (olddecl);
2119 DECL_MODE (newdecl) = DECL_MODE (olddecl);
2120 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2121 {
2122 DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
2123 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2124 }
2125 }
2126
2127 /* Keep the old rtl since we can safely use it. */
2128 if (HAS_RTL_P (olddecl))
2129 COPY_DECL_RTL (olddecl, newdecl);
2130
2131 /* Merge the type qualifiers. */
2132 if (TREE_READONLY (newdecl))
2133 TREE_READONLY (olddecl) = 1;
2134
2135 if (TREE_THIS_VOLATILE (newdecl))
2136 TREE_THIS_VOLATILE (olddecl) = 1;
2137
2138 /* Merge deprecatedness. */
2139 if (TREE_DEPRECATED (newdecl))
2140 TREE_DEPRECATED (olddecl) = 1;
2141
2142 /* If a decl is in a system header and the other isn't, keep the one on the
2143 system header. Otherwise, keep source location of definition rather than
2144 declaration and of prototype rather than non-prototype unless that
2145 prototype is built-in. */
2146 if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS)
2147 && DECL_IN_SYSTEM_HEADER (olddecl)
2148 && !DECL_IN_SYSTEM_HEADER (newdecl) )
2149 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2150 else if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS)
2151 && DECL_IN_SYSTEM_HEADER (newdecl)
2152 && !DECL_IN_SYSTEM_HEADER (olddecl))
2153 DECL_SOURCE_LOCATION (olddecl) = DECL_SOURCE_LOCATION (newdecl);
2154 else if ((DECL_INITIAL (newdecl) == 0 && DECL_INITIAL (olddecl) != 0)
2155 || (old_is_prototype && !new_is_prototype
2156 && !C_DECL_BUILTIN_PROTOTYPE (olddecl)))
2157 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2158
2159 /* Merge the initialization information. */
2160 if (DECL_INITIAL (newdecl) == 0)
2161 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2162
2163 /* Merge the threadprivate attribute. */
2164 if (TREE_CODE (olddecl) == VAR_DECL && C_DECL_THREADPRIVATE_P (olddecl))
2165 {
2166 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
2167 C_DECL_THREADPRIVATE_P (newdecl) = 1;
2168 }
2169
2170 if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS))
2171 {
2172 /* Merge the section attribute.
2173 We want to issue an error if the sections conflict but that
2174 must be done later in decl_attributes since we are called
2175 before attributes are assigned. */
2176 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
2177 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
2178
2179 /* Copy the assembler name.
2180 Currently, it can only be defined in the prototype. */
2181 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2182
2183 /* Use visibility of whichever declaration had it specified */
2184 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2185 {
2186 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2187 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2188 }
2189
2190 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2191 {
2192 DECL_STATIC_CONSTRUCTOR(newdecl) |= DECL_STATIC_CONSTRUCTOR(olddecl);
2193 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
2194 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2195 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2196 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2197 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
2198 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
2199 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2200 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
2201 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
2202 DECL_IS_NOVOPS (newdecl) |= DECL_IS_NOVOPS (olddecl);
2203 }
2204
2205 /* Merge the storage class information. */
2206 merge_weak (newdecl, olddecl);
2207
2208 /* For functions, static overrides non-static. */
2209 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2210 {
2211 TREE_PUBLIC (newdecl) &= TREE_PUBLIC (olddecl);
2212 /* This is since we don't automatically
2213 copy the attributes of NEWDECL into OLDDECL. */
2214 TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
2215 /* If this clears `static', clear it in the identifier too. */
2216 if (!TREE_PUBLIC (olddecl))
2217 TREE_PUBLIC (DECL_NAME (olddecl)) = 0;
2218 }
2219 }
2220
2221 /* In c99, 'extern' declaration before (or after) 'inline' means this
2222 function is not DECL_EXTERNAL, unless 'gnu_inline' attribute
2223 is present. */
2224 if (TREE_CODE (newdecl) == FUNCTION_DECL
2225 && !flag_gnu89_inline
2226 && (DECL_DECLARED_INLINE_P (newdecl)
2227 || DECL_DECLARED_INLINE_P (olddecl))
2228 && (!DECL_DECLARED_INLINE_P (newdecl)
2229 || !DECL_DECLARED_INLINE_P (olddecl)
2230 || !DECL_EXTERNAL (olddecl))
2231 && DECL_EXTERNAL (newdecl)
2232 && !lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (newdecl))
2233 && !current_function_decl)
2234 DECL_EXTERNAL (newdecl) = 0;
2235
2236 if (DECL_EXTERNAL (newdecl))
2237 {
2238 TREE_STATIC (newdecl) = TREE_STATIC (olddecl);
2239 DECL_EXTERNAL (newdecl) = DECL_EXTERNAL (olddecl);
2240
2241 /* An extern decl does not override previous storage class. */
2242 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2243 if (!DECL_EXTERNAL (newdecl))
2244 {
2245 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
2246 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2247 }
2248 }
2249 else
2250 {
2251 TREE_STATIC (olddecl) = TREE_STATIC (newdecl);
2252 TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
2253 }
2254
2255 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2256 {
2257 /* If we're redefining a function previously defined as extern
2258 inline, make sure we emit debug info for the inline before we
2259 throw it away, in case it was inlined into a function that
2260 hasn't been written out yet. */
2261 if (new_is_definition && DECL_INITIAL (olddecl))
2262 /* The new defn must not be inline. */
2263 DECL_UNINLINABLE (newdecl) = 1;
2264 else
2265 {
2266 /* If either decl says `inline', this fn is inline, unless
2267 its definition was passed already. */
2268 if (DECL_DECLARED_INLINE_P (newdecl)
2269 || DECL_DECLARED_INLINE_P (olddecl))
2270 DECL_DECLARED_INLINE_P (newdecl) = 1;
2271
2272 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2273 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2274
2275 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2276 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2277 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2278 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2279 }
2280
2281 if (DECL_BUILT_IN (olddecl))
2282 {
2283 /* If redeclaring a builtin function, it stays built in.
2284 But it gets tagged as having been declared. */
2285 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2286 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2287 C_DECL_DECLARED_BUILTIN (newdecl) = 1;
2288 if (new_is_prototype)
2289 C_DECL_BUILTIN_PROTOTYPE (newdecl) = 0;
2290 else
2291 C_DECL_BUILTIN_PROTOTYPE (newdecl)
2292 = C_DECL_BUILTIN_PROTOTYPE (olddecl);
2293 }
2294
2295 /* Preserve function specific target and optimization options */
2296 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2297 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2298 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2299 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2300
2301 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2302 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2303 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2304 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2305
2306 /* Also preserve various other info from the definition. */
2307 if (!new_is_definition)
2308 {
2309 tree t;
2310 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2311 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2312 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2313 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2314 gimple_set_body (newdecl, gimple_body (olddecl));
2315 DECL_ARGUMENTS (newdecl) = copy_list (DECL_ARGUMENTS (olddecl));
2316 for (t = DECL_ARGUMENTS (newdecl); t ; t = TREE_CHAIN (t))
2317 DECL_CONTEXT (t) = newdecl;
2318
2319 /* See if we've got a function to instantiate from. */
2320 if (DECL_SAVED_TREE (olddecl))
2321 DECL_ABSTRACT_ORIGIN (newdecl)
2322 = DECL_ABSTRACT_ORIGIN (olddecl);
2323 }
2324 }
2325
2326 extern_changed = DECL_EXTERNAL (olddecl) && !DECL_EXTERNAL (newdecl);
2327
2328 /* Merge the USED information. */
2329 if (TREE_USED (olddecl))
2330 TREE_USED (newdecl) = 1;
2331 else if (TREE_USED (newdecl))
2332 TREE_USED (olddecl) = 1;
2333
2334 /* Copy most of the decl-specific fields of NEWDECL into OLDDECL.
2335 But preserve OLDDECL's DECL_UID and DECL_CONTEXT. */
2336 {
2337 unsigned olddecl_uid = DECL_UID (olddecl);
2338 tree olddecl_context = DECL_CONTEXT (olddecl);
2339 tree olddecl_arguments = NULL;
2340 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2341 olddecl_arguments = DECL_ARGUMENTS (olddecl);
2342
2343 memcpy ((char *) olddecl + sizeof (struct tree_common),
2344 (char *) newdecl + sizeof (struct tree_common),
2345 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2346 switch (TREE_CODE (olddecl))
2347 {
2348 case FUNCTION_DECL:
2349 gimple_set_body (olddecl, gimple_body (newdecl));
2350 /* fall through */
2351
2352 case FIELD_DECL:
2353 case VAR_DECL:
2354 case PARM_DECL:
2355 case LABEL_DECL:
2356 case RESULT_DECL:
2357 case CONST_DECL:
2358 case TYPE_DECL:
2359 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2360 (char *) newdecl + sizeof (struct tree_decl_common),
2361 tree_code_size (TREE_CODE (olddecl)) - sizeof (struct tree_decl_common));
2362 break;
2363
2364 default:
2365
2366 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2367 (char *) newdecl + sizeof (struct tree_decl_common),
2368 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common));
2369 }
2370 DECL_UID (olddecl) = olddecl_uid;
2371 DECL_CONTEXT (olddecl) = olddecl_context;
2372 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2373 DECL_ARGUMENTS (olddecl) = olddecl_arguments;
2374 }
2375
2376 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2377 so that encode_section_info has a chance to look at the new decl
2378 flags and attributes. */
2379 if (DECL_RTL_SET_P (olddecl)
2380 && (TREE_CODE (olddecl) == FUNCTION_DECL
2381 || (TREE_CODE (olddecl) == VAR_DECL
2382 && TREE_STATIC (olddecl))))
2383 make_decl_rtl (olddecl);
2384
2385 /* If we changed a function from DECL_EXTERNAL to !DECL_EXTERNAL,
2386 and the definition is coming from the old version, cgraph needs
2387 to be called again. */
2388 if (extern_changed && !new_is_definition
2389 && TREE_CODE (olddecl) == FUNCTION_DECL && DECL_INITIAL (olddecl))
2390 cgraph_mark_if_needed (olddecl);
2391 }
2392
2393 /* Handle when a new declaration NEWDECL has the same name as an old
2394 one OLDDECL in the same binding contour. Prints an error message
2395 if appropriate.
2396
2397 If safely possible, alter OLDDECL to look like NEWDECL, and return
2398 true. Otherwise, return false. */
2399
2400 static bool
2401 duplicate_decls (tree newdecl, tree olddecl)
2402 {
2403 tree newtype = NULL, oldtype = NULL;
2404
2405 if (!diagnose_mismatched_decls (newdecl, olddecl, &newtype, &oldtype))
2406 {
2407 /* Avoid `unused variable' and other warnings for OLDDECL. */
2408 TREE_NO_WARNING (olddecl) = 1;
2409 return false;
2410 }
2411
2412 merge_decls (newdecl, olddecl, newtype, oldtype);
2413 return true;
2414 }
2415
2416 \f
2417 /* Check whether decl-node NEW_DECL shadows an existing declaration. */
2418 static void
2419 warn_if_shadowing (tree new_decl)
2420 {
2421 struct c_binding *b;
2422
2423 /* Shadow warnings wanted? */
2424 if (!warn_shadow
2425 /* No shadow warnings for internally generated vars. */
2426 || DECL_IS_BUILTIN (new_decl)
2427 /* No shadow warnings for vars made for inlining. */
2428 || DECL_FROM_INLINE (new_decl))
2429 return;
2430
2431 /* Is anything being shadowed? Invisible decls do not count. */
2432 for (b = I_SYMBOL_BINDING (DECL_NAME (new_decl)); b; b = b->shadowed)
2433 if (b->decl && b->decl != new_decl && !b->invisible)
2434 {
2435 tree old_decl = b->decl;
2436
2437 if (old_decl == error_mark_node)
2438 {
2439 warning (OPT_Wshadow, "declaration of %q+D shadows previous "
2440 "non-variable", new_decl);
2441 break;
2442 }
2443 else if (TREE_CODE (old_decl) == PARM_DECL)
2444 warning (OPT_Wshadow, "declaration of %q+D shadows a parameter",
2445 new_decl);
2446 else if (DECL_FILE_SCOPE_P (old_decl))
2447 warning (OPT_Wshadow, "declaration of %q+D shadows a global "
2448 "declaration", new_decl);
2449 else if (TREE_CODE (old_decl) == FUNCTION_DECL
2450 && DECL_BUILT_IN (old_decl))
2451 {
2452 warning (OPT_Wshadow, "declaration of %q+D shadows "
2453 "a built-in function", new_decl);
2454 break;
2455 }
2456 else
2457 warning (OPT_Wshadow, "declaration of %q+D shadows a previous local",
2458 new_decl);
2459
2460 warning (OPT_Wshadow, "%Jshadowed declaration is here", old_decl);
2461
2462 break;
2463 }
2464 }
2465
2466 /* Record a decl-node X as belonging to the current lexical scope.
2467 Check for errors (such as an incompatible declaration for the same
2468 name already seen in the same scope).
2469
2470 Returns either X or an old decl for the same name.
2471 If an old decl is returned, it may have been smashed
2472 to agree with what X says. */
2473
2474 tree
2475 pushdecl (tree x)
2476 {
2477 tree name = DECL_NAME (x);
2478 struct c_scope *scope = current_scope;
2479 struct c_binding *b;
2480 bool nested = false;
2481 location_t locus = DECL_SOURCE_LOCATION (x);
2482
2483 /* Must set DECL_CONTEXT for everything not at file scope or
2484 DECL_FILE_SCOPE_P won't work. Local externs don't count
2485 unless they have initializers (which generate code). */
2486 if (current_function_decl
2487 && ((TREE_CODE (x) != FUNCTION_DECL && TREE_CODE (x) != VAR_DECL)
2488 || DECL_INITIAL (x) || !DECL_EXTERNAL (x)))
2489 DECL_CONTEXT (x) = current_function_decl;
2490
2491 /* Anonymous decls are just inserted in the scope. */
2492 if (!name)
2493 {
2494 bind (name, x, scope, /*invisible=*/false, /*nested=*/false,
2495 locus);
2496 return x;
2497 }
2498
2499 /* First, see if there is another declaration with the same name in
2500 the current scope. If there is, duplicate_decls may do all the
2501 work for us. If duplicate_decls returns false, that indicates
2502 two incompatible decls in the same scope; we are to silently
2503 replace the old one (duplicate_decls has issued all appropriate
2504 diagnostics). In particular, we should not consider possible
2505 duplicates in the external scope, or shadowing. */
2506 b = I_SYMBOL_BINDING (name);
2507 if (b && B_IN_SCOPE (b, scope))
2508 {
2509 struct c_binding *b_ext, *b_use;
2510 tree type = TREE_TYPE (x);
2511 tree visdecl = b->decl;
2512 tree vistype = TREE_TYPE (visdecl);
2513 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
2514 && COMPLETE_TYPE_P (TREE_TYPE (x)))
2515 b->inner_comp = false;
2516 b_use = b;
2517 b_ext = b;
2518 /* If this is an external linkage declaration, we should check
2519 for compatibility with the type in the external scope before
2520 setting the type at this scope based on the visible
2521 information only. */
2522 if (TREE_PUBLIC (x) && TREE_PUBLIC (visdecl))
2523 {
2524 while (b_ext && !B_IN_EXTERNAL_SCOPE (b_ext))
2525 b_ext = b_ext->shadowed;
2526 if (b_ext)
2527 {
2528 b_use = b_ext;
2529 if (b_use->u.type)
2530 TREE_TYPE (b_use->decl) = b_use->u.type;
2531 }
2532 }
2533 if (duplicate_decls (x, b_use->decl))
2534 {
2535 if (b_use != b)
2536 {
2537 /* Save the updated type in the external scope and
2538 restore the proper type for this scope. */
2539 tree thistype;
2540 if (comptypes (vistype, type))
2541 thistype = composite_type (vistype, type);
2542 else
2543 thistype = TREE_TYPE (b_use->decl);
2544 b_use->u.type = TREE_TYPE (b_use->decl);
2545 if (TREE_CODE (b_use->decl) == FUNCTION_DECL
2546 && DECL_BUILT_IN (b_use->decl))
2547 thistype
2548 = build_type_attribute_variant (thistype,
2549 TYPE_ATTRIBUTES
2550 (b_use->u.type));
2551 TREE_TYPE (b_use->decl) = thistype;
2552 }
2553 return b_use->decl;
2554 }
2555 else
2556 goto skip_external_and_shadow_checks;
2557 }
2558
2559 /* All declarations with external linkage, and all external
2560 references, go in the external scope, no matter what scope is
2561 current. However, the binding in that scope is ignored for
2562 purposes of normal name lookup. A separate binding structure is
2563 created in the requested scope; this governs the normal
2564 visibility of the symbol.
2565
2566 The binding in the externals scope is used exclusively for
2567 detecting duplicate declarations of the same object, no matter
2568 what scope they are in; this is what we do here. (C99 6.2.7p2:
2569 All declarations that refer to the same object or function shall
2570 have compatible type; otherwise, the behavior is undefined.) */
2571 if (DECL_EXTERNAL (x) || scope == file_scope)
2572 {
2573 tree type = TREE_TYPE (x);
2574 tree vistype = 0;
2575 tree visdecl = 0;
2576 bool type_saved = false;
2577 if (b && !B_IN_EXTERNAL_SCOPE (b)
2578 && (TREE_CODE (b->decl) == FUNCTION_DECL
2579 || TREE_CODE (b->decl) == VAR_DECL)
2580 && DECL_FILE_SCOPE_P (b->decl))
2581 {
2582 visdecl = b->decl;
2583 vistype = TREE_TYPE (visdecl);
2584 }
2585 if (scope != file_scope
2586 && !DECL_IN_SYSTEM_HEADER (x))
2587 warning (OPT_Wnested_externs, "nested extern declaration of %qD", x);
2588
2589 while (b && !B_IN_EXTERNAL_SCOPE (b))
2590 {
2591 /* If this decl might be modified, save its type. This is
2592 done here rather than when the decl is first bound
2593 because the type may change after first binding, through
2594 being completed or through attributes being added. If we
2595 encounter multiple such decls, only the first should have
2596 its type saved; the others will already have had their
2597 proper types saved and the types will not have changed as
2598 their scopes will not have been re-entered. */
2599 if (DECL_P (b->decl) && DECL_FILE_SCOPE_P (b->decl) && !type_saved)
2600 {
2601 b->u.type = TREE_TYPE (b->decl);
2602 type_saved = true;
2603 }
2604 if (B_IN_FILE_SCOPE (b)
2605 && TREE_CODE (b->decl) == VAR_DECL
2606 && TREE_STATIC (b->decl)
2607 && TREE_CODE (TREE_TYPE (b->decl)) == ARRAY_TYPE
2608 && !TYPE_DOMAIN (TREE_TYPE (b->decl))
2609 && TREE_CODE (type) == ARRAY_TYPE
2610 && TYPE_DOMAIN (type)
2611 && TYPE_MAX_VALUE (TYPE_DOMAIN (type))
2612 && !integer_zerop (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
2613 {
2614 /* Array type completed in inner scope, which should be
2615 diagnosed if the completion does not have size 1 and
2616 it does not get completed in the file scope. */
2617 b->inner_comp = true;
2618 }
2619 b = b->shadowed;
2620 }
2621
2622 /* If a matching external declaration has been found, set its
2623 type to the composite of all the types of that declaration.
2624 After the consistency checks, it will be reset to the
2625 composite of the visible types only. */
2626 if (b && (TREE_PUBLIC (x) || same_translation_unit_p (x, b->decl))
2627 && b->u.type)
2628 TREE_TYPE (b->decl) = b->u.type;
2629
2630 /* The point of the same_translation_unit_p check here is,
2631 we want to detect a duplicate decl for a construct like
2632 foo() { extern bar(); } ... static bar(); but not if
2633 they are in different translation units. In any case,
2634 the static does not go in the externals scope. */
2635 if (b
2636 && (TREE_PUBLIC (x) || same_translation_unit_p (x, b->decl))
2637 && duplicate_decls (x, b->decl))
2638 {
2639 tree thistype;
2640 if (vistype)
2641 {
2642 if (comptypes (vistype, type))
2643 thistype = composite_type (vistype, type);
2644 else
2645 thistype = TREE_TYPE (b->decl);
2646 }
2647 else
2648 thistype = type;
2649 b->u.type = TREE_TYPE (b->decl);
2650 if (TREE_CODE (b->decl) == FUNCTION_DECL && DECL_BUILT_IN (b->decl))
2651 thistype
2652 = build_type_attribute_variant (thistype,
2653 TYPE_ATTRIBUTES (b->u.type));
2654 TREE_TYPE (b->decl) = thistype;
2655 bind (name, b->decl, scope, /*invisible=*/false, /*nested=*/true,
2656 locus);
2657 return b->decl;
2658 }
2659 else if (TREE_PUBLIC (x))
2660 {
2661 if (visdecl && !b && duplicate_decls (x, visdecl))
2662 {
2663 /* An external declaration at block scope referring to a
2664 visible entity with internal linkage. The composite
2665 type will already be correct for this scope, so we
2666 just need to fall through to make the declaration in
2667 this scope. */
2668 nested = true;
2669 x = visdecl;
2670 }
2671 else
2672 {
2673 bind (name, x, external_scope, /*invisible=*/true,
2674 /*nested=*/false, locus);
2675 nested = true;
2676 }
2677 }
2678 }
2679
2680 if (TREE_CODE (x) != PARM_DECL)
2681 warn_if_shadowing (x);
2682
2683 skip_external_and_shadow_checks:
2684 if (TREE_CODE (x) == TYPE_DECL)
2685 set_underlying_type (x);
2686
2687 bind (name, x, scope, /*invisible=*/false, nested, locus);
2688
2689 /* If x's type is incomplete because it's based on a
2690 structure or union which has not yet been fully declared,
2691 attach it to that structure or union type, so we can go
2692 back and complete the variable declaration later, if the
2693 structure or union gets fully declared.
2694
2695 If the input is erroneous, we can have error_mark in the type
2696 slot (e.g. "f(void a, ...)") - that doesn't count as an
2697 incomplete type. */
2698 if (TREE_TYPE (x) != error_mark_node
2699 && !COMPLETE_TYPE_P (TREE_TYPE (x)))
2700 {
2701 tree element = TREE_TYPE (x);
2702
2703 while (TREE_CODE (element) == ARRAY_TYPE)
2704 element = TREE_TYPE (element);
2705 element = TYPE_MAIN_VARIANT (element);
2706
2707 if ((TREE_CODE (element) == RECORD_TYPE
2708 || TREE_CODE (element) == UNION_TYPE)
2709 && (TREE_CODE (x) != TYPE_DECL
2710 || TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE)
2711 && !COMPLETE_TYPE_P (element))
2712 C_TYPE_INCOMPLETE_VARS (element)
2713 = tree_cons (NULL_TREE, x, C_TYPE_INCOMPLETE_VARS (element));
2714 }
2715 return x;
2716 }
2717
2718 /* Record X as belonging to file scope.
2719 This is used only internally by the Objective-C front end,
2720 and is limited to its needs. duplicate_decls is not called;
2721 if there is any preexisting decl for this identifier, it is an ICE. */
2722
2723 tree
2724 pushdecl_top_level (tree x)
2725 {
2726 tree name;
2727 bool nested = false;
2728 gcc_assert (TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == CONST_DECL);
2729
2730 name = DECL_NAME (x);
2731
2732 gcc_assert (TREE_CODE (x) == CONST_DECL || !I_SYMBOL_BINDING (name));
2733
2734 if (TREE_PUBLIC (x))
2735 {
2736 bind (name, x, external_scope, /*invisible=*/true, /*nested=*/false,
2737 UNKNOWN_LOCATION);
2738 nested = true;
2739 }
2740 if (file_scope)
2741 bind (name, x, file_scope, /*invisible=*/false, nested, UNKNOWN_LOCATION);
2742
2743 return x;
2744 }
2745 \f
2746 static void
2747 implicit_decl_warning (tree id, tree olddecl)
2748 {
2749 if (warn_implicit_function_declaration)
2750 {
2751 bool warned;
2752
2753 if (flag_isoc99)
2754 warned = pedwarn (input_location, OPT_Wimplicit_function_declaration,
2755 "implicit declaration of function %qE", id);
2756 else
2757 warned = warning (OPT_Wimplicit_function_declaration,
2758 G_("implicit declaration of function %qE"), id);
2759 if (olddecl && warned)
2760 locate_old_decl (olddecl);
2761 }
2762 }
2763
2764 /* Generate an implicit declaration for identifier FUNCTIONID at LOC as a
2765 function of type int (). */
2766
2767 tree
2768 implicitly_declare (location_t loc, tree functionid)
2769 {
2770 struct c_binding *b;
2771 tree decl = 0;
2772 tree asmspec_tree;
2773
2774 for (b = I_SYMBOL_BINDING (functionid); b; b = b->shadowed)
2775 {
2776 if (B_IN_SCOPE (b, external_scope))
2777 {
2778 decl = b->decl;
2779 break;
2780 }
2781 }
2782
2783 if (decl)
2784 {
2785 if (decl == error_mark_node)
2786 return decl;
2787
2788 /* FIXME: Objective-C has weird not-really-builtin functions
2789 which are supposed to be visible automatically. They wind up
2790 in the external scope because they're pushed before the file
2791 scope gets created. Catch this here and rebind them into the
2792 file scope. */
2793 if (!DECL_BUILT_IN (decl) && DECL_IS_BUILTIN (decl))
2794 {
2795 bind (functionid, decl, file_scope,
2796 /*invisible=*/false, /*nested=*/true,
2797 DECL_SOURCE_LOCATION (decl));
2798 return decl;
2799 }
2800 else
2801 {
2802 tree newtype = default_function_type;
2803 if (b->u.type)
2804 TREE_TYPE (decl) = b->u.type;
2805 /* Implicit declaration of a function already declared
2806 (somehow) in a different scope, or as a built-in.
2807 If this is the first time this has happened, warn;
2808 then recycle the old declaration but with the new type. */
2809 if (!C_DECL_IMPLICIT (decl))
2810 {
2811 implicit_decl_warning (functionid, decl);
2812 C_DECL_IMPLICIT (decl) = 1;
2813 }
2814 if (DECL_BUILT_IN (decl))
2815 {
2816 newtype = build_type_attribute_variant (newtype,
2817 TYPE_ATTRIBUTES
2818 (TREE_TYPE (decl)));
2819 if (!comptypes (newtype, TREE_TYPE (decl)))
2820 {
2821 warning_at (loc, 0, "incompatible implicit declaration of "
2822 "built-in function %qD", decl);
2823 newtype = TREE_TYPE (decl);
2824 }
2825 }
2826 else
2827 {
2828 if (!comptypes (newtype, TREE_TYPE (decl)))
2829 {
2830 error_at (loc, "incompatible implicit declaration of function %qD", decl);
2831 locate_old_decl (decl);
2832 }
2833 }
2834 b->u.type = TREE_TYPE (decl);
2835 TREE_TYPE (decl) = newtype;
2836 bind (functionid, decl, current_scope,
2837 /*invisible=*/false, /*nested=*/true,
2838 DECL_SOURCE_LOCATION (decl));
2839 return decl;
2840 }
2841 }
2842
2843 /* Not seen before. */
2844 decl = build_decl (loc, FUNCTION_DECL, functionid, default_function_type);
2845 DECL_EXTERNAL (decl) = 1;
2846 TREE_PUBLIC (decl) = 1;
2847 C_DECL_IMPLICIT (decl) = 1;
2848 implicit_decl_warning (functionid, 0);
2849 asmspec_tree = maybe_apply_renaming_pragma (decl, /*asmname=*/NULL);
2850 if (asmspec_tree)
2851 set_user_assembler_name (decl, TREE_STRING_POINTER (asmspec_tree));
2852
2853 /* C89 says implicit declarations are in the innermost block.
2854 So we record the decl in the standard fashion. */
2855 decl = pushdecl (decl);
2856
2857 /* No need to call objc_check_decl here - it's a function type. */
2858 rest_of_decl_compilation (decl, 0, 0);
2859
2860 /* Write a record describing this implicit function declaration
2861 to the prototypes file (if requested). */
2862 gen_aux_info_record (decl, 0, 1, 0);
2863
2864 /* Possibly apply some default attributes to this implicit declaration. */
2865 decl_attributes (&decl, NULL_TREE, 0);
2866
2867 return decl;
2868 }
2869
2870 /* Issue an error message for a reference to an undeclared variable
2871 ID, including a reference to a builtin outside of function-call
2872 context. Establish a binding of the identifier to error_mark_node
2873 in an appropriate scope, which will suppress further errors for the
2874 same identifier. The error message should be given location LOC. */
2875 void
2876 undeclared_variable (location_t loc, tree id)
2877 {
2878 static bool already = false;
2879 struct c_scope *scope;
2880
2881 if (current_function_decl == 0)
2882 {
2883 error ("%H%qE undeclared here (not in a function)", &loc, id);
2884 scope = current_scope;
2885 }
2886 else
2887 {
2888 error ("%H%qE undeclared (first use in this function)", &loc, id);
2889
2890 if (!already)
2891 {
2892 error ("%H(Each undeclared identifier is reported only once", &loc);
2893 error ("%Hfor each function it appears in.)", &loc);
2894 already = true;
2895 }
2896
2897 /* If we are parsing old-style parameter decls, current_function_decl
2898 will be nonnull but current_function_scope will be null. */
2899 scope = current_function_scope ? current_function_scope : current_scope;
2900 }
2901 bind (id, error_mark_node, scope, /*invisible=*/false, /*nested=*/false,
2902 UNKNOWN_LOCATION);
2903 }
2904 \f
2905 /* Subroutine of lookup_label, declare_label, define_label: construct a
2906 LABEL_DECL with all the proper frills. Also create a struct
2907 c_label_vars initialized for the current scope. */
2908
2909 static tree
2910 make_label (location_t location, tree name, bool defining,
2911 struct c_label_vars **p_label_vars)
2912 {
2913 tree label = build_decl (location, LABEL_DECL, name, void_type_node);
2914 struct c_label_vars *label_vars;
2915
2916 DECL_CONTEXT (label) = current_function_decl;
2917 DECL_MODE (label) = VOIDmode;
2918
2919 label_vars = GGC_NEW (struct c_label_vars);
2920 label_vars->shadowed = NULL;
2921 set_spot_bindings (&label_vars->label_bindings, defining);
2922 label_vars->decls_in_scope = make_tree_vector ();
2923 label_vars->gotos = VEC_alloc (c_goto_bindings_p, gc, 0);
2924 *p_label_vars = label_vars;
2925
2926 return label;
2927 }
2928
2929 /* Get the LABEL_DECL corresponding to identifier NAME as a label.
2930 Create one if none exists so far for the current function.
2931 This is called when a label is used in a goto expression or
2932 has its address taken. */
2933
2934 tree
2935 lookup_label (tree name)
2936 {
2937 tree label;
2938 struct c_label_vars *label_vars;
2939
2940 if (current_function_decl == 0)
2941 {
2942 error ("label %qE referenced outside of any function", name);
2943 return 0;
2944 }
2945
2946 /* Use a label already defined or ref'd with this name, but not if
2947 it is inherited from a containing function and wasn't declared
2948 using __label__. */
2949 label = I_LABEL_DECL (name);
2950 if (label && (DECL_CONTEXT (label) == current_function_decl
2951 || C_DECLARED_LABEL_FLAG (label)))
2952 {
2953 /* If the label has only been declared, update its apparent
2954 location to point here, for better diagnostics if it
2955 turns out not to have been defined. */
2956 if (DECL_INITIAL (label) == NULL_TREE)
2957 DECL_SOURCE_LOCATION (label) = input_location;
2958 return label;
2959 }
2960
2961 /* No label binding for that identifier; make one. */
2962 label = make_label (input_location, name, false, &label_vars);
2963
2964 /* Ordinary labels go in the current function scope. */
2965 bind_label (name, label, current_function_scope, label_vars);
2966
2967 return label;
2968 }
2969
2970 /* Issue a warning about DECL for a goto statement at GOTO_LOC going
2971 to LABEL. */
2972
2973 static void
2974 warn_about_goto (location_t goto_loc, tree label, tree decl)
2975 {
2976 if (variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
2977 error_at (goto_loc,
2978 "jump into scope of identifier with variably modified type");
2979 else
2980 warning_at (goto_loc, OPT_Wjump_misses_init,
2981 "jump skips variable initialization");
2982 inform (DECL_SOURCE_LOCATION (label), "label %qD defined here", label);
2983 inform (DECL_SOURCE_LOCATION (decl), "%qD declared here", decl);
2984 }
2985
2986 /* Look up a label because of a goto statement. This is like
2987 lookup_label, but also issues any appropriate warnings. */
2988
2989 tree
2990 lookup_label_for_goto (location_t loc, tree name)
2991 {
2992 tree label;
2993 struct c_label_vars *label_vars;
2994 unsigned int ix;
2995 tree decl;
2996
2997 label = lookup_label (name);
2998 if (label == NULL_TREE)
2999 return NULL_TREE;
3000
3001 /* If we are jumping to a different function, we can't issue any
3002 useful warnings. */
3003 if (DECL_CONTEXT (label) != current_function_decl)
3004 {
3005 gcc_assert (C_DECLARED_LABEL_FLAG (label));
3006 return label;
3007 }
3008
3009 label_vars = I_LABEL_BINDING (name)->u.label;
3010
3011 /* If the label has not yet been defined, then push this goto on a
3012 list for possible later warnings. */
3013 if (label_vars->label_bindings.scope == NULL)
3014 {
3015 struct c_goto_bindings *g;
3016
3017 g = GGC_NEW (struct c_goto_bindings);
3018 g->loc = loc;
3019 set_spot_bindings (&g->goto_bindings, true);
3020 VEC_safe_push (c_goto_bindings_p, gc, label_vars->gotos, g);
3021 return label;
3022 }
3023
3024 /* If there are any decls in label_vars->decls_in_scope, then this
3025 goto has missed the declaration of the decl. This happens for a
3026 case like
3027 int i = 1;
3028 lab:
3029 ...
3030 goto lab;
3031 Issue a warning or error. */
3032 for (ix = 0; VEC_iterate (tree, label_vars->decls_in_scope, ix, decl); ++ix)
3033 warn_about_goto (loc, label, decl);
3034
3035 if (label_vars->label_bindings.left_stmt_expr)
3036 {
3037 error_at (loc, "jump into statement expression");
3038 inform (DECL_SOURCE_LOCATION (label), "label %qD defined here", label);
3039 }
3040
3041 return label;
3042 }
3043
3044 /* Make a label named NAME in the current function, shadowing silently
3045 any that may be inherited from containing functions or containing
3046 scopes. This is called for __label__ declarations. */
3047
3048 tree
3049 declare_label (tree name)
3050 {
3051 struct c_binding *b = I_LABEL_BINDING (name);
3052 tree label;
3053 struct c_label_vars *label_vars;
3054
3055 /* Check to make sure that the label hasn't already been declared
3056 at this scope */
3057 if (b && B_IN_CURRENT_SCOPE (b))
3058 {
3059 error ("duplicate label declaration %qE", name);
3060 locate_old_decl (b->decl);
3061
3062 /* Just use the previous declaration. */
3063 return b->decl;
3064 }
3065
3066 label = make_label (input_location, name, false, &label_vars);
3067 C_DECLARED_LABEL_FLAG (label) = 1;
3068
3069 /* Declared labels go in the current scope. */
3070 bind_label (name, label, current_scope, label_vars);
3071
3072 return label;
3073 }
3074
3075 /* When we define a label, issue any appropriate warnings if there are
3076 any gotos earlier in the function which jump to this label. */
3077
3078 static void
3079 check_earlier_gotos (tree label, struct c_label_vars* label_vars)
3080 {
3081 unsigned int ix;
3082 struct c_goto_bindings *g;
3083
3084 for (ix = 0;
3085 VEC_iterate (c_goto_bindings_p, label_vars->gotos, ix, g);
3086 ++ix)
3087 {
3088 struct c_binding *b;
3089 struct c_scope *scope;
3090
3091 /* We have a goto to this label. The goto is going forward. In
3092 g->scope, the goto is going to skip any binding which was
3093 defined after g->bindings_in_scope. */
3094 for (b = g->goto_bindings.scope->bindings;
3095 b != g->goto_bindings.bindings_in_scope;
3096 b = b->prev)
3097 {
3098 if (decl_jump_unsafe (b->decl))
3099 warn_about_goto (g->loc, label, b->decl);
3100 }
3101
3102 /* We also need to warn about decls defined in any scopes
3103 between the scope of the label and the scope of the goto. */
3104 for (scope = label_vars->label_bindings.scope;
3105 scope != g->goto_bindings.scope;
3106 scope = scope->outer)
3107 {
3108 gcc_assert (scope != NULL);
3109 if (scope == label_vars->label_bindings.scope)
3110 b = label_vars->label_bindings.bindings_in_scope;
3111 else
3112 b = scope->bindings;
3113 for (; b != NULL; b = b->prev)
3114 {
3115 if (decl_jump_unsafe (b->decl))
3116 warn_about_goto (g->loc, label, b->decl);
3117 }
3118 }
3119
3120 if (g->goto_bindings.stmt_exprs > 0)
3121 {
3122 error_at (g->loc, "jump into statement expression");
3123 inform (DECL_SOURCE_LOCATION (label), "label %qD defined here",
3124 label);
3125 }
3126 }
3127
3128 /* Now that the label is defined, we will issue warnings about
3129 subsequent gotos to this label when we see them. */
3130 VEC_truncate (c_goto_bindings_p, label_vars->gotos, 0);
3131 label_vars->gotos = NULL;
3132 }
3133
3134 /* Define a label, specifying the location in the source file.
3135 Return the LABEL_DECL node for the label, if the definition is valid.
3136 Otherwise return 0. */
3137
3138 tree
3139 define_label (location_t location, tree name)
3140 {
3141 /* Find any preexisting label with this name. It is an error
3142 if that label has already been defined in this function, or
3143 if there is a containing function with a declared label with
3144 the same name. */
3145 tree label = I_LABEL_DECL (name);
3146
3147 if (label
3148 && ((DECL_CONTEXT (label) == current_function_decl
3149 && DECL_INITIAL (label) != 0)
3150 || (DECL_CONTEXT (label) != current_function_decl
3151 && C_DECLARED_LABEL_FLAG (label))))
3152 {
3153 error_at (location, "duplicate label %qD", label);
3154 locate_old_decl (label);
3155 return 0;
3156 }
3157 else if (label && DECL_CONTEXT (label) == current_function_decl)
3158 {
3159 struct c_label_vars *label_vars = I_LABEL_BINDING (name)->u.label;
3160
3161 /* The label has been used or declared already in this function,
3162 but not defined. Update its location to point to this
3163 definition. */
3164 DECL_SOURCE_LOCATION (label) = location;
3165 set_spot_bindings (&label_vars->label_bindings, true);
3166
3167 /* Issue warnings as required about any goto statements from
3168 earlier in the function. */
3169 check_earlier_gotos (label, label_vars);
3170 }
3171 else
3172 {
3173 struct c_label_vars *label_vars;
3174
3175 /* No label binding for that identifier; make one. */
3176 label = make_label (location, name, true, &label_vars);
3177
3178 /* Ordinary labels go in the current function scope. */
3179 bind_label (name, label, current_function_scope, label_vars);
3180 }
3181
3182 if (!in_system_header && lookup_name (name))
3183 warning_at (location, OPT_Wtraditional,
3184 "traditional C lacks a separate namespace "
3185 "for labels, identifier %qE conflicts", name);
3186
3187 /* Mark label as having been defined. */
3188 DECL_INITIAL (label) = error_mark_node;
3189 return label;
3190 }
3191 \f
3192 /* Get the bindings for a new switch statement. This is used to issue
3193 warnings as appropriate for jumps from the switch to case or
3194 default labels. */
3195
3196 struct c_spot_bindings *
3197 c_get_switch_bindings (void)
3198 {
3199 struct c_spot_bindings *switch_bindings;
3200
3201 switch_bindings = XNEW (struct c_spot_bindings);
3202 set_spot_bindings (switch_bindings, true);
3203 return switch_bindings;
3204 }
3205
3206 void
3207 c_release_switch_bindings (struct c_spot_bindings *bindings)
3208 {
3209 gcc_assert (bindings->stmt_exprs == 0 && !bindings->left_stmt_expr);
3210 XDELETE (bindings);
3211 }
3212
3213 /* This is called at the point of a case or default label to issue
3214 warnings about decls as needed. It returns true if it found an
3215 error, not just a warning. */
3216
3217 bool
3218 c_check_switch_jump_warnings (struct c_spot_bindings *switch_bindings,
3219 location_t switch_loc, location_t case_loc)
3220 {
3221 bool saw_error;
3222 struct c_scope *scope;
3223
3224 saw_error = false;
3225 for (scope = current_scope;
3226 scope != switch_bindings->scope;
3227 scope = scope->outer)
3228 {
3229 struct c_binding *b;
3230
3231 gcc_assert (scope != NULL);
3232 for (b = scope->bindings; b != NULL; b = b->prev)
3233 {
3234 if (decl_jump_unsafe (b->decl))
3235 {
3236 if (variably_modified_type_p (TREE_TYPE (b->decl), NULL_TREE))
3237 {
3238 saw_error = true;
3239 error_at (case_loc,
3240 ("switch jumps into scope of identifier with "
3241 "variably modified type"));
3242 }
3243 else
3244 warning_at (case_loc, OPT_Wjump_misses_init,
3245 "switch jumps over variable initialization");
3246 inform (switch_loc, "switch starts here");
3247 inform (DECL_SOURCE_LOCATION (b->decl), "%qD declared here",
3248 b->decl);
3249 }
3250 }
3251 }
3252
3253 if (switch_bindings->stmt_exprs > 0)
3254 {
3255 saw_error = true;
3256 error_at (case_loc, "switch jumps into statement expression");
3257 inform (switch_loc, "switch starts here");
3258 }
3259
3260 return saw_error;
3261 }
3262 \f
3263 /* Given NAME, an IDENTIFIER_NODE,
3264 return the structure (or union or enum) definition for that name.
3265 If THISLEVEL_ONLY is nonzero, searches only the current_scope.
3266 CODE says which kind of type the caller wants;
3267 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
3268 If PLOC is not NULL and this returns non-null, it sets *PLOC to the
3269 location where the tag was defined.
3270 If the wrong kind of type is found, an error is reported. */
3271
3272 static tree
3273 lookup_tag (enum tree_code code, tree name, int thislevel_only,
3274 location_t *ploc)
3275 {
3276 struct c_binding *b = I_TAG_BINDING (name);
3277 int thislevel = 0;
3278
3279 if (!b || !b->decl)
3280 return 0;
3281
3282 /* We only care about whether it's in this level if
3283 thislevel_only was set or it might be a type clash. */
3284 if (thislevel_only || TREE_CODE (b->decl) != code)
3285 {
3286 /* For our purposes, a tag in the external scope is the same as
3287 a tag in the file scope. (Primarily relevant to Objective-C
3288 and its builtin structure tags, which get pushed before the
3289 file scope is created.) */
3290 if (B_IN_CURRENT_SCOPE (b)
3291 || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
3292 thislevel = 1;
3293 }
3294
3295 if (thislevel_only && !thislevel)
3296 return 0;
3297
3298 if (TREE_CODE (b->decl) != code)
3299 {
3300 /* Definition isn't the kind we were looking for. */
3301 pending_invalid_xref = name;
3302 pending_invalid_xref_location = input_location;
3303
3304 /* If in the same binding level as a declaration as a tag
3305 of a different type, this must not be allowed to
3306 shadow that tag, so give the error immediately.
3307 (For example, "struct foo; union foo;" is invalid.) */
3308 if (thislevel)
3309 pending_xref_error ();
3310 }
3311
3312 if (ploc != NULL)
3313 *ploc = b->locus;
3314
3315 return b->decl;
3316 }
3317
3318 /* Print an error message now
3319 for a recent invalid struct, union or enum cross reference.
3320 We don't print them immediately because they are not invalid
3321 when used in the `struct foo;' construct for shadowing. */
3322
3323 void
3324 pending_xref_error (void)
3325 {
3326 if (pending_invalid_xref != 0)
3327 error ("%H%qE defined as wrong kind of tag",
3328 &pending_invalid_xref_location, pending_invalid_xref);
3329 pending_invalid_xref = 0;
3330 }
3331
3332 \f
3333 /* Look up NAME in the current scope and its superiors
3334 in the namespace of variables, functions and typedefs.
3335 Return a ..._DECL node of some kind representing its definition,
3336 or return 0 if it is undefined. */
3337
3338 tree
3339 lookup_name (tree name)
3340 {
3341 struct c_binding *b = I_SYMBOL_BINDING (name);
3342 if (b && !b->invisible)
3343 return b->decl;
3344 return 0;
3345 }
3346
3347 /* Similar to `lookup_name' but look only at the indicated scope. */
3348
3349 static tree
3350 lookup_name_in_scope (tree name, struct c_scope *scope)
3351 {
3352 struct c_binding *b;
3353
3354 for (b = I_SYMBOL_BINDING (name); b; b = b->shadowed)
3355 if (B_IN_SCOPE (b, scope))
3356 return b->decl;
3357 return 0;
3358 }
3359 \f
3360 /* Create the predefined scalar types of C,
3361 and some nodes representing standard constants (0, 1, (void *) 0).
3362 Initialize the global scope.
3363 Make definitions for built-in primitive functions. */
3364
3365 void
3366 c_init_decl_processing (void)
3367 {
3368 location_t save_loc = input_location;
3369
3370 /* Initialize reserved words for parser. */
3371 c_parse_init ();
3372
3373 current_function_decl = 0;
3374
3375 gcc_obstack_init (&parser_obstack);
3376
3377 /* Make the externals scope. */
3378 push_scope ();
3379 external_scope = current_scope;
3380
3381 /* Declarations from c_common_nodes_and_builtins must not be associated
3382 with this input file, lest we get differences between using and not
3383 using preprocessed headers. */
3384 input_location = BUILTINS_LOCATION;
3385
3386 build_common_tree_nodes (flag_signed_char, false);
3387
3388 c_common_nodes_and_builtins ();
3389
3390 /* In C, comparisons and TRUTH_* expressions have type int. */
3391 truthvalue_type_node = integer_type_node;
3392 truthvalue_true_node = integer_one_node;
3393 truthvalue_false_node = integer_zero_node;
3394
3395 /* Even in C99, which has a real boolean type. */
3396 pushdecl (build_decl (UNKNOWN_LOCATION, TYPE_DECL, get_identifier ("_Bool"),
3397 boolean_type_node));
3398
3399 input_location = save_loc;
3400
3401 pedantic_lvalues = true;
3402
3403 make_fname_decl = c_make_fname_decl;
3404 start_fname_decls ();
3405 }
3406
3407 /* Create the VAR_DECL at LOC for __FUNCTION__ etc. ID is the name to
3408 give the decl, NAME is the initialization string and TYPE_DEP
3409 indicates whether NAME depended on the type of the function. As we
3410 don't yet implement delayed emission of static data, we mark the
3411 decl as emitted so it is not placed in the output. Anything using
3412 it must therefore pull out the STRING_CST initializer directly.
3413 FIXME. */
3414
3415 static tree
3416 c_make_fname_decl (location_t loc, tree id, int type_dep)
3417 {
3418 const char *name = fname_as_string (type_dep);
3419 tree decl, type, init;
3420 size_t length = strlen (name);
3421
3422 type = build_array_type (char_type_node,
3423 build_index_type (size_int (length)));
3424 type = c_build_qualified_type (type, TYPE_QUAL_CONST);
3425
3426 decl = build_decl (loc, VAR_DECL, id, type);
3427
3428 TREE_STATIC (decl) = 1;
3429 TREE_READONLY (decl) = 1;
3430 DECL_ARTIFICIAL (decl) = 1;
3431
3432 init = build_string (length + 1, name);
3433 free (CONST_CAST (char *, name));
3434 TREE_TYPE (init) = type;
3435 DECL_INITIAL (decl) = init;
3436
3437 TREE_USED (decl) = 1;
3438
3439 if (current_function_decl
3440 /* For invalid programs like this:
3441
3442 void foo()
3443 const char* p = __FUNCTION__;
3444
3445 the __FUNCTION__ is believed to appear in K&R style function
3446 parameter declarator. In that case we still don't have
3447 function_scope. */
3448 && (!errorcount || current_function_scope))
3449 {
3450 DECL_CONTEXT (decl) = current_function_decl;
3451 bind (id, decl, current_function_scope,
3452 /*invisible=*/false, /*nested=*/false, UNKNOWN_LOCATION);
3453 }
3454
3455 finish_decl (decl, loc, init, NULL_TREE, NULL_TREE);
3456
3457 return decl;
3458 }
3459
3460 tree
3461 c_builtin_function (tree decl)
3462 {
3463 tree type = TREE_TYPE (decl);
3464 tree id = DECL_NAME (decl);
3465
3466 const char *name = IDENTIFIER_POINTER (id);
3467 C_DECL_BUILTIN_PROTOTYPE (decl) = (TYPE_ARG_TYPES (type) != 0);
3468
3469 /* Should never be called on a symbol with a preexisting meaning. */
3470 gcc_assert (!I_SYMBOL_BINDING (id));
3471
3472 bind (id, decl, external_scope, /*invisible=*/true, /*nested=*/false,
3473 UNKNOWN_LOCATION);
3474
3475 /* Builtins in the implementation namespace are made visible without
3476 needing to be explicitly declared. See push_file_scope. */
3477 if (name[0] == '_' && (name[1] == '_' || ISUPPER (name[1])))
3478 {
3479 TREE_CHAIN (decl) = visible_builtins;
3480 visible_builtins = decl;
3481 }
3482
3483 return decl;
3484 }
3485
3486 tree
3487 c_builtin_function_ext_scope (tree decl)
3488 {
3489 tree type = TREE_TYPE (decl);
3490 tree id = DECL_NAME (decl);
3491
3492 const char *name = IDENTIFIER_POINTER (id);
3493 C_DECL_BUILTIN_PROTOTYPE (decl) = (TYPE_ARG_TYPES (type) != 0);
3494
3495 /* Should never be called on a symbol with a preexisting meaning. */
3496 gcc_assert (!I_SYMBOL_BINDING (id));
3497
3498 bind (id, decl, external_scope, /*invisible=*/false, /*nested=*/false,
3499 UNKNOWN_LOCATION);
3500
3501 /* Builtins in the implementation namespace are made visible without
3502 needing to be explicitly declared. See push_file_scope. */
3503 if (name[0] == '_' && (name[1] == '_' || ISUPPER (name[1])))
3504 {
3505 TREE_CHAIN (decl) = visible_builtins;
3506 visible_builtins = decl;
3507 }
3508
3509 return decl;
3510 }
3511 \f
3512 /* Called when a declaration is seen that contains no names to declare.
3513 If its type is a reference to a structure, union or enum inherited
3514 from a containing scope, shadow that tag name for the current scope
3515 with a forward reference.
3516 If its type defines a new named structure or union
3517 or defines an enum, it is valid but we need not do anything here.
3518 Otherwise, it is an error. */
3519
3520 void
3521 shadow_tag (const struct c_declspecs *declspecs)
3522 {
3523 shadow_tag_warned (declspecs, 0);
3524 }
3525
3526 /* WARNED is 1 if we have done a pedwarn, 2 if we have done a warning,
3527 but no pedwarn. */
3528 void
3529 shadow_tag_warned (const struct c_declspecs *declspecs, int warned)
3530 {
3531 bool found_tag = false;
3532
3533 if (declspecs->type && !declspecs->default_int_p && !declspecs->typedef_p)
3534 {
3535 tree value = declspecs->type;
3536 enum tree_code code = TREE_CODE (value);
3537
3538 if (code == RECORD_TYPE || code == UNION_TYPE || code == ENUMERAL_TYPE)
3539 /* Used to test also that TYPE_SIZE (value) != 0.
3540 That caused warning for `struct foo;' at top level in the file. */
3541 {
3542 tree name = TYPE_NAME (value);
3543 tree t;
3544
3545 found_tag = true;
3546
3547 if (declspecs->restrict_p)
3548 {
3549 error ("invalid use of %<restrict%>");
3550 warned = 1;
3551 }
3552
3553 if (name == 0)
3554 {
3555 if (warned != 1 && code != ENUMERAL_TYPE)
3556 /* Empty unnamed enum OK */
3557 {
3558 pedwarn (input_location, 0,
3559 "unnamed struct/union that defines no instances");
3560 warned = 1;
3561 }
3562 }
3563 else if (!declspecs->tag_defined_p
3564 && declspecs->storage_class != csc_none)
3565 {
3566 if (warned != 1)
3567 pedwarn (input_location, 0,
3568 "empty declaration with storage class specifier "
3569 "does not redeclare tag");
3570 warned = 1;
3571 pending_xref_error ();
3572 }
3573 else if (!declspecs->tag_defined_p
3574 && (declspecs->const_p
3575 || declspecs->volatile_p
3576 || declspecs->restrict_p))
3577 {
3578 if (warned != 1)
3579 pedwarn (input_location, 0,
3580 "empty declaration with type qualifier "
3581 "does not redeclare tag");
3582 warned = 1;
3583 pending_xref_error ();
3584 }
3585 else
3586 {
3587 pending_invalid_xref = 0;
3588 t = lookup_tag (code, name, 1, NULL);
3589
3590 if (t == 0)
3591 {
3592 t = make_node (code);
3593 pushtag (input_location, name, t);
3594 }
3595 }
3596 }
3597 else
3598 {
3599 if (warned != 1 && !in_system_header)
3600 {
3601 pedwarn (input_location, 0,
3602 "useless type name in empty declaration");
3603 warned = 1;
3604 }
3605 }
3606 }
3607 else if (warned != 1 && !in_system_header && declspecs->typedef_p)
3608 {
3609 pedwarn (input_location, 0, "useless type name in empty declaration");
3610 warned = 1;
3611 }
3612
3613 pending_invalid_xref = 0;
3614
3615 if (declspecs->inline_p)
3616 {
3617 error ("%<inline%> in empty declaration");
3618 warned = 1;
3619 }
3620
3621 if (current_scope == file_scope && declspecs->storage_class == csc_auto)
3622 {
3623 error ("%<auto%> in file-scope empty declaration");
3624 warned = 1;
3625 }
3626
3627 if (current_scope == file_scope && declspecs->storage_class == csc_register)
3628 {
3629 error ("%<register%> in file-scope empty declaration");
3630 warned = 1;
3631 }
3632
3633 if (!warned && !in_system_header && declspecs->storage_class != csc_none)
3634 {
3635 warning (0, "useless storage class specifier in empty declaration");
3636 warned = 2;
3637 }
3638
3639 if (!warned && !in_system_header && declspecs->thread_p)
3640 {
3641 warning (0, "useless %<__thread%> in empty declaration");
3642 warned = 2;
3643 }
3644
3645 if (!warned && !in_system_header && (declspecs->const_p
3646 || declspecs->volatile_p
3647 || declspecs->restrict_p))
3648 {
3649 warning (0, "useless type qualifier in empty declaration");
3650 warned = 2;
3651 }
3652
3653 if (warned != 1)
3654 {
3655 if (!found_tag)
3656 pedwarn (input_location, 0, "empty declaration");
3657 }
3658 }
3659 \f
3660
3661 /* Return the qualifiers from SPECS as a bitwise OR of TYPE_QUAL_*
3662 bits. SPECS represents declaration specifiers that the grammar
3663 only permits to contain type qualifiers and attributes. */
3664
3665 int
3666 quals_from_declspecs (const struct c_declspecs *specs)
3667 {
3668 int quals = ((specs->const_p ? TYPE_QUAL_CONST : 0)
3669 | (specs->volatile_p ? TYPE_QUAL_VOLATILE : 0)
3670 | (specs->restrict_p ? TYPE_QUAL_RESTRICT : 0));
3671 gcc_assert (!specs->type
3672 && !specs->decl_attr
3673 && specs->typespec_word == cts_none
3674 && specs->storage_class == csc_none
3675 && !specs->typedef_p
3676 && !specs->explicit_signed_p
3677 && !specs->deprecated_p
3678 && !specs->long_p
3679 && !specs->long_long_p
3680 && !specs->short_p
3681 && !specs->signed_p
3682 && !specs->unsigned_p
3683 && !specs->complex_p
3684 && !specs->inline_p
3685 && !specs->thread_p);
3686 return quals;
3687 }
3688
3689 /* Construct an array declarator. LOC is the location of the
3690 beginning of the array (usually the opening brace). EXPR is the
3691 expression inside [], or NULL_TREE. QUALS are the type qualifiers
3692 inside the [] (to be applied to the pointer to which a parameter
3693 array is converted). STATIC_P is true if "static" is inside the
3694 [], false otherwise. VLA_UNSPEC_P is true if the array is [*], a
3695 VLA of unspecified length which is nevertheless a complete type,
3696 false otherwise. The field for the contained declarator is left to
3697 be filled in by set_array_declarator_inner. */
3698
3699 struct c_declarator *
3700 build_array_declarator (location_t loc,
3701 tree expr, struct c_declspecs *quals, bool static_p,
3702 bool vla_unspec_p)
3703 {
3704 struct c_declarator *declarator = XOBNEW (&parser_obstack,
3705 struct c_declarator);
3706 declarator->id_loc = loc;
3707 declarator->kind = cdk_array;
3708 declarator->declarator = 0;
3709 declarator->u.array.dimen = expr;
3710 if (quals)
3711 {
3712 declarator->u.array.attrs = quals->attrs;
3713 declarator->u.array.quals = quals_from_declspecs (quals);
3714 }
3715 else
3716 {
3717 declarator->u.array.attrs = NULL_TREE;
3718 declarator->u.array.quals = 0;
3719 }
3720 declarator->u.array.static_p = static_p;
3721 declarator->u.array.vla_unspec_p = vla_unspec_p;
3722 if (!flag_isoc99)
3723 {
3724 if (static_p || quals != NULL)
3725 pedwarn (loc, OPT_pedantic,
3726 "ISO C90 does not support %<static%> or type "
3727 "qualifiers in parameter array declarators");
3728 if (vla_unspec_p)
3729 pedwarn (loc, OPT_pedantic,
3730 "ISO C90 does not support %<[*]%> array declarators");
3731 }
3732 if (vla_unspec_p)
3733 {
3734 if (!current_scope->parm_flag)
3735 {
3736 /* C99 6.7.5.2p4 */
3737 error_at (loc, "%<[*]%> not allowed in other than "
3738 "function prototype scope");
3739 declarator->u.array.vla_unspec_p = false;
3740 return NULL;
3741 }
3742 current_scope->had_vla_unspec = true;
3743 }
3744 return declarator;
3745 }
3746
3747 /* Set the contained declarator of an array declarator. DECL is the
3748 declarator, as constructed by build_array_declarator; INNER is what
3749 appears on the left of the []. */
3750
3751 struct c_declarator *
3752 set_array_declarator_inner (struct c_declarator *decl,
3753 struct c_declarator *inner)
3754 {
3755 decl->declarator = inner;
3756 return decl;
3757 }
3758
3759 /* INIT is a constructor that forms DECL's initializer. If the final
3760 element initializes a flexible array field, add the size of that
3761 initializer to DECL's size. */
3762
3763 static void
3764 add_flexible_array_elts_to_size (tree decl, tree init)
3765 {
3766 tree elt, type;
3767
3768 if (VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (init)))
3769 return;
3770
3771 elt = VEC_last (constructor_elt, CONSTRUCTOR_ELTS (init))->value;
3772 type = TREE_TYPE (elt);
3773 if (TREE_CODE (type) == ARRAY_TYPE
3774 && TYPE_SIZE (type) == NULL_TREE
3775 && TYPE_DOMAIN (type) != NULL_TREE
3776 && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL_TREE)
3777 {
3778 complete_array_type (&type, elt, false);
3779 DECL_SIZE (decl)
3780 = size_binop (PLUS_EXPR, DECL_SIZE (decl), TYPE_SIZE (type));
3781 DECL_SIZE_UNIT (decl)
3782 = size_binop (PLUS_EXPR, DECL_SIZE_UNIT (decl), TYPE_SIZE_UNIT (type));
3783 }
3784 }
3785 \f
3786 /* Decode a "typename", such as "int **", returning a ..._TYPE node.
3787 Set *EXPR, if EXPR not NULL, to any expression to be evaluated
3788 before the type name, and set *EXPR_CONST_OPERANDS, if
3789 EXPR_CONST_OPERANDS not NULL, to indicate whether the type name may
3790 appear in a constant expression. */
3791
3792 tree
3793 groktypename (struct c_type_name *type_name, tree *expr,
3794 bool *expr_const_operands)
3795 {
3796 tree type;
3797 tree attrs = type_name->specs->attrs;
3798
3799 type_name->specs->attrs = NULL_TREE;
3800
3801 type = grokdeclarator (type_name->declarator, type_name->specs, TYPENAME,
3802 false, NULL, &attrs, expr, expr_const_operands,
3803 DEPRECATED_NORMAL);
3804
3805 /* Apply attributes. */
3806 decl_attributes (&type, attrs, 0);
3807
3808 return type;
3809 }
3810
3811 /* Decode a declarator in an ordinary declaration or data definition.
3812 This is called as soon as the type information and variable name
3813 have been parsed, before parsing the initializer if any.
3814 Here we create the ..._DECL node, fill in its type,
3815 and put it on the list of decls for the current context.
3816 The ..._DECL node is returned as the value.
3817
3818 Exception: for arrays where the length is not specified,
3819 the type is left null, to be filled in by `finish_decl'.
3820
3821 Function definitions do not come here; they go to start_function
3822 instead. However, external and forward declarations of functions
3823 do go through here. Structure field declarations are done by
3824 grokfield and not through here. */
3825
3826 tree
3827 start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs,
3828 bool initialized, tree attributes)
3829 {
3830 tree decl;
3831 tree tem;
3832 tree expr = NULL_TREE;
3833 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
3834
3835 /* An object declared as __attribute__((deprecated)) suppresses
3836 warnings of uses of other deprecated items. */
3837 if (lookup_attribute ("deprecated", attributes))
3838 deprecated_state = DEPRECATED_SUPPRESS;
3839
3840 decl = grokdeclarator (declarator, declspecs,
3841 NORMAL, initialized, NULL, &attributes, &expr, NULL,
3842 deprecated_state);
3843 if (!decl)
3844 return 0;
3845
3846 if (expr)
3847 add_stmt (expr);
3848
3849 if (TREE_CODE (decl) != FUNCTION_DECL && MAIN_NAME_P (DECL_NAME (decl)))
3850 warning (OPT_Wmain, "%q+D is usually a function", decl);
3851
3852 if (initialized)
3853 /* Is it valid for this decl to have an initializer at all?
3854 If not, set INITIALIZED to zero, which will indirectly
3855 tell 'finish_decl' to ignore the initializer once it is parsed. */
3856 switch (TREE_CODE (decl))
3857 {
3858 case TYPE_DECL:
3859 error ("typedef %qD is initialized (use __typeof__ instead)", decl);
3860 initialized = 0;
3861 break;
3862
3863 case FUNCTION_DECL:
3864 error ("function %qD is initialized like a variable", decl);
3865 initialized = 0;
3866 break;
3867
3868 case PARM_DECL:
3869 /* DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. */
3870 error ("parameter %qD is initialized", decl);
3871 initialized = 0;
3872 break;
3873
3874 default:
3875 /* Don't allow initializations for incomplete types except for
3876 arrays which might be completed by the initialization. */
3877
3878 /* This can happen if the array size is an undefined macro.
3879 We already gave a warning, so we don't need another one. */
3880 if (TREE_TYPE (decl) == error_mark_node)
3881 initialized = 0;
3882 else if (COMPLETE_TYPE_P (TREE_TYPE (decl)))
3883 {
3884 /* A complete type is ok if size is fixed. */
3885
3886 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (decl))) != INTEGER_CST
3887 || C_DECL_VARIABLE_SIZE (decl))
3888 {
3889 error ("variable-sized object may not be initialized");
3890 initialized = 0;
3891 }
3892 }
3893 else if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE)
3894 {
3895 error ("variable %qD has initializer but incomplete type", decl);
3896 initialized = 0;
3897 }
3898 else if (C_DECL_VARIABLE_SIZE (decl))
3899 {
3900 /* Although C99 is unclear about whether incomplete arrays
3901 of VLAs themselves count as VLAs, it does not make
3902 sense to permit them to be initialized given that
3903 ordinary VLAs may not be initialized. */
3904 error ("variable-sized object may not be initialized");
3905 initialized = 0;
3906 }
3907 }
3908
3909 if (initialized)
3910 {
3911 if (current_scope == file_scope)
3912 TREE_STATIC (decl) = 1;
3913
3914 /* Tell 'pushdecl' this is an initialized decl
3915 even though we don't yet have the initializer expression.
3916 Also tell 'finish_decl' it may store the real initializer. */
3917 DECL_INITIAL (decl) = error_mark_node;
3918 }
3919
3920 /* If this is a function declaration, write a record describing it to the
3921 prototypes file (if requested). */
3922
3923 if (TREE_CODE (decl) == FUNCTION_DECL)
3924 gen_aux_info_record (decl, 0, 0, TYPE_ARG_TYPES (TREE_TYPE (decl)) != 0);
3925
3926 /* ANSI specifies that a tentative definition which is not merged with
3927 a non-tentative definition behaves exactly like a definition with an
3928 initializer equal to zero. (Section 3.7.2)
3929
3930 -fno-common gives strict ANSI behavior, though this tends to break
3931 a large body of code that grew up without this rule.
3932
3933 Thread-local variables are never common, since there's no entrenched
3934 body of code to break, and it allows more efficient variable references
3935 in the presence of dynamic linking. */
3936
3937 if (TREE_CODE (decl) == VAR_DECL
3938 && !initialized
3939 && TREE_PUBLIC (decl)
3940 && !DECL_THREAD_LOCAL_P (decl)
3941 && !flag_no_common)
3942 DECL_COMMON (decl) = 1;
3943
3944 /* Set attributes here so if duplicate decl, will have proper attributes. */
3945 decl_attributes (&decl, attributes, 0);
3946
3947 /* Handle gnu_inline attribute. */
3948 if (declspecs->inline_p
3949 && !flag_gnu89_inline
3950 && TREE_CODE (decl) == FUNCTION_DECL
3951 && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl))
3952 || current_function_decl))
3953 {
3954 if (declspecs->storage_class == csc_auto && current_scope != file_scope)
3955 ;
3956 else if (declspecs->storage_class != csc_static)
3957 DECL_EXTERNAL (decl) = !DECL_EXTERNAL (decl);
3958 }
3959
3960 if (TREE_CODE (decl) == FUNCTION_DECL
3961 && targetm.calls.promote_prototypes (TREE_TYPE (decl)))
3962 {
3963 struct c_declarator *ce = declarator;
3964
3965 if (ce->kind == cdk_pointer)
3966 ce = declarator->declarator;
3967 if (ce->kind == cdk_function)
3968 {
3969 tree args = ce->u.arg_info->parms;
3970 for (; args; args = TREE_CHAIN (args))
3971 {
3972 tree type = TREE_TYPE (args);
3973 if (type && INTEGRAL_TYPE_P (type)
3974 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
3975 DECL_ARG_TYPE (args) = integer_type_node;
3976 }
3977 }
3978 }
3979
3980 if (TREE_CODE (decl) == FUNCTION_DECL
3981 && DECL_DECLARED_INLINE_P (decl)
3982 && DECL_UNINLINABLE (decl)
3983 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
3984 warning (OPT_Wattributes, "inline function %q+D given attribute noinline",
3985 decl);
3986
3987 /* C99 6.7.4p3: An inline definition of a function with external
3988 linkage shall not contain a definition of a modifiable object
3989 with static storage duration... */
3990 if (TREE_CODE (decl) == VAR_DECL
3991 && current_scope != file_scope
3992 && TREE_STATIC (decl)
3993 && !TREE_READONLY (decl)
3994 && DECL_DECLARED_INLINE_P (current_function_decl)
3995 && DECL_EXTERNAL (current_function_decl))
3996 record_inline_static (input_location, current_function_decl,
3997 decl, csi_modifiable);
3998
3999 /* Add this decl to the current scope.
4000 TEM may equal DECL or it may be a previous decl of the same name. */
4001 tem = pushdecl (decl);
4002
4003 if (initialized && DECL_EXTERNAL (tem))
4004 {
4005 DECL_EXTERNAL (tem) = 0;
4006 TREE_STATIC (tem) = 1;
4007 }
4008
4009 return tem;
4010 }
4011
4012 /* Initialize EH if not initialized yet and exceptions are enabled. */
4013
4014 void
4015 c_maybe_initialize_eh (void)
4016 {
4017 if (!flag_exceptions || c_eh_initialized_p)
4018 return;
4019
4020 c_eh_initialized_p = true;
4021 eh_personality_libfunc
4022 = init_one_libfunc (USING_SJLJ_EXCEPTIONS
4023 ? "__gcc_personality_sj0"
4024 : "__gcc_personality_v0");
4025 default_init_unwind_resume_libfunc ();
4026 using_eh_for_cleanups ();
4027 }
4028
4029 /* Finish processing of a declaration;
4030 install its initial value.
4031 If ORIGTYPE is not NULL_TREE, it is the original type of INIT.
4032 If the length of an array type is not known before,
4033 it must be determined now, from the initial value, or it is an error.
4034
4035 INIT_LOC is the location of the initial value. */
4036
4037 void
4038 finish_decl (tree decl, location_t init_loc, tree init,
4039 tree origtype, tree asmspec_tree)
4040 {
4041 tree type;
4042 bool was_incomplete = (DECL_SIZE (decl) == 0);
4043 const char *asmspec = 0;
4044
4045 /* If a name was specified, get the string. */
4046 if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
4047 && DECL_FILE_SCOPE_P (decl))
4048 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
4049 if (asmspec_tree)
4050 asmspec = TREE_STRING_POINTER (asmspec_tree);
4051
4052 /* If `start_decl' didn't like having an initialization, ignore it now. */
4053 if (init != 0 && DECL_INITIAL (decl) == 0)
4054 init = 0;
4055
4056 /* Don't crash if parm is initialized. */
4057 if (TREE_CODE (decl) == PARM_DECL)
4058 init = 0;
4059
4060 if (init)
4061 store_init_value (init_loc, decl, init, origtype);
4062
4063 if (c_dialect_objc () && (TREE_CODE (decl) == VAR_DECL
4064 || TREE_CODE (decl) == FUNCTION_DECL
4065 || TREE_CODE (decl) == FIELD_DECL))
4066 objc_check_decl (decl);
4067
4068 type = TREE_TYPE (decl);
4069
4070 /* Deduce size of array from initialization, if not already known. */
4071 if (TREE_CODE (type) == ARRAY_TYPE
4072 && TYPE_DOMAIN (type) == 0
4073 && TREE_CODE (decl) != TYPE_DECL)
4074 {
4075 bool do_default
4076 = (TREE_STATIC (decl)
4077 /* Even if pedantic, an external linkage array
4078 may have incomplete type at first. */
4079 ? pedantic && !TREE_PUBLIC (decl)
4080 : !DECL_EXTERNAL (decl));
4081 int failure
4082 = complete_array_type (&TREE_TYPE (decl), DECL_INITIAL (decl),
4083 do_default);
4084
4085 /* Get the completed type made by complete_array_type. */
4086 type = TREE_TYPE (decl);
4087
4088 switch (failure)
4089 {
4090 case 1:
4091 error ("initializer fails to determine size of %q+D", decl);
4092 break;
4093
4094 case 2:
4095 if (do_default)
4096 error ("array size missing in %q+D", decl);
4097 /* If a `static' var's size isn't known,
4098 make it extern as well as static, so it does not get
4099 allocated.
4100 If it is not `static', then do not mark extern;
4101 finish_incomplete_decl will give it a default size
4102 and it will get allocated. */
4103 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4104 DECL_EXTERNAL (decl) = 1;
4105 break;
4106
4107 case 3:
4108 error ("zero or negative size array %q+D", decl);
4109 break;
4110
4111 case 0:
4112 /* For global variables, update the copy of the type that
4113 exists in the binding. */
4114 if (TREE_PUBLIC (decl))
4115 {
4116 struct c_binding *b_ext = I_SYMBOL_BINDING (DECL_NAME (decl));
4117 while (b_ext && !B_IN_EXTERNAL_SCOPE (b_ext))
4118 b_ext = b_ext->shadowed;
4119 if (b_ext)
4120 {
4121 if (b_ext->u.type)
4122 b_ext->u.type = composite_type (b_ext->u.type, type);
4123 else
4124 b_ext->u.type = type;
4125 }
4126 }
4127 break;
4128
4129 default:
4130 gcc_unreachable ();
4131 }
4132
4133 if (DECL_INITIAL (decl))
4134 TREE_TYPE (DECL_INITIAL (decl)) = type;
4135
4136 layout_decl (decl, 0);
4137 }
4138
4139 if (TREE_CODE (decl) == VAR_DECL)
4140 {
4141 if (init && TREE_CODE (init) == CONSTRUCTOR)
4142 add_flexible_array_elts_to_size (decl, init);
4143
4144 if (DECL_SIZE (decl) == 0 && TREE_TYPE (decl) != error_mark_node
4145 && COMPLETE_TYPE_P (TREE_TYPE (decl)))
4146 layout_decl (decl, 0);
4147
4148 if (DECL_SIZE (decl) == 0
4149 /* Don't give an error if we already gave one earlier. */
4150 && TREE_TYPE (decl) != error_mark_node
4151 && (TREE_STATIC (decl)
4152 /* A static variable with an incomplete type
4153 is an error if it is initialized.
4154 Also if it is not file scope.
4155 Otherwise, let it through, but if it is not `extern'
4156 then it may cause an error message later. */
4157 ? (DECL_INITIAL (decl) != 0
4158 || !DECL_FILE_SCOPE_P (decl))
4159 /* An automatic variable with an incomplete type
4160 is an error. */
4161 : !DECL_EXTERNAL (decl)))
4162 {
4163 error ("storage size of %q+D isn%'t known", decl);
4164 TREE_TYPE (decl) = error_mark_node;
4165 }
4166
4167 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4168 && DECL_SIZE (decl) != 0)
4169 {
4170 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4171 constant_expression_warning (DECL_SIZE (decl));
4172 else
4173 {
4174 error ("storage size of %q+D isn%'t constant", decl);
4175 TREE_TYPE (decl) = error_mark_node;
4176 }
4177 }
4178
4179 if (TREE_USED (type))
4180 TREE_USED (decl) = 1;
4181 }
4182
4183 /* If this is a function and an assembler name is specified, reset DECL_RTL
4184 so we can give it its new name. Also, update built_in_decls if it
4185 was a normal built-in. */
4186 if (TREE_CODE (decl) == FUNCTION_DECL && asmspec)
4187 {
4188 if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
4189 set_builtin_user_assembler_name (decl, asmspec);
4190 set_user_assembler_name (decl, asmspec);
4191 }
4192
4193 /* If #pragma weak was used, mark the decl weak now. */
4194 maybe_apply_pragma_weak (decl);
4195
4196 /* Output the assembler code and/or RTL code for variables and functions,
4197 unless the type is an undefined structure or union.
4198 If not, it will get done when the type is completed. */
4199
4200 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
4201 {
4202 /* Determine the ELF visibility. */
4203 if (TREE_PUBLIC (decl))
4204 c_determine_visibility (decl);
4205
4206 /* This is a no-op in c-lang.c or something real in objc-act.c. */
4207 if (c_dialect_objc ())
4208 objc_check_decl (decl);
4209
4210 if (asmspec)
4211 {
4212 /* If this is not a static variable, issue a warning.
4213 It doesn't make any sense to give an ASMSPEC for an
4214 ordinary, non-register local variable. Historically,
4215 GCC has accepted -- but ignored -- the ASMSPEC in
4216 this case. */
4217 if (!DECL_FILE_SCOPE_P (decl)
4218 && TREE_CODE (decl) == VAR_DECL
4219 && !C_DECL_REGISTER (decl)
4220 && !TREE_STATIC (decl))
4221 warning (0, "ignoring asm-specifier for non-static local "
4222 "variable %q+D", decl);
4223 else
4224 set_user_assembler_name (decl, asmspec);
4225 }
4226
4227 if (DECL_FILE_SCOPE_P (decl))
4228 {
4229 if (DECL_INITIAL (decl) == NULL_TREE
4230 || DECL_INITIAL (decl) == error_mark_node)
4231 /* Don't output anything
4232 when a tentative file-scope definition is seen.
4233 But at end of compilation, do output code for them. */
4234 DECL_DEFER_OUTPUT (decl) = 1;
4235 rest_of_decl_compilation (decl, true, 0);
4236 }
4237 else
4238 {
4239 /* In conjunction with an ASMSPEC, the `register'
4240 keyword indicates that we should place the variable
4241 in a particular register. */
4242 if (asmspec && C_DECL_REGISTER (decl))
4243 {
4244 DECL_HARD_REGISTER (decl) = 1;
4245 /* This cannot be done for a structure with volatile
4246 fields, on which DECL_REGISTER will have been
4247 reset. */
4248 if (!DECL_REGISTER (decl))
4249 error ("cannot put object with volatile field into register");
4250 }
4251
4252 if (TREE_CODE (decl) != FUNCTION_DECL)
4253 {
4254 /* If we're building a variable sized type, and we might be
4255 reachable other than via the top of the current binding
4256 level, then create a new BIND_EXPR so that we deallocate
4257 the object at the right time. */
4258 /* Note that DECL_SIZE can be null due to errors. */
4259 if (DECL_SIZE (decl)
4260 && !TREE_CONSTANT (DECL_SIZE (decl))
4261 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
4262 {
4263 tree bind;
4264 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
4265 TREE_SIDE_EFFECTS (bind) = 1;
4266 add_stmt (bind);
4267 BIND_EXPR_BODY (bind) = push_stmt_list ();
4268 }
4269 add_stmt (build_stmt (DECL_SOURCE_LOCATION (decl),
4270 DECL_EXPR, decl));
4271 }
4272 }
4273
4274
4275 if (!DECL_FILE_SCOPE_P (decl))
4276 {
4277 /* Recompute the RTL of a local array now
4278 if it used to be an incomplete type. */
4279 if (was_incomplete
4280 && !TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
4281 {
4282 /* If we used it already as memory, it must stay in memory. */
4283 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
4284 /* If it's still incomplete now, no init will save it. */
4285 if (DECL_SIZE (decl) == 0)
4286 DECL_INITIAL (decl) = 0;
4287 }
4288 }
4289 }
4290
4291 if (TREE_CODE (decl) == TYPE_DECL)
4292 {
4293 if (!DECL_FILE_SCOPE_P (decl)
4294 && variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
4295 add_stmt (build_stmt (DECL_SOURCE_LOCATION (decl), DECL_EXPR, decl));
4296
4297 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl), 0);
4298 }
4299
4300 /* At the end of a declaration, throw away any variable type sizes
4301 of types defined inside that declaration. There is no use
4302 computing them in the following function definition. */
4303 if (current_scope == file_scope)
4304 get_pending_sizes ();
4305
4306 /* Install a cleanup (aka destructor) if one was given. */
4307 if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
4308 {
4309 tree attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
4310 if (attr)
4311 {
4312 tree cleanup_id = TREE_VALUE (TREE_VALUE (attr));
4313 tree cleanup_decl = lookup_name (cleanup_id);
4314 tree cleanup;
4315 VEC(tree,gc) *vec;
4316
4317 /* Build "cleanup(&decl)" for the destructor. */
4318 cleanup = build_unary_op (input_location, ADDR_EXPR, decl, 0);
4319 vec = VEC_alloc (tree, gc, 1);
4320 VEC_quick_push (tree, vec, cleanup);
4321 cleanup = build_function_call_vec (DECL_SOURCE_LOCATION (decl),
4322 cleanup_decl, vec, NULL);
4323 VEC_free (tree, gc, vec);
4324
4325 /* Don't warn about decl unused; the cleanup uses it. */
4326 TREE_USED (decl) = 1;
4327 TREE_USED (cleanup_decl) = 1;
4328
4329 /* Initialize EH, if we've been told to do so. */
4330 c_maybe_initialize_eh ();
4331
4332 push_cleanup (decl, cleanup, false);
4333 }
4334 }
4335 }
4336
4337 /* Given a parsed parameter declaration, decode it into a PARM_DECL. */
4338
4339 tree
4340 grokparm (const struct c_parm *parm)
4341 {
4342 tree attrs = parm->attrs;
4343 tree decl = grokdeclarator (parm->declarator, parm->specs, PARM, false,
4344 NULL, &attrs, NULL, NULL, DEPRECATED_NORMAL);
4345
4346 decl_attributes (&decl, attrs, 0);
4347
4348 return decl;
4349 }
4350
4351 /* Given a parsed parameter declaration, decode it into a PARM_DECL
4352 and push that on the current scope. */
4353
4354 void
4355 push_parm_decl (const struct c_parm *parm)
4356 {
4357 tree attrs = parm->attrs;
4358 tree decl;
4359
4360 decl = grokdeclarator (parm->declarator, parm->specs, PARM, false, NULL,
4361 &attrs, NULL, NULL, DEPRECATED_NORMAL);
4362 decl_attributes (&decl, attrs, 0);
4363
4364 decl = pushdecl (decl);
4365
4366 finish_decl (decl, input_location, NULL_TREE, NULL_TREE, NULL_TREE);
4367 }
4368
4369 /* Mark all the parameter declarations to date as forward decls.
4370 Also diagnose use of this extension. */
4371
4372 void
4373 mark_forward_parm_decls (void)
4374 {
4375 struct c_binding *b;
4376
4377 if (pedantic && !current_scope->warned_forward_parm_decls)
4378 {
4379 pedwarn (input_location, OPT_pedantic,
4380 "ISO C forbids forward parameter declarations");
4381 current_scope->warned_forward_parm_decls = true;
4382 }
4383
4384 for (b = current_scope->bindings; b; b = b->prev)
4385 if (TREE_CODE (b->decl) == PARM_DECL)
4386 TREE_ASM_WRITTEN (b->decl) = 1;
4387 }
4388 \f
4389 /* Build a COMPOUND_LITERAL_EXPR. TYPE is the type given in the compound
4390 literal, which may be an incomplete array type completed by the
4391 initializer; INIT is a CONSTRUCTOR at LOC that initializes the compound
4392 literal. NON_CONST is true if the initializers contain something
4393 that cannot occur in a constant expression. */
4394
4395 tree
4396 build_compound_literal (location_t loc, tree type, tree init, bool non_const)
4397 {
4398 /* We do not use start_decl here because we have a type, not a declarator;
4399 and do not use finish_decl because the decl should be stored inside
4400 the COMPOUND_LITERAL_EXPR rather than added elsewhere as a DECL_EXPR. */
4401 tree decl;
4402 tree complit;
4403 tree stmt;
4404
4405 if (type == error_mark_node)
4406 return error_mark_node;
4407
4408 decl = build_decl (loc, VAR_DECL, NULL_TREE, type);
4409 DECL_EXTERNAL (decl) = 0;
4410 TREE_PUBLIC (decl) = 0;
4411 TREE_STATIC (decl) = (current_scope == file_scope);
4412 DECL_CONTEXT (decl) = current_function_decl;
4413 TREE_USED (decl) = 1;
4414 TREE_TYPE (decl) = type;
4415 TREE_READONLY (decl) = TYPE_READONLY (type);
4416 store_init_value (loc, decl, init, NULL_TREE);
4417
4418 if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
4419 {
4420 int failure = complete_array_type (&TREE_TYPE (decl),
4421 DECL_INITIAL (decl), true);
4422 gcc_assert (!failure);
4423
4424 type = TREE_TYPE (decl);
4425 TREE_TYPE (DECL_INITIAL (decl)) = type;
4426 }
4427
4428 if (type == error_mark_node || !COMPLETE_TYPE_P (type))
4429 return error_mark_node;
4430
4431 stmt = build_stmt (DECL_SOURCE_LOCATION (decl), DECL_EXPR, decl);
4432 complit = build1 (COMPOUND_LITERAL_EXPR, type, stmt);
4433 TREE_SIDE_EFFECTS (complit) = 1;
4434
4435 layout_decl (decl, 0);
4436
4437 if (TREE_STATIC (decl))
4438 {
4439 /* This decl needs a name for the assembler output. */
4440 set_compound_literal_name (decl);
4441 DECL_DEFER_OUTPUT (decl) = 1;
4442 DECL_COMDAT (decl) = 1;
4443 DECL_ARTIFICIAL (decl) = 1;
4444 DECL_IGNORED_P (decl) = 1;
4445 pushdecl (decl);
4446 rest_of_decl_compilation (decl, 1, 0);
4447 }
4448
4449 if (non_const)
4450 {
4451 complit = build2 (C_MAYBE_CONST_EXPR, type, NULL, complit);
4452 C_MAYBE_CONST_EXPR_NON_CONST (complit) = 1;
4453 }
4454
4455 return complit;
4456 }
4457
4458 /* Check the type of a compound literal. Here we just check that it
4459 is valid for C++. */
4460
4461 void
4462 check_compound_literal_type (location_t loc, struct c_type_name *type_name)
4463 {
4464 if (warn_cxx_compat && type_name->specs->tag_defined_p)
4465 warning_at (loc, OPT_Wc___compat,
4466 "defining a type in a compound literal is invalid in C++");
4467 }
4468 \f
4469 /* Determine whether TYPE is a structure with a flexible array member,
4470 or a union containing such a structure (possibly recursively). */
4471
4472 static bool
4473 flexible_array_type_p (tree type)
4474 {
4475 tree x;
4476 switch (TREE_CODE (type))
4477 {
4478 case RECORD_TYPE:
4479 x = TYPE_FIELDS (type);
4480 if (x == NULL_TREE)
4481 return false;
4482 while (TREE_CHAIN (x) != NULL_TREE)
4483 x = TREE_CHAIN (x);
4484 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
4485 && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
4486 && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
4487 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
4488 return true;
4489 return false;
4490 case UNION_TYPE:
4491 for (x = TYPE_FIELDS (type); x != NULL_TREE; x = TREE_CHAIN (x))
4492 {
4493 if (flexible_array_type_p (TREE_TYPE (x)))
4494 return true;
4495 }
4496 return false;
4497 default:
4498 return false;
4499 }
4500 }
4501 \f
4502 /* Performs sanity checks on the TYPE and WIDTH of the bit-field NAME,
4503 replacing with appropriate values if they are invalid. */
4504 static void
4505 check_bitfield_type_and_width (tree *type, tree *width, tree orig_name)
4506 {
4507 tree type_mv;
4508 unsigned int max_width;
4509 unsigned HOST_WIDE_INT w;
4510 const char *name = (orig_name
4511 ? identifier_to_locale (IDENTIFIER_POINTER (orig_name))
4512 : _("<anonymous>"));
4513
4514 /* Detect and ignore out of range field width and process valid
4515 field widths. */
4516 if (!INTEGRAL_TYPE_P (TREE_TYPE (*width))
4517 || TREE_CODE (*width) != INTEGER_CST)
4518 {
4519 error ("bit-field %qs width not an integer constant", name);
4520 *width = integer_one_node;
4521 }
4522 else
4523 {
4524 constant_expression_warning (*width);
4525 if (tree_int_cst_sgn (*width) < 0)
4526 {
4527 error ("negative width in bit-field %qs", name);
4528 *width = integer_one_node;
4529 }
4530 else if (integer_zerop (*width) && orig_name)
4531 {
4532 error ("zero width for bit-field %qs", name);
4533 *width = integer_one_node;
4534 }
4535 }
4536
4537 /* Detect invalid bit-field type. */
4538 if (TREE_CODE (*type) != INTEGER_TYPE
4539 && TREE_CODE (*type) != BOOLEAN_TYPE
4540 && TREE_CODE (*type) != ENUMERAL_TYPE)
4541 {
4542 error ("bit-field %qs has invalid type", name);
4543 *type = unsigned_type_node;
4544 }
4545
4546 type_mv = TYPE_MAIN_VARIANT (*type);
4547 if (!in_system_header
4548 && type_mv != integer_type_node
4549 && type_mv != unsigned_type_node
4550 && type_mv != boolean_type_node)
4551 pedwarn (input_location, OPT_pedantic,
4552 "type of bit-field %qs is a GCC extension", name);
4553
4554 max_width = TYPE_PRECISION (*type);
4555
4556 if (0 < compare_tree_int (*width, max_width))
4557 {
4558 error ("width of %qs exceeds its type", name);
4559 w = max_width;
4560 *width = build_int_cst (NULL_TREE, w);
4561 }
4562 else
4563 w = tree_low_cst (*width, 1);
4564
4565 if (TREE_CODE (*type) == ENUMERAL_TYPE)
4566 {
4567 struct lang_type *lt = TYPE_LANG_SPECIFIC (*type);
4568 if (!lt
4569 || w < tree_int_cst_min_precision (lt->enum_min, TYPE_UNSIGNED (*type))
4570 || w < tree_int_cst_min_precision (lt->enum_max, TYPE_UNSIGNED (*type)))
4571 warning (0, "%qs is narrower than values of its type", name);
4572 }
4573 }
4574
4575 \f
4576
4577 /* Print warning about variable length array if necessary. */
4578
4579 static void
4580 warn_variable_length_array (tree name, tree size)
4581 {
4582 int const_size = TREE_CONSTANT (size);
4583
4584 if (!flag_isoc99 && pedantic && warn_vla != 0)
4585 {
4586 if (const_size)
4587 {
4588 if (name)
4589 pedwarn (input_location, OPT_Wvla,
4590 "ISO C90 forbids array %qE whose size "
4591 "can%'t be evaluated",
4592 name);
4593 else
4594 pedwarn (input_location, OPT_Wvla, "ISO C90 forbids array whose size "
4595 "can%'t be evaluated");
4596 }
4597 else
4598 {
4599 if (name)
4600 pedwarn (input_location, OPT_Wvla,
4601 "ISO C90 forbids variable length array %qE",
4602 name);
4603 else
4604 pedwarn (input_location, OPT_Wvla, "ISO C90 forbids variable length array");
4605 }
4606 }
4607 else if (warn_vla > 0)
4608 {
4609 if (const_size)
4610 {
4611 if (name)
4612 warning (OPT_Wvla,
4613 "the size of array %qE can"
4614 "%'t be evaluated", name);
4615 else
4616 warning (OPT_Wvla,
4617 "the size of array can %'t be evaluated");
4618 }
4619 else
4620 {
4621 if (name)
4622 warning (OPT_Wvla,
4623 "variable length array %qE is used",
4624 name);
4625 else
4626 warning (OPT_Wvla,
4627 "variable length array is used");
4628 }
4629 }
4630 }
4631
4632 /* Given a size SIZE that may not be a constant, return a SAVE_EXPR to
4633 serve as the actual size-expression for a type or decl. This is
4634 like variable_size in stor-layout.c, but we make global_bindings_p
4635 return negative to avoid calls to that function from outside the
4636 front end resulting in errors at file scope, then call this version
4637 instead from front-end code. */
4638
4639 static tree
4640 c_variable_size (tree size)
4641 {
4642 tree save;
4643
4644 if (TREE_CONSTANT (size))
4645 return size;
4646
4647 size = save_expr (size);
4648
4649 save = skip_simple_arithmetic (size);
4650
4651 if (cfun && cfun->dont_save_pending_sizes_p)
4652 return size;
4653
4654 if (!global_bindings_p ())
4655 put_pending_size (save);
4656
4657 return size;
4658 }
4659
4660 /* Given declspecs and a declarator,
4661 determine the name and type of the object declared
4662 and construct a ..._DECL node for it.
4663 (In one case we can return a ..._TYPE node instead.
4664 For invalid input we sometimes return 0.)
4665
4666 DECLSPECS is a c_declspecs structure for the declaration specifiers.
4667
4668 DECL_CONTEXT says which syntactic context this declaration is in:
4669 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
4670 FUNCDEF for a function definition. Like NORMAL but a few different
4671 error messages in each case. Return value may be zero meaning
4672 this definition is too screwy to try to parse.
4673 PARM for a parameter declaration (either within a function prototype
4674 or before a function body). Make a PARM_DECL, or return void_type_node.
4675 TYPENAME if for a typename (in a cast or sizeof).
4676 Don't make a DECL node; just return the ..._TYPE node.
4677 FIELD for a struct or union field; make a FIELD_DECL.
4678 INITIALIZED is true if the decl has an initializer.
4679 WIDTH is non-NULL for bit-fields, and is a pointer to an INTEGER_CST node
4680 representing the width of the bit-field.
4681 DECL_ATTRS points to the list of attributes that should be added to this
4682 decl. Any nested attributes that belong on the decl itself will be
4683 added to this list.
4684 If EXPR is not NULL, any expressions that need to be evaluated as
4685 part of evaluating variably modified types will be stored in *EXPR.
4686 If EXPR_CONST_OPERANDS is not NULL, *EXPR_CONST_OPERANDS will be
4687 set to indicate whether operands in *EXPR can be used in constant
4688 expressions.
4689 DEPRECATED_STATE is a deprecated_states value indicating whether
4690 deprecation warnings should be suppressed.
4691
4692 In the TYPENAME case, DECLARATOR is really an absolute declarator.
4693 It may also be so in the PARM case, for a prototype where the
4694 argument type is specified but not the name.
4695
4696 This function is where the complicated C meanings of `static'
4697 and `extern' are interpreted. */
4698
4699 static tree
4700 grokdeclarator (const struct c_declarator *declarator,
4701 struct c_declspecs *declspecs,
4702 enum decl_context decl_context, bool initialized, tree *width,
4703 tree *decl_attrs, tree *expr, bool *expr_const_operands,
4704 enum deprecated_states deprecated_state)
4705 {
4706 tree type = declspecs->type;
4707 bool threadp = declspecs->thread_p;
4708 enum c_storage_class storage_class = declspecs->storage_class;
4709 int constp;
4710 int restrictp;
4711 int volatilep;
4712 int type_quals = TYPE_UNQUALIFIED;
4713 tree name = NULL_TREE;
4714 bool funcdef_flag = false;
4715 bool funcdef_syntax = false;
4716 bool size_varies = false;
4717 tree decl_attr = declspecs->decl_attr;
4718 int array_ptr_quals = TYPE_UNQUALIFIED;
4719 tree array_ptr_attrs = NULL_TREE;
4720 int array_parm_static = 0;
4721 bool array_parm_vla_unspec_p = false;
4722 tree returned_attrs = NULL_TREE;
4723 bool bitfield = width != NULL;
4724 tree element_type;
4725 struct c_arg_info *arg_info = 0;
4726 location_t loc = UNKNOWN_LOCATION;
4727 const char *errmsg;
4728 tree expr_dummy;
4729 bool expr_const_operands_dummy;
4730
4731 if (expr == NULL)
4732 expr = &expr_dummy;
4733 if (expr_const_operands == NULL)
4734 expr_const_operands = &expr_const_operands_dummy;
4735
4736 *expr = declspecs->expr;
4737 *expr_const_operands = declspecs->expr_const_operands;
4738
4739 if (decl_context == FUNCDEF)
4740 funcdef_flag = true, decl_context = NORMAL;
4741
4742 /* Look inside a declarator for the name being declared
4743 and get it as an IDENTIFIER_NODE, for an error message. */
4744 {
4745 const struct c_declarator *decl = declarator;
4746
4747 while (decl)
4748 switch (decl->kind)
4749 {
4750 case cdk_array:
4751 loc = decl->id_loc;
4752 /* FALL THRU. */
4753
4754 case cdk_function:
4755 case cdk_pointer:
4756 funcdef_syntax = (decl->kind == cdk_function);
4757 decl = decl->declarator;
4758 break;
4759
4760 case cdk_attrs:
4761 decl = decl->declarator;
4762 break;
4763
4764 case cdk_id:
4765 loc = decl->id_loc;
4766 if (decl->u.id)
4767 name = decl->u.id;
4768 decl = 0;
4769 break;
4770
4771 default:
4772 gcc_unreachable ();
4773 }
4774 if (name == 0)
4775 {
4776 gcc_assert (decl_context == PARM
4777 || decl_context == TYPENAME
4778 || (decl_context == FIELD
4779 && declarator->kind == cdk_id));
4780 gcc_assert (!initialized);
4781 }
4782 }
4783
4784 /* A function definition's declarator must have the form of
4785 a function declarator. */
4786
4787 if (funcdef_flag && !funcdef_syntax)
4788 return 0;
4789
4790 /* If this looks like a function definition, make it one,
4791 even if it occurs where parms are expected.
4792 Then store_parm_decls will reject it and not use it as a parm. */
4793 if (decl_context == NORMAL && !funcdef_flag && current_scope->parm_flag)
4794 decl_context = PARM;
4795
4796 if (declspecs->deprecated_p && deprecated_state != DEPRECATED_SUPPRESS)
4797 warn_deprecated_use (declspecs->type, declspecs->decl_attr);
4798
4799 if ((decl_context == NORMAL || decl_context == FIELD)
4800 && current_scope == file_scope
4801 && variably_modified_type_p (type, NULL_TREE))
4802 {
4803 if (name)
4804 error_at (loc, "variably modified %qE at file scope", name);
4805 else
4806 error_at (loc, "variably modified field at file scope");
4807 type = integer_type_node;
4808 }
4809
4810 size_varies = C_TYPE_VARIABLE_SIZE (type) != 0;
4811
4812 /* Diagnose defaulting to "int". */
4813
4814 if (declspecs->default_int_p && !in_system_header)
4815 {
4816 /* Issue a warning if this is an ISO C 99 program or if
4817 -Wreturn-type and this is a function, or if -Wimplicit;
4818 prefer the former warning since it is more explicit. */
4819 if ((warn_implicit_int || warn_return_type || flag_isoc99)
4820 && funcdef_flag)
4821 warn_about_return_type = 1;
4822 else
4823 {
4824 if (name)
4825 pedwarn_c99 (loc, flag_isoc99 ? 0 : OPT_Wimplicit_int,
4826 "type defaults to %<int%> in declaration of %qE",
4827 name);
4828 else
4829 pedwarn_c99 (input_location, flag_isoc99 ? 0 : OPT_Wimplicit_int,
4830 "type defaults to %<int%> in type name");
4831 }
4832 }
4833
4834 /* Adjust the type if a bit-field is being declared,
4835 -funsigned-bitfields applied and the type is not explicitly
4836 "signed". */
4837 if (bitfield && !flag_signed_bitfields && !declspecs->explicit_signed_p
4838 && TREE_CODE (type) == INTEGER_TYPE)
4839 type = unsigned_type_for (type);
4840
4841 /* Figure out the type qualifiers for the declaration. There are
4842 two ways a declaration can become qualified. One is something
4843 like `const int i' where the `const' is explicit. Another is
4844 something like `typedef const int CI; CI i' where the type of the
4845 declaration contains the `const'. A third possibility is that
4846 there is a type qualifier on the element type of a typedefed
4847 array type, in which case we should extract that qualifier so
4848 that c_apply_type_quals_to_decl receives the full list of
4849 qualifiers to work with (C90 is not entirely clear about whether
4850 duplicate qualifiers should be diagnosed in this case, but it
4851 seems most appropriate to do so). */
4852 element_type = strip_array_types (type);
4853 constp = declspecs->const_p + TYPE_READONLY (element_type);
4854 restrictp = declspecs->restrict_p + TYPE_RESTRICT (element_type);
4855 volatilep = declspecs->volatile_p + TYPE_VOLATILE (element_type);
4856 if (pedantic && !flag_isoc99)
4857 {
4858 if (constp > 1)
4859 pedwarn (loc, OPT_pedantic, "duplicate %<const%>");
4860 if (restrictp > 1)
4861 pedwarn (loc, OPT_pedantic, "duplicate %<restrict%>");
4862 if (volatilep > 1)
4863 pedwarn (loc, OPT_pedantic, "duplicate %<volatile%>");
4864 }
4865 if (!flag_gen_aux_info && (TYPE_QUALS (element_type)))
4866 type = TYPE_MAIN_VARIANT (type);
4867 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
4868 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
4869 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
4870
4871 /* Warn about storage classes that are invalid for certain
4872 kinds of declarations (parameters, typenames, etc.). */
4873
4874 if (funcdef_flag
4875 && (threadp
4876 || storage_class == csc_auto
4877 || storage_class == csc_register
4878 || storage_class == csc_typedef))
4879 {
4880 if (storage_class == csc_auto)
4881 pedwarn (loc,
4882 (current_scope == file_scope) ? 0 : OPT_pedantic,
4883 "function definition declared %<auto%>");
4884 if (storage_class == csc_register)
4885 error_at (loc, "function definition declared %<register%>");
4886 if (storage_class == csc_typedef)
4887 error_at (loc, "function definition declared %<typedef%>");
4888 if (threadp)
4889 error_at (loc, "function definition declared %<__thread%>");
4890 threadp = false;
4891 if (storage_class == csc_auto
4892 || storage_class == csc_register
4893 || storage_class == csc_typedef)
4894 storage_class = csc_none;
4895 }
4896 else if (decl_context != NORMAL && (storage_class != csc_none || threadp))
4897 {
4898 if (decl_context == PARM && storage_class == csc_register)
4899 ;
4900 else
4901 {
4902 switch (decl_context)
4903 {
4904 case FIELD:
4905 if (name)
4906 error_at (loc, "storage class specified for structure "
4907 "field %qE", name);
4908 else
4909 error_at (loc, "storage class specified for structure field");
4910 break;
4911 case PARM:
4912 if (name)
4913 error_at (loc, "storage class specified for parameter %qE",
4914 name);
4915 else
4916 error_at (loc, "storage class specified for unnamed parameter");
4917 break;
4918 default:
4919 error_at (loc, "storage class specified for typename");
4920 break;
4921 }
4922 storage_class = csc_none;
4923 threadp = false;
4924 }
4925 }
4926 else if (storage_class == csc_extern
4927 && initialized
4928 && !funcdef_flag)
4929 {
4930 /* 'extern' with initialization is invalid if not at file scope. */
4931 if (current_scope == file_scope)
4932 {
4933 /* It is fine to have 'extern const' when compiling at C
4934 and C++ intersection. */
4935 if (!(warn_cxx_compat && constp))
4936 warning_at (loc, 0, "%qE initialized and declared %<extern%>",
4937 name);
4938 }
4939 else
4940 error_at (loc, "%qE has both %<extern%> and initializer", name);
4941 }
4942 else if (current_scope == file_scope)
4943 {
4944 if (storage_class == csc_auto)
4945 error_at (loc, "file-scope declaration of %qE specifies %<auto%>",
4946 name);
4947 if (pedantic && storage_class == csc_register)
4948 pedwarn (input_location, OPT_pedantic,
4949 "file-scope declaration of %qE specifies %<register%>", name);
4950 }
4951 else
4952 {
4953 if (storage_class == csc_extern && funcdef_flag)
4954 error_at (loc, "nested function %qE declared %<extern%>", name);
4955 else if (threadp && storage_class == csc_none)
4956 {
4957 error_at (loc, "function-scope %qE implicitly auto and declared "
4958 "%<__thread%>",
4959 name);
4960 threadp = false;
4961 }
4962 }
4963
4964 /* Now figure out the structure of the declarator proper.
4965 Descend through it, creating more complex types, until we reach
4966 the declared identifier (or NULL_TREE, in an absolute declarator).
4967 At each stage we maintain an unqualified version of the type
4968 together with any qualifiers that should be applied to it with
4969 c_build_qualified_type; this way, array types including
4970 multidimensional array types are first built up in unqualified
4971 form and then the qualified form is created with
4972 TYPE_MAIN_VARIANT pointing to the unqualified form. */
4973
4974 while (declarator && declarator->kind != cdk_id)
4975 {
4976 if (type == error_mark_node)
4977 {
4978 declarator = declarator->declarator;
4979 continue;
4980 }
4981
4982 /* Each level of DECLARATOR is either a cdk_array (for ...[..]),
4983 a cdk_pointer (for *...),
4984 a cdk_function (for ...(...)),
4985 a cdk_attrs (for nested attributes),
4986 or a cdk_id (for the name being declared
4987 or the place in an absolute declarator
4988 where the name was omitted).
4989 For the last case, we have just exited the loop.
4990
4991 At this point, TYPE is the type of elements of an array,
4992 or for a function to return, or for a pointer to point to.
4993 After this sequence of ifs, TYPE is the type of the
4994 array or function or pointer, and DECLARATOR has had its
4995 outermost layer removed. */
4996
4997 if (array_ptr_quals != TYPE_UNQUALIFIED
4998 || array_ptr_attrs != NULL_TREE
4999 || array_parm_static)
5000 {
5001 /* Only the innermost declarator (making a parameter be of
5002 array type which is converted to pointer type)
5003 may have static or type qualifiers. */
5004 error_at (loc, "static or type qualifiers in non-parameter array declarator");
5005 array_ptr_quals = TYPE_UNQUALIFIED;
5006 array_ptr_attrs = NULL_TREE;
5007 array_parm_static = 0;
5008 }
5009
5010 switch (declarator->kind)
5011 {
5012 case cdk_attrs:
5013 {
5014 /* A declarator with embedded attributes. */
5015 tree attrs = declarator->u.attrs;
5016 const struct c_declarator *inner_decl;
5017 int attr_flags = 0;
5018 declarator = declarator->declarator;
5019 inner_decl = declarator;
5020 while (inner_decl->kind == cdk_attrs)
5021 inner_decl = inner_decl->declarator;
5022 if (inner_decl->kind == cdk_id)
5023 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
5024 else if (inner_decl->kind == cdk_function)
5025 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
5026 else if (inner_decl->kind == cdk_array)
5027 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
5028 returned_attrs = decl_attributes (&type,
5029 chainon (returned_attrs, attrs),
5030 attr_flags);
5031 break;
5032 }
5033 case cdk_array:
5034 {
5035 tree itype = NULL_TREE;
5036 tree size = declarator->u.array.dimen;
5037 /* The index is a signed object `sizetype' bits wide. */
5038 tree index_type = c_common_signed_type (sizetype);
5039
5040 array_ptr_quals = declarator->u.array.quals;
5041 array_ptr_attrs = declarator->u.array.attrs;
5042 array_parm_static = declarator->u.array.static_p;
5043 array_parm_vla_unspec_p = declarator->u.array.vla_unspec_p;
5044
5045 declarator = declarator->declarator;
5046
5047 /* Check for some types that there cannot be arrays of. */
5048
5049 if (VOID_TYPE_P (type))
5050 {
5051 if (name)
5052 error_at (loc, "declaration of %qE as array of voids", name);
5053 else
5054 error_at (loc, "declaration of type name as array of voids");
5055 type = error_mark_node;
5056 }
5057
5058 if (TREE_CODE (type) == FUNCTION_TYPE)
5059 {
5060 if (name)
5061 error_at (loc, "declaration of %qE as array of functions",
5062 name);
5063 else
5064 error_at (loc, "declaration of type name as array of "
5065 "functions");
5066 type = error_mark_node;
5067 }
5068
5069 if (pedantic && !in_system_header && flexible_array_type_p (type))
5070 pedwarn (loc, OPT_pedantic,
5071 "invalid use of structure with flexible array member");
5072
5073 if (size == error_mark_node)
5074 type = error_mark_node;
5075
5076 if (type == error_mark_node)
5077 continue;
5078
5079 /* If size was specified, set ITYPE to a range-type for
5080 that size. Otherwise, ITYPE remains null. finish_decl
5081 may figure it out from an initial value. */
5082
5083 if (size)
5084 {
5085 bool size_maybe_const = true;
5086 bool size_int_const = (TREE_CODE (size) == INTEGER_CST
5087 && !TREE_OVERFLOW (size));
5088 bool this_size_varies = false;
5089
5090 /* Strip NON_LVALUE_EXPRs since we aren't using as an
5091 lvalue. */
5092 STRIP_TYPE_NOPS (size);
5093
5094 if (!INTEGRAL_TYPE_P (TREE_TYPE (size)))
5095 {
5096 if (name)
5097 error_at (loc, "size of array %qE has non-integer type",
5098 name);
5099 else
5100 error_at (loc,
5101 "size of unnamed array has non-integer type");
5102 size = integer_one_node;
5103 }
5104
5105 size = c_fully_fold (size, false, &size_maybe_const);
5106
5107 if (pedantic && size_maybe_const && integer_zerop (size))
5108 {
5109 if (name)
5110 pedwarn (loc, OPT_pedantic,
5111 "ISO C forbids zero-size array %qE", name);
5112 else
5113 pedwarn (loc, OPT_pedantic,
5114 "ISO C forbids zero-size array");
5115 }
5116
5117 if (TREE_CODE (size) == INTEGER_CST && size_maybe_const)
5118 {
5119 constant_expression_warning (size);
5120 if (tree_int_cst_sgn (size) < 0)
5121 {
5122 if (name)
5123 error_at (loc, "size of array %qE is negative", name);
5124 else
5125 error_at (loc, "size of unnamed array is negative");
5126 size = integer_one_node;
5127 }
5128 /* Handle a size folded to an integer constant but
5129 not an integer constant expression. */
5130 if (!size_int_const)
5131 {
5132 /* If this is a file scope declaration of an
5133 ordinary identifier, this is invalid code;
5134 diagnosing it here and not subsequently
5135 treating the type as variable-length avoids
5136 more confusing diagnostics later. */
5137 if ((decl_context == NORMAL || decl_context == FIELD)
5138 && current_scope == file_scope)
5139 pedwarn (input_location, 0,
5140 "variably modified %qE at file scope",
5141 name);
5142 else
5143 this_size_varies = size_varies = true;
5144 warn_variable_length_array (name, size);
5145 }
5146 }
5147 else if ((decl_context == NORMAL || decl_context == FIELD)
5148 && current_scope == file_scope)
5149 {
5150 error_at (loc, "variably modified %qE at file scope", name);
5151 size = integer_one_node;
5152 }
5153 else
5154 {
5155 /* Make sure the array size remains visibly
5156 nonconstant even if it is (eg) a const variable
5157 with known value. */
5158 this_size_varies = size_varies = true;
5159 warn_variable_length_array (name, size);
5160 }
5161
5162 if (integer_zerop (size) && !this_size_varies)
5163 {
5164 /* A zero-length array cannot be represented with
5165 an unsigned index type, which is what we'll
5166 get with build_index_type. Create an
5167 open-ended range instead. */
5168 itype = build_range_type (sizetype, size, NULL_TREE);
5169 }
5170 else
5171 {
5172 /* Arrange for the SAVE_EXPR on the inside of the
5173 MINUS_EXPR, which allows the -1 to get folded
5174 with the +1 that happens when building TYPE_SIZE. */
5175 if (size_varies)
5176 size = c_variable_size (size);
5177 if (this_size_varies && TREE_CODE (size) == INTEGER_CST)
5178 size = build2 (COMPOUND_EXPR, TREE_TYPE (size),
5179 integer_zero_node, size);
5180
5181 /* Compute the maximum valid index, that is, size
5182 - 1. Do the calculation in index_type, so that
5183 if it is a variable the computations will be
5184 done in the proper mode. */
5185 itype = fold_build2 (MINUS_EXPR, index_type,
5186 convert (index_type, size),
5187 convert (index_type,
5188 size_one_node));
5189
5190 /* If that overflowed, the array is too big. ???
5191 While a size of INT_MAX+1 technically shouldn't
5192 cause an overflow (because we subtract 1), the
5193 overflow is recorded during the conversion to
5194 index_type, before the subtraction. Handling
5195 this case seems like an unnecessary
5196 complication. */
5197 if (TREE_CODE (itype) == INTEGER_CST
5198 && TREE_OVERFLOW (itype))
5199 {
5200 if (name)
5201 error_at (loc, "size of array %qE is too large",
5202 name);
5203 else
5204 error_at (loc, "size of unnamed array is too large");
5205 type = error_mark_node;
5206 continue;
5207 }
5208
5209 itype = build_index_type (itype);
5210 }
5211 if (this_size_varies)
5212 {
5213 if (*expr)
5214 *expr = build2 (COMPOUND_EXPR, TREE_TYPE (size),
5215 *expr, size);
5216 else
5217 *expr = size;
5218 *expr_const_operands &= size_maybe_const;
5219 }
5220 }
5221 else if (decl_context == FIELD)
5222 {
5223 bool flexible_array_member = false;
5224 if (array_parm_vla_unspec_p)
5225 /* Field names can in fact have function prototype
5226 scope so [*] is disallowed here through making
5227 the field variably modified, not through being
5228 something other than a declaration with function
5229 prototype scope. */
5230 size_varies = true;
5231 else
5232 {
5233 const struct c_declarator *t = declarator;
5234 while (t->kind == cdk_attrs)
5235 t = t->declarator;
5236 flexible_array_member = (t->kind == cdk_id);
5237 }
5238 if (flexible_array_member
5239 && pedantic && !flag_isoc99 && !in_system_header)
5240 pedwarn (loc, OPT_pedantic,
5241 "ISO C90 does not support flexible array members");
5242
5243 /* ISO C99 Flexible array members are effectively
5244 identical to GCC's zero-length array extension. */
5245 if (flexible_array_member || array_parm_vla_unspec_p)
5246 itype = build_range_type (sizetype, size_zero_node,
5247 NULL_TREE);
5248 }
5249 else if (decl_context == PARM)
5250 {
5251 if (array_parm_vla_unspec_p)
5252 {
5253 itype = build_range_type (sizetype, size_zero_node, NULL_TREE);
5254 size_varies = true;
5255 }
5256 }
5257 else if (decl_context == TYPENAME)
5258 {
5259 if (array_parm_vla_unspec_p)
5260 {
5261 /* C99 6.7.5.2p4 */
5262 warning (0, "%<[*]%> not in a declaration");
5263 /* We use this to avoid messing up with incomplete
5264 array types of the same type, that would
5265 otherwise be modified below. */
5266 itype = build_range_type (sizetype, size_zero_node,
5267 NULL_TREE);
5268 size_varies = true;
5269 }
5270 }
5271
5272 /* Complain about arrays of incomplete types. */
5273 if (!COMPLETE_TYPE_P (type))
5274 {
5275 error_at (loc, "array type has incomplete element type");
5276 type = error_mark_node;
5277 }
5278 else
5279 /* When itype is NULL, a shared incomplete array type is
5280 returned for all array of a given type. Elsewhere we
5281 make sure we don't complete that type before copying
5282 it, but here we want to make sure we don't ever
5283 modify the shared type, so we gcc_assert (itype)
5284 below. */
5285 type = build_array_type (type, itype);
5286
5287 if (type != error_mark_node)
5288 {
5289 if (size_varies)
5290 {
5291 /* It is ok to modify type here even if itype is
5292 NULL: if size_varies, we're in a
5293 multi-dimensional array and the inner type has
5294 variable size, so the enclosing shared array type
5295 must too. */
5296 if (size && TREE_CODE (size) == INTEGER_CST)
5297 type
5298 = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
5299 C_TYPE_VARIABLE_SIZE (type) = 1;
5300 }
5301
5302 /* The GCC extension for zero-length arrays differs from
5303 ISO flexible array members in that sizeof yields
5304 zero. */
5305 if (size && integer_zerop (size))
5306 {
5307 gcc_assert (itype);
5308 TYPE_SIZE (type) = bitsize_zero_node;
5309 TYPE_SIZE_UNIT (type) = size_zero_node;
5310 }
5311 if (array_parm_vla_unspec_p)
5312 {
5313 gcc_assert (itype);
5314 /* The type is complete. C99 6.7.5.2p4 */
5315 TYPE_SIZE (type) = bitsize_zero_node;
5316 TYPE_SIZE_UNIT (type) = size_zero_node;
5317 }
5318 }
5319
5320 if (decl_context != PARM
5321 && (array_ptr_quals != TYPE_UNQUALIFIED
5322 || array_ptr_attrs != NULL_TREE
5323 || array_parm_static))
5324 {
5325 error_at (loc, "static or type qualifiers in non-parameter array declarator");
5326 array_ptr_quals = TYPE_UNQUALIFIED;
5327 array_ptr_attrs = NULL_TREE;
5328 array_parm_static = 0;
5329 }
5330 break;
5331 }
5332 case cdk_function:
5333 {
5334 /* Say it's a definition only for the declarator closest
5335 to the identifier, apart possibly from some
5336 attributes. */
5337 bool really_funcdef = false;
5338 tree arg_types;
5339 if (funcdef_flag)
5340 {
5341 const struct c_declarator *t = declarator->declarator;
5342 while (t->kind == cdk_attrs)
5343 t = t->declarator;
5344 really_funcdef = (t->kind == cdk_id);
5345 }
5346
5347 /* Declaring a function type. Make sure we have a valid
5348 type for the function to return. */
5349 if (type == error_mark_node)
5350 continue;
5351
5352 size_varies = false;
5353
5354 /* Warn about some types functions can't return. */
5355 if (TREE_CODE (type) == FUNCTION_TYPE)
5356 {
5357 if (name)
5358 error_at (loc, "%qE declared as function returning a "
5359 "function", name);
5360 else
5361 error_at (loc, "type name declared as function "
5362 "returning a function");
5363 type = integer_type_node;
5364 }
5365 if (TREE_CODE (type) == ARRAY_TYPE)
5366 {
5367 if (name)
5368 error_at (loc, "%qE declared as function returning an array",
5369 name);
5370 else
5371 error_at (loc, "type name declared as function returning "
5372 "an array");
5373 type = integer_type_node;
5374 }
5375 errmsg = targetm.invalid_return_type (type);
5376 if (errmsg)
5377 {
5378 error (errmsg);
5379 type = integer_type_node;
5380 }
5381
5382 /* Construct the function type and go to the next
5383 inner layer of declarator. */
5384 arg_info = declarator->u.arg_info;
5385 arg_types = grokparms (arg_info, really_funcdef);
5386 if (really_funcdef)
5387 put_pending_sizes (arg_info->pending_sizes);
5388
5389 /* Type qualifiers before the return type of the function
5390 qualify the return type, not the function type. */
5391 if (type_quals)
5392 {
5393 /* Type qualifiers on a function return type are
5394 normally permitted by the standard but have no
5395 effect, so give a warning at -Wreturn-type.
5396 Qualifiers on a void return type are banned on
5397 function definitions in ISO C; GCC used to used
5398 them for noreturn functions. */
5399 if (VOID_TYPE_P (type) && really_funcdef)
5400 pedwarn (loc, 0,
5401 "function definition has qualified void return type");
5402 else
5403 warning_at (loc, OPT_Wignored_qualifiers,
5404 "type qualifiers ignored on function return type");
5405
5406 type = c_build_qualified_type (type, type_quals);
5407 }
5408 type_quals = TYPE_UNQUALIFIED;
5409
5410 type = build_function_type (type, arg_types);
5411 declarator = declarator->declarator;
5412
5413 /* Set the TYPE_CONTEXTs for each tagged type which is local to
5414 the formal parameter list of this FUNCTION_TYPE to point to
5415 the FUNCTION_TYPE node itself. */
5416 {
5417 tree link;
5418
5419 for (link = arg_info->tags;
5420 link;
5421 link = TREE_CHAIN (link))
5422 TYPE_CONTEXT (TREE_VALUE (link)) = type;
5423 }
5424 break;
5425 }
5426 case cdk_pointer:
5427 {
5428 /* Merge any constancy or volatility into the target type
5429 for the pointer. */
5430
5431 if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
5432 && type_quals)
5433 pedwarn (loc, OPT_pedantic,
5434 "ISO C forbids qualified function types");
5435 if (type_quals)
5436 type = c_build_qualified_type (type, type_quals);
5437 size_varies = false;
5438
5439 /* When the pointed-to type involves components of variable size,
5440 care must be taken to ensure that the size evaluation code is
5441 emitted early enough to dominate all the possible later uses
5442 and late enough for the variables on which it depends to have
5443 been assigned.
5444
5445 This is expected to happen automatically when the pointed-to
5446 type has a name/declaration of it's own, but special attention
5447 is required if the type is anonymous.
5448
5449 We handle the NORMAL and FIELD contexts here by attaching an
5450 artificial TYPE_DECL to such pointed-to type. This forces the
5451 sizes evaluation at a safe point and ensures it is not deferred
5452 until e.g. within a deeper conditional context.
5453
5454 We expect nothing to be needed here for PARM or TYPENAME.
5455 Pushing a TYPE_DECL at this point for TYPENAME would actually
5456 be incorrect, as we might be in the middle of an expression
5457 with side effects on the pointed-to type size "arguments" prior
5458 to the pointer declaration point and the fake TYPE_DECL in the
5459 enclosing context would force the size evaluation prior to the
5460 side effects. */
5461
5462 if (!TYPE_NAME (type)
5463 && (decl_context == NORMAL || decl_context == FIELD)
5464 && variably_modified_type_p (type, NULL_TREE))
5465 {
5466 tree decl = build_decl (loc, TYPE_DECL, NULL_TREE, type);
5467 DECL_ARTIFICIAL (decl) = 1;
5468 pushdecl (decl);
5469 finish_decl (decl, loc, NULL_TREE, NULL_TREE, NULL_TREE);
5470 TYPE_NAME (type) = decl;
5471 }
5472
5473 type = build_pointer_type (type);
5474
5475 /* Process type qualifiers (such as const or volatile)
5476 that were given inside the `*'. */
5477 type_quals = declarator->u.pointer_quals;
5478
5479 declarator = declarator->declarator;
5480 break;
5481 }
5482 default:
5483 gcc_unreachable ();
5484 }
5485 }
5486 *decl_attrs = chainon (returned_attrs, *decl_attrs);
5487
5488 /* Now TYPE has the actual type, apart from any qualifiers in
5489 TYPE_QUALS. */
5490
5491 /* Check the type and width of a bit-field. */
5492 if (bitfield)
5493 check_bitfield_type_and_width (&type, width, name);
5494
5495 /* Did array size calculations overflow? */
5496
5497 if (TREE_CODE (type) == ARRAY_TYPE
5498 && COMPLETE_TYPE_P (type)
5499 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
5500 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
5501 {
5502 if (name)
5503 error_at (loc, "size of array %qE is too large", name);
5504 else
5505 error_at (loc, "size of unnamed array is too large");
5506 /* If we proceed with the array type as it is, we'll eventually
5507 crash in tree_low_cst(). */
5508 type = error_mark_node;
5509 }
5510
5511 /* If this is declaring a typedef name, return a TYPE_DECL. */
5512
5513 if (storage_class == csc_typedef)
5514 {
5515 tree decl;
5516 if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
5517 && type_quals)
5518 pedwarn (loc, OPT_pedantic,
5519 "ISO C forbids qualified function types");
5520 if (type_quals)
5521 type = c_build_qualified_type (type, type_quals);
5522 decl = build_decl (declarator->id_loc,
5523 TYPE_DECL, declarator->u.id, type);
5524 if (declspecs->explicit_signed_p)
5525 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
5526 if (declspecs->inline_p)
5527 pedwarn (loc, 0,"typedef %q+D declared %<inline%>", decl);
5528
5529 if (warn_cxx_compat && declarator->u.id != NULL_TREE)
5530 {
5531 struct c_binding *b = I_TAG_BINDING (declarator->u.id);
5532
5533 if (b != NULL
5534 && b->decl != NULL_TREE
5535 && (B_IN_CURRENT_SCOPE (b)
5536 || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
5537 && TYPE_MAIN_VARIANT (b->decl) != TYPE_MAIN_VARIANT (type))
5538 {
5539 warning_at (declarator->id_loc, OPT_Wc___compat,
5540 ("using %qD as both a typedef and a tag is "
5541 "invalid in C++"),
5542 decl);
5543 if (b->locus != UNKNOWN_LOCATION)
5544 inform (b->locus, "originally defined here");
5545 }
5546 }
5547
5548 return decl;
5549 }
5550
5551 /* If this is a type name (such as, in a cast or sizeof),
5552 compute the type and return it now. */
5553
5554 if (decl_context == TYPENAME)
5555 {
5556 /* Note that the grammar rejects storage classes in typenames
5557 and fields. */
5558 gcc_assert (storage_class == csc_none && !threadp
5559 && !declspecs->inline_p);
5560 if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
5561 && type_quals)
5562 pedwarn (loc, OPT_pedantic,
5563 "ISO C forbids const or volatile function types");
5564 if (type_quals)
5565 type = c_build_qualified_type (type, type_quals);
5566 return type;
5567 }
5568
5569 if (pedantic && decl_context == FIELD
5570 && variably_modified_type_p (type, NULL_TREE))
5571 {
5572 /* C99 6.7.2.1p8 */
5573 pedwarn (loc, OPT_pedantic, "a member of a structure or union cannot "
5574 "have a variably modified type");
5575 }
5576
5577 /* Aside from typedefs and type names (handle above),
5578 `void' at top level (not within pointer)
5579 is allowed only in public variables.
5580 We don't complain about parms either, but that is because
5581 a better error message can be made later. */
5582
5583 if (VOID_TYPE_P (type) && decl_context != PARM
5584 && !((decl_context != FIELD && TREE_CODE (type) != FUNCTION_TYPE)
5585 && (storage_class == csc_extern
5586 || (current_scope == file_scope
5587 && !(storage_class == csc_static
5588 || storage_class == csc_register)))))
5589 {
5590 error_at (loc, "variable or field %qE declared void", name);
5591 type = integer_type_node;
5592 }
5593
5594 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
5595 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
5596
5597 {
5598 tree decl;
5599
5600 if (decl_context == PARM)
5601 {
5602 tree promoted_type;
5603
5604 /* A parameter declared as an array of T is really a pointer to T.
5605 One declared as a function is really a pointer to a function. */
5606
5607 if (TREE_CODE (type) == ARRAY_TYPE)
5608 {
5609 /* Transfer const-ness of array into that of type pointed to. */
5610 type = TREE_TYPE (type);
5611 if (type_quals)
5612 type = c_build_qualified_type (type, type_quals);
5613 type = build_pointer_type (type);
5614 type_quals = array_ptr_quals;
5615 if (type_quals)
5616 type = c_build_qualified_type (type, type_quals);
5617
5618 /* We don't yet implement attributes in this context. */
5619 if (array_ptr_attrs != NULL_TREE)
5620 warning_at (loc, OPT_Wattributes,
5621 "attributes in parameter array declarator ignored");
5622
5623 size_varies = false;
5624 }
5625 else if (TREE_CODE (type) == FUNCTION_TYPE)
5626 {
5627 if (type_quals)
5628 pedwarn (loc, OPT_pedantic,
5629 "ISO C forbids qualified function types");
5630 if (type_quals)
5631 type = c_build_qualified_type (type, type_quals);
5632 type = build_pointer_type (type);
5633 type_quals = TYPE_UNQUALIFIED;
5634 }
5635 else if (type_quals)
5636 type = c_build_qualified_type (type, type_quals);
5637
5638 decl = build_decl (declarator->id_loc,
5639 PARM_DECL, declarator->u.id, type);
5640 if (size_varies)
5641 C_DECL_VARIABLE_SIZE (decl) = 1;
5642
5643 /* Compute the type actually passed in the parmlist,
5644 for the case where there is no prototype.
5645 (For example, shorts and chars are passed as ints.)
5646 When there is a prototype, this is overridden later. */
5647
5648 if (type == error_mark_node)
5649 promoted_type = type;
5650 else
5651 promoted_type = c_type_promotes_to (type);
5652
5653 DECL_ARG_TYPE (decl) = promoted_type;
5654 if (declspecs->inline_p)
5655 pedwarn (loc, 0, "parameter %q+D declared %<inline%>", decl);
5656 }
5657 else if (decl_context == FIELD)
5658 {
5659 /* Note that the grammar rejects storage classes in typenames
5660 and fields. */
5661 gcc_assert (storage_class == csc_none && !threadp
5662 && !declspecs->inline_p);
5663
5664 /* Structure field. It may not be a function. */
5665
5666 if (TREE_CODE (type) == FUNCTION_TYPE)
5667 {
5668 error_at (loc, "field %qE declared as a function", name);
5669 type = build_pointer_type (type);
5670 }
5671 else if (TREE_CODE (type) != ERROR_MARK
5672 && !COMPLETE_OR_UNBOUND_ARRAY_TYPE_P (type))
5673 {
5674 if (name)
5675 error_at (loc, "field %qE has incomplete type", name);
5676 else
5677 error_at (loc, "unnamed field has incomplete type");
5678 type = error_mark_node;
5679 }
5680 type = c_build_qualified_type (type, type_quals);
5681 decl = build_decl (declarator->id_loc,
5682 FIELD_DECL, declarator->u.id, type);
5683 DECL_NONADDRESSABLE_P (decl) = bitfield;
5684 if (bitfield && !declarator->u.id)
5685 TREE_NO_WARNING (decl) = 1;
5686
5687 if (size_varies)
5688 C_DECL_VARIABLE_SIZE (decl) = 1;
5689 }
5690 else if (TREE_CODE (type) == FUNCTION_TYPE)
5691 {
5692 if (storage_class == csc_register || threadp)
5693 {
5694 error_at (loc, "invalid storage class for function %qE", name);
5695 }
5696 else if (current_scope != file_scope)
5697 {
5698 /* Function declaration not at file scope. Storage
5699 classes other than `extern' are not allowed, C99
5700 6.7.1p5, and `extern' makes no difference. However,
5701 GCC allows 'auto', perhaps with 'inline', to support
5702 nested functions. */
5703 if (storage_class == csc_auto)
5704 pedwarn (loc, OPT_pedantic,
5705 "invalid storage class for function %qE", name);
5706 else if (storage_class == csc_static)
5707 {
5708 error_at (loc, "invalid storage class for function %qE", name);
5709 if (funcdef_flag)
5710 storage_class = declspecs->storage_class = csc_none;
5711 else
5712 return 0;
5713 }
5714 }
5715
5716 decl = build_decl (declarator->id_loc,
5717 FUNCTION_DECL, declarator->u.id, type);
5718 decl = build_decl_attribute_variant (decl, decl_attr);
5719
5720 if (pedantic && type_quals && !DECL_IN_SYSTEM_HEADER (decl))
5721 pedwarn (loc, OPT_pedantic,
5722 "ISO C forbids qualified function types");
5723
5724 /* GNU C interprets a volatile-qualified function type to indicate
5725 that the function does not return. */
5726 if ((type_quals & TYPE_QUAL_VOLATILE)
5727 && !VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
5728 warning_at (loc, 0, "%<noreturn%> function returns non-void value");
5729
5730 /* Every function declaration is an external reference
5731 (DECL_EXTERNAL) except for those which are not at file
5732 scope and are explicitly declared "auto". This is
5733 forbidden by standard C (C99 6.7.1p5) and is interpreted by
5734 GCC to signify a forward declaration of a nested function. */
5735 if (storage_class == csc_auto && current_scope != file_scope)
5736 DECL_EXTERNAL (decl) = 0;
5737 /* In C99, a function which is declared 'inline' with 'extern'
5738 is not an external reference (which is confusing). It
5739 means that the later definition of the function must be output
5740 in this file, C99 6.7.4p6. In GNU C89, a function declared
5741 'extern inline' is an external reference. */
5742 else if (declspecs->inline_p && storage_class != csc_static)
5743 DECL_EXTERNAL (decl) = ((storage_class == csc_extern)
5744 == flag_gnu89_inline);
5745 else
5746 DECL_EXTERNAL (decl) = !initialized;
5747
5748 /* Record absence of global scope for `static' or `auto'. */
5749 TREE_PUBLIC (decl)
5750 = !(storage_class == csc_static || storage_class == csc_auto);
5751
5752 /* For a function definition, record the argument information
5753 block where store_parm_decls will look for it. */
5754 if (funcdef_flag)
5755 current_function_arg_info = arg_info;
5756
5757 if (declspecs->default_int_p)
5758 C_FUNCTION_IMPLICIT_INT (decl) = 1;
5759
5760 /* Record presence of `inline', if it is reasonable. */
5761 if (flag_hosted && MAIN_NAME_P (declarator->u.id))
5762 {
5763 if (declspecs->inline_p)
5764 pedwarn (loc, 0, "cannot inline function %<main%>");
5765 }
5766 else if (declspecs->inline_p)
5767 /* Record that the function is declared `inline'. */
5768 DECL_DECLARED_INLINE_P (decl) = 1;
5769 }
5770 else
5771 {
5772 /* It's a variable. */
5773 /* An uninitialized decl with `extern' is a reference. */
5774 int extern_ref = !initialized && storage_class == csc_extern;
5775
5776 type = c_build_qualified_type (type, type_quals);
5777
5778 /* C99 6.2.2p7: It is invalid (compile-time undefined
5779 behavior) to create an 'extern' declaration for a
5780 variable if there is a global declaration that is
5781 'static' and the global declaration is not visible.
5782 (If the static declaration _is_ currently visible,
5783 the 'extern' declaration is taken to refer to that decl.) */
5784 if (extern_ref && current_scope != file_scope)
5785 {
5786 tree global_decl = identifier_global_value (declarator->u.id);
5787 tree visible_decl = lookup_name (declarator->u.id);
5788
5789 if (global_decl
5790 && global_decl != visible_decl
5791 && TREE_CODE (global_decl) == VAR_DECL
5792 && !TREE_PUBLIC (global_decl))
5793 error_at (loc, "variable previously declared %<static%> "
5794 "redeclared %<extern%>");
5795 }
5796
5797 decl = build_decl (declarator->id_loc,
5798 VAR_DECL, declarator->u.id, type);
5799 if (size_varies)
5800 C_DECL_VARIABLE_SIZE (decl) = 1;
5801
5802 if (declspecs->inline_p)
5803 pedwarn (loc, 0, "variable %q+D declared %<inline%>", decl);
5804
5805 /* At file scope, an initialized extern declaration may follow
5806 a static declaration. In that case, DECL_EXTERNAL will be
5807 reset later in start_decl. */
5808 DECL_EXTERNAL (decl) = (storage_class == csc_extern);
5809
5810 /* At file scope, the presence of a `static' or `register' storage
5811 class specifier, or the absence of all storage class specifiers
5812 makes this declaration a definition (perhaps tentative). Also,
5813 the absence of `static' makes it public. */
5814 if (current_scope == file_scope)
5815 {
5816 TREE_PUBLIC (decl) = storage_class != csc_static;
5817 TREE_STATIC (decl) = !extern_ref;
5818 }
5819 /* Not at file scope, only `static' makes a static definition. */
5820 else
5821 {
5822 TREE_STATIC (decl) = (storage_class == csc_static);
5823 TREE_PUBLIC (decl) = extern_ref;
5824 }
5825
5826 if (threadp)
5827 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
5828 }
5829
5830 if ((storage_class == csc_extern
5831 || (storage_class == csc_none
5832 && TREE_CODE (type) == FUNCTION_TYPE
5833 && !funcdef_flag))
5834 && variably_modified_type_p (type, NULL_TREE))
5835 {
5836 /* C99 6.7.5.2p2 */
5837 if (TREE_CODE (type) == FUNCTION_TYPE)
5838 error_at (loc, "non-nested function with variably modified type");
5839 else
5840 error_at (loc, "object with variably modified type must have "
5841 "no linkage");
5842 }
5843
5844 /* Record `register' declaration for warnings on &
5845 and in case doing stupid register allocation. */
5846
5847 if (storage_class == csc_register)
5848 {
5849 C_DECL_REGISTER (decl) = 1;
5850 DECL_REGISTER (decl) = 1;
5851 }
5852
5853 /* Record constancy and volatility. */
5854 c_apply_type_quals_to_decl (type_quals, decl);
5855
5856 /* If a type has volatile components, it should be stored in memory.
5857 Otherwise, the fact that those components are volatile
5858 will be ignored, and would even crash the compiler.
5859 Of course, this only makes sense on VAR,PARM, and RESULT decl's. */
5860 if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl))
5861 && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
5862 || TREE_CODE (decl) == RESULT_DECL))
5863 {
5864 /* It is not an error for a structure with volatile fields to
5865 be declared register, but reset DECL_REGISTER since it
5866 cannot actually go in a register. */
5867 int was_reg = C_DECL_REGISTER (decl);
5868 C_DECL_REGISTER (decl) = 0;
5869 DECL_REGISTER (decl) = 0;
5870 c_mark_addressable (decl);
5871 C_DECL_REGISTER (decl) = was_reg;
5872 }
5873
5874 /* This is the earliest point at which we might know the assembler
5875 name of a variable. Thus, if it's known before this, die horribly. */
5876 gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl));
5877
5878 if (warn_cxx_compat
5879 && TREE_CODE (decl) == VAR_DECL
5880 && TREE_PUBLIC (decl)
5881 && TREE_STATIC (decl)
5882 && (TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
5883 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
5884 || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
5885 && TYPE_NAME (TREE_TYPE (decl)) == NULL_TREE)
5886 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wc___compat,
5887 ("non-local variable %qD with anonymous type is "
5888 "questionable in C++"),
5889 decl);
5890
5891 return decl;
5892 }
5893 }
5894 \f
5895 /* Decode the parameter-list info for a function type or function definition.
5896 The argument is the value returned by `get_parm_info' (or made in c-parse.c
5897 if there is an identifier list instead of a parameter decl list).
5898 These two functions are separate because when a function returns
5899 or receives functions then each is called multiple times but the order
5900 of calls is different. The last call to `grokparms' is always the one
5901 that contains the formal parameter names of a function definition.
5902
5903 Return a list of arg types to use in the FUNCTION_TYPE for this function.
5904
5905 FUNCDEF_FLAG is true for a function definition, false for
5906 a mere declaration. A nonempty identifier-list gets an error message
5907 when FUNCDEF_FLAG is false. */
5908
5909 static tree
5910 grokparms (struct c_arg_info *arg_info, bool funcdef_flag)
5911 {
5912 tree arg_types = arg_info->types;
5913
5914 if (funcdef_flag && arg_info->had_vla_unspec)
5915 {
5916 /* A function definition isn't function prototype scope C99 6.2.1p4. */
5917 /* C99 6.7.5.2p4 */
5918 error ("%<[*]%> not allowed in other than function prototype scope");
5919 }
5920
5921 if (arg_types == 0 && !funcdef_flag && !in_system_header)
5922 warning (OPT_Wstrict_prototypes,
5923 "function declaration isn%'t a prototype");
5924
5925 if (arg_types == error_mark_node)
5926 return 0; /* don't set TYPE_ARG_TYPES in this case */
5927
5928 else if (arg_types && TREE_CODE (TREE_VALUE (arg_types)) == IDENTIFIER_NODE)
5929 {
5930 if (!funcdef_flag)
5931 pedwarn (input_location, 0, "parameter names (without types) in function declaration");
5932
5933 arg_info->parms = arg_info->types;
5934 arg_info->types = 0;
5935 return 0;
5936 }
5937 else
5938 {
5939 tree parm, type, typelt;
5940 unsigned int parmno;
5941 const char *errmsg;
5942
5943 /* If there is a parameter of incomplete type in a definition,
5944 this is an error. In a declaration this is valid, and a
5945 struct or union type may be completed later, before any calls
5946 or definition of the function. In the case where the tag was
5947 first declared within the parameter list, a warning has
5948 already been given. If a parameter has void type, then
5949 however the function cannot be defined or called, so
5950 warn. */
5951
5952 for (parm = arg_info->parms, typelt = arg_types, parmno = 1;
5953 parm;
5954 parm = TREE_CHAIN (parm), typelt = TREE_CHAIN (typelt), parmno++)
5955 {
5956 type = TREE_VALUE (typelt);
5957 if (type == error_mark_node)
5958 continue;
5959
5960 if (!COMPLETE_TYPE_P (type))
5961 {
5962 if (funcdef_flag)
5963 {
5964 if (DECL_NAME (parm))
5965 error ("parameter %u (%q+D) has incomplete type",
5966 parmno, parm);
5967 else
5968 error ("%Jparameter %u has incomplete type",
5969 parm, parmno);
5970
5971 TREE_VALUE (typelt) = error_mark_node;
5972 TREE_TYPE (parm) = error_mark_node;
5973 }
5974 else if (VOID_TYPE_P (type))
5975 {
5976 if (DECL_NAME (parm))
5977 warning (0, "parameter %u (%q+D) has void type",
5978 parmno, parm);
5979 else
5980 warning (0, "%Jparameter %u has void type",
5981 parm, parmno);
5982 }
5983 }
5984
5985 errmsg = targetm.invalid_parameter_type (type);
5986 if (errmsg)
5987 {
5988 error (errmsg);
5989 TREE_VALUE (typelt) = error_mark_node;
5990 TREE_TYPE (parm) = error_mark_node;
5991 }
5992
5993 if (DECL_NAME (parm) && TREE_USED (parm))
5994 warn_if_shadowing (parm);
5995 }
5996 return arg_types;
5997 }
5998 }
5999
6000 /* Take apart the current scope and return a c_arg_info structure with
6001 info on a parameter list just parsed.
6002
6003 This structure is later fed to 'grokparms' and 'store_parm_decls'.
6004
6005 ELLIPSIS being true means the argument list ended in '...' so don't
6006 append a sentinel (void_list_node) to the end of the type-list. */
6007
6008 struct c_arg_info *
6009 get_parm_info (bool ellipsis)
6010 {
6011 struct c_binding *b = current_scope->bindings;
6012 struct c_arg_info *arg_info = XOBNEW (&parser_obstack,
6013 struct c_arg_info);
6014 tree parms = 0;
6015 tree tags = 0;
6016 tree types = 0;
6017 tree others = 0;
6018
6019 static bool explained_incomplete_types = false;
6020 bool gave_void_only_once_err = false;
6021
6022 arg_info->parms = 0;
6023 arg_info->tags = 0;
6024 arg_info->types = 0;
6025 arg_info->others = 0;
6026 arg_info->pending_sizes = 0;
6027 arg_info->had_vla_unspec = current_scope->had_vla_unspec;
6028
6029 /* The bindings in this scope must not get put into a block.
6030 We will take care of deleting the binding nodes. */
6031 current_scope->bindings = 0;
6032
6033 /* This function is only called if there was *something* on the
6034 parameter list. */
6035 gcc_assert (b);
6036
6037 /* A parameter list consisting solely of 'void' indicates that the
6038 function takes no arguments. But if the 'void' is qualified
6039 (by 'const' or 'volatile'), or has a storage class specifier
6040 ('register'), then the behavior is undefined; issue an error.
6041 Typedefs for 'void' are OK (see DR#157). */
6042 if (b->prev == 0 /* one binding */
6043 && TREE_CODE (b->decl) == PARM_DECL /* which is a parameter */
6044 && !DECL_NAME (b->decl) /* anonymous */
6045 && VOID_TYPE_P (TREE_TYPE (b->decl))) /* of void type */
6046 {
6047 if (TREE_THIS_VOLATILE (b->decl)
6048 || TREE_READONLY (b->decl)
6049 || C_DECL_REGISTER (b->decl))
6050 error ("%<void%> as only parameter may not be qualified");
6051
6052 /* There cannot be an ellipsis. */
6053 if (ellipsis)
6054 error ("%<void%> must be the only parameter");
6055
6056 arg_info->types = void_list_node;
6057 return arg_info;
6058 }
6059
6060 if (!ellipsis)
6061 types = void_list_node;
6062
6063 /* Break up the bindings list into parms, tags, types, and others;
6064 apply sanity checks; purge the name-to-decl bindings. */
6065 while (b)
6066 {
6067 tree decl = b->decl;
6068 tree type = TREE_TYPE (decl);
6069 const char *keyword;
6070
6071 switch (TREE_CODE (decl))
6072 {
6073 case PARM_DECL:
6074 if (b->id)
6075 {
6076 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
6077 I_SYMBOL_BINDING (b->id) = b->shadowed;
6078 }
6079
6080 /* Check for forward decls that never got their actual decl. */
6081 if (TREE_ASM_WRITTEN (decl))
6082 error ("parameter %q+D has just a forward declaration", decl);
6083 /* Check for (..., void, ...) and issue an error. */
6084 else if (VOID_TYPE_P (type) && !DECL_NAME (decl))
6085 {
6086 if (!gave_void_only_once_err)
6087 {
6088 error ("%<void%> must be the only parameter");
6089 gave_void_only_once_err = true;
6090 }
6091 }
6092 else
6093 {
6094 /* Valid parameter, add it to the list. */
6095 TREE_CHAIN (decl) = parms;
6096 parms = decl;
6097
6098 /* Since there is a prototype, args are passed in their
6099 declared types. The back end may override this later. */
6100 DECL_ARG_TYPE (decl) = type;
6101 types = tree_cons (0, type, types);
6102 }
6103 break;
6104
6105 case ENUMERAL_TYPE: keyword = "enum"; goto tag;
6106 case UNION_TYPE: keyword = "union"; goto tag;
6107 case RECORD_TYPE: keyword = "struct"; goto tag;
6108 tag:
6109 /* Types may not have tag-names, in which case the type
6110 appears in the bindings list with b->id NULL. */
6111 if (b->id)
6112 {
6113 gcc_assert (I_TAG_BINDING (b->id) == b);
6114 I_TAG_BINDING (b->id) = b->shadowed;
6115 }
6116
6117 /* Warn about any struct, union or enum tags defined in a
6118 parameter list. The scope of such types is limited to
6119 the parameter list, which is rarely if ever desirable
6120 (it's impossible to call such a function with type-
6121 correct arguments). An anonymous union parm type is
6122 meaningful as a GNU extension, so don't warn for that. */
6123 if (TREE_CODE (decl) != UNION_TYPE || b->id != 0)
6124 {
6125 if (b->id)
6126 /* The %s will be one of 'struct', 'union', or 'enum'. */
6127 warning (0, "%<%s %E%> declared inside parameter list",
6128 keyword, b->id);
6129 else
6130 /* The %s will be one of 'struct', 'union', or 'enum'. */
6131 warning (0, "anonymous %s declared inside parameter list",
6132 keyword);
6133
6134 if (!explained_incomplete_types)
6135 {
6136 warning (0, "its scope is only this definition or declaration,"
6137 " which is probably not what you want");
6138 explained_incomplete_types = true;
6139 }
6140 }
6141
6142 tags = tree_cons (b->id, decl, tags);
6143 break;
6144
6145 case CONST_DECL:
6146 case TYPE_DECL:
6147 case FUNCTION_DECL:
6148 /* CONST_DECLs appear here when we have an embedded enum,
6149 and TYPE_DECLs appear here when we have an embedded struct
6150 or union. No warnings for this - we already warned about the
6151 type itself. FUNCTION_DECLs appear when there is an implicit
6152 function declaration in the parameter list. */
6153
6154 TREE_CHAIN (decl) = others;
6155 others = decl;
6156 /* fall through */
6157
6158 case ERROR_MARK:
6159 /* error_mark_node appears here when we have an undeclared
6160 variable. Just throw it away. */
6161 if (b->id)
6162 {
6163 gcc_assert (I_SYMBOL_BINDING (b->id) == b);
6164 I_SYMBOL_BINDING (b->id) = b->shadowed;
6165 }
6166 break;
6167
6168 /* Other things that might be encountered. */
6169 case LABEL_DECL:
6170 case VAR_DECL:
6171 default:
6172 gcc_unreachable ();
6173 }
6174
6175 b = free_binding_and_advance (b);
6176 }
6177
6178 arg_info->parms = parms;
6179 arg_info->tags = tags;
6180 arg_info->types = types;
6181 arg_info->others = others;
6182 arg_info->pending_sizes = get_pending_sizes ();
6183 return arg_info;
6184 }
6185 \f
6186 /* Get the struct, enum or union (CODE says which) with tag NAME.
6187 Define the tag as a forward-reference with location LOC if it is
6188 not defined. Return a c_typespec structure for the type
6189 specifier. */
6190
6191 struct c_typespec
6192 parser_xref_tag (location_t loc, enum tree_code code, tree name)
6193 {
6194 struct c_typespec ret;
6195 tree ref;
6196 location_t refloc;
6197
6198 ret.expr = NULL_TREE;
6199 ret.expr_const_operands = true;
6200
6201 /* If a cross reference is requested, look up the type
6202 already defined for this tag and return it. */
6203
6204 ref = lookup_tag (code, name, 0, &refloc);
6205 /* If this is the right type of tag, return what we found.
6206 (This reference will be shadowed by shadow_tag later if appropriate.)
6207 If this is the wrong type of tag, do not return it. If it was the
6208 wrong type in the same scope, we will have had an error
6209 message already; if in a different scope and declaring
6210 a name, pending_xref_error will give an error message; but if in a
6211 different scope and not declaring a name, this tag should
6212 shadow the previous declaration of a different type of tag, and
6213 this would not work properly if we return the reference found.
6214 (For example, with "struct foo" in an outer scope, "union foo;"
6215 must shadow that tag with a new one of union type.) */
6216 ret.kind = (ref ? ctsk_tagref : ctsk_tagfirstref);
6217 if (ref && TREE_CODE (ref) == code)
6218 {
6219 if (C_TYPE_DEFINED_IN_STRUCT (ref)
6220 && loc != UNKNOWN_LOCATION
6221 && warn_cxx_compat)
6222 {
6223 switch (code)
6224 {
6225 case ENUMERAL_TYPE:
6226 warning_at (loc, OPT_Wc___compat,
6227 ("enum type defined in struct or union "
6228 "is not visible in C++"));
6229 inform (refloc, "enum type defined here");
6230 break;
6231 case RECORD_TYPE:
6232 warning_at (loc, OPT_Wc___compat,
6233 ("struct defined in struct or union "
6234 "is not visible in C++"));
6235 inform (refloc, "struct defined here");
6236 break;
6237 case UNION_TYPE:
6238 warning_at (loc, OPT_Wc___compat,
6239 ("union defined in struct or union "
6240 "is not visible in C++"));
6241 inform (refloc, "union defined here");
6242 break;
6243 default:
6244 gcc_unreachable();
6245 }
6246 }
6247
6248 ret.spec = ref;
6249 return ret;
6250 }
6251
6252 /* If no such tag is yet defined, create a forward-reference node
6253 and record it as the "definition".
6254 When a real declaration of this type is found,
6255 the forward-reference will be altered into a real type. */
6256
6257 ref = make_node (code);
6258 if (code == ENUMERAL_TYPE)
6259 {
6260 /* Give the type a default layout like unsigned int
6261 to avoid crashing if it does not get defined. */
6262 SET_TYPE_MODE (ref, TYPE_MODE (unsigned_type_node));
6263 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
6264 TYPE_USER_ALIGN (ref) = 0;
6265 TYPE_UNSIGNED (ref) = 1;
6266 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
6267 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
6268 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
6269 }
6270
6271 pushtag (loc, name, ref);
6272
6273 ret.spec = ref;
6274 return ret;
6275 }
6276
6277 /* Get the struct, enum or union (CODE says which) with tag NAME.
6278 Define the tag as a forward-reference if it is not defined.
6279 Return a tree for the type. */
6280
6281 tree
6282 xref_tag (enum tree_code code, tree name)
6283 {
6284 return parser_xref_tag (input_location, code, name).spec;
6285 }
6286 \f
6287 /* Make sure that the tag NAME is defined *in the current scope*
6288 at least as a forward reference.
6289 LOC is the location of the struct's definition.
6290 CODE says which kind of tag NAME ought to be.
6291
6292 This stores the current value of the file static IN_STRUCT in
6293 *ENCLOSING_IN_STRUCT, and sets IN_STRUCT to true. Similarly, this
6294 sets STRUCT_TYPES in *ENCLOSING_STRUCT_TYPES, and sets STRUCT_TYPES
6295 to an empty vector. The old values are restored in
6296 finish_struct. */
6297
6298 tree
6299 start_struct (location_t loc, enum tree_code code, tree name,
6300 bool *enclosing_in_struct,
6301 VEC(tree,heap) **enclosing_struct_types)
6302 {
6303 /* If there is already a tag defined at this scope
6304 (as a forward reference), just return it. */
6305
6306 tree ref = NULL_TREE;
6307 location_t refloc = UNKNOWN_LOCATION;
6308
6309 if (name != NULL_TREE)
6310 ref = lookup_tag (code, name, 1, &refloc);
6311 if (ref && TREE_CODE (ref) == code)
6312 {
6313 if (TYPE_SIZE (ref))
6314 {
6315 if (code == UNION_TYPE)
6316 error_at (loc, "redefinition of %<union %E%>", name);
6317 else
6318 error_at (loc, "redefinition of %<struct %E%>", name);
6319 if (refloc != UNKNOWN_LOCATION)
6320 inform (refloc, "originally defined here");
6321 /* Don't create structures using a name already in use. */
6322 ref = NULL_TREE;
6323 }
6324 else if (C_TYPE_BEING_DEFINED (ref))
6325 {
6326 if (code == UNION_TYPE)
6327 error_at (loc, "nested redefinition of %<union %E%>", name);
6328 else
6329 error_at (loc, "nested redefinition of %<struct %E%>", name);
6330 /* Don't bother to report "originally defined here" for a
6331 nested redefinition; the original definition should be
6332 obvious. */
6333 /* Don't create structures that contain themselves. */
6334 ref = NULL_TREE;
6335 }
6336 }
6337
6338 /* Otherwise create a forward-reference just so the tag is in scope. */
6339
6340 if (ref == NULL_TREE || TREE_CODE (ref) != code)
6341 {
6342 ref = make_node (code);
6343 pushtag (loc, name, ref);
6344 }
6345
6346 C_TYPE_BEING_DEFINED (ref) = 1;
6347 TYPE_PACKED (ref) = flag_pack_struct;
6348
6349 *enclosing_in_struct = in_struct;
6350 *enclosing_struct_types = struct_types;
6351 in_struct = true;
6352 struct_types = VEC_alloc(tree, heap, 0);
6353
6354 /* FIXME: This will issue a warning for a use of a type defined
6355 within a statement expr used within sizeof, et. al. This is not
6356 terribly serious as C++ doesn't permit statement exprs within
6357 sizeof anyhow. */
6358 if (warn_cxx_compat && (in_sizeof || in_typeof || in_alignof))
6359 warning_at (loc, OPT_Wc___compat,
6360 "defining type in %qs expression is invalid in C++",
6361 (in_sizeof
6362 ? "sizeof"
6363 : (in_typeof ? "typeof" : "alignof")));
6364
6365 return ref;
6366 }
6367
6368 /* Process the specs, declarator and width (NULL if omitted)
6369 of a structure component, returning a FIELD_DECL node.
6370 WIDTH is non-NULL for bit-fields only, and is an INTEGER_CST node.
6371 DECL_ATTRS is as for grokdeclarator.
6372
6373 LOC is the location of the structure component.
6374
6375 This is done during the parsing of the struct declaration.
6376 The FIELD_DECL nodes are chained together and the lot of them
6377 are ultimately passed to `build_struct' to make the RECORD_TYPE node. */
6378
6379 tree
6380 grokfield (location_t loc,
6381 struct c_declarator *declarator, struct c_declspecs *declspecs,
6382 tree width, tree *decl_attrs)
6383 {
6384 tree value;
6385
6386 if (declarator->kind == cdk_id && declarator->u.id == NULL_TREE
6387 && width == NULL_TREE)
6388 {
6389 /* This is an unnamed decl.
6390
6391 If we have something of the form "union { list } ;" then this
6392 is the anonymous union extension. Similarly for struct.
6393
6394 If this is something of the form "struct foo;", then
6395 If MS extensions are enabled, this is handled as an
6396 anonymous struct.
6397 Otherwise this is a forward declaration of a structure tag.
6398
6399 If this is something of the form "foo;" and foo is a TYPE_DECL, then
6400 If MS extensions are enabled and foo names a structure, then
6401 again this is an anonymous struct.
6402 Otherwise this is an error.
6403
6404 Oh what a horrid tangled web we weave. I wonder if MS consciously
6405 took this from Plan 9 or if it was an accident of implementation
6406 that took root before someone noticed the bug... */
6407
6408 tree type = declspecs->type;
6409 bool type_ok = (TREE_CODE (type) == RECORD_TYPE
6410 || TREE_CODE (type) == UNION_TYPE);
6411 bool ok = false;
6412
6413 if (type_ok
6414 && (flag_ms_extensions || !declspecs->typedef_p))
6415 {
6416 if (flag_ms_extensions)
6417 ok = true;
6418 else if (flag_iso)
6419 ok = false;
6420 else if (TYPE_NAME (type) == NULL)
6421 ok = true;
6422 else
6423 ok = false;
6424 }
6425 if (!ok)
6426 {
6427 pedwarn (loc, 0, "declaration does not declare anything");
6428 return NULL_TREE;
6429 }
6430 pedwarn (loc, OPT_pedantic, "ISO C doesn%'t support unnamed structs/unions");
6431 }
6432
6433 value = grokdeclarator (declarator, declspecs, FIELD, false,
6434 width ? &width : NULL, decl_attrs, NULL, NULL,
6435 DEPRECATED_NORMAL);
6436
6437 finish_decl (value, loc, NULL_TREE, NULL_TREE, NULL_TREE);
6438 DECL_INITIAL (value) = width;
6439
6440 return value;
6441 }
6442 \f
6443 /* Generate an error for any duplicate field names in FIELDLIST. Munge
6444 the list such that this does not present a problem later. */
6445
6446 static void
6447 detect_field_duplicates (tree fieldlist)
6448 {
6449 tree x, y;
6450 int timeout = 10;
6451
6452 /* First, see if there are more than "a few" fields.
6453 This is trivially true if there are zero or one fields. */
6454 if (!fieldlist)
6455 return;
6456 x = TREE_CHAIN (fieldlist);
6457 if (!x)
6458 return;
6459 do {
6460 timeout--;
6461 x = TREE_CHAIN (x);
6462 } while (timeout > 0 && x);
6463
6464 /* If there were "few" fields, avoid the overhead of allocating
6465 a hash table. Instead just do the nested traversal thing. */
6466 if (timeout > 0)
6467 {
6468 for (x = TREE_CHAIN (fieldlist); x ; x = TREE_CHAIN (x))
6469 if (DECL_NAME (x))
6470 {
6471 for (y = fieldlist; y != x; y = TREE_CHAIN (y))
6472 if (DECL_NAME (y) == DECL_NAME (x))
6473 {
6474 error ("duplicate member %q+D", x);
6475 DECL_NAME (x) = NULL_TREE;
6476 }
6477 }
6478 }
6479 else
6480 {
6481 htab_t htab = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
6482 void **slot;
6483
6484 for (x = fieldlist; x ; x = TREE_CHAIN (x))
6485 if ((y = DECL_NAME (x)) != 0)
6486 {
6487 slot = htab_find_slot (htab, y, INSERT);
6488 if (*slot)
6489 {
6490 error ("duplicate member %q+D", x);
6491 DECL_NAME (x) = NULL_TREE;
6492 }
6493 *slot = y;
6494 }
6495
6496 htab_delete (htab);
6497 }
6498 }
6499
6500 /* Fill in the fields of a RECORD_TYPE or UNION_TYPE node, T.
6501 LOC is the location of the RECORD_TYPE or UNION_TYPE's definition.
6502 FIELDLIST is a chain of FIELD_DECL nodes for the fields.
6503 ATTRIBUTES are attributes to be applied to the structure.
6504
6505 ENCLOSING_IN_STRUCT is the value of IN_STRUCT, and
6506 ENCLOSING_STRUCT_TYPES is the value of STRUCT_TYPES, when the
6507 struct was started. This sets the C_TYPE_DEFINED_IN_STRUCT flag
6508 for any type defined in the current struct. */
6509
6510 tree
6511 finish_struct (location_t loc, tree t, tree fieldlist, tree attributes,
6512 bool enclosing_in_struct,
6513 VEC(tree,heap) *enclosing_struct_types)
6514 {
6515 tree x;
6516 bool toplevel = file_scope == current_scope;
6517 int saw_named_field;
6518 unsigned int ix;
6519
6520 /* If this type was previously laid out as a forward reference,
6521 make sure we lay it out again. */
6522
6523 TYPE_SIZE (t) = 0;
6524
6525 decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
6526
6527 if (pedantic)
6528 {
6529 for (x = fieldlist; x; x = TREE_CHAIN (x))
6530 if (DECL_NAME (x) != 0)
6531 break;
6532
6533 if (x == 0)
6534 {
6535 if (TREE_CODE (t) == UNION_TYPE)
6536 {
6537 if (fieldlist)
6538 pedwarn (loc, OPT_pedantic, "union has no named members");
6539 else
6540 pedwarn (loc, OPT_pedantic, "union has no members");
6541 }
6542 else
6543 {
6544 if (fieldlist)
6545 pedwarn (loc, OPT_pedantic, "struct has no named members");
6546 else
6547 pedwarn (loc, OPT_pedantic, "struct has no members");
6548 }
6549 }
6550 }
6551
6552 /* Install struct as DECL_CONTEXT of each field decl.
6553 Also process specified field sizes, found in the DECL_INITIAL,
6554 storing 0 there after the type has been changed to precision equal
6555 to its width, rather than the precision of the specified standard
6556 type. (Correct layout requires the original type to have been preserved
6557 until now.) */
6558
6559 saw_named_field = 0;
6560 for (x = fieldlist; x; x = TREE_CHAIN (x))
6561 {
6562 if (TREE_TYPE (x) == error_mark_node)
6563 continue;
6564
6565 DECL_CONTEXT (x) = t;
6566
6567 /* If any field is const, the structure type is pseudo-const. */
6568 if (TREE_READONLY (x))
6569 C_TYPE_FIELDS_READONLY (t) = 1;
6570 else
6571 {
6572 /* A field that is pseudo-const makes the structure likewise. */
6573 tree t1 = TREE_TYPE (x);
6574 while (TREE_CODE (t1) == ARRAY_TYPE)
6575 t1 = TREE_TYPE (t1);
6576 if ((TREE_CODE (t1) == RECORD_TYPE || TREE_CODE (t1) == UNION_TYPE)
6577 && C_TYPE_FIELDS_READONLY (t1))
6578 C_TYPE_FIELDS_READONLY (t) = 1;
6579 }
6580
6581 /* Any field that is volatile means variables of this type must be
6582 treated in some ways as volatile. */
6583 if (TREE_THIS_VOLATILE (x))
6584 C_TYPE_FIELDS_VOLATILE (t) = 1;
6585
6586 /* Any field of nominal variable size implies structure is too. */
6587 if (C_DECL_VARIABLE_SIZE (x))
6588 C_TYPE_VARIABLE_SIZE (t) = 1;
6589
6590 if (DECL_INITIAL (x))
6591 {
6592 unsigned HOST_WIDE_INT width = tree_low_cst (DECL_INITIAL (x), 1);
6593 DECL_SIZE (x) = bitsize_int (width);
6594 DECL_BIT_FIELD (x) = 1;
6595 SET_DECL_C_BIT_FIELD (x);
6596 }
6597
6598 if (TYPE_PACKED (t)
6599 && (DECL_BIT_FIELD (x)
6600 || TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT))
6601 DECL_PACKED (x) = 1;
6602
6603 /* Detect flexible array member in an invalid context. */
6604 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
6605 && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
6606 && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
6607 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
6608 {
6609 if (TREE_CODE (t) == UNION_TYPE)
6610 {
6611 error_at (DECL_SOURCE_LOCATION (x),
6612 "%Jflexible array member in union", x);
6613 TREE_TYPE (x) = error_mark_node;
6614 }
6615 else if (TREE_CHAIN (x) != NULL_TREE)
6616 {
6617 error_at (DECL_SOURCE_LOCATION (x),
6618 "%Jflexible array member not at end of struct", x);
6619 TREE_TYPE (x) = error_mark_node;
6620 }
6621 else if (!saw_named_field)
6622 {
6623 error_at (DECL_SOURCE_LOCATION (x),
6624 "%Jflexible array member in otherwise empty struct",
6625 x);
6626 TREE_TYPE (x) = error_mark_node;
6627 }
6628 }
6629
6630 if (pedantic && !in_system_header && TREE_CODE (t) == RECORD_TYPE
6631 && flexible_array_type_p (TREE_TYPE (x)))
6632 pedwarn (loc, OPT_pedantic,
6633 "%Jinvalid use of structure with flexible array member", x);
6634
6635 if (DECL_NAME (x))
6636 saw_named_field = 1;
6637 }
6638
6639 detect_field_duplicates (fieldlist);
6640
6641 /* Now we have the nearly final fieldlist. Record it,
6642 then lay out the structure or union (including the fields). */
6643
6644 TYPE_FIELDS (t) = fieldlist;
6645
6646 layout_type (t);
6647
6648 /* Give bit-fields their proper types. */
6649 {
6650 tree *fieldlistp = &fieldlist;
6651 while (*fieldlistp)
6652 if (TREE_CODE (*fieldlistp) == FIELD_DECL && DECL_INITIAL (*fieldlistp)
6653 && TREE_TYPE (*fieldlistp) != error_mark_node)
6654 {
6655 unsigned HOST_WIDE_INT width
6656 = tree_low_cst (DECL_INITIAL (*fieldlistp), 1);
6657 tree type = TREE_TYPE (*fieldlistp);
6658 if (width != TYPE_PRECISION (type))
6659 {
6660 TREE_TYPE (*fieldlistp)
6661 = c_build_bitfield_integer_type (width, TYPE_UNSIGNED (type));
6662 DECL_MODE (*fieldlistp) = TYPE_MODE (TREE_TYPE (*fieldlistp));
6663 }
6664 DECL_INITIAL (*fieldlistp) = 0;
6665 }
6666 else
6667 fieldlistp = &TREE_CHAIN (*fieldlistp);
6668 }
6669
6670 /* Now we have the truly final field list.
6671 Store it in this type and in the variants. */
6672
6673 TYPE_FIELDS (t) = fieldlist;
6674
6675 /* If there are lots of fields, sort so we can look through them fast.
6676 We arbitrarily consider 16 or more elts to be "a lot". */
6677
6678 {
6679 int len = 0;
6680
6681 for (x = fieldlist; x; x = TREE_CHAIN (x))
6682 {
6683 if (len > 15 || DECL_NAME (x) == NULL)
6684 break;
6685 len += 1;
6686 }
6687
6688 if (len > 15)
6689 {
6690 tree *field_array;
6691 struct lang_type *space;
6692 struct sorted_fields_type *space2;
6693
6694 len += list_length (x);
6695
6696 /* Use the same allocation policy here that make_node uses, to
6697 ensure that this lives as long as the rest of the struct decl.
6698 All decls in an inline function need to be saved. */
6699
6700 space = GGC_CNEW (struct lang_type);
6701 space2 = GGC_NEWVAR (struct sorted_fields_type,
6702 sizeof (struct sorted_fields_type) + len * sizeof (tree));
6703
6704 len = 0;
6705 space->s = space2;
6706 field_array = &space2->elts[0];
6707 for (x = fieldlist; x; x = TREE_CHAIN (x))
6708 {
6709 field_array[len++] = x;
6710
6711 /* If there is anonymous struct or union, break out of the loop. */
6712 if (DECL_NAME (x) == NULL)
6713 break;
6714 }
6715 /* Found no anonymous struct/union. Add the TYPE_LANG_SPECIFIC. */
6716 if (x == NULL)
6717 {
6718 TYPE_LANG_SPECIFIC (t) = space;
6719 TYPE_LANG_SPECIFIC (t)->s->len = len;
6720 field_array = TYPE_LANG_SPECIFIC (t)->s->elts;
6721 qsort (field_array, len, sizeof (tree), field_decl_cmp);
6722 }
6723 }
6724 }
6725
6726 for (x = TYPE_MAIN_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
6727 {
6728 TYPE_FIELDS (x) = TYPE_FIELDS (t);
6729 TYPE_LANG_SPECIFIC (x) = TYPE_LANG_SPECIFIC (t);
6730 C_TYPE_FIELDS_READONLY (x) = C_TYPE_FIELDS_READONLY (t);
6731 C_TYPE_FIELDS_VOLATILE (x) = C_TYPE_FIELDS_VOLATILE (t);
6732 C_TYPE_VARIABLE_SIZE (x) = C_TYPE_VARIABLE_SIZE (t);
6733 }
6734
6735 /* If this was supposed to be a transparent union, but we can't
6736 make it one, warn and turn off the flag. */
6737 if (TREE_CODE (t) == UNION_TYPE
6738 && TYPE_TRANSPARENT_UNION (t)
6739 && (!TYPE_FIELDS (t) || TYPE_MODE (t) != DECL_MODE (TYPE_FIELDS (t))))
6740 {
6741 TYPE_TRANSPARENT_UNION (t) = 0;
6742 warning_at (loc, 0, "union cannot be made transparent");
6743 }
6744
6745 /* If this structure or union completes the type of any previous
6746 variable declaration, lay it out and output its rtl. */
6747 for (x = C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t));
6748 x;
6749 x = TREE_CHAIN (x))
6750 {
6751 tree decl = TREE_VALUE (x);
6752 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
6753 layout_array_type (TREE_TYPE (decl));
6754 if (TREE_CODE (decl) != TYPE_DECL)
6755 {
6756 layout_decl (decl, 0);
6757 if (c_dialect_objc ())
6758 objc_check_decl (decl);
6759 rest_of_decl_compilation (decl, toplevel, 0);
6760 if (!toplevel)
6761 expand_decl (decl);
6762 }
6763 }
6764 C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t)) = 0;
6765
6766 /* Finish debugging output for this type. */
6767 rest_of_type_compilation (t, toplevel);
6768
6769 /* If we're inside a function proper, i.e. not file-scope and not still
6770 parsing parameters, then arrange for the size of a variable sized type
6771 to be bound now. */
6772 if (cur_stmt_list && variably_modified_type_p (t, NULL_TREE))
6773 add_stmt (build_stmt (loc,
6774 DECL_EXPR, build_decl (loc, TYPE_DECL, NULL, t)));
6775
6776 /* Set the C_TYPE_DEFINED_IN_STRUCT flag for each type defined in
6777 the current struct. We do this now at the end of the struct
6778 because the flag is used to issue visibility warnings when using
6779 -Wc++-compat, and we only want to issue those warnings if the
6780 type is referenced outside of the struct declaration. */
6781 for (ix = 0; VEC_iterate (tree, struct_types, ix, x); ++ix)
6782 C_TYPE_DEFINED_IN_STRUCT (x) = 1;
6783
6784 VEC_free (tree, heap, struct_types);
6785
6786 in_struct = enclosing_in_struct;
6787 struct_types = enclosing_struct_types;
6788
6789 /* If this struct is defined inside a struct, add it to
6790 STRUCT_TYPES. */
6791 if (in_struct && !in_sizeof && !in_typeof && !in_alignof)
6792 VEC_safe_push (tree, heap, struct_types, t);
6793
6794 return t;
6795 }
6796
6797 /* Lay out the type T, and its element type, and so on. */
6798
6799 static void
6800 layout_array_type (tree t)
6801 {
6802 if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
6803 layout_array_type (TREE_TYPE (t));
6804 layout_type (t);
6805 }
6806 \f
6807 /* Begin compiling the definition of an enumeration type.
6808 NAME is its name (or null if anonymous).
6809 LOC is the enum's location.
6810 Returns the type object, as yet incomplete.
6811 Also records info about it so that build_enumerator
6812 may be used to declare the individual values as they are read. */
6813
6814 tree
6815 start_enum (location_t loc, struct c_enum_contents *the_enum, tree name)
6816 {
6817 tree enumtype = NULL_TREE;
6818 location_t enumloc = UNKNOWN_LOCATION;
6819
6820 /* If this is the real definition for a previous forward reference,
6821 fill in the contents in the same object that used to be the
6822 forward reference. */
6823
6824 if (name != NULL_TREE)
6825 enumtype = lookup_tag (ENUMERAL_TYPE, name, 1, &enumloc);
6826
6827 if (enumtype == 0 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
6828 {
6829 enumtype = make_node (ENUMERAL_TYPE);
6830 pushtag (loc, name, enumtype);
6831 }
6832
6833 if (C_TYPE_BEING_DEFINED (enumtype))
6834 error_at (loc, "nested redefinition of %<enum %E%>", name);
6835
6836 C_TYPE_BEING_DEFINED (enumtype) = 1;
6837
6838 if (TYPE_VALUES (enumtype) != 0)
6839 {
6840 /* This enum is a named one that has been declared already. */
6841 error_at (loc, "redeclaration of %<enum %E%>", name);
6842 if (enumloc != UNKNOWN_LOCATION)
6843 inform (enumloc, "originally defined here");
6844
6845 /* Completely replace its old definition.
6846 The old enumerators remain defined, however. */
6847 TYPE_VALUES (enumtype) = 0;
6848 }
6849
6850 the_enum->enum_next_value = integer_zero_node;
6851 the_enum->enum_overflow = 0;
6852
6853 if (flag_short_enums)
6854 TYPE_PACKED (enumtype) = 1;
6855
6856 /* FIXME: This will issue a warning for a use of a type defined
6857 within sizeof in a statement expr. This is not terribly serious
6858 as C++ doesn't permit statement exprs within sizeof anyhow. */
6859 if (warn_cxx_compat && (in_sizeof || in_typeof || in_alignof))
6860 warning_at (loc, OPT_Wc___compat,
6861 "defining type in %qs expression is invalid in C++",
6862 (in_sizeof
6863 ? "sizeof"
6864 : (in_typeof ? "typeof" : "alignof")));
6865
6866 return enumtype;
6867 }
6868
6869 /* After processing and defining all the values of an enumeration type,
6870 install their decls in the enumeration type and finish it off.
6871 ENUMTYPE is the type object, VALUES a list of decl-value pairs,
6872 and ATTRIBUTES are the specified attributes.
6873 Returns ENUMTYPE. */
6874
6875 tree
6876 finish_enum (tree enumtype, tree values, tree attributes)
6877 {
6878 tree pair, tem;
6879 tree minnode = 0, maxnode = 0;
6880 int precision, unsign;
6881 bool toplevel = (file_scope == current_scope);
6882 struct lang_type *lt;
6883
6884 decl_attributes (&enumtype, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
6885
6886 /* Calculate the maximum value of any enumerator in this type. */
6887
6888 if (values == error_mark_node)
6889 minnode = maxnode = integer_zero_node;
6890 else
6891 {
6892 minnode = maxnode = TREE_VALUE (values);
6893 for (pair = TREE_CHAIN (values); pair; pair = TREE_CHAIN (pair))
6894 {
6895 tree value = TREE_VALUE (pair);
6896 if (tree_int_cst_lt (maxnode, value))
6897 maxnode = value;
6898 if (tree_int_cst_lt (value, minnode))
6899 minnode = value;
6900 }
6901 }
6902
6903 /* Construct the final type of this enumeration. It is the same
6904 as one of the integral types - the narrowest one that fits, except
6905 that normally we only go as narrow as int - and signed iff any of
6906 the values are negative. */
6907 unsign = (tree_int_cst_sgn (minnode) >= 0);
6908 precision = MAX (tree_int_cst_min_precision (minnode, unsign),
6909 tree_int_cst_min_precision (maxnode, unsign));
6910
6911 if (TYPE_PACKED (enumtype) || precision > TYPE_PRECISION (integer_type_node))
6912 {
6913 tem = c_common_type_for_size (precision, unsign);
6914 if (tem == NULL)
6915 {
6916 warning (0, "enumeration values exceed range of largest integer");
6917 tem = long_long_integer_type_node;
6918 }
6919 }
6920 else
6921 tem = unsign ? unsigned_type_node : integer_type_node;
6922
6923 TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (tem);
6924 TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (tem);
6925 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (tem);
6926 TYPE_SIZE (enumtype) = 0;
6927
6928 /* If the precision of the type was specific with an attribute and it
6929 was too small, give an error. Otherwise, use it. */
6930 if (TYPE_PRECISION (enumtype))
6931 {
6932 if (precision > TYPE_PRECISION (enumtype))
6933 error ("specified mode too small for enumeral values");
6934 }
6935 else
6936 TYPE_PRECISION (enumtype) = TYPE_PRECISION (tem);
6937
6938 layout_type (enumtype);
6939
6940 if (values != error_mark_node)
6941 {
6942 /* Change the type of the enumerators to be the enum type. We
6943 need to do this irrespective of the size of the enum, for
6944 proper type checking. Replace the DECL_INITIALs of the
6945 enumerators, and the value slots of the list, with copies
6946 that have the enum type; they cannot be modified in place
6947 because they may be shared (e.g. integer_zero_node) Finally,
6948 change the purpose slots to point to the names of the decls. */
6949 for (pair = values; pair; pair = TREE_CHAIN (pair))
6950 {
6951 tree enu = TREE_PURPOSE (pair);
6952 tree ini = DECL_INITIAL (enu);
6953
6954 TREE_TYPE (enu) = enumtype;
6955
6956 /* The ISO C Standard mandates enumerators to have type int,
6957 even though the underlying type of an enum type is
6958 unspecified. However, GCC allows enumerators of any
6959 integer type as an extensions. build_enumerator()
6960 converts any enumerators that fit in an int to type int,
6961 to avoid promotions to unsigned types when comparing
6962 integers with enumerators that fit in the int range.
6963 When -pedantic is given, build_enumerator() would have
6964 already warned about those that don't fit. Here we
6965 convert the rest to the enumerator type. */
6966 if (TREE_TYPE (ini) != integer_type_node)
6967 ini = convert (enumtype, ini);
6968
6969 DECL_INITIAL (enu) = ini;
6970 TREE_PURPOSE (pair) = DECL_NAME (enu);
6971 TREE_VALUE (pair) = ini;
6972 }
6973
6974 TYPE_VALUES (enumtype) = values;
6975 }
6976
6977 /* Record the min/max values so that we can warn about bit-field
6978 enumerations that are too small for the values. */
6979 lt = GGC_CNEW (struct lang_type);
6980 lt->enum_min = minnode;
6981 lt->enum_max = maxnode;
6982 TYPE_LANG_SPECIFIC (enumtype) = lt;
6983
6984 /* Fix up all variant types of this enum type. */
6985 for (tem = TYPE_MAIN_VARIANT (enumtype); tem; tem = TYPE_NEXT_VARIANT (tem))
6986 {
6987 if (tem == enumtype)
6988 continue;
6989 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
6990 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
6991 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
6992 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
6993 TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
6994 SET_TYPE_MODE (tem, TYPE_MODE (enumtype));
6995 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
6996 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
6997 TYPE_USER_ALIGN (tem) = TYPE_USER_ALIGN (enumtype);
6998 TYPE_UNSIGNED (tem) = TYPE_UNSIGNED (enumtype);
6999 TYPE_LANG_SPECIFIC (tem) = TYPE_LANG_SPECIFIC (enumtype);
7000 }
7001
7002 /* Finish debugging output for this type. */
7003 rest_of_type_compilation (enumtype, toplevel);
7004
7005 /* If this enum is defined inside a struct, add it to
7006 STRUCT_TYPES. */
7007 if (in_struct && !in_sizeof && !in_typeof && !in_alignof)
7008 VEC_safe_push (tree, heap, struct_types, enumtype);
7009
7010 return enumtype;
7011 }
7012
7013 /* Build and install a CONST_DECL for one value of the
7014 current enumeration type (one that was begun with start_enum).
7015 LOC is the location of the enumerator.
7016 Return a tree-list containing the CONST_DECL and its value.
7017 Assignment of sequential values by default is handled here. */
7018
7019 tree
7020 build_enumerator (location_t loc,
7021 struct c_enum_contents *the_enum, tree name, tree value)
7022 {
7023 tree decl, type;
7024
7025 /* Validate and default VALUE. */
7026
7027 if (value != 0)
7028 {
7029 /* Don't issue more errors for error_mark_node (i.e. an
7030 undeclared identifier) - just ignore the value expression. */
7031 if (value == error_mark_node)
7032 value = 0;
7033 else if (!INTEGRAL_TYPE_P (TREE_TYPE (value)))
7034 {
7035 error_at (loc, "enumerator value for %qE is not an integer constant",
7036 name);
7037 value = 0;
7038 }
7039 else
7040 {
7041 if (TREE_CODE (value) != INTEGER_CST)
7042 {
7043 value = c_fully_fold (value, false, NULL);
7044 if (TREE_CODE (value) == INTEGER_CST)
7045 pedwarn (loc, OPT_pedantic,
7046 "enumerator value for %qE is not an integer "
7047 "constant expression", name);
7048 }
7049 if (TREE_CODE (value) != INTEGER_CST)
7050 {
7051 error ("enumerator value for %qE is not an integer constant",
7052 name);
7053 value = 0;
7054 }
7055 else
7056 {
7057 value = default_conversion (value);
7058 constant_expression_warning (value);
7059 }
7060 }
7061 }
7062
7063 /* Default based on previous value. */
7064 /* It should no longer be possible to have NON_LVALUE_EXPR
7065 in the default. */
7066 if (value == 0)
7067 {
7068 value = the_enum->enum_next_value;
7069 if (the_enum->enum_overflow)
7070 error_at (loc, "overflow in enumeration values");
7071 }
7072 /* Even though the underlying type of an enum is unspecified, the
7073 type of enumeration constants is explicitly defined as int
7074 (6.4.4.3/2 in the C99 Standard). GCC allows any integer type as
7075 an extension. */
7076 else if (!int_fits_type_p (value, integer_type_node))
7077 pedwarn (loc, OPT_pedantic,
7078 "ISO C restricts enumerator values to range of %<int%>");
7079
7080 /* The ISO C Standard mandates enumerators to have type int, even
7081 though the underlying type of an enum type is unspecified.
7082 However, GCC allows enumerators of any integer type as an
7083 extensions. Here we convert any enumerators that fit in an int
7084 to type int, to avoid promotions to unsigned types when comparing
7085 integers with enumerators that fit in the int range. When
7086 -pedantic is given, we would have already warned about those that
7087 don't fit. We have to do this here rather than in finish_enum
7088 because this value may be used to define more enumerators. */
7089 if (int_fits_type_p (value, integer_type_node))
7090 value = convert (integer_type_node, value);
7091
7092 /* Set basis for default for next value. */
7093 the_enum->enum_next_value
7094 = build_binary_op
7095 (EXPR_HAS_LOCATION (value) ? EXPR_LOCATION (value) : input_location,
7096 PLUS_EXPR, value, integer_one_node, 0);
7097 the_enum->enum_overflow = tree_int_cst_lt (the_enum->enum_next_value, value);
7098
7099 /* Now create a declaration for the enum value name. */
7100
7101 type = TREE_TYPE (value);
7102 type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
7103 TYPE_PRECISION (integer_type_node)),
7104 (TYPE_PRECISION (type)
7105 >= TYPE_PRECISION (integer_type_node)
7106 && TYPE_UNSIGNED (type)));
7107
7108 decl = build_decl (loc, CONST_DECL, name, type);
7109 DECL_INITIAL (decl) = convert (type, value);
7110 pushdecl (decl);
7111
7112 return tree_cons (decl, value, NULL_TREE);
7113 }
7114
7115 \f
7116 /* Create the FUNCTION_DECL for a function definition.
7117 DECLSPECS, DECLARATOR and ATTRIBUTES are the parts of
7118 the declaration; they describe the function's name and the type it returns,
7119 but twisted together in a fashion that parallels the syntax of C.
7120
7121 This function creates a binding context for the function body
7122 as well as setting up the FUNCTION_DECL in current_function_decl.
7123
7124 Returns 1 on success. If the DECLARATOR is not suitable for a function
7125 (it defines a datum instead), we return 0, which tells
7126 yyparse to report a parse error. */
7127
7128 int
7129 start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
7130 tree attributes)
7131 {
7132 tree decl1, old_decl;
7133 tree restype, resdecl;
7134 location_t loc;
7135
7136 current_function_returns_value = 0; /* Assume, until we see it does. */
7137 current_function_returns_null = 0;
7138 current_function_returns_abnormally = 0;
7139 warn_about_return_type = 0;
7140 c_switch_stack = NULL;
7141
7142 /* Indicate no valid break/continue context by setting these variables
7143 to some non-null, non-label value. We'll notice and emit the proper
7144 error message in c_finish_bc_stmt. */
7145 c_break_label = c_cont_label = size_zero_node;
7146
7147 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, true, NULL,
7148 &attributes, NULL, NULL, DEPRECATED_NORMAL);
7149
7150 /* If the declarator is not suitable for a function definition,
7151 cause a syntax error. */
7152 if (decl1 == 0)
7153 return 0;
7154
7155 loc = DECL_SOURCE_LOCATION (decl1);
7156
7157 decl_attributes (&decl1, attributes, 0);
7158
7159 if (DECL_DECLARED_INLINE_P (decl1)
7160 && DECL_UNINLINABLE (decl1)
7161 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl1)))
7162 warning_at (loc, OPT_Wattributes,
7163 "inline function %qD given attribute noinline",
7164 decl1);
7165
7166 /* Handle gnu_inline attribute. */
7167 if (declspecs->inline_p
7168 && !flag_gnu89_inline
7169 && TREE_CODE (decl1) == FUNCTION_DECL
7170 && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl1))
7171 || current_function_decl))
7172 {
7173 if (declspecs->storage_class != csc_static)
7174 DECL_EXTERNAL (decl1) = !DECL_EXTERNAL (decl1);
7175 }
7176
7177 announce_function (decl1);
7178
7179 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl1))))
7180 {
7181 error_at (loc, "return type is an incomplete type");
7182 /* Make it return void instead. */
7183 TREE_TYPE (decl1)
7184 = build_function_type (void_type_node,
7185 TYPE_ARG_TYPES (TREE_TYPE (decl1)));
7186 }
7187
7188 if (warn_about_return_type)
7189 pedwarn_c99 (loc, flag_isoc99 ? 0
7190 : (warn_return_type ? OPT_Wreturn_type : OPT_Wimplicit_int),
7191 "return type defaults to %<int%>");
7192
7193 /* Make the init_value nonzero so pushdecl knows this is not tentative.
7194 error_mark_node is replaced below (in pop_scope) with the BLOCK. */
7195 DECL_INITIAL (decl1) = error_mark_node;
7196
7197 /* If this definition isn't a prototype and we had a prototype declaration
7198 before, copy the arg type info from that prototype. */
7199 old_decl = lookup_name_in_scope (DECL_NAME (decl1), current_scope);
7200 if (old_decl && TREE_CODE (old_decl) != FUNCTION_DECL)
7201 old_decl = 0;
7202 current_function_prototype_locus = UNKNOWN_LOCATION;
7203 current_function_prototype_built_in = false;
7204 current_function_prototype_arg_types = NULL_TREE;
7205 if (TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0)
7206 {
7207 if (old_decl != 0 && TREE_CODE (TREE_TYPE (old_decl)) == FUNCTION_TYPE
7208 && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
7209 TREE_TYPE (TREE_TYPE (old_decl))))
7210 {
7211 TREE_TYPE (decl1) = composite_type (TREE_TYPE (old_decl),
7212 TREE_TYPE (decl1));
7213 current_function_prototype_locus = DECL_SOURCE_LOCATION (old_decl);
7214 current_function_prototype_built_in
7215 = C_DECL_BUILTIN_PROTOTYPE (old_decl);
7216 current_function_prototype_arg_types
7217 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
7218 }
7219 if (TREE_PUBLIC (decl1))
7220 {
7221 /* If there is an external prototype declaration of this
7222 function, record its location but do not copy information
7223 to this decl. This may be an invisible declaration
7224 (built-in or in a scope which has finished) or simply
7225 have more refined argument types than any declaration
7226 found above. */
7227 struct c_binding *b;
7228 for (b = I_SYMBOL_BINDING (DECL_NAME (decl1)); b; b = b->shadowed)
7229 if (B_IN_SCOPE (b, external_scope))
7230 break;
7231 if (b)
7232 {
7233 tree ext_decl, ext_type;
7234 ext_decl = b->decl;
7235 ext_type = b->u.type ? b->u.type : TREE_TYPE (ext_decl);
7236 if (TREE_CODE (ext_type) == FUNCTION_TYPE
7237 && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
7238 TREE_TYPE (ext_type)))
7239 {
7240 current_function_prototype_locus
7241 = DECL_SOURCE_LOCATION (ext_decl);
7242 current_function_prototype_built_in
7243 = C_DECL_BUILTIN_PROTOTYPE (ext_decl);
7244 current_function_prototype_arg_types
7245 = TYPE_ARG_TYPES (ext_type);
7246 }
7247 }
7248 }
7249 }
7250
7251 /* Optionally warn of old-fashioned def with no previous prototype. */
7252 if (warn_strict_prototypes
7253 && old_decl != error_mark_node
7254 && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0
7255 && C_DECL_ISNT_PROTOTYPE (old_decl))
7256 warning_at (loc, OPT_Wstrict_prototypes,
7257 "function declaration isn%'t a prototype");
7258 /* Optionally warn of any global def with no previous prototype. */
7259 else if (warn_missing_prototypes
7260 && old_decl != error_mark_node
7261 && TREE_PUBLIC (decl1)
7262 && !MAIN_NAME_P (DECL_NAME (decl1))
7263 && C_DECL_ISNT_PROTOTYPE (old_decl))
7264 warning_at (loc, OPT_Wmissing_prototypes,
7265 "no previous prototype for %qD", decl1);
7266 /* Optionally warn of any def with no previous prototype
7267 if the function has already been used. */
7268 else if (warn_missing_prototypes
7269 && old_decl != 0
7270 && old_decl != error_mark_node
7271 && TREE_USED (old_decl)
7272 && TYPE_ARG_TYPES (TREE_TYPE (old_decl)) == 0)
7273 warning_at (loc, OPT_Wmissing_prototypes,
7274 "%qD was used with no prototype before its definition", decl1);
7275 /* Optionally warn of any global def with no previous declaration. */
7276 else if (warn_missing_declarations
7277 && TREE_PUBLIC (decl1)
7278 && old_decl == 0
7279 && !MAIN_NAME_P (DECL_NAME (decl1)))
7280 warning_at (loc, OPT_Wmissing_declarations,
7281 "no previous declaration for %qD",
7282 decl1);
7283 /* Optionally warn of any def with no previous declaration
7284 if the function has already been used. */
7285 else if (warn_missing_declarations
7286 && old_decl != 0
7287 && old_decl != error_mark_node
7288 && TREE_USED (old_decl)
7289 && C_DECL_IMPLICIT (old_decl))
7290 warning_at (loc, OPT_Wmissing_declarations,
7291 "%qD was used with no declaration before its definition", decl1);
7292
7293 /* This function exists in static storage.
7294 (This does not mean `static' in the C sense!) */
7295 TREE_STATIC (decl1) = 1;
7296
7297 /* A nested function is not global. */
7298 if (current_function_decl != 0)
7299 TREE_PUBLIC (decl1) = 0;
7300
7301 /* This is the earliest point at which we might know the assembler
7302 name of the function. Thus, if it's set before this, die horribly. */
7303 gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl1));
7304
7305 /* If #pragma weak was used, mark the decl weak now. */
7306 if (current_scope == file_scope)
7307 maybe_apply_pragma_weak (decl1);
7308
7309 /* Warn for unlikely, improbable, or stupid declarations of `main'. */
7310 if (warn_main && MAIN_NAME_P (DECL_NAME (decl1)))
7311 {
7312 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1)))
7313 != integer_type_node)
7314 pedwarn (loc, OPT_Wmain, "return type of %qD is not %<int%>", decl1);
7315
7316 check_main_parameter_types (decl1);
7317
7318 if (!TREE_PUBLIC (decl1))
7319 pedwarn (loc, OPT_Wmain,
7320 "%qD is normally a non-static function", decl1);
7321 }
7322
7323 /* Record the decl so that the function name is defined.
7324 If we already have a decl for this name, and it is a FUNCTION_DECL,
7325 use the old decl. */
7326
7327 current_function_decl = pushdecl (decl1);
7328
7329 push_scope ();
7330 declare_parm_level ();
7331
7332 restype = TREE_TYPE (TREE_TYPE (current_function_decl));
7333 resdecl = build_decl (loc, RESULT_DECL, NULL_TREE, restype);
7334 DECL_ARTIFICIAL (resdecl) = 1;
7335 DECL_IGNORED_P (resdecl) = 1;
7336 DECL_RESULT (current_function_decl) = resdecl;
7337
7338 start_fname_decls ();
7339
7340 return 1;
7341 }
7342 \f
7343 /* Subroutine of store_parm_decls which handles new-style function
7344 definitions (prototype format). The parms already have decls, so we
7345 need only record them as in effect and complain if any redundant
7346 old-style parm decls were written. */
7347 static void
7348 store_parm_decls_newstyle (tree fndecl, const struct c_arg_info *arg_info)
7349 {
7350 tree decl;
7351
7352 if (current_scope->bindings)
7353 {
7354 error ("%Jold-style parameter declarations in prototyped "
7355 "function definition", fndecl);
7356
7357 /* Get rid of the old-style declarations. */
7358 pop_scope ();
7359 push_scope ();
7360 }
7361 /* Don't issue this warning for nested functions, and don't issue this
7362 warning if we got here because ARG_INFO_TYPES was error_mark_node
7363 (this happens when a function definition has just an ellipsis in
7364 its parameter list). */
7365 else if (!in_system_header && !current_function_scope
7366 && arg_info->types != error_mark_node)
7367 warning (OPT_Wtraditional,
7368 "%Jtraditional C rejects ISO C style function definitions",
7369 fndecl);
7370
7371 /* Now make all the parameter declarations visible in the function body.
7372 We can bypass most of the grunt work of pushdecl. */
7373 for (decl = arg_info->parms; decl; decl = TREE_CHAIN (decl))
7374 {
7375 DECL_CONTEXT (decl) = current_function_decl;
7376 if (DECL_NAME (decl))
7377 {
7378 bind (DECL_NAME (decl), decl, current_scope,
7379 /*invisible=*/false, /*nested=*/false,
7380 UNKNOWN_LOCATION);
7381 if (!TREE_USED (decl))
7382 warn_if_shadowing (decl);
7383 }
7384 else
7385 error ("%Jparameter name omitted", decl);
7386 }
7387
7388 /* Record the parameter list in the function declaration. */
7389 DECL_ARGUMENTS (fndecl) = arg_info->parms;
7390
7391 /* Now make all the ancillary declarations visible, likewise. */
7392 for (decl = arg_info->others; decl; decl = TREE_CHAIN (decl))
7393 {
7394 DECL_CONTEXT (decl) = current_function_decl;
7395 if (DECL_NAME (decl))
7396 bind (DECL_NAME (decl), decl, current_scope,
7397 /*invisible=*/false, /*nested=*/false, UNKNOWN_LOCATION);
7398 }
7399
7400 /* And all the tag declarations. */
7401 for (decl = arg_info->tags; decl; decl = TREE_CHAIN (decl))
7402 if (TREE_PURPOSE (decl))
7403 bind (TREE_PURPOSE (decl), TREE_VALUE (decl), current_scope,
7404 /*invisible=*/false, /*nested=*/false, UNKNOWN_LOCATION);
7405 }
7406
7407 /* Subroutine of store_parm_decls which handles old-style function
7408 definitions (separate parameter list and declarations). */
7409
7410 static void
7411 store_parm_decls_oldstyle (tree fndecl, const struct c_arg_info *arg_info)
7412 {
7413 struct c_binding *b;
7414 tree parm, decl, last;
7415 tree parmids = arg_info->parms;
7416 struct pointer_set_t *seen_args = pointer_set_create ();
7417
7418 if (!in_system_header)
7419 warning_at (DECL_SOURCE_LOCATION (fndecl),
7420 OPT_Wold_style_definition, "old-style function definition");
7421
7422 /* Match each formal parameter name with its declaration. Save each
7423 decl in the appropriate TREE_PURPOSE slot of the parmids chain. */
7424 for (parm = parmids; parm; parm = TREE_CHAIN (parm))
7425 {
7426 if (TREE_VALUE (parm) == 0)
7427 {
7428 error_at (DECL_SOURCE_LOCATION (fndecl),
7429 "parameter name missing from parameter list");
7430 TREE_PURPOSE (parm) = 0;
7431 continue;
7432 }
7433
7434 b = I_SYMBOL_BINDING (TREE_VALUE (parm));
7435 if (b && B_IN_CURRENT_SCOPE (b))
7436 {
7437 decl = b->decl;
7438 /* If we got something other than a PARM_DECL it is an error. */
7439 if (TREE_CODE (decl) != PARM_DECL)
7440 error_at (DECL_SOURCE_LOCATION (decl),
7441 "%qD declared as a non-parameter", decl);
7442 /* If the declaration is already marked, we have a duplicate
7443 name. Complain and ignore the duplicate. */
7444 else if (pointer_set_contains (seen_args, decl))
7445 {
7446 error_at (DECL_SOURCE_LOCATION (decl),
7447 "multiple parameters named %qD", decl);
7448 TREE_PURPOSE (parm) = 0;
7449 continue;
7450 }
7451 /* If the declaration says "void", complain and turn it into
7452 an int. */
7453 else if (VOID_TYPE_P (TREE_TYPE (decl)))
7454 {
7455 error_at (DECL_SOURCE_LOCATION (decl),
7456 "parameter %qD declared with void type", decl);
7457 TREE_TYPE (decl) = integer_type_node;
7458 DECL_ARG_TYPE (decl) = integer_type_node;
7459 layout_decl (decl, 0);
7460 }
7461 warn_if_shadowing (decl);
7462 }
7463 /* If no declaration found, default to int. */
7464 else
7465 {
7466 /* FIXME diagnostics: This should be the location of the argument,
7467 not the FNDECL. E.g., for an old-style declaration
7468
7469 int f10(v) { blah; }
7470
7471 We should use the location of the V, not the F10.
7472 Unfortunately, the V is an IDENTIFIER_NODE which has no
7473 location. In the future we need locations for c_arg_info
7474 entries.
7475
7476 See gcc.dg/Wshadow-3.c for an example of this problem. */
7477 decl = build_decl (DECL_SOURCE_LOCATION (fndecl),
7478 PARM_DECL, TREE_VALUE (parm), integer_type_node);
7479 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
7480 pushdecl (decl);
7481 warn_if_shadowing (decl);
7482
7483 if (flag_isoc99)
7484 pedwarn (DECL_SOURCE_LOCATION (decl),
7485 0, "type of %qD defaults to %<int%>", decl);
7486 else
7487 warning_at (DECL_SOURCE_LOCATION (decl),
7488 OPT_Wmissing_parameter_type,
7489 "type of %qD defaults to %<int%>", decl);
7490 }
7491
7492 TREE_PURPOSE (parm) = decl;
7493 pointer_set_insert (seen_args, decl);
7494 }
7495
7496 /* Now examine the parms chain for incomplete declarations
7497 and declarations with no corresponding names. */
7498
7499 for (b = current_scope->bindings; b; b = b->prev)
7500 {
7501 parm = b->decl;
7502 if (TREE_CODE (parm) != PARM_DECL)
7503 continue;
7504
7505 if (TREE_TYPE (parm) != error_mark_node
7506 && !COMPLETE_TYPE_P (TREE_TYPE (parm)))
7507 {
7508 error_at (DECL_SOURCE_LOCATION (parm),
7509 "parameter %qD has incomplete type", parm);
7510 TREE_TYPE (parm) = error_mark_node;
7511 }
7512
7513 if (!pointer_set_contains (seen_args, parm))
7514 {
7515 error_at (DECL_SOURCE_LOCATION (parm),
7516 "declaration for parameter %qD but no such parameter",
7517 parm);
7518
7519 /* Pretend the parameter was not missing.
7520 This gets us to a standard state and minimizes
7521 further error messages. */
7522 parmids = chainon (parmids, tree_cons (parm, 0, 0));
7523 }
7524 }
7525
7526 /* Chain the declarations together in the order of the list of
7527 names. Store that chain in the function decl, replacing the
7528 list of names. Update the current scope to match. */
7529 DECL_ARGUMENTS (fndecl) = 0;
7530
7531 for (parm = parmids; parm; parm = TREE_CHAIN (parm))
7532 if (TREE_PURPOSE (parm))
7533 break;
7534 if (parm && TREE_PURPOSE (parm))
7535 {
7536 last = TREE_PURPOSE (parm);
7537 DECL_ARGUMENTS (fndecl) = last;
7538
7539 for (parm = TREE_CHAIN (parm); parm; parm = TREE_CHAIN (parm))
7540 if (TREE_PURPOSE (parm))
7541 {
7542 TREE_CHAIN (last) = TREE_PURPOSE (parm);
7543 last = TREE_PURPOSE (parm);
7544 }
7545 TREE_CHAIN (last) = 0;
7546 }
7547
7548 pointer_set_destroy (seen_args);
7549
7550 /* If there was a previous prototype,
7551 set the DECL_ARG_TYPE of each argument according to
7552 the type previously specified, and report any mismatches. */
7553
7554 if (current_function_prototype_arg_types)
7555 {
7556 tree type;
7557 for (parm = DECL_ARGUMENTS (fndecl),
7558 type = current_function_prototype_arg_types;
7559 parm || (type && TREE_VALUE (type) != error_mark_node
7560 && (TYPE_MAIN_VARIANT (TREE_VALUE (type)) != void_type_node));
7561 parm = TREE_CHAIN (parm), type = TREE_CHAIN (type))
7562 {
7563 if (parm == 0 || type == 0
7564 || TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
7565 {
7566 if (current_function_prototype_built_in)
7567 warning_at (DECL_SOURCE_LOCATION (fndecl),
7568 0, "number of arguments doesn%'t match "
7569 "built-in prototype");
7570 else
7571 {
7572 /* FIXME diagnostics: This should be the location of
7573 FNDECL, but there is bug when a prototype is
7574 declared inside function context, but defined
7575 outside of it (e.g., gcc.dg/pr15698-2.c). In
7576 which case FNDECL gets the location of the
7577 prototype, not the definition. */
7578 error_at (input_location,
7579 "number of arguments doesn%'t match prototype");
7580
7581 error_at (current_function_prototype_locus,
7582 "prototype declaration");
7583 }
7584 break;
7585 }
7586 /* Type for passing arg must be consistent with that
7587 declared for the arg. ISO C says we take the unqualified
7588 type for parameters declared with qualified type. */
7589 if (TREE_TYPE (parm) != error_mark_node
7590 && TREE_TYPE (type) != error_mark_node
7591 && !comptypes (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (parm)),
7592 TYPE_MAIN_VARIANT (TREE_VALUE (type))))
7593 {
7594 if (TYPE_MAIN_VARIANT (TREE_TYPE (parm))
7595 == TYPE_MAIN_VARIANT (TREE_VALUE (type)))
7596 {
7597 /* Adjust argument to match prototype. E.g. a previous
7598 `int foo(float);' prototype causes
7599 `int foo(x) float x; {...}' to be treated like
7600 `int foo(float x) {...}'. This is particularly
7601 useful for argument types like uid_t. */
7602 DECL_ARG_TYPE (parm) = TREE_TYPE (parm);
7603
7604 if (targetm.calls.promote_prototypes (TREE_TYPE (current_function_decl))
7605 && INTEGRAL_TYPE_P (TREE_TYPE (parm))
7606 && TYPE_PRECISION (TREE_TYPE (parm))
7607 < TYPE_PRECISION (integer_type_node))
7608 DECL_ARG_TYPE (parm) = integer_type_node;
7609
7610 /* ??? Is it possible to get here with a
7611 built-in prototype or will it always have
7612 been diagnosed as conflicting with an
7613 old-style definition and discarded? */
7614 if (current_function_prototype_built_in)
7615 warning_at (DECL_SOURCE_LOCATION (parm),
7616 OPT_pedantic, "promoted argument %qD "
7617 "doesn%'t match built-in prototype", parm);
7618 else
7619 {
7620 pedwarn (DECL_SOURCE_LOCATION (parm),
7621 OPT_pedantic, "promoted argument %qD "
7622 "doesn%'t match prototype", parm);
7623 pedwarn (current_function_prototype_locus, OPT_pedantic,
7624 "prototype declaration");
7625 }
7626 }
7627 else
7628 {
7629 if (current_function_prototype_built_in)
7630 warning_at (DECL_SOURCE_LOCATION (parm),
7631 0, "argument %qD doesn%'t match "
7632 "built-in prototype", parm);
7633 else
7634 {
7635 error_at (DECL_SOURCE_LOCATION (parm),
7636 "argument %qD doesn%'t match prototype", parm);
7637 error_at (current_function_prototype_locus,
7638 "prototype declaration");
7639 }
7640 }
7641 }
7642 }
7643 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = 0;
7644 }
7645
7646 /* Otherwise, create a prototype that would match. */
7647
7648 else
7649 {
7650 tree actual = 0, last = 0, type;
7651
7652 for (parm = DECL_ARGUMENTS (fndecl); parm; parm = TREE_CHAIN (parm))
7653 {
7654 type = tree_cons (NULL_TREE, DECL_ARG_TYPE (parm), NULL_TREE);
7655 if (last)
7656 TREE_CHAIN (last) = type;
7657 else
7658 actual = type;
7659 last = type;
7660 }
7661 type = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
7662 if (last)
7663 TREE_CHAIN (last) = type;
7664 else
7665 actual = type;
7666
7667 /* We are going to assign a new value for the TYPE_ACTUAL_ARG_TYPES
7668 of the type of this function, but we need to avoid having this
7669 affect the types of other similarly-typed functions, so we must
7670 first force the generation of an identical (but separate) type
7671 node for the relevant function type. The new node we create
7672 will be a variant of the main variant of the original function
7673 type. */
7674
7675 TREE_TYPE (fndecl) = build_variant_type_copy (TREE_TYPE (fndecl));
7676
7677 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = actual;
7678 }
7679 }
7680
7681 /* Store parameter declarations passed in ARG_INFO into the current
7682 function declaration. */
7683
7684 void
7685 store_parm_decls_from (struct c_arg_info *arg_info)
7686 {
7687 current_function_arg_info = arg_info;
7688 store_parm_decls ();
7689 }
7690
7691 /* Store the parameter declarations into the current function declaration.
7692 This is called after parsing the parameter declarations, before
7693 digesting the body of the function.
7694
7695 For an old-style definition, construct a prototype out of the old-style
7696 parameter declarations and inject it into the function's type. */
7697
7698 void
7699 store_parm_decls (void)
7700 {
7701 tree fndecl = current_function_decl;
7702 bool proto;
7703
7704 /* The argument information block for FNDECL. */
7705 struct c_arg_info *arg_info = current_function_arg_info;
7706 current_function_arg_info = 0;
7707
7708 /* True if this definition is written with a prototype. Note:
7709 despite C99 6.7.5.3p14, we can *not* treat an empty argument
7710 list in a function definition as equivalent to (void) -- an
7711 empty argument list specifies the function has no parameters,
7712 but only (void) sets up a prototype for future calls. */
7713 proto = arg_info->types != 0;
7714
7715 if (proto)
7716 store_parm_decls_newstyle (fndecl, arg_info);
7717 else
7718 store_parm_decls_oldstyle (fndecl, arg_info);
7719
7720 /* The next call to push_scope will be a function body. */
7721
7722 next_is_function_body = true;
7723
7724 /* Write a record describing this function definition to the prototypes
7725 file (if requested). */
7726
7727 gen_aux_info_record (fndecl, 1, 0, proto);
7728
7729 /* Initialize the RTL code for the function. */
7730 allocate_struct_function (fndecl, false);
7731
7732 /* Begin the statement tree for this function. */
7733 DECL_SAVED_TREE (fndecl) = push_stmt_list ();
7734
7735 /* ??? Insert the contents of the pending sizes list into the function
7736 to be evaluated. The only reason left to have this is
7737 void foo(int n, int array[n++])
7738 because we throw away the array type in favor of a pointer type, and
7739 thus won't naturally see the SAVE_EXPR containing the increment. All
7740 other pending sizes would be handled by gimplify_parameters. */
7741 {
7742 tree t;
7743 for (t = nreverse (get_pending_sizes ()); t ; t = TREE_CHAIN (t))
7744 add_stmt (TREE_VALUE (t));
7745 }
7746
7747 /* Even though we're inside a function body, we still don't want to
7748 call expand_expr to calculate the size of a variable-sized array.
7749 We haven't necessarily assigned RTL to all variables yet, so it's
7750 not safe to try to expand expressions involving them. */
7751 cfun->dont_save_pending_sizes_p = 1;
7752 }
7753 \f
7754 /* Emit diagnostics that require gimple input for detection. Operate on
7755 FNDECL and all its nested functions. */
7756
7757 static void
7758 c_gimple_diagnostics_recursively (tree fndecl)
7759 {
7760 struct cgraph_node *cgn;
7761 gimple_seq body = gimple_body (fndecl);
7762
7763 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
7764 c_warn_unused_result (body);
7765
7766 /* Notice when OpenMP structured block constraints are violated. */
7767 if (flag_openmp)
7768 diagnose_omp_structured_block_errors (fndecl);
7769
7770 /* Finalize all nested functions now. */
7771 cgn = cgraph_node (fndecl);
7772 for (cgn = cgn->nested; cgn ; cgn = cgn->next_nested)
7773 c_gimple_diagnostics_recursively (cgn->decl);
7774 }
7775
7776 /* Finish up a function declaration and compile that function
7777 all the way to assembler language output. The free the storage
7778 for the function definition.
7779
7780 This is called after parsing the body of the function definition. */
7781
7782 void
7783 finish_function (void)
7784 {
7785 tree fndecl = current_function_decl;
7786
7787 if (TREE_CODE (fndecl) == FUNCTION_DECL
7788 && targetm.calls.promote_prototypes (TREE_TYPE (fndecl)))
7789 {
7790 tree args = DECL_ARGUMENTS (fndecl);
7791 for (; args; args = TREE_CHAIN (args))
7792 {
7793 tree type = TREE_TYPE (args);
7794 if (INTEGRAL_TYPE_P (type)
7795 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
7796 DECL_ARG_TYPE (args) = integer_type_node;
7797 }
7798 }
7799
7800 if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node)
7801 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
7802
7803 /* Must mark the RESULT_DECL as being in this function. */
7804
7805 if (DECL_RESULT (fndecl) && DECL_RESULT (fndecl) != error_mark_node)
7806 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
7807
7808 if (MAIN_NAME_P (DECL_NAME (fndecl)) && flag_hosted
7809 && TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (fndecl)))
7810 == integer_type_node && flag_isoc99)
7811 {
7812 /* Hack. We don't want the middle-end to warn that this return
7813 is unreachable, so we mark its location as special. Using
7814 UNKNOWN_LOCATION has the problem that it gets clobbered in
7815 annotate_one_with_locus. A cleaner solution might be to
7816 ensure ! should_carry_locus_p (stmt), but that needs a flag.
7817 */
7818 c_finish_return (BUILTINS_LOCATION, integer_zero_node, NULL_TREE);
7819 }
7820
7821 /* Tie off the statement tree for this function. */
7822 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
7823
7824 finish_fname_decls ();
7825
7826 /* Complain if there's just no return statement. */
7827 if (warn_return_type
7828 && TREE_CODE (TREE_TYPE (TREE_TYPE (fndecl))) != VOID_TYPE
7829 && !current_function_returns_value && !current_function_returns_null
7830 /* Don't complain if we are no-return. */
7831 && !current_function_returns_abnormally
7832 /* Don't warn for main(). */
7833 && !MAIN_NAME_P (DECL_NAME (fndecl))
7834 /* Or if they didn't actually specify a return type. */
7835 && !C_FUNCTION_IMPLICIT_INT (fndecl)
7836 /* Normally, with -Wreturn-type, flow will complain, but we might
7837 optimize out static functions. */
7838 && !TREE_PUBLIC (fndecl))
7839 {
7840 warning (OPT_Wreturn_type,
7841 "no return statement in function returning non-void");
7842 TREE_NO_WARNING (fndecl) = 1;
7843 }
7844
7845 /* Store the end of the function, so that we get good line number
7846 info for the epilogue. */
7847 cfun->function_end_locus = input_location;
7848
7849 /* Finalize the ELF visibility for the function. */
7850 c_determine_visibility (fndecl);
7851
7852 /* For GNU C extern inline functions disregard inline limits. */
7853 if (DECL_EXTERNAL (fndecl)
7854 && DECL_DECLARED_INLINE_P (fndecl))
7855 DECL_DISREGARD_INLINE_LIMITS (fndecl) = 1;
7856
7857 /* Genericize before inlining. Delay genericizing nested functions
7858 until their parent function is genericized. Since finalizing
7859 requires GENERIC, delay that as well. */
7860
7861 if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node
7862 && !undef_nested_function)
7863 {
7864 if (!decl_function_context (fndecl))
7865 {
7866 c_genericize (fndecl);
7867 c_gimple_diagnostics_recursively (fndecl);
7868
7869 /* ??? Objc emits functions after finalizing the compilation unit.
7870 This should be cleaned up later and this conditional removed. */
7871 if (cgraph_global_info_ready)
7872 {
7873 cgraph_add_new_function (fndecl, false);
7874 return;
7875 }
7876 cgraph_finalize_function (fndecl, false);
7877 }
7878 else
7879 {
7880 /* Register this function with cgraph just far enough to get it
7881 added to our parent's nested function list. Handy, since the
7882 C front end doesn't have such a list. */
7883 (void) cgraph_node (fndecl);
7884 }
7885 }
7886
7887 if (!decl_function_context (fndecl))
7888 undef_nested_function = false;
7889
7890 /* We're leaving the context of this function, so zap cfun.
7891 It's still in DECL_STRUCT_FUNCTION, and we'll restore it in
7892 tree_rest_of_compilation. */
7893 set_cfun (NULL);
7894 current_function_decl = NULL;
7895 }
7896 \f
7897 /* Check the declarations given in a for-loop for satisfying the C99
7898 constraints. If exactly one such decl is found, return it. LOC is
7899 the location of the opening parenthesis of the for loop. */
7900
7901 tree
7902 check_for_loop_decls (location_t loc)
7903 {
7904 struct c_binding *b;
7905 tree one_decl = NULL_TREE;
7906 int n_decls = 0;
7907
7908 if (!flag_isoc99)
7909 {
7910 static bool hint = true;
7911 /* If we get here, declarations have been used in a for loop without
7912 the C99 for loop scope. This doesn't make much sense, so don't
7913 allow it. */
7914 error_at (loc, "%<for%> loop initial declarations "
7915 "are only allowed in C99 mode");
7916 if (hint)
7917 {
7918 inform (loc,
7919 "use option -std=c99 or -std=gnu99 to compile your code");
7920 hint = false;
7921 }
7922 return NULL_TREE;
7923 }
7924 /* C99 subclause 6.8.5 paragraph 3:
7925
7926 [#3] The declaration part of a for statement shall only
7927 declare identifiers for objects having storage class auto or
7928 register.
7929
7930 It isn't clear whether, in this sentence, "identifiers" binds to
7931 "shall only declare" or to "objects" - that is, whether all identifiers
7932 declared must be identifiers for objects, or whether the restriction
7933 only applies to those that are. (A question on this in comp.std.c
7934 in November 2000 received no answer.) We implement the strictest
7935 interpretation, to avoid creating an extension which later causes
7936 problems. */
7937
7938 for (b = current_scope->bindings; b; b = b->prev)
7939 {
7940 tree id = b->id;
7941 tree decl = b->decl;
7942
7943 if (!id)
7944 continue;
7945
7946 switch (TREE_CODE (decl))
7947 {
7948 case VAR_DECL:
7949 {
7950 location_t decl_loc = DECL_SOURCE_LOCATION (decl);
7951 if (TREE_STATIC (decl))
7952 error_at (decl_loc,
7953 "declaration of static variable %qD in %<for%> loop "
7954 "initial declaration", decl);
7955 else if (DECL_EXTERNAL (decl))
7956 error_at (decl_loc,
7957 "declaration of %<extern%> variable %qD in %<for%> loop "
7958 "initial declaration", decl);
7959 }
7960 break;
7961
7962 case RECORD_TYPE:
7963 error_at (loc,
7964 "%<struct %E%> declared in %<for%> loop initial "
7965 "declaration", id);
7966 break;
7967 case UNION_TYPE:
7968 error_at (loc,
7969 "%<union %E%> declared in %<for%> loop initial declaration",
7970 id);
7971 break;
7972 case ENUMERAL_TYPE:
7973 error_at (loc, "%<enum %E%> declared in %<for%> loop "
7974 "initial declaration", id);
7975 break;
7976 default:
7977 error_at (loc, "declaration of non-variable "
7978 "%qD in %<for%> loop initial declaration", decl);
7979 }
7980
7981 n_decls++;
7982 one_decl = decl;
7983 }
7984
7985 return n_decls == 1 ? one_decl : NULL_TREE;
7986 }
7987 \f
7988 /* Save and reinitialize the variables
7989 used during compilation of a C function. */
7990
7991 void
7992 c_push_function_context (void)
7993 {
7994 struct language_function *p;
7995 p = GGC_NEW (struct language_function);
7996 cfun->language = p;
7997
7998 p->base.x_stmt_tree = c_stmt_tree;
7999 p->x_break_label = c_break_label;
8000 p->x_cont_label = c_cont_label;
8001 p->x_switch_stack = c_switch_stack;
8002 p->arg_info = current_function_arg_info;
8003 p->returns_value = current_function_returns_value;
8004 p->returns_null = current_function_returns_null;
8005 p->returns_abnormally = current_function_returns_abnormally;
8006 p->warn_about_return_type = warn_about_return_type;
8007
8008 push_function_context ();
8009 }
8010
8011 /* Restore the variables used during compilation of a C function. */
8012
8013 void
8014 c_pop_function_context (void)
8015 {
8016 struct language_function *p;
8017
8018 pop_function_context ();
8019 p = cfun->language;
8020 cfun->language = NULL;
8021
8022 if (DECL_STRUCT_FUNCTION (current_function_decl) == 0
8023 && DECL_SAVED_TREE (current_function_decl) == NULL_TREE)
8024 {
8025 /* Stop pointing to the local nodes about to be freed. */
8026 /* But DECL_INITIAL must remain nonzero so we know this
8027 was an actual function definition. */
8028 DECL_INITIAL (current_function_decl) = error_mark_node;
8029 DECL_ARGUMENTS (current_function_decl) = 0;
8030 }
8031
8032 c_stmt_tree = p->base.x_stmt_tree;
8033 c_break_label = p->x_break_label;
8034 c_cont_label = p->x_cont_label;
8035 c_switch_stack = p->x_switch_stack;
8036 current_function_arg_info = p->arg_info;
8037 current_function_returns_value = p->returns_value;
8038 current_function_returns_null = p->returns_null;
8039 current_function_returns_abnormally = p->returns_abnormally;
8040 warn_about_return_type = p->warn_about_return_type;
8041 }
8042
8043 /* Copy the DECL_LANG_SPECIFIC data associated with DECL. */
8044
8045 void
8046 c_dup_lang_specific_decl (tree decl)
8047 {
8048 struct lang_decl *ld;
8049
8050 if (!DECL_LANG_SPECIFIC (decl))
8051 return;
8052
8053 ld = GGC_NEW (struct lang_decl);
8054 memcpy (ld, DECL_LANG_SPECIFIC (decl), sizeof (struct lang_decl));
8055 DECL_LANG_SPECIFIC (decl) = ld;
8056 }
8057
8058 /* The functions below are required for functionality of doing
8059 function at once processing in the C front end. Currently these
8060 functions are not called from anywhere in the C front end, but as
8061 these changes continue, that will change. */
8062
8063 /* Returns the stmt_tree (if any) to which statements are currently
8064 being added. If there is no active statement-tree, NULL is
8065 returned. */
8066
8067 stmt_tree
8068 current_stmt_tree (void)
8069 {
8070 return &c_stmt_tree;
8071 }
8072
8073 /* Return the global value of T as a symbol. */
8074
8075 tree
8076 identifier_global_value (tree t)
8077 {
8078 struct c_binding *b;
8079
8080 for (b = I_SYMBOL_BINDING (t); b; b = b->shadowed)
8081 if (B_IN_FILE_SCOPE (b) || B_IN_EXTERNAL_SCOPE (b))
8082 return b->decl;
8083
8084 return 0;
8085 }
8086
8087 /* Record a builtin type for C. If NAME is non-NULL, it is the name used;
8088 otherwise the name is found in ridpointers from RID_INDEX. */
8089
8090 void
8091 record_builtin_type (enum rid rid_index, const char *name, tree type)
8092 {
8093 tree id, decl;
8094 if (name == 0)
8095 id = ridpointers[(int) rid_index];
8096 else
8097 id = get_identifier (name);
8098 decl = build_decl (UNKNOWN_LOCATION, TYPE_DECL, id, type);
8099 pushdecl (decl);
8100 if (debug_hooks->type_decl)
8101 debug_hooks->type_decl (decl, false);
8102 }
8103
8104 /* Build the void_list_node (void_type_node having been created). */
8105 tree
8106 build_void_list_node (void)
8107 {
8108 tree t = build_tree_list (NULL_TREE, void_type_node);
8109 return t;
8110 }
8111
8112 /* Return a c_parm structure with the given SPECS, ATTRS and DECLARATOR. */
8113
8114 struct c_parm *
8115 build_c_parm (struct c_declspecs *specs, tree attrs,
8116 struct c_declarator *declarator)
8117 {
8118 struct c_parm *ret = XOBNEW (&parser_obstack, struct c_parm);
8119 ret->specs = specs;
8120 ret->attrs = attrs;
8121 ret->declarator = declarator;
8122 return ret;
8123 }
8124
8125 /* Return a declarator with nested attributes. TARGET is the inner
8126 declarator to which these attributes apply. ATTRS are the
8127 attributes. */
8128
8129 struct c_declarator *
8130 build_attrs_declarator (tree attrs, struct c_declarator *target)
8131 {
8132 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
8133 ret->kind = cdk_attrs;
8134 ret->declarator = target;
8135 ret->u.attrs = attrs;
8136 return ret;
8137 }
8138
8139 /* Return a declarator for a function with arguments specified by ARGS
8140 and return type specified by TARGET. */
8141
8142 struct c_declarator *
8143 build_function_declarator (struct c_arg_info *args,
8144 struct c_declarator *target)
8145 {
8146 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
8147 ret->kind = cdk_function;
8148 ret->declarator = target;
8149 ret->u.arg_info = args;
8150 return ret;
8151 }
8152
8153 /* Return a declarator for the identifier IDENT (which may be
8154 NULL_TREE for an abstract declarator). */
8155
8156 struct c_declarator *
8157 build_id_declarator (tree ident)
8158 {
8159 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
8160 ret->kind = cdk_id;
8161 ret->declarator = 0;
8162 ret->u.id = ident;
8163 /* Default value - may get reset to a more precise location. */
8164 ret->id_loc = input_location;
8165 return ret;
8166 }
8167
8168 /* Return something to represent absolute declarators containing a *.
8169 TARGET is the absolute declarator that the * contains.
8170 TYPE_QUALS_ATTRS is a structure for type qualifiers and attributes
8171 to apply to the pointer type. */
8172
8173 struct c_declarator *
8174 make_pointer_declarator (struct c_declspecs *type_quals_attrs,
8175 struct c_declarator *target)
8176 {
8177 tree attrs;
8178 int quals = 0;
8179 struct c_declarator *itarget = target;
8180 struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
8181 if (type_quals_attrs)
8182 {
8183 attrs = type_quals_attrs->attrs;
8184 quals = quals_from_declspecs (type_quals_attrs);
8185 if (attrs != NULL_TREE)
8186 itarget = build_attrs_declarator (attrs, target);
8187 }
8188 ret->kind = cdk_pointer;
8189 ret->declarator = itarget;
8190 ret->u.pointer_quals = quals;
8191 return ret;
8192 }
8193
8194 /* Return a pointer to a structure for an empty list of declaration
8195 specifiers. */
8196
8197 struct c_declspecs *
8198 build_null_declspecs (void)
8199 {
8200 struct c_declspecs *ret = XOBNEW (&parser_obstack, struct c_declspecs);
8201 ret->type = 0;
8202 ret->expr = 0;
8203 ret->decl_attr = 0;
8204 ret->attrs = 0;
8205 ret->typespec_word = cts_none;
8206 ret->storage_class = csc_none;
8207 ret->expr_const_operands = true;
8208 ret->declspecs_seen_p = false;
8209 ret->type_seen_p = false;
8210 ret->non_sc_seen_p = false;
8211 ret->typedef_p = false;
8212 ret->tag_defined_p = false;
8213 ret->explicit_signed_p = false;
8214 ret->deprecated_p = false;
8215 ret->default_int_p = false;
8216 ret->long_p = false;
8217 ret->long_long_p = false;
8218 ret->short_p = false;
8219 ret->signed_p = false;
8220 ret->unsigned_p = false;
8221 ret->complex_p = false;
8222 ret->inline_p = false;
8223 ret->thread_p = false;
8224 ret->const_p = false;
8225 ret->volatile_p = false;
8226 ret->restrict_p = false;
8227 ret->saturating_p = false;
8228 return ret;
8229 }
8230
8231 /* Add the type qualifier QUAL to the declaration specifiers SPECS,
8232 returning SPECS. */
8233
8234 struct c_declspecs *
8235 declspecs_add_qual (struct c_declspecs *specs, tree qual)
8236 {
8237 enum rid i;
8238 bool dupe = false;
8239 specs->non_sc_seen_p = true;
8240 specs->declspecs_seen_p = true;
8241 gcc_assert (TREE_CODE (qual) == IDENTIFIER_NODE
8242 && C_IS_RESERVED_WORD (qual));
8243 i = C_RID_CODE (qual);
8244 switch (i)
8245 {
8246 case RID_CONST:
8247 dupe = specs->const_p;
8248 specs->const_p = true;
8249 break;
8250 case RID_VOLATILE:
8251 dupe = specs->volatile_p;
8252 specs->volatile_p = true;
8253 break;
8254 case RID_RESTRICT:
8255 dupe = specs->restrict_p;
8256 specs->restrict_p = true;
8257 break;
8258 default:
8259 gcc_unreachable ();
8260 }
8261 if (dupe && !flag_isoc99)
8262 pedwarn (input_location, OPT_pedantic, "duplicate %qE", qual);
8263 return specs;
8264 }
8265
8266 /* Add the type specifier TYPE to the declaration specifiers SPECS,
8267 returning SPECS. */
8268
8269 struct c_declspecs *
8270 declspecs_add_type (struct c_declspecs *specs, struct c_typespec spec)
8271 {
8272 tree type = spec.spec;
8273 specs->non_sc_seen_p = true;
8274 specs->declspecs_seen_p = true;
8275 specs->type_seen_p = true;
8276 if (TREE_DEPRECATED (type))
8277 specs->deprecated_p = true;
8278
8279 /* Handle type specifier keywords. */
8280 if (TREE_CODE (type) == IDENTIFIER_NODE
8281 && C_IS_RESERVED_WORD (type)
8282 && C_RID_CODE (type) != RID_CXX_COMPAT_WARN)
8283 {
8284 enum rid i = C_RID_CODE (type);
8285 if (specs->type)
8286 {
8287 error ("two or more data types in declaration specifiers");
8288 return specs;
8289 }
8290 if ((int) i <= (int) RID_LAST_MODIFIER)
8291 {
8292 /* "long", "short", "signed", "unsigned", "_Complex" or "_Sat". */
8293 bool dupe = false;
8294 switch (i)
8295 {
8296 case RID_LONG:
8297 if (specs->long_long_p)
8298 {
8299 error ("%<long long long%> is too long for GCC");
8300 break;
8301 }
8302 if (specs->long_p)
8303 {
8304 if (specs->typespec_word == cts_double)
8305 {
8306 error ("both %<long long%> and %<double%> in "
8307 "declaration specifiers");
8308 break;
8309 }
8310 pedwarn_c90 (input_location, OPT_Wlong_long,
8311 "ISO C90 does not support %<long long%>");
8312 specs->long_long_p = 1;
8313 break;
8314 }
8315 if (specs->short_p)
8316 error ("both %<long%> and %<short%> in "
8317 "declaration specifiers");
8318 else if (specs->typespec_word == cts_void)
8319 error ("both %<long%> and %<void%> in "
8320 "declaration specifiers");
8321 else if (specs->typespec_word == cts_bool)
8322 error ("both %<long%> and %<_Bool%> in "
8323 "declaration specifiers");
8324 else if (specs->typespec_word == cts_char)
8325 error ("both %<long%> and %<char%> in "
8326 "declaration specifiers");
8327 else if (specs->typespec_word == cts_float)
8328 error ("both %<long%> and %<float%> in "
8329 "declaration specifiers");
8330 else if (specs->typespec_word == cts_dfloat32)
8331 error ("both %<long%> and %<_Decimal32%> in "
8332 "declaration specifiers");
8333 else if (specs->typespec_word == cts_dfloat64)
8334 error ("both %<long%> and %<_Decimal64%> in "
8335 "declaration specifiers");
8336 else if (specs->typespec_word == cts_dfloat128)
8337 error ("both %<long%> and %<_Decimal128%> in "
8338 "declaration specifiers");
8339 else
8340 specs->long_p = true;
8341 break;
8342 case RID_SHORT:
8343 dupe = specs->short_p;
8344 if (specs->long_p)
8345 error ("both %<long%> and %<short%> in "
8346 "declaration specifiers");
8347 else if (specs->typespec_word == cts_void)
8348 error ("both %<short%> and %<void%> in "
8349 "declaration specifiers");
8350 else if (specs->typespec_word == cts_bool)
8351 error ("both %<short%> and %<_Bool%> in "
8352 "declaration specifiers");
8353 else if (specs->typespec_word == cts_char)
8354 error ("both %<short%> and %<char%> in "
8355 "declaration specifiers");
8356 else if (specs->typespec_word == cts_float)
8357 error ("both %<short%> and %<float%> in "
8358 "declaration specifiers");
8359 else if (specs->typespec_word == cts_double)
8360 error ("both %<short%> and %<double%> in "
8361 "declaration specifiers");
8362 else if (specs->typespec_word == cts_dfloat32)
8363 error ("both %<short%> and %<_Decimal32%> in "
8364 "declaration specifiers");
8365 else if (specs->typespec_word == cts_dfloat64)
8366 error ("both %<short%> and %<_Decimal64%> in "
8367 "declaration specifiers");
8368 else if (specs->typespec_word == cts_dfloat128)
8369 error ("both %<short%> and %<_Decimal128%> in "
8370 "declaration specifiers");
8371 else
8372 specs->short_p = true;
8373 break;
8374 case RID_SIGNED:
8375 dupe = specs->signed_p;
8376 if (specs->unsigned_p)
8377 error ("both %<signed%> and %<unsigned%> in "
8378 "declaration specifiers");
8379 else if (specs->typespec_word == cts_void)
8380 error ("both %<signed%> and %<void%> in "
8381 "declaration specifiers");
8382 else if (specs->typespec_word == cts_bool)
8383 error ("both %<signed%> and %<_Bool%> in "
8384 "declaration specifiers");
8385 else if (specs->typespec_word == cts_float)
8386 error ("both %<signed%> and %<float%> in "
8387 "declaration specifiers");
8388 else if (specs->typespec_word == cts_double)
8389 error ("both %<signed%> and %<double%> in "
8390 "declaration specifiers");
8391 else if (specs->typespec_word == cts_dfloat32)
8392 error ("both %<signed%> and %<_Decimal32%> in "
8393 "declaration specifiers");
8394 else if (specs->typespec_word == cts_dfloat64)
8395 error ("both %<signed%> and %<_Decimal64%> in "
8396 "declaration specifiers");
8397 else if (specs->typespec_word == cts_dfloat128)
8398 error ("both %<signed%> and %<_Decimal128%> in "
8399 "declaration specifiers");
8400 else
8401 specs->signed_p = true;
8402 break;
8403 case RID_UNSIGNED:
8404 dupe = specs->unsigned_p;
8405 if (specs->signed_p)
8406 error ("both %<signed%> and %<unsigned%> in "
8407 "declaration specifiers");
8408 else if (specs->typespec_word == cts_void)
8409 error ("both %<unsigned%> and %<void%> in "
8410 "declaration specifiers");
8411 else if (specs->typespec_word == cts_bool)
8412 error ("both %<unsigned%> and %<_Bool%> in "
8413 "declaration specifiers");
8414 else if (specs->typespec_word == cts_float)
8415 error ("both %<unsigned%> and %<float%> in "
8416 "declaration specifiers");
8417 else if (specs->typespec_word == cts_double)
8418 error ("both %<unsigned%> and %<double%> in "
8419 "declaration specifiers");
8420 else if (specs->typespec_word == cts_dfloat32)
8421 error ("both %<unsigned%> and %<_Decimal32%> in "
8422 "declaration specifiers");
8423 else if (specs->typespec_word == cts_dfloat64)
8424 error ("both %<unsigned%> and %<_Decimal64%> in "
8425 "declaration specifiers");
8426 else if (specs->typespec_word == cts_dfloat128)
8427 error ("both %<unsigned%> and %<_Decimal128%> in "
8428 "declaration specifiers");
8429 else
8430 specs->unsigned_p = true;
8431 break;
8432 case RID_COMPLEX:
8433 dupe = specs->complex_p;
8434 if (!flag_isoc99 && !in_system_header)
8435 pedwarn (input_location, OPT_pedantic, "ISO C90 does not support complex types");
8436 if (specs->typespec_word == cts_void)
8437 error ("both %<complex%> and %<void%> in "
8438 "declaration specifiers");
8439 else if (specs->typespec_word == cts_bool)
8440 error ("both %<complex%> and %<_Bool%> in "
8441 "declaration specifiers");
8442 else if (specs->typespec_word == cts_dfloat32)
8443 error ("both %<complex%> and %<_Decimal32%> in "
8444 "declaration specifiers");
8445 else if (specs->typespec_word == cts_dfloat64)
8446 error ("both %<complex%> and %<_Decimal64%> in "
8447 "declaration specifiers");
8448 else if (specs->typespec_word == cts_dfloat128)
8449 error ("both %<complex%> and %<_Decimal128%> in "
8450 "declaration specifiers");
8451 else if (specs->typespec_word == cts_fract)
8452 error ("both %<complex%> and %<_Fract%> in "
8453 "declaration specifiers");
8454 else if (specs->typespec_word == cts_accum)
8455 error ("both %<complex%> and %<_Accum%> in "
8456 "declaration specifiers");
8457 else if (specs->saturating_p)
8458 error ("both %<complex%> and %<_Sat%> in "
8459 "declaration specifiers");
8460 else
8461 specs->complex_p = true;
8462 break;
8463 case RID_SAT:
8464 dupe = specs->saturating_p;
8465 pedwarn (input_location, OPT_pedantic, "ISO C does not support saturating types");
8466 if (specs->typespec_word == cts_void)
8467 error ("both %<_Sat%> and %<void%> in "
8468 "declaration specifiers");
8469 else if (specs->typespec_word == cts_bool)
8470 error ("both %<_Sat%> and %<_Bool%> in "
8471 "declaration specifiers");
8472 else if (specs->typespec_word == cts_char)
8473 error ("both %<_Sat%> and %<char%> in "
8474 "declaration specifiers");
8475 else if (specs->typespec_word == cts_int)
8476 error ("both %<_Sat%> and %<int%> in "
8477 "declaration specifiers");
8478 else if (specs->typespec_word == cts_float)
8479 error ("both %<_Sat%> and %<float%> in "
8480 "declaration specifiers");
8481 else if (specs->typespec_word == cts_double)
8482 error ("both %<_Sat%> and %<double%> in "
8483 "declaration specifiers");
8484 else if (specs->typespec_word == cts_dfloat32)
8485 error ("both %<_Sat%> and %<_Decimal32%> in "
8486 "declaration specifiers");
8487 else if (specs->typespec_word == cts_dfloat64)
8488 error ("both %<_Sat%> and %<_Decimal64%> in "
8489 "declaration specifiers");
8490 else if (specs->typespec_word == cts_dfloat128)
8491 error ("both %<_Sat%> and %<_Decimal128%> in "
8492 "declaration specifiers");
8493 else if (specs->complex_p)
8494 error ("both %<_Sat%> and %<complex%> in "
8495 "declaration specifiers");
8496 else
8497 specs->saturating_p = true;
8498 break;
8499 default:
8500 gcc_unreachable ();
8501 }
8502
8503 if (dupe)
8504 error ("duplicate %qE", type);
8505
8506 return specs;
8507 }
8508 else
8509 {
8510 /* "void", "_Bool", "char", "int", "float", "double", "_Decimal32",
8511 "_Decimal64", "_Decimal128", "_Fract" or "_Accum". */
8512 if (specs->typespec_word != cts_none)
8513 {
8514 error ("two or more data types in declaration specifiers");
8515 return specs;
8516 }
8517 switch (i)
8518 {
8519 case RID_VOID:
8520 if (specs->long_p)
8521 error ("both %<long%> and %<void%> in "
8522 "declaration specifiers");
8523 else if (specs->short_p)
8524 error ("both %<short%> and %<void%> in "
8525 "declaration specifiers");
8526 else if (specs->signed_p)
8527 error ("both %<signed%> and %<void%> in "
8528 "declaration specifiers");
8529 else if (specs->unsigned_p)
8530 error ("both %<unsigned%> and %<void%> in "
8531 "declaration specifiers");
8532 else if (specs->complex_p)
8533 error ("both %<complex%> and %<void%> in "
8534 "declaration specifiers");
8535 else if (specs->saturating_p)
8536 error ("both %<_Sat%> and %<void%> in "
8537 "declaration specifiers");
8538 else
8539 specs->typespec_word = cts_void;
8540 return specs;
8541 case RID_BOOL:
8542 if (specs->long_p)
8543 error ("both %<long%> and %<_Bool%> in "
8544 "declaration specifiers");
8545 else if (specs->short_p)
8546 error ("both %<short%> and %<_Bool%> in "
8547 "declaration specifiers");
8548 else if (specs->signed_p)
8549 error ("both %<signed%> and %<_Bool%> in "
8550 "declaration specifiers");
8551 else if (specs->unsigned_p)
8552 error ("both %<unsigned%> and %<_Bool%> in "
8553 "declaration specifiers");
8554 else if (specs->complex_p)
8555 error ("both %<complex%> and %<_Bool%> in "
8556 "declaration specifiers");
8557 else if (specs->saturating_p)
8558 error ("both %<_Sat%> and %<_Bool%> in "
8559 "declaration specifiers");
8560 else
8561 specs->typespec_word = cts_bool;
8562 return specs;
8563 case RID_CHAR:
8564 if (specs->long_p)
8565 error ("both %<long%> and %<char%> in "
8566 "declaration specifiers");
8567 else if (specs->short_p)
8568 error ("both %<short%> and %<char%> in "
8569 "declaration specifiers");
8570 else if (specs->saturating_p)
8571 error ("both %<_Sat%> and %<char%> in "
8572 "declaration specifiers");
8573 else
8574 specs->typespec_word = cts_char;
8575 return specs;
8576 case RID_INT:
8577 if (specs->saturating_p)
8578 error ("both %<_Sat%> and %<int%> in "
8579 "declaration specifiers");
8580 else
8581 specs->typespec_word = cts_int;
8582 return specs;
8583 case RID_FLOAT:
8584 if (specs->long_p)
8585 error ("both %<long%> and %<float%> in "
8586 "declaration specifiers");
8587 else if (specs->short_p)
8588 error ("both %<short%> and %<float%> in "
8589 "declaration specifiers");
8590 else if (specs->signed_p)
8591 error ("both %<signed%> and %<float%> in "
8592 "declaration specifiers");
8593 else if (specs->unsigned_p)
8594 error ("both %<unsigned%> and %<float%> in "
8595 "declaration specifiers");
8596 else if (specs->saturating_p)
8597 error ("both %<_Sat%> and %<float%> in "
8598 "declaration specifiers");
8599 else
8600 specs->typespec_word = cts_float;
8601 return specs;
8602 case RID_DOUBLE:
8603 if (specs->long_long_p)
8604 error ("both %<long long%> and %<double%> in "
8605 "declaration specifiers");
8606 else if (specs->short_p)
8607 error ("both %<short%> and %<double%> in "
8608 "declaration specifiers");
8609 else if (specs->signed_p)
8610 error ("both %<signed%> and %<double%> in "
8611 "declaration specifiers");
8612 else if (specs->unsigned_p)
8613 error ("both %<unsigned%> and %<double%> in "
8614 "declaration specifiers");
8615 else if (specs->saturating_p)
8616 error ("both %<_Sat%> and %<double%> in "
8617 "declaration specifiers");
8618 else
8619 specs->typespec_word = cts_double;
8620 return specs;
8621 case RID_DFLOAT32:
8622 case RID_DFLOAT64:
8623 case RID_DFLOAT128:
8624 {
8625 const char *str;
8626 if (i == RID_DFLOAT32)
8627 str = "_Decimal32";
8628 else if (i == RID_DFLOAT64)
8629 str = "_Decimal64";
8630 else
8631 str = "_Decimal128";
8632 if (specs->long_long_p)
8633 error ("both %<long long%> and %<%s%> in "
8634 "declaration specifiers", str);
8635 if (specs->long_p)
8636 error ("both %<long%> and %<%s%> in "
8637 "declaration specifiers", str);
8638 else if (specs->short_p)
8639 error ("both %<short%> and %<%s%> in "
8640 "declaration specifiers", str);
8641 else if (specs->signed_p)
8642 error ("both %<signed%> and %<%s%> in "
8643 "declaration specifiers", str);
8644 else if (specs->unsigned_p)
8645 error ("both %<unsigned%> and %<%s%> in "
8646 "declaration specifiers", str);
8647 else if (specs->complex_p)
8648 error ("both %<complex%> and %<%s%> in "
8649 "declaration specifiers", str);
8650 else if (specs->saturating_p)
8651 error ("both %<_Sat%> and %<%s%> in "
8652 "declaration specifiers", str);
8653 else if (i == RID_DFLOAT32)
8654 specs->typespec_word = cts_dfloat32;
8655 else if (i == RID_DFLOAT64)
8656 specs->typespec_word = cts_dfloat64;
8657 else
8658 specs->typespec_word = cts_dfloat128;
8659 }
8660 if (!targetm.decimal_float_supported_p ())
8661 error ("decimal floating point not supported for this target");
8662 pedwarn (input_location, OPT_pedantic,
8663 "ISO C does not support decimal floating point");
8664 return specs;
8665 case RID_FRACT:
8666 case RID_ACCUM:
8667 {
8668 const char *str;
8669 if (i == RID_FRACT)
8670 str = "_Fract";
8671 else
8672 str = "_Accum";
8673 if (specs->complex_p)
8674 error ("both %<complex%> and %<%s%> in "
8675 "declaration specifiers", str);
8676 else if (i == RID_FRACT)
8677 specs->typespec_word = cts_fract;
8678 else
8679 specs->typespec_word = cts_accum;
8680 }
8681 if (!targetm.fixed_point_supported_p ())
8682 error ("fixed-point types not supported for this target");
8683 pedwarn (input_location, OPT_pedantic,
8684 "ISO C does not support fixed-point types");
8685 return specs;
8686 default:
8687 /* ObjC reserved word "id", handled below. */
8688 break;
8689 }
8690 }
8691 }
8692
8693 /* Now we have a typedef (a TYPE_DECL node), an identifier (some
8694 form of ObjC type, cases such as "int" and "long" being handled
8695 above), a TYPE (struct, union, enum and typeof specifiers) or an
8696 ERROR_MARK. In none of these cases may there have previously
8697 been any type specifiers. */
8698 if (specs->type || specs->typespec_word != cts_none
8699 || specs->long_p || specs->short_p || specs->signed_p
8700 || specs->unsigned_p || specs->complex_p)
8701 error ("two or more data types in declaration specifiers");
8702 else if (TREE_CODE (type) == TYPE_DECL)
8703 {
8704 if (TREE_TYPE (type) == error_mark_node)
8705 ; /* Allow the type to default to int to avoid cascading errors. */
8706 else
8707 {
8708 specs->type = TREE_TYPE (type);
8709 specs->decl_attr = DECL_ATTRIBUTES (type);
8710 specs->typedef_p = true;
8711 specs->explicit_signed_p = C_TYPEDEF_EXPLICITLY_SIGNED (type);
8712 }
8713 }
8714 else if (TREE_CODE (type) == IDENTIFIER_NODE)
8715 {
8716 tree t = lookup_name (type);
8717 if (!t || TREE_CODE (t) != TYPE_DECL)
8718 error ("%qE fails to be a typedef or built in type", type);
8719 else if (TREE_TYPE (t) == error_mark_node)
8720 ;
8721 else
8722 specs->type = TREE_TYPE (t);
8723 }
8724 else if (TREE_CODE (type) != ERROR_MARK)
8725 {
8726 if (spec.kind == ctsk_tagdef || spec.kind == ctsk_tagfirstref)
8727 specs->tag_defined_p = true;
8728 if (spec.kind == ctsk_typeof)
8729 {
8730 specs->typedef_p = true;
8731 if (spec.expr)
8732 {
8733 if (specs->expr)
8734 specs->expr = build2 (COMPOUND_EXPR, TREE_TYPE (spec.expr),
8735 specs->expr, spec.expr);
8736 else
8737 specs->expr = spec.expr;
8738 specs->expr_const_operands &= spec.expr_const_operands;
8739 }
8740 }
8741 specs->type = type;
8742 }
8743
8744 return specs;
8745 }
8746
8747 /* Add the storage class specifier or function specifier SCSPEC to the
8748 declaration specifiers SPECS, returning SPECS. */
8749
8750 struct c_declspecs *
8751 declspecs_add_scspec (struct c_declspecs *specs, tree scspec)
8752 {
8753 enum rid i;
8754 enum c_storage_class n = csc_none;
8755 bool dupe = false;
8756 specs->declspecs_seen_p = true;
8757 gcc_assert (TREE_CODE (scspec) == IDENTIFIER_NODE
8758 && C_IS_RESERVED_WORD (scspec));
8759 i = C_RID_CODE (scspec);
8760 if (specs->non_sc_seen_p)
8761 warning (OPT_Wold_style_declaration,
8762 "%qE is not at beginning of declaration", scspec);
8763 switch (i)
8764 {
8765 case RID_INLINE:
8766 /* C99 permits duplicate inline. Although of doubtful utility,
8767 it seems simplest to permit it in gnu89 mode as well, as
8768 there is also little utility in maintaining this as a
8769 difference between gnu89 and C99 inline. */
8770 dupe = false;
8771 specs->inline_p = true;
8772 break;
8773 case RID_THREAD:
8774 dupe = specs->thread_p;
8775 if (specs->storage_class == csc_auto)
8776 error ("%<__thread%> used with %<auto%>");
8777 else if (specs->storage_class == csc_register)
8778 error ("%<__thread%> used with %<register%>");
8779 else if (specs->storage_class == csc_typedef)
8780 error ("%<__thread%> used with %<typedef%>");
8781 else
8782 specs->thread_p = true;
8783 break;
8784 case RID_AUTO:
8785 n = csc_auto;
8786 break;
8787 case RID_EXTERN:
8788 n = csc_extern;
8789 /* Diagnose "__thread extern". */
8790 if (specs->thread_p)
8791 error ("%<__thread%> before %<extern%>");
8792 break;
8793 case RID_REGISTER:
8794 n = csc_register;
8795 break;
8796 case RID_STATIC:
8797 n = csc_static;
8798 /* Diagnose "__thread static". */
8799 if (specs->thread_p)
8800 error ("%<__thread%> before %<static%>");
8801 break;
8802 case RID_TYPEDEF:
8803 n = csc_typedef;
8804 break;
8805 default:
8806 gcc_unreachable ();
8807 }
8808 if (n != csc_none && n == specs->storage_class)
8809 dupe = true;
8810 if (dupe)
8811 error ("duplicate %qE", scspec);
8812 if (n != csc_none)
8813 {
8814 if (specs->storage_class != csc_none && n != specs->storage_class)
8815 {
8816 error ("multiple storage classes in declaration specifiers");
8817 }
8818 else
8819 {
8820 specs->storage_class = n;
8821 if (n != csc_extern && n != csc_static && specs->thread_p)
8822 {
8823 error ("%<__thread%> used with %qE", scspec);
8824 specs->thread_p = false;
8825 }
8826 }
8827 }
8828 return specs;
8829 }
8830
8831 /* Add the attributes ATTRS to the declaration specifiers SPECS,
8832 returning SPECS. */
8833
8834 struct c_declspecs *
8835 declspecs_add_attrs (struct c_declspecs *specs, tree attrs)
8836 {
8837 specs->attrs = chainon (attrs, specs->attrs);
8838 specs->declspecs_seen_p = true;
8839 return specs;
8840 }
8841
8842 /* Combine "long", "short", "signed", "unsigned" and "_Complex" type
8843 specifiers with any other type specifier to determine the resulting
8844 type. This is where ISO C checks on complex types are made, since
8845 "_Complex long" is a prefix of the valid ISO C type "_Complex long
8846 double". */
8847
8848 struct c_declspecs *
8849 finish_declspecs (struct c_declspecs *specs)
8850 {
8851 /* If a type was specified as a whole, we have no modifiers and are
8852 done. */
8853 if (specs->type != NULL_TREE)
8854 {
8855 gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
8856 && !specs->signed_p && !specs->unsigned_p
8857 && !specs->complex_p);
8858 return specs;
8859 }
8860
8861 /* If none of "void", "_Bool", "char", "int", "float" or "double"
8862 has been specified, treat it as "int" unless "_Complex" is
8863 present and there are no other specifiers. If we just have
8864 "_Complex", it is equivalent to "_Complex double", but e.g.
8865 "_Complex short" is equivalent to "_Complex short int". */
8866 if (specs->typespec_word == cts_none)
8867 {
8868 if (specs->saturating_p)
8869 {
8870 error ("%<_Sat%> is used without %<_Fract%> or %<_Accum%>");
8871 if (!targetm.fixed_point_supported_p ())
8872 error ("fixed-point types not supported for this target");
8873 specs->typespec_word = cts_fract;
8874 }
8875 else if (specs->long_p || specs->short_p
8876 || specs->signed_p || specs->unsigned_p)
8877 {
8878 specs->typespec_word = cts_int;
8879 }
8880 else if (specs->complex_p)
8881 {
8882 specs->typespec_word = cts_double;
8883 pedwarn (input_location, OPT_pedantic,
8884 "ISO C does not support plain %<complex%> meaning "
8885 "%<double complex%>");
8886 }
8887 else
8888 {
8889 specs->typespec_word = cts_int;
8890 specs->default_int_p = true;
8891 /* We don't diagnose this here because grokdeclarator will
8892 give more specific diagnostics according to whether it is
8893 a function definition. */
8894 }
8895 }
8896
8897 /* If "signed" was specified, record this to distinguish "int" and
8898 "signed int" in the case of a bit-field with
8899 -funsigned-bitfields. */
8900 specs->explicit_signed_p = specs->signed_p;
8901
8902 /* Now compute the actual type. */
8903 switch (specs->typespec_word)
8904 {
8905 case cts_void:
8906 gcc_assert (!specs->long_p && !specs->short_p
8907 && !specs->signed_p && !specs->unsigned_p
8908 && !specs->complex_p);
8909 specs->type = void_type_node;
8910 break;
8911 case cts_bool:
8912 gcc_assert (!specs->long_p && !specs->short_p
8913 && !specs->signed_p && !specs->unsigned_p
8914 && !specs->complex_p);
8915 specs->type = boolean_type_node;
8916 break;
8917 case cts_char:
8918 gcc_assert (!specs->long_p && !specs->short_p);
8919 gcc_assert (!(specs->signed_p && specs->unsigned_p));
8920 if (specs->signed_p)
8921 specs->type = signed_char_type_node;
8922 else if (specs->unsigned_p)
8923 specs->type = unsigned_char_type_node;
8924 else
8925 specs->type = char_type_node;
8926 if (specs->complex_p)
8927 {
8928 pedwarn (input_location, OPT_pedantic,
8929 "ISO C does not support complex integer types");
8930 specs->type = build_complex_type (specs->type);
8931 }
8932 break;
8933 case cts_int:
8934 gcc_assert (!(specs->long_p && specs->short_p));
8935 gcc_assert (!(specs->signed_p && specs->unsigned_p));
8936 if (specs->long_long_p)
8937 specs->type = (specs->unsigned_p
8938 ? long_long_unsigned_type_node
8939 : long_long_integer_type_node);
8940 else if (specs->long_p)
8941 specs->type = (specs->unsigned_p
8942 ? long_unsigned_type_node
8943 : long_integer_type_node);
8944 else if (specs->short_p)
8945 specs->type = (specs->unsigned_p
8946 ? short_unsigned_type_node
8947 : short_integer_type_node);
8948 else
8949 specs->type = (specs->unsigned_p
8950 ? unsigned_type_node
8951 : integer_type_node);
8952 if (specs->complex_p)
8953 {
8954 pedwarn (input_location, OPT_pedantic,
8955 "ISO C does not support complex integer types");
8956 specs->type = build_complex_type (specs->type);
8957 }
8958 break;
8959 case cts_float:
8960 gcc_assert (!specs->long_p && !specs->short_p
8961 && !specs->signed_p && !specs->unsigned_p);
8962 specs->type = (specs->complex_p
8963 ? complex_float_type_node
8964 : float_type_node);
8965 break;
8966 case cts_double:
8967 gcc_assert (!specs->long_long_p && !specs->short_p
8968 && !specs->signed_p && !specs->unsigned_p);
8969 if (specs->long_p)
8970 {
8971 specs->type = (specs->complex_p
8972 ? complex_long_double_type_node
8973 : long_double_type_node);
8974 }
8975 else
8976 {
8977 specs->type = (specs->complex_p
8978 ? complex_double_type_node
8979 : double_type_node);
8980 }
8981 break;
8982 case cts_dfloat32:
8983 case cts_dfloat64:
8984 case cts_dfloat128:
8985 gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
8986 && !specs->signed_p && !specs->unsigned_p && !specs->complex_p);
8987 if (specs->typespec_word == cts_dfloat32)
8988 specs->type = dfloat32_type_node;
8989 else if (specs->typespec_word == cts_dfloat64)
8990 specs->type = dfloat64_type_node;
8991 else
8992 specs->type = dfloat128_type_node;
8993 break;
8994 case cts_fract:
8995 gcc_assert (!specs->complex_p);
8996 if (!targetm.fixed_point_supported_p ())
8997 specs->type = integer_type_node;
8998 else if (specs->saturating_p)
8999 {
9000 if (specs->long_long_p)
9001 specs->type = specs->unsigned_p
9002 ? sat_unsigned_long_long_fract_type_node
9003 : sat_long_long_fract_type_node;
9004 else if (specs->long_p)
9005 specs->type = specs->unsigned_p
9006 ? sat_unsigned_long_fract_type_node
9007 : sat_long_fract_type_node;
9008 else if (specs->short_p)
9009 specs->type = specs->unsigned_p
9010 ? sat_unsigned_short_fract_type_node
9011 : sat_short_fract_type_node;
9012 else
9013 specs->type = specs->unsigned_p
9014 ? sat_unsigned_fract_type_node
9015 : sat_fract_type_node;
9016 }
9017 else
9018 {
9019 if (specs->long_long_p)
9020 specs->type = specs->unsigned_p
9021 ? unsigned_long_long_fract_type_node
9022 : long_long_fract_type_node;
9023 else if (specs->long_p)
9024 specs->type = specs->unsigned_p
9025 ? unsigned_long_fract_type_node
9026 : long_fract_type_node;
9027 else if (specs->short_p)
9028 specs->type = specs->unsigned_p
9029 ? unsigned_short_fract_type_node
9030 : short_fract_type_node;
9031 else
9032 specs->type = specs->unsigned_p
9033 ? unsigned_fract_type_node
9034 : fract_type_node;
9035 }
9036 break;
9037 case cts_accum:
9038 gcc_assert (!specs->complex_p);
9039 if (!targetm.fixed_point_supported_p ())
9040 specs->type = integer_type_node;
9041 else if (specs->saturating_p)
9042 {
9043 if (specs->long_long_p)
9044 specs->type = specs->unsigned_p
9045 ? sat_unsigned_long_long_accum_type_node
9046 : sat_long_long_accum_type_node;
9047 else if (specs->long_p)
9048 specs->type = specs->unsigned_p
9049 ? sat_unsigned_long_accum_type_node
9050 : sat_long_accum_type_node;
9051 else if (specs->short_p)
9052 specs->type = specs->unsigned_p
9053 ? sat_unsigned_short_accum_type_node
9054 : sat_short_accum_type_node;
9055 else
9056 specs->type = specs->unsigned_p
9057 ? sat_unsigned_accum_type_node
9058 : sat_accum_type_node;
9059 }
9060 else
9061 {
9062 if (specs->long_long_p)
9063 specs->type = specs->unsigned_p
9064 ? unsigned_long_long_accum_type_node
9065 : long_long_accum_type_node;
9066 else if (specs->long_p)
9067 specs->type = specs->unsigned_p
9068 ? unsigned_long_accum_type_node
9069 : long_accum_type_node;
9070 else if (specs->short_p)
9071 specs->type = specs->unsigned_p
9072 ? unsigned_short_accum_type_node
9073 : short_accum_type_node;
9074 else
9075 specs->type = specs->unsigned_p
9076 ? unsigned_accum_type_node
9077 : accum_type_node;
9078 }
9079 break;
9080 default:
9081 gcc_unreachable ();
9082 }
9083
9084 return specs;
9085 }
9086
9087 /* A subroutine of c_write_global_declarations. Perform final processing
9088 on one file scope's declarations (or the external scope's declarations),
9089 GLOBALS. */
9090
9091 static void
9092 c_write_global_declarations_1 (tree globals)
9093 {
9094 tree decl;
9095 bool reconsider;
9096
9097 /* Process the decls in the order they were written. */
9098 for (decl = globals; decl; decl = TREE_CHAIN (decl))
9099 {
9100 /* Check for used but undefined static functions using the C
9101 standard's definition of "used", and set TREE_NO_WARNING so
9102 that check_global_declarations doesn't repeat the check. */
9103 if (TREE_CODE (decl) == FUNCTION_DECL
9104 && DECL_INITIAL (decl) == 0
9105 && DECL_EXTERNAL (decl)
9106 && !TREE_PUBLIC (decl)
9107 && C_DECL_USED (decl))
9108 {
9109 pedwarn (input_location, 0, "%q+F used but never defined", decl);
9110 TREE_NO_WARNING (decl) = 1;
9111 }
9112
9113 wrapup_global_declaration_1 (decl);
9114 }
9115
9116 do
9117 {
9118 reconsider = false;
9119 for (decl = globals; decl; decl = TREE_CHAIN (decl))
9120 reconsider |= wrapup_global_declaration_2 (decl);
9121 }
9122 while (reconsider);
9123
9124 for (decl = globals; decl; decl = TREE_CHAIN (decl))
9125 check_global_declaration_1 (decl);
9126 }
9127
9128 /* A subroutine of c_write_global_declarations Emit debug information for each
9129 of the declarations in GLOBALS. */
9130
9131 static void
9132 c_write_global_declarations_2 (tree globals)
9133 {
9134 tree decl;
9135
9136 for (decl = globals; decl ; decl = TREE_CHAIN (decl))
9137 debug_hooks->global_decl (decl);
9138 }
9139
9140 /* Preserve the external declarations scope across a garbage collect. */
9141 static GTY(()) tree ext_block;
9142
9143 void
9144 c_write_global_declarations (void)
9145 {
9146 tree t;
9147
9148 /* We don't want to do this if generating a PCH. */
9149 if (pch_file)
9150 return;
9151
9152 /* Don't waste time on further processing if -fsyntax-only or we've
9153 encountered errors. */
9154 if (flag_syntax_only || errorcount || sorrycount)
9155 return;
9156
9157 /* Close the external scope. */
9158 ext_block = pop_scope ();
9159 external_scope = 0;
9160 gcc_assert (!current_scope);
9161
9162 if (ext_block)
9163 {
9164 tree tmp = BLOCK_VARS (ext_block);
9165 int flags;
9166 FILE * stream = dump_begin (TDI_tu, &flags);
9167 if (stream && tmp)
9168 {
9169 dump_node (tmp, flags & ~TDF_SLIM, stream);
9170 dump_end (TDI_tu, stream);
9171 }
9172 }
9173
9174 /* Process all file scopes in this compilation, and the external_scope,
9175 through wrapup_global_declarations and check_global_declarations. */
9176 for (t = all_translation_units; t; t = TREE_CHAIN (t))
9177 c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t)));
9178 c_write_global_declarations_1 (BLOCK_VARS (ext_block));
9179
9180 /* We're done parsing; proceed to optimize and emit assembly.
9181 FIXME: shouldn't be the front end's responsibility to call this. */
9182 cgraph_optimize ();
9183
9184 /* After cgraph has had a chance to emit everything that's going to
9185 be emitted, output debug information for globals. */
9186 if (errorcount == 0 && sorrycount == 0)
9187 {
9188 timevar_push (TV_SYMOUT);
9189 for (t = all_translation_units; t; t = TREE_CHAIN (t))
9190 c_write_global_declarations_2 (BLOCK_VARS (DECL_INITIAL (t)));
9191 c_write_global_declarations_2 (BLOCK_VARS (ext_block));
9192 timevar_pop (TV_SYMOUT);
9193 }
9194
9195 ext_block = NULL;
9196 }
9197
9198 #include "gt-c-decl.h"
This page took 0.515506 seconds and 5 git commands to generate.