OSDN Git Service

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