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

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [gcc/] [c-decl.c] - Blame information for rev 12

Details | Compare with Previous | View Log

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