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