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