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