OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [c-decl.c] - Blame information for rev 775

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.