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