c-common.c revision 259268
1/* Subroutines shared by all languages that are variants of C.
2   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3   2001, 2002, 2003, 2004, 2005 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#include "config.h"
23#include "system.h"
24#include "coretypes.h"
25#include "tm.h"
26#include "intl.h"
27#include "tree.h"
28#include "flags.h"
29#include "output.h"
30#include "c-pragma.h"
31#include "rtl.h"
32#include "ggc.h"
33#include "varray.h"
34#include "expr.h"
35#include "c-common.h"
36#include "diagnostic.h"
37#include "tm_p.h"
38#include "obstack.h"
39#include "cpplib.h"
40#include "target.h"
41#include "langhooks.h"
42#include "tree-inline.h"
43#include "c-tree.h"
44#include "toplev.h"
45#include "tree-iterator.h"
46#include "hashtab.h"
47#include "tree-mudflap.h"
48#include "opts.h"
49#include "real.h"
50#include "cgraph.h"
51
52cpp_reader *parse_in;		/* Declared in c-pragma.h.  */
53
54/* We let tm.h override the types used here, to handle trivial differences
55   such as the choice of unsigned int or long unsigned int for size_t.
56   When machines start needing nontrivial differences in the size type,
57   it would be best to do something here to figure out automatically
58   from other information what type to use.  */
59
60#ifndef SIZE_TYPE
61#define SIZE_TYPE "long unsigned int"
62#endif
63
64#ifndef PID_TYPE
65#define PID_TYPE "int"
66#endif
67
68#ifndef WCHAR_TYPE
69#define WCHAR_TYPE "int"
70#endif
71
72/* WCHAR_TYPE gets overridden by -fshort-wchar.  */
73#define MODIFIED_WCHAR_TYPE \
74	(flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
75
76#ifndef PTRDIFF_TYPE
77#define PTRDIFF_TYPE "long int"
78#endif
79
80#ifndef WINT_TYPE
81#define WINT_TYPE "unsigned int"
82#endif
83
84#ifndef INTMAX_TYPE
85#define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE)	\
86		     ? "int"					\
87		     : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE)	\
88			? "long int"				\
89			: "long long int"))
90#endif
91
92#ifndef UINTMAX_TYPE
93#define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE)	\
94		     ? "unsigned int"				\
95		     : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE)	\
96			? "long unsigned int"			\
97			: "long long unsigned int"))
98#endif
99
100/* The following symbols are subsumed in the c_global_trees array, and
101   listed here individually for documentation purposes.
102
103   INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
104
105	tree short_integer_type_node;
106	tree long_integer_type_node;
107	tree long_long_integer_type_node;
108
109	tree short_unsigned_type_node;
110	tree long_unsigned_type_node;
111	tree long_long_unsigned_type_node;
112
113	tree truthvalue_type_node;
114	tree truthvalue_false_node;
115	tree truthvalue_true_node;
116
117	tree ptrdiff_type_node;
118
119	tree unsigned_char_type_node;
120	tree signed_char_type_node;
121	tree wchar_type_node;
122	tree signed_wchar_type_node;
123	tree unsigned_wchar_type_node;
124
125	tree float_type_node;
126	tree double_type_node;
127	tree long_double_type_node;
128
129	tree complex_integer_type_node;
130	tree complex_float_type_node;
131	tree complex_double_type_node;
132	tree complex_long_double_type_node;
133
134	tree dfloat32_type_node;
135	tree dfloat64_type_node;
136	tree_dfloat128_type_node;
137
138	tree intQI_type_node;
139	tree intHI_type_node;
140	tree intSI_type_node;
141	tree intDI_type_node;
142	tree intTI_type_node;
143
144	tree unsigned_intQI_type_node;
145	tree unsigned_intHI_type_node;
146	tree unsigned_intSI_type_node;
147	tree unsigned_intDI_type_node;
148	tree unsigned_intTI_type_node;
149
150	tree widest_integer_literal_type_node;
151	tree widest_unsigned_literal_type_node;
152
153   Nodes for types `void *' and `const void *'.
154
155	tree ptr_type_node, const_ptr_type_node;
156
157   Nodes for types `char *' and `const char *'.
158
159	tree string_type_node, const_string_type_node;
160
161   Type `char[SOMENUMBER]'.
162   Used when an array of char is needed and the size is irrelevant.
163
164	tree char_array_type_node;
165
166   Type `int[SOMENUMBER]' or something like it.
167   Used when an array of int needed and the size is irrelevant.
168
169	tree int_array_type_node;
170
171   Type `wchar_t[SOMENUMBER]' or something like it.
172   Used when a wide string literal is created.
173
174	tree wchar_array_type_node;
175
176   Type `int ()' -- used for implicit declaration of functions.
177
178	tree default_function_type;
179
180   A VOID_TYPE node, packaged in a TREE_LIST.
181
182	tree void_list_node;
183
184  The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
185  and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
186  VAR_DECLS, but C++ does.)
187
188	tree function_name_decl_node;
189	tree pretty_function_name_decl_node;
190	tree c99_function_name_decl_node;
191
192  Stack of nested function name VAR_DECLs.
193
194	tree saved_function_name_decls;
195
196*/
197
198tree c_global_trees[CTI_MAX];
199
200/* Switches common to the C front ends.  */
201
202/* Nonzero if prepreprocessing only.  */
203
204int flag_preprocess_only;
205
206/* Nonzero means don't output line number information.  */
207
208char flag_no_line_commands;
209
210/* Nonzero causes -E output not to be done, but directives such as
211   #define that have side effects are still obeyed.  */
212
213char flag_no_output;
214
215/* Nonzero means dump macros in some fashion.  */
216
217char flag_dump_macros;
218
219/* Nonzero means pass #include lines through to the output.  */
220
221char flag_dump_includes;
222
223/* Nonzero means process PCH files while preprocessing.  */
224
225bool flag_pch_preprocess;
226
227/* The file name to which we should write a precompiled header, or
228   NULL if no header will be written in this compile.  */
229
230const char *pch_file;
231
232/* Nonzero if an ISO standard was selected.  It rejects macros in the
233   user's namespace.  */
234int flag_iso;
235
236/* Nonzero if -undef was given.  It suppresses target built-in macros
237   and assertions.  */
238int flag_undef;
239
240/* Nonzero means don't recognize the non-ANSI builtin functions.  */
241
242int flag_no_builtin;
243
244/* Nonzero means don't recognize the non-ANSI builtin functions.
245   -ansi sets this.  */
246
247int flag_no_nonansi_builtin;
248
249/* Nonzero means give `double' the same size as `float'.  */
250
251int flag_short_double;
252
253/* Nonzero means give `wchar_t' the same size as `short'.  */
254
255int flag_short_wchar;
256
257/* Nonzero means allow Microsoft extensions without warnings or errors.  */
258int flag_ms_extensions;
259
260/* Nonzero means don't recognize the keyword `asm'.  */
261
262int flag_no_asm;
263
264/* Nonzero means to treat bitfields as signed unless they say `unsigned'.  */
265
266int flag_signed_bitfields = 1;
267
268/* Warn about #pragma directives that are not recognized.  */
269
270int warn_unknown_pragmas; /* Tri state variable.  */
271
272/* Warn about format/argument anomalies in calls to formatted I/O functions
273   (*printf, *scanf, strftime, strfmon, etc.).  */
274
275int warn_format;
276
277/* Warn about using __null (as NULL in C++) as sentinel.  For code compiled
278   with GCC this doesn't matter as __null is guaranteed to have the right
279   size.  */
280
281int warn_strict_null_sentinel;
282
283/* Zero means that faster, ...NonNil variants of objc_msgSend...
284   calls will be used in ObjC; passing nil receivers to such calls
285   will most likely result in crashes.  */
286int flag_nil_receivers = 1;
287
288/* Nonzero means that code generation will be altered to support
289   "zero-link" execution.  This currently affects ObjC only, but may
290   affect other languages in the future.  */
291int flag_zero_link = 0;
292
293/* Nonzero means emit an '__OBJC, __image_info' for the current translation
294   unit.  It will inform the ObjC runtime that class definition(s) herein
295   contained are to replace one(s) previously loaded.  */
296int flag_replace_objc_classes = 0;
297
298/* C/ObjC language option variables.  */
299
300
301/* Nonzero means allow type mismatches in conditional expressions;
302   just make their values `void'.  */
303
304int flag_cond_mismatch;
305
306/* Nonzero means enable C89 Amendment 1 features.  */
307
308int flag_isoc94;
309
310/* Nonzero means use the ISO C99 dialect of C.  */
311
312int flag_isoc99;
313
314/* Nonzero means that we have builtin functions, and main is an int.  */
315
316int flag_hosted = 1;
317
318/* Warn if main is suspicious.  */
319
320int warn_main;
321
322
323/* ObjC language option variables.  */
324
325
326/* Open and close the file for outputting class declarations, if
327   requested (ObjC).  */
328
329int flag_gen_declaration;
330
331/* Tells the compiler that this is a special run.  Do not perform any
332   compiling, instead we are to test some platform dependent features
333   and output a C header file with appropriate definitions.  */
334
335int print_struct_values;
336
337/* Tells the compiler what is the constant string class for Objc.  */
338
339const char *constant_string_class_name;
340
341
342/* C++ language option variables.  */
343
344
345/* Nonzero means don't recognize any extension keywords.  */
346
347int flag_no_gnu_keywords;
348
349/* Nonzero means do emit exported implementations of functions even if
350   they can be inlined.  */
351
352int flag_implement_inlines = 1;
353
354/* Nonzero means that implicit instantiations will be emitted if needed.  */
355
356int flag_implicit_templates = 1;
357
358/* Nonzero means that implicit instantiations of inline templates will be
359   emitted if needed, even if instantiations of non-inline templates
360   aren't.  */
361
362int flag_implicit_inline_templates = 1;
363
364/* Nonzero means generate separate instantiation control files and
365   juggle them at link time.  */
366
367int flag_use_repository;
368
369/* Nonzero if we want to issue diagnostics that the standard says are not
370   required.  */
371
372int flag_optional_diags = 1;
373
374/* Nonzero means we should attempt to elide constructors when possible.  */
375
376int flag_elide_constructors = 1;
377
378/* Nonzero means that member functions defined in class scope are
379   inline by default.  */
380
381int flag_default_inline = 1;
382
383/* Controls whether compiler generates 'type descriptor' that give
384   run-time type information.  */
385
386int flag_rtti = 1;
387
388/* Nonzero if we want to conserve space in the .o files.  We do this
389   by putting uninitialized data and runtime initialized data into
390   .common instead of .data at the expense of not flagging multiple
391   definitions.  */
392
393int flag_conserve_space;
394
395/* Nonzero if we want to obey access control semantics.  */
396
397int flag_access_control = 1;
398
399/* Nonzero if we want to check the return value of new and avoid calling
400   constructors if it is a null pointer.  */
401
402int flag_check_new;
403
404/* Nonzero if we want the new ISO rules for pushing a new scope for `for'
405   initialization variables.
406   0: Old rules, set by -fno-for-scope.
407   2: New ISO rules, set by -ffor-scope.
408   1: Try to implement new ISO rules, but with backup compatibility
409   (and warnings).  This is the default, for now.  */
410
411int flag_new_for_scope = 1;
412
413/* Nonzero if we want to emit defined symbols with common-like linkage as
414   weak symbols where possible, in order to conform to C++ semantics.
415   Otherwise, emit them as local symbols.  */
416
417int flag_weak = 1;
418
419/* 0 means we want the preprocessor to not emit line directives for
420   the current working directory.  1 means we want it to do it.  -1
421   means we should decide depending on whether debugging information
422   is being emitted or not.  */
423
424int flag_working_directory = -1;
425
426/* Nonzero to use __cxa_atexit, rather than atexit, to register
427   destructors for local statics and global objects.  '2' means it has been
428   set nonzero as a default, not by a command-line flag.  */
429
430int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
431
432/* Nonzero to use __cxa_get_exception_ptr in C++ exception-handling
433   code.  '2' means it has not been set explicitly on the command line.  */
434
435int flag_use_cxa_get_exception_ptr = 2;
436
437/* Nonzero means make the default pedwarns warnings instead of errors.
438   The value of this flag is ignored if -pedantic is specified.  */
439
440int flag_permissive;
441
442/* Nonzero means to implement standard semantics for exception
443   specifications, calling unexpected if an exception is thrown that
444   doesn't match the specification.  Zero means to treat them as
445   assertions and optimize accordingly, but not check them.  */
446
447int flag_enforce_eh_specs = 1;
448
449/* Nonzero means to generate thread-safe code for initializing local
450   statics.  */
451
452int flag_threadsafe_statics = 1;
453
454/* Nonzero means warn about implicit declarations.  */
455
456int warn_implicit = 1;
457
458/* Maximum template instantiation depth.  This limit is rather
459   arbitrary, but it exists to limit the time it takes to notice
460   infinite template instantiations.  */
461
462int max_tinst_depth = 500;
463
464
465
466/* The elements of `ridpointers' are identifier nodes for the reserved
467   type names and storage classes.  It is indexed by a RID_... value.  */
468tree *ridpointers;
469
470tree (*make_fname_decl) (tree, int);
471
472/* Nonzero means the expression being parsed will never be evaluated.
473   This is a count, since unevaluated expressions can nest.  */
474int skip_evaluation;
475
476/* Information about how a function name is generated.  */
477struct fname_var_t
478{
479  tree *const decl;	/* pointer to the VAR_DECL.  */
480  const unsigned rid;	/* RID number for the identifier.  */
481  const int pretty;	/* How pretty is it? */
482};
483
484/* The three ways of getting then name of the current function.  */
485
486const struct fname_var_t fname_vars[] =
487{
488  /* C99 compliant __func__, must be first.  */
489  {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
490  /* GCC __FUNCTION__ compliant.  */
491  {&function_name_decl_node, RID_FUNCTION_NAME, 0},
492  /* GCC __PRETTY_FUNCTION__ compliant.  */
493  {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
494  {NULL, 0, 0},
495};
496
497static int constant_fits_type_p (tree, tree);
498static tree check_case_value (tree);
499static bool check_case_bounds (tree, tree, tree *, tree *);
500
501static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
502static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
503static tree handle_common_attribute (tree *, tree, tree, int, bool *);
504static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
505static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
506static tree handle_always_inline_attribute (tree *, tree, tree, int,
507					    bool *);
508static tree handle_gnu_inline_attribute (tree *, tree, tree, int,
509					 bool *);
510static tree handle_flatten_attribute (tree *, tree, tree, int, bool *);
511static tree handle_used_attribute (tree *, tree, tree, int, bool *);
512static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
513static tree handle_externally_visible_attribute (tree *, tree, tree, int,
514						 bool *);
515static tree handle_const_attribute (tree *, tree, tree, int, bool *);
516static tree handle_transparent_union_attribute (tree *, tree, tree,
517						int, bool *);
518static tree handle_constructor_attribute (tree *, tree, tree, int, bool *);
519static tree handle_destructor_attribute (tree *, tree, tree, int, bool *);
520static tree handle_mode_attribute (tree *, tree, tree, int, bool *);
521static tree handle_section_attribute (tree *, tree, tree, int, bool *);
522static tree handle_aligned_attribute (tree *, tree, tree, int, bool *);
523static tree handle_weak_attribute (tree *, tree, tree, int, bool *) ;
524static tree handle_alias_attribute (tree *, tree, tree, int, bool *);
525static tree handle_weakref_attribute (tree *, tree, tree, int, bool *) ;
526static tree handle_visibility_attribute (tree *, tree, tree, int,
527					 bool *);
528static tree handle_tls_model_attribute (tree *, tree, tree, int,
529					bool *);
530static tree handle_no_instrument_function_attribute (tree *, tree,
531						     tree, int, bool *);
532static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
533static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
534static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
535					     bool *);
536static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
537static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
538static tree handle_deprecated_attribute (tree *, tree, tree, int,
539					 bool *);
540static tree handle_vector_size_attribute (tree *, tree, tree, int,
541					  bool *);
542static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
543static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
544static tree handle_cleanup_attribute (tree *, tree, tree, int, bool *);
545static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
546						 bool *);
547static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
548
549static void check_function_nonnull (tree, tree);
550static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
551static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
552static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
553static int resort_field_decl_cmp (const void *, const void *);
554
555/* Table of machine-independent attributes common to all C-like languages.  */
556const struct attribute_spec c_common_attribute_table[] =
557{
558  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
559  { "packed",                 0, 0, false, false, false,
560			      handle_packed_attribute },
561  { "nocommon",               0, 0, true,  false, false,
562			      handle_nocommon_attribute },
563  { "common",                 0, 0, true,  false, false,
564			      handle_common_attribute },
565  /* FIXME: logically, noreturn attributes should be listed as
566     "false, true, true" and apply to function types.  But implementing this
567     would require all the places in the compiler that use TREE_THIS_VOLATILE
568     on a decl to identify non-returning functions to be located and fixed
569     to check the function type instead.  */
570  { "noreturn",               0, 0, true,  false, false,
571			      handle_noreturn_attribute },
572  { "volatile",               0, 0, true,  false, false,
573			      handle_noreturn_attribute },
574  { "noinline",               0, 0, true,  false, false,
575			      handle_noinline_attribute },
576  { "always_inline",          0, 0, true,  false, false,
577			      handle_always_inline_attribute },
578  { "gnu_inline",             0, 0, true,  false, false,
579			      handle_gnu_inline_attribute },
580  { "flatten",                0, 0, true,  false, false,
581			      handle_flatten_attribute },
582  { "used",                   0, 0, true,  false, false,
583			      handle_used_attribute },
584  { "unused",                 0, 0, false, false, false,
585			      handle_unused_attribute },
586  { "externally_visible",     0, 0, true,  false, false,
587			      handle_externally_visible_attribute },
588  /* The same comments as for noreturn attributes apply to const ones.  */
589  { "const",                  0, 0, true,  false, false,
590			      handle_const_attribute },
591  { "transparent_union",      0, 0, false, false, false,
592			      handle_transparent_union_attribute },
593  { "constructor",            0, 0, true,  false, false,
594			      handle_constructor_attribute },
595  { "destructor",             0, 0, true,  false, false,
596			      handle_destructor_attribute },
597  { "mode",                   1, 1, false,  true, false,
598			      handle_mode_attribute },
599  { "section",                1, 1, true,  false, false,
600			      handle_section_attribute },
601  { "aligned",                0, 1, false, false, false,
602			      handle_aligned_attribute },
603  { "weak",                   0, 0, true,  false, false,
604			      handle_weak_attribute },
605  { "alias",                  1, 1, true,  false, false,
606			      handle_alias_attribute },
607  { "weakref",                0, 1, true,  false, false,
608			      handle_weakref_attribute },
609  { "no_instrument_function", 0, 0, true,  false, false,
610			      handle_no_instrument_function_attribute },
611  { "malloc",                 0, 0, true,  false, false,
612			      handle_malloc_attribute },
613  { "returns_twice",          0, 0, true,  false, false,
614			      handle_returns_twice_attribute },
615  { "no_stack_limit",         0, 0, true,  false, false,
616			      handle_no_limit_stack_attribute },
617  { "pure",                   0, 0, true,  false, false,
618			      handle_pure_attribute },
619  /* For internal use (marking of builtins) only.  The name contains space
620     to prevent its usage in source code.  */
621  { "no vops",                0, 0, true,  false, false,
622			      handle_novops_attribute },
623  { "deprecated",             0, 0, false, false, false,
624			      handle_deprecated_attribute },
625  { "vector_size",	      1, 1, false, true, false,
626			      handle_vector_size_attribute },
627  { "visibility",	      1, 1, false, false, false,
628			      handle_visibility_attribute },
629  { "tls_model",	      1, 1, true,  false, false,
630			      handle_tls_model_attribute },
631  { "nonnull",                0, -1, false, true, true,
632			      handle_nonnull_attribute },
633  { "nothrow",                0, 0, true,  false, false,
634			      handle_nothrow_attribute },
635  { "may_alias",	      0, 0, false, true, false, NULL },
636  { "cleanup",		      1, 1, true, false, false,
637			      handle_cleanup_attribute },
638  { "warn_unused_result",     0, 0, false, true, true,
639			      handle_warn_unused_result_attribute },
640  { "sentinel",               0, 1, false, true, true,
641			      handle_sentinel_attribute },
642  { NULL,                     0, 0, false, false, false, NULL }
643};
644
645/* Give the specifications for the format attributes, used by C and all
646   descendants.  */
647
648const struct attribute_spec c_common_format_attribute_table[] =
649{
650  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
651  { "format",                 3, 3, false, true,  true,
652			      handle_format_attribute },
653  { "format_arg",             1, 1, false, true,  true,
654			      handle_format_arg_attribute },
655  { NULL,                     0, 0, false, false, false, NULL }
656};
657
658/* Push current bindings for the function name VAR_DECLS.  */
659
660void
661start_fname_decls (void)
662{
663  unsigned ix;
664  tree saved = NULL_TREE;
665
666  for (ix = 0; fname_vars[ix].decl; ix++)
667    {
668      tree decl = *fname_vars[ix].decl;
669
670      if (decl)
671	{
672	  saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
673	  *fname_vars[ix].decl = NULL_TREE;
674	}
675    }
676  if (saved || saved_function_name_decls)
677    /* Normally they'll have been NULL, so only push if we've got a
678       stack, or they are non-NULL.  */
679    saved_function_name_decls = tree_cons (saved, NULL_TREE,
680					   saved_function_name_decls);
681}
682
683/* Finish up the current bindings, adding them into the current function's
684   statement tree.  This must be done _before_ finish_stmt_tree is called.
685   If there is no current function, we must be at file scope and no statements
686   are involved. Pop the previous bindings.  */
687
688void
689finish_fname_decls (void)
690{
691  unsigned ix;
692  tree stmts = NULL_TREE;
693  tree stack = saved_function_name_decls;
694
695  for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
696    append_to_statement_list (TREE_VALUE (stack), &stmts);
697
698  if (stmts)
699    {
700      tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
701
702      if (TREE_CODE (*bodyp) == BIND_EXPR)
703	bodyp = &BIND_EXPR_BODY (*bodyp);
704
705      append_to_statement_list_force (*bodyp, &stmts);
706      *bodyp = stmts;
707    }
708
709  for (ix = 0; fname_vars[ix].decl; ix++)
710    *fname_vars[ix].decl = NULL_TREE;
711
712  if (stack)
713    {
714      /* We had saved values, restore them.  */
715      tree saved;
716
717      for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
718	{
719	  tree decl = TREE_PURPOSE (saved);
720	  unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
721
722	  *fname_vars[ix].decl = decl;
723	}
724      stack = TREE_CHAIN (stack);
725    }
726  saved_function_name_decls = stack;
727}
728
729/* Return the text name of the current function, suitably prettified
730   by PRETTY_P.  Return string must be freed by caller.  */
731
732const char *
733fname_as_string (int pretty_p)
734{
735  const char *name = "top level";
736  char *namep;
737  int vrb = 2;
738
739  if (!pretty_p)
740    {
741      name = "";
742      vrb = 0;
743    }
744
745  if (current_function_decl)
746    name = lang_hooks.decl_printable_name (current_function_decl, vrb);
747
748  if (c_lex_string_translate)
749    {
750      int len = strlen (name) + 3; /* Two for '"'s.  One for NULL.  */
751      cpp_string cstr = { 0, 0 }, strname;
752
753      namep = XNEWVEC (char, len);
754      snprintf (namep, len, "\"%s\"", name);
755      strname.text = (unsigned char *) namep;
756      strname.len = len - 1;
757
758      if (cpp_interpret_string (parse_in, &strname, 1, &cstr, false))
759	{
760	  XDELETEVEC (namep);
761	  return (char *) cstr.text;
762	}
763    }
764  else
765    namep = xstrdup (name);
766
767  return namep;
768}
769
770/* Expand DECL if it declares an entity not handled by the
771   common code.  */
772
773int
774c_expand_decl (tree decl)
775{
776  if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
777    {
778      /* Let the back-end know about this variable.  */
779      if (!anon_aggr_type_p (TREE_TYPE (decl)))
780	emit_local_var (decl);
781      else
782	expand_anon_union_decl (decl, NULL_TREE,
783				DECL_ANON_UNION_ELEMS (decl));
784    }
785  else
786    return 0;
787
788  return 1;
789}
790
791
792/* Return the VAR_DECL for a const char array naming the current
793   function. If the VAR_DECL has not yet been created, create it
794   now. RID indicates how it should be formatted and IDENTIFIER_NODE
795   ID is its name (unfortunately C and C++ hold the RID values of
796   keywords in different places, so we can't derive RID from ID in
797   this language independent code.  */
798
799tree
800fname_decl (unsigned int rid, tree id)
801{
802  unsigned ix;
803  tree decl = NULL_TREE;
804
805  for (ix = 0; fname_vars[ix].decl; ix++)
806    if (fname_vars[ix].rid == rid)
807      break;
808
809  decl = *fname_vars[ix].decl;
810  if (!decl)
811    {
812      /* If a tree is built here, it would normally have the lineno of
813	 the current statement.  Later this tree will be moved to the
814	 beginning of the function and this line number will be wrong.
815	 To avoid this problem set the lineno to 0 here; that prevents
816	 it from appearing in the RTL.  */
817      tree stmts;
818      location_t saved_location = input_location;
819#ifdef USE_MAPPED_LOCATION
820      input_location = UNKNOWN_LOCATION;
821#else
822      input_line = 0;
823#endif
824
825      stmts = push_stmt_list ();
826      decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
827      stmts = pop_stmt_list (stmts);
828      if (!IS_EMPTY_STMT (stmts))
829	saved_function_name_decls
830	  = tree_cons (decl, stmts, saved_function_name_decls);
831      *fname_vars[ix].decl = decl;
832      input_location = saved_location;
833    }
834  if (!ix && !current_function_decl)
835    pedwarn ("%qD is not defined outside of function scope", decl);
836
837  return decl;
838}
839
840/* Given a STRING_CST, give it a suitable array-of-chars data type.  */
841
842tree
843fix_string_type (tree value)
844{
845  const int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
846  const int wide_flag = TREE_TYPE (value) == wchar_array_type_node;
847  int length = TREE_STRING_LENGTH (value);
848  int nchars;
849  tree e_type, i_type, a_type;
850
851  /* Compute the number of elements, for the array type.  */
852  nchars = wide_flag ? length / wchar_bytes : length;
853
854  /* C89 2.2.4.1, C99 5.2.4.1 (Translation limits).  The analogous
855     limit in C++98 Annex B is very large (65536) and is not normative,
856     so we do not diagnose it (warn_overlength_strings is forced off
857     in c_common_post_options).  */
858  if (warn_overlength_strings)
859    {
860      const int nchars_max = flag_isoc99 ? 4095 : 509;
861      const int relevant_std = flag_isoc99 ? 99 : 90;
862      if (nchars - 1 > nchars_max)
863	/* Translators: The %d after 'ISO C' will be 90 or 99.  Do not
864	   separate the %d from the 'C'.  'ISO' should not be
865	   translated, but it may be moved after 'C%d' in languages
866	   where modifiers follow nouns.  */
867	pedwarn ("string length %qd is greater than the length %qd "
868		 "ISO C%d compilers are required to support",
869		 nchars - 1, nchars_max, relevant_std);
870    }
871
872  /* Create the array type for the string constant.  The ISO C++
873     standard says that a string literal has type `const char[N]' or
874     `const wchar_t[N]'.  We use the same logic when invoked as a C
875     front-end with -Wwrite-strings.
876     ??? We should change the type of an expression depending on the
877     state of a warning flag.  We should just be warning -- see how
878     this is handled in the C++ front-end for the deprecated implicit
879     conversion from string literals to `char*' or `wchar_t*'.
880
881     The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
882     array type being the unqualified version of that type.
883     Therefore, if we are constructing an array of const char, we must
884     construct the matching unqualified array type first.  The C front
885     end does not require this, but it does no harm, so we do it
886     unconditionally.  */
887  e_type = wide_flag ? wchar_type_node : char_type_node;
888  i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
889  a_type = build_array_type (e_type, i_type);
890  if (c_dialect_cxx() || warn_write_strings)
891    a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
892
893  TREE_TYPE (value) = a_type;
894  TREE_CONSTANT (value) = 1;
895  TREE_INVARIANT (value) = 1;
896  TREE_READONLY (value) = 1;
897  TREE_STATIC (value) = 1;
898  return value;
899}
900
901/* Print a warning if a constant expression had overflow in folding.
902   Invoke this function on every expression that the language
903   requires to be a constant expression.
904   Note the ANSI C standard says it is erroneous for a
905   constant expression to overflow.  */
906
907void
908constant_expression_warning (tree value)
909{
910  if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
911       || TREE_CODE (value) == VECTOR_CST
912       || TREE_CODE (value) == COMPLEX_CST)
913      && TREE_CONSTANT_OVERFLOW (value)
914      && warn_overflow
915      && pedantic)
916    pedwarn ("overflow in constant expression");
917}
918
919/* Print a warning if an expression had overflow in folding.
920   Invoke this function on every expression that
921   (1) appears in the source code, and
922   (2) might be a constant expression that overflowed, and
923   (3) is not already checked by convert_and_check;
924   however, do not invoke this function on operands of explicit casts.  */
925
926void
927overflow_warning (tree value)
928{
929  if ((TREE_CODE (value) == INTEGER_CST
930       || (TREE_CODE (value) == COMPLEX_CST
931	   && TREE_CODE (TREE_REALPART (value)) == INTEGER_CST))
932      && TREE_OVERFLOW (value))
933    {
934      TREE_OVERFLOW (value) = 0;
935      if (skip_evaluation == 0)
936	warning (OPT_Woverflow, "integer overflow in expression");
937    }
938  else if ((TREE_CODE (value) == REAL_CST
939	    || (TREE_CODE (value) == COMPLEX_CST
940		&& TREE_CODE (TREE_REALPART (value)) == REAL_CST))
941	   && TREE_OVERFLOW (value))
942    {
943      TREE_OVERFLOW (value) = 0;
944      if (skip_evaluation == 0)
945	warning (OPT_Woverflow, "floating point overflow in expression");
946    }
947  else if (TREE_CODE (value) == VECTOR_CST && TREE_OVERFLOW (value))
948    {
949      TREE_OVERFLOW (value) = 0;
950      if (skip_evaluation == 0)
951	warning (OPT_Woverflow, "vector overflow in expression");
952    }
953}
954
955/* Print a warning if a large constant is truncated to unsigned,
956   or if -Wconversion is used and a constant < 0 is converted to unsigned.
957   Invoke this function on every expression that might be implicitly
958   converted to an unsigned type.  */
959
960static void
961unsigned_conversion_warning (tree result, tree operand)
962{
963  tree type = TREE_TYPE (result);
964
965  if (TREE_CODE (operand) == INTEGER_CST
966      && TREE_CODE (type) == INTEGER_TYPE
967      && TYPE_UNSIGNED (type)
968      && skip_evaluation == 0
969      && !int_fits_type_p (operand, type))
970    {
971      if (!int_fits_type_p (operand, c_common_signed_type (type)))
972	/* This detects cases like converting -129 or 256 to unsigned char.  */
973	warning (OPT_Woverflow,
974		 "large integer implicitly truncated to unsigned type");
975      else
976	warning (OPT_Wconversion,
977		 "negative integer implicitly converted to unsigned type");
978    }
979}
980
981/* Print a warning about casts that might indicate violation
982   of strict aliasing rules if -Wstrict-aliasing is used and
983   strict aliasing mode is in effect. OTYPE is the original
984   TREE_TYPE of EXPR, and TYPE the type we're casting to. */
985
986void
987strict_aliasing_warning (tree otype, tree type, tree expr)
988{
989  if (flag_strict_aliasing && warn_strict_aliasing
990      && POINTER_TYPE_P (type) && POINTER_TYPE_P (otype)
991      && TREE_CODE (expr) == ADDR_EXPR
992      && (DECL_P (TREE_OPERAND (expr, 0))
993          || handled_component_p (TREE_OPERAND (expr, 0)))
994      && !VOID_TYPE_P (TREE_TYPE (type)))
995    {
996      /* Casting the address of an object to non void pointer. Warn
997         if the cast breaks type based aliasing.  */
998      if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
999        warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
1000                 "might break strict-aliasing rules");
1001      else
1002        {
1003          HOST_WIDE_INT set1 = get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
1004          HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
1005
1006          if (!alias_sets_conflict_p (set1, set2))
1007            warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1008                     "pointer will break strict-aliasing rules");
1009          else if (warn_strict_aliasing > 1
1010                  && !alias_sets_might_conflict_p (set1, set2))
1011            warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1012                     "pointer might break strict-aliasing rules");
1013        }
1014    }
1015}
1016
1017
1018/* Print a warning about if (); or if () .. else; constructs
1019   via the special empty statement node that we create.  INNER_THEN
1020   and INNER_ELSE are the statement lists of the if and the else
1021   block.  */
1022
1023void
1024empty_body_warning (tree inner_then, tree inner_else)
1025{
1026  if (extra_warnings)
1027    {
1028      if (TREE_CODE (inner_then) == STATEMENT_LIST
1029	  && STATEMENT_LIST_TAIL (inner_then))
1030	inner_then = STATEMENT_LIST_TAIL (inner_then)->stmt;
1031
1032      if (inner_else && TREE_CODE (inner_else) == STATEMENT_LIST
1033	  && STATEMENT_LIST_TAIL (inner_else))
1034	inner_else = STATEMENT_LIST_TAIL (inner_else)->stmt;
1035
1036      if (IS_EMPTY_STMT (inner_then) && !inner_else)
1037	warning (OPT_Wextra, "%Hempty body in an if-statement",
1038		 EXPR_LOCUS (inner_then));
1039
1040      if (inner_else && IS_EMPTY_STMT (inner_else))
1041	warning (OPT_Wextra, "%Hempty body in an else-statement",
1042		 EXPR_LOCUS (inner_else));
1043   }
1044}
1045
1046
1047/* Nonzero if constant C has a value that is permissible
1048   for type TYPE (an INTEGER_TYPE).  */
1049
1050static int
1051constant_fits_type_p (tree c, tree type)
1052{
1053  if (TREE_CODE (c) == INTEGER_CST)
1054    return int_fits_type_p (c, type);
1055
1056  c = convert (type, c);
1057  return !TREE_OVERFLOW (c);
1058}
1059
1060/* Nonzero if vector types T1 and T2 can be converted to each other
1061   without an explicit cast.  */
1062int
1063vector_types_convertible_p (tree t1, tree t2)
1064{
1065  return targetm.vector_opaque_p (t1)
1066	 || targetm.vector_opaque_p (t2)
1067	 || (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
1068	     && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
1069		 TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
1070	     && INTEGRAL_TYPE_P (TREE_TYPE (t1))
1071		== INTEGRAL_TYPE_P (TREE_TYPE (t2)));
1072}
1073
1074/* Convert EXPR to TYPE, warning about conversion problems with constants.
1075   Invoke this function on every expression that is converted implicitly,
1076   i.e. because of language rules and not because of an explicit cast.  */
1077
1078tree
1079convert_and_check (tree type, tree expr)
1080{
1081  tree t = convert (type, expr);
1082  if (TREE_CODE (t) == INTEGER_CST)
1083    {
1084      if (TREE_OVERFLOW (t))
1085	{
1086	  TREE_OVERFLOW (t) = 0;
1087
1088	  /* Do not diagnose overflow in a constant expression merely
1089	     because a conversion overflowed.  */
1090	  TREE_CONSTANT_OVERFLOW (t) = CONSTANT_CLASS_P (expr)
1091                                       && TREE_CONSTANT_OVERFLOW (expr);
1092
1093	  /* No warning for converting 0x80000000 to int.  */
1094	  if (!(TYPE_UNSIGNED (type) < TYPE_UNSIGNED (TREE_TYPE (expr))
1095		&& TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1096		&& TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (expr))))
1097	    /* If EXPR fits in the unsigned version of TYPE,
1098	       don't warn unless pedantic.  */
1099	    if ((pedantic
1100		 || TYPE_UNSIGNED (type)
1101		 || !constant_fits_type_p (expr,
1102					   c_common_unsigned_type (type)))
1103		&& skip_evaluation == 0)
1104	      warning (OPT_Woverflow,
1105                       "overflow in implicit constant conversion");
1106	}
1107      else
1108	unsigned_conversion_warning (t, expr);
1109    }
1110  return t;
1111}
1112
1113/* A node in a list that describes references to variables (EXPR), which are
1114   either read accesses if WRITER is zero, or write accesses, in which case
1115   WRITER is the parent of EXPR.  */
1116struct tlist
1117{
1118  struct tlist *next;
1119  tree expr, writer;
1120};
1121
1122/* Used to implement a cache the results of a call to verify_tree.  We only
1123   use this for SAVE_EXPRs.  */
1124struct tlist_cache
1125{
1126  struct tlist_cache *next;
1127  struct tlist *cache_before_sp;
1128  struct tlist *cache_after_sp;
1129  tree expr;
1130};
1131
1132/* Obstack to use when allocating tlist structures, and corresponding
1133   firstobj.  */
1134static struct obstack tlist_obstack;
1135static char *tlist_firstobj = 0;
1136
1137/* Keep track of the identifiers we've warned about, so we can avoid duplicate
1138   warnings.  */
1139static struct tlist *warned_ids;
1140/* SAVE_EXPRs need special treatment.  We process them only once and then
1141   cache the results.  */
1142static struct tlist_cache *save_expr_cache;
1143
1144static void add_tlist (struct tlist **, struct tlist *, tree, int);
1145static void merge_tlist (struct tlist **, struct tlist *, int);
1146static void verify_tree (tree, struct tlist **, struct tlist **, tree);
1147static int warning_candidate_p (tree);
1148static void warn_for_collisions (struct tlist *);
1149static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
1150static struct tlist *new_tlist (struct tlist *, tree, tree);
1151
1152/* Create a new struct tlist and fill in its fields.  */
1153static struct tlist *
1154new_tlist (struct tlist *next, tree t, tree writer)
1155{
1156  struct tlist *l;
1157  l = XOBNEW (&tlist_obstack, struct tlist);
1158  l->next = next;
1159  l->expr = t;
1160  l->writer = writer;
1161  return l;
1162}
1163
1164/* Add duplicates of the nodes found in ADD to the list *TO.  If EXCLUDE_WRITER
1165   is nonnull, we ignore any node we find which has a writer equal to it.  */
1166
1167static void
1168add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
1169{
1170  while (add)
1171    {
1172      struct tlist *next = add->next;
1173      if (!copy)
1174	add->next = *to;
1175      if (!exclude_writer || add->writer != exclude_writer)
1176	*to = copy ? new_tlist (*to, add->expr, add->writer) : add;
1177      add = next;
1178    }
1179}
1180
1181/* Merge the nodes of ADD into TO.  This merging process is done so that for
1182   each variable that already exists in TO, no new node is added; however if
1183   there is a write access recorded in ADD, and an occurrence on TO is only
1184   a read access, then the occurrence in TO will be modified to record the
1185   write.  */
1186
1187static void
1188merge_tlist (struct tlist **to, struct tlist *add, int copy)
1189{
1190  struct tlist **end = to;
1191
1192  while (*end)
1193    end = &(*end)->next;
1194
1195  while (add)
1196    {
1197      int found = 0;
1198      struct tlist *tmp2;
1199      struct tlist *next = add->next;
1200
1201      for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
1202	if (tmp2->expr == add->expr)
1203	  {
1204	    found = 1;
1205	    if (!tmp2->writer)
1206	      tmp2->writer = add->writer;
1207	  }
1208      if (!found)
1209	{
1210	  *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
1211	  end = &(*end)->next;
1212	  *end = 0;
1213	}
1214      add = next;
1215    }
1216}
1217
1218/* WRITTEN is a variable, WRITER is its parent.  Warn if any of the variable
1219   references in list LIST conflict with it, excluding reads if ONLY writers
1220   is nonzero.  */
1221
1222static void
1223warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
1224		       int only_writes)
1225{
1226  struct tlist *tmp;
1227
1228  /* Avoid duplicate warnings.  */
1229  for (tmp = warned_ids; tmp; tmp = tmp->next)
1230    if (tmp->expr == written)
1231      return;
1232
1233  while (list)
1234    {
1235      if (list->expr == written
1236	  && list->writer != writer
1237	  && (!only_writes || list->writer)
1238	  && DECL_NAME (list->expr))
1239	{
1240	  warned_ids = new_tlist (warned_ids, written, NULL_TREE);
1241	  warning (0, "operation on %qE may be undefined", list->expr);
1242	}
1243      list = list->next;
1244    }
1245}
1246
1247/* Given a list LIST of references to variables, find whether any of these
1248   can cause conflicts due to missing sequence points.  */
1249
1250static void
1251warn_for_collisions (struct tlist *list)
1252{
1253  struct tlist *tmp;
1254
1255  for (tmp = list; tmp; tmp = tmp->next)
1256    {
1257      if (tmp->writer)
1258	warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
1259    }
1260}
1261
1262/* Return nonzero if X is a tree that can be verified by the sequence point
1263   warnings.  */
1264static int
1265warning_candidate_p (tree x)
1266{
1267  return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
1268}
1269
1270/* Walk the tree X, and record accesses to variables.  If X is written by the
1271   parent tree, WRITER is the parent.
1272   We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP.  If this
1273   expression or its only operand forces a sequence point, then everything up
1274   to the sequence point is stored in PBEFORE_SP.  Everything else gets stored
1275   in PNO_SP.
1276   Once we return, we will have emitted warnings if any subexpression before
1277   such a sequence point could be undefined.  On a higher level, however, the
1278   sequence point may not be relevant, and we'll merge the two lists.
1279
1280   Example: (b++, a) + b;
1281   The call that processes the COMPOUND_EXPR will store the increment of B
1282   in PBEFORE_SP, and the use of A in PNO_SP.  The higher-level call that
1283   processes the PLUS_EXPR will need to merge the two lists so that
1284   eventually, all accesses end up on the same list (and we'll warn about the
1285   unordered subexpressions b++ and b.
1286
1287   A note on merging.  If we modify the former example so that our expression
1288   becomes
1289     (b++, b) + a
1290   care must be taken not simply to add all three expressions into the final
1291   PNO_SP list.  The function merge_tlist takes care of that by merging the
1292   before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1293   way, so that no more than one access to B is recorded.  */
1294
1295static void
1296verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
1297	     tree writer)
1298{
1299  struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1300  enum tree_code code;
1301  enum tree_code_class cl;
1302
1303  /* X may be NULL if it is the operand of an empty statement expression
1304     ({ }).  */
1305  if (x == NULL)
1306    return;
1307
1308 restart:
1309  code = TREE_CODE (x);
1310  cl = TREE_CODE_CLASS (code);
1311
1312  if (warning_candidate_p (x))
1313    {
1314      *pno_sp = new_tlist (*pno_sp, x, writer);
1315      return;
1316    }
1317
1318  switch (code)
1319    {
1320    case CONSTRUCTOR:
1321      return;
1322
1323    case COMPOUND_EXPR:
1324    case TRUTH_ANDIF_EXPR:
1325    case TRUTH_ORIF_EXPR:
1326      tmp_before = tmp_nosp = tmp_list3 = 0;
1327      verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1328      warn_for_collisions (tmp_nosp);
1329      merge_tlist (pbefore_sp, tmp_before, 0);
1330      merge_tlist (pbefore_sp, tmp_nosp, 0);
1331      verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
1332      merge_tlist (pbefore_sp, tmp_list3, 0);
1333      return;
1334
1335    case COND_EXPR:
1336      tmp_before = tmp_list2 = 0;
1337      verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
1338      warn_for_collisions (tmp_list2);
1339      merge_tlist (pbefore_sp, tmp_before, 0);
1340      merge_tlist (pbefore_sp, tmp_list2, 1);
1341
1342      tmp_list3 = tmp_nosp = 0;
1343      verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
1344      warn_for_collisions (tmp_nosp);
1345      merge_tlist (pbefore_sp, tmp_list3, 0);
1346
1347      tmp_list3 = tmp_list2 = 0;
1348      verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
1349      warn_for_collisions (tmp_list2);
1350      merge_tlist (pbefore_sp, tmp_list3, 0);
1351      /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1352	 two first, to avoid warning for (a ? b++ : b++).  */
1353      merge_tlist (&tmp_nosp, tmp_list2, 0);
1354      add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1355      return;
1356
1357    case PREDECREMENT_EXPR:
1358    case PREINCREMENT_EXPR:
1359    case POSTDECREMENT_EXPR:
1360    case POSTINCREMENT_EXPR:
1361      verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
1362      return;
1363
1364    case MODIFY_EXPR:
1365      tmp_before = tmp_nosp = tmp_list3 = 0;
1366      verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
1367      verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
1368      /* Expressions inside the LHS are not ordered wrt. the sequence points
1369	 in the RHS.  Example:
1370	   *a = (a++, 2)
1371	 Despite the fact that the modification of "a" is in the before_sp
1372	 list (tmp_before), it conflicts with the use of "a" in the LHS.
1373	 We can handle this by adding the contents of tmp_list3
1374	 to those of tmp_before, and redoing the collision warnings for that
1375	 list.  */
1376      add_tlist (&tmp_before, tmp_list3, x, 1);
1377      warn_for_collisions (tmp_before);
1378      /* Exclude the LHS itself here; we first have to merge it into the
1379	 tmp_nosp list.  This is done to avoid warning for "a = a"; if we
1380	 didn't exclude the LHS, we'd get it twice, once as a read and once
1381	 as a write.  */
1382      add_tlist (pno_sp, tmp_list3, x, 0);
1383      warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
1384
1385      merge_tlist (pbefore_sp, tmp_before, 0);
1386      if (warning_candidate_p (TREE_OPERAND (x, 0)))
1387	merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
1388      add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
1389      return;
1390
1391    case CALL_EXPR:
1392      /* We need to warn about conflicts among arguments and conflicts between
1393	 args and the function address.  Side effects of the function address,
1394	 however, are not ordered by the sequence point of the call.  */
1395      tmp_before = tmp_nosp = tmp_list2 = tmp_list3 = 0;
1396      verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1397      if (TREE_OPERAND (x, 1))
1398	verify_tree (TREE_OPERAND (x, 1), &tmp_list2, &tmp_list3, NULL_TREE);
1399      merge_tlist (&tmp_list3, tmp_list2, 0);
1400      add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
1401      add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
1402      warn_for_collisions (tmp_before);
1403      add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
1404      return;
1405
1406    case TREE_LIST:
1407      /* Scan all the list, e.g. indices of multi dimensional array.  */
1408      while (x)
1409	{
1410	  tmp_before = tmp_nosp = 0;
1411	  verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
1412	  merge_tlist (&tmp_nosp, tmp_before, 0);
1413	  add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1414	  x = TREE_CHAIN (x);
1415	}
1416      return;
1417
1418    case SAVE_EXPR:
1419      {
1420	struct tlist_cache *t;
1421	for (t = save_expr_cache; t; t = t->next)
1422	  if (t->expr == x)
1423	    break;
1424
1425	if (!t)
1426	  {
1427	    t = XOBNEW (&tlist_obstack, struct tlist_cache);
1428	    t->next = save_expr_cache;
1429	    t->expr = x;
1430	    save_expr_cache = t;
1431
1432	    tmp_before = tmp_nosp = 0;
1433	    verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1434	    warn_for_collisions (tmp_nosp);
1435
1436	    tmp_list3 = 0;
1437	    while (tmp_nosp)
1438	      {
1439		struct tlist *t = tmp_nosp;
1440		tmp_nosp = t->next;
1441		merge_tlist (&tmp_list3, t, 0);
1442	      }
1443	    t->cache_before_sp = tmp_before;
1444	    t->cache_after_sp = tmp_list3;
1445	  }
1446	merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1447	add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1448	return;
1449      }
1450
1451    default:
1452      /* For other expressions, simply recurse on their operands.
1453	 Manual tail recursion for unary expressions.
1454	 Other non-expressions need not be processed.  */
1455      if (cl == tcc_unary)
1456	{
1457	  x = TREE_OPERAND (x, 0);
1458	  writer = 0;
1459	  goto restart;
1460	}
1461      else if (IS_EXPR_CODE_CLASS (cl))
1462	{
1463	  int lp;
1464	  int max = TREE_CODE_LENGTH (TREE_CODE (x));
1465	  for (lp = 0; lp < max; lp++)
1466	    {
1467	      tmp_before = tmp_nosp = 0;
1468	      verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
1469	      merge_tlist (&tmp_nosp, tmp_before, 0);
1470	      add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1471	    }
1472	}
1473      return;
1474    }
1475}
1476
1477/* Try to warn for undefined behavior in EXPR due to missing sequence
1478   points.  */
1479
1480void
1481verify_sequence_points (tree expr)
1482{
1483  struct tlist *before_sp = 0, *after_sp = 0;
1484
1485  warned_ids = 0;
1486  save_expr_cache = 0;
1487  if (tlist_firstobj == 0)
1488    {
1489      gcc_obstack_init (&tlist_obstack);
1490      tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
1491    }
1492
1493  verify_tree (expr, &before_sp, &after_sp, 0);
1494  warn_for_collisions (after_sp);
1495  obstack_free (&tlist_obstack, tlist_firstobj);
1496}
1497
1498/* Validate the expression after `case' and apply default promotions.  */
1499
1500static tree
1501check_case_value (tree value)
1502{
1503  if (value == NULL_TREE)
1504    return value;
1505
1506  /* ??? Can we ever get nops here for a valid case value?  We
1507     shouldn't for C.  */
1508  STRIP_TYPE_NOPS (value);
1509  /* In C++, the following is allowed:
1510
1511       const int i = 3;
1512       switch (...) { case i: ... }
1513
1514     So, we try to reduce the VALUE to a constant that way.  */
1515  if (c_dialect_cxx ())
1516    {
1517      value = decl_constant_value (value);
1518      STRIP_TYPE_NOPS (value);
1519      value = fold (value);
1520    }
1521
1522  if (TREE_CODE (value) == INTEGER_CST)
1523    /* Promote char or short to int.  */
1524    value = perform_integral_promotions (value);
1525  else if (value != error_mark_node)
1526    {
1527      error ("case label does not reduce to an integer constant");
1528      value = error_mark_node;
1529    }
1530
1531  constant_expression_warning (value);
1532
1533  return value;
1534}
1535
1536/* See if the case values LOW and HIGH are in the range of the original
1537   type (i.e. before the default conversion to int) of the switch testing
1538   expression.
1539   TYPE is the promoted type of the testing expression, and ORIG_TYPE is
1540   the type before promoting it.  CASE_LOW_P is a pointer to the lower
1541   bound of the case label, and CASE_HIGH_P is the upper bound or NULL
1542   if the case is not a case range.
1543   The caller has to make sure that we are not called with NULL for
1544   CASE_LOW_P (i.e. the default case).
1545   Returns true if the case label is in range of ORIG_TYPE (saturated or
1546   untouched) or false if the label is out of range.  */
1547
1548static bool
1549check_case_bounds (tree type, tree orig_type,
1550		   tree *case_low_p, tree *case_high_p)
1551{
1552  tree min_value, max_value;
1553  tree case_low = *case_low_p;
1554  tree case_high = case_high_p ? *case_high_p : case_low;
1555
1556  /* If there was a problem with the original type, do nothing.  */
1557  if (orig_type == error_mark_node)
1558    return true;
1559
1560  min_value = TYPE_MIN_VALUE (orig_type);
1561  max_value = TYPE_MAX_VALUE (orig_type);
1562
1563  /* Case label is less than minimum for type.  */
1564  if (tree_int_cst_compare (case_low, min_value) < 0
1565      && tree_int_cst_compare (case_high, min_value) < 0)
1566    {
1567      warning (0, "case label value is less than minimum value for type");
1568      return false;
1569    }
1570
1571  /* Case value is greater than maximum for type.  */
1572  if (tree_int_cst_compare (case_low, max_value) > 0
1573      && tree_int_cst_compare (case_high, max_value) > 0)
1574    {
1575      warning (0, "case label value exceeds maximum value for type");
1576      return false;
1577    }
1578
1579  /* Saturate lower case label value to minimum.  */
1580  if (tree_int_cst_compare (case_high, min_value) >= 0
1581      && tree_int_cst_compare (case_low, min_value) < 0)
1582    {
1583      warning (0, "lower value in case label range"
1584	       " less than minimum value for type");
1585      case_low = min_value;
1586    }
1587
1588  /* Saturate upper case label value to maximum.  */
1589  if (tree_int_cst_compare (case_low, max_value) <= 0
1590      && tree_int_cst_compare (case_high, max_value) > 0)
1591    {
1592      warning (0, "upper value in case label range"
1593	       " exceeds maximum value for type");
1594      case_high = max_value;
1595    }
1596
1597  if (*case_low_p != case_low)
1598    *case_low_p = convert (type, case_low);
1599  if (case_high_p && *case_high_p != case_high)
1600    *case_high_p = convert (type, case_high);
1601
1602  return true;
1603}
1604
1605/* Return an integer type with BITS bits of precision,
1606   that is unsigned if UNSIGNEDP is nonzero, otherwise signed.  */
1607
1608tree
1609c_common_type_for_size (unsigned int bits, int unsignedp)
1610{
1611  if (bits == TYPE_PRECISION (integer_type_node))
1612    return unsignedp ? unsigned_type_node : integer_type_node;
1613
1614  if (bits == TYPE_PRECISION (signed_char_type_node))
1615    return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1616
1617  if (bits == TYPE_PRECISION (short_integer_type_node))
1618    return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1619
1620  if (bits == TYPE_PRECISION (long_integer_type_node))
1621    return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1622
1623  if (bits == TYPE_PRECISION (long_long_integer_type_node))
1624    return (unsignedp ? long_long_unsigned_type_node
1625	    : long_long_integer_type_node);
1626
1627  if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
1628    return (unsignedp ? widest_unsigned_literal_type_node
1629	    : widest_integer_literal_type_node);
1630
1631  if (bits <= TYPE_PRECISION (intQI_type_node))
1632    return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1633
1634  if (bits <= TYPE_PRECISION (intHI_type_node))
1635    return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1636
1637  if (bits <= TYPE_PRECISION (intSI_type_node))
1638    return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1639
1640  if (bits <= TYPE_PRECISION (intDI_type_node))
1641    return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1642
1643  return 0;
1644}
1645
1646/* Used for communication between c_common_type_for_mode and
1647   c_register_builtin_type.  */
1648static GTY(()) tree registered_builtin_types;
1649
1650/* Return a data type that has machine mode MODE.
1651   If the mode is an integer,
1652   then UNSIGNEDP selects between signed and unsigned types.  */
1653
1654tree
1655c_common_type_for_mode (enum machine_mode mode, int unsignedp)
1656{
1657  tree t;
1658
1659  if (mode == TYPE_MODE (integer_type_node))
1660    return unsignedp ? unsigned_type_node : integer_type_node;
1661
1662  if (mode == TYPE_MODE (signed_char_type_node))
1663    return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1664
1665  if (mode == TYPE_MODE (short_integer_type_node))
1666    return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1667
1668  if (mode == TYPE_MODE (long_integer_type_node))
1669    return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1670
1671  if (mode == TYPE_MODE (long_long_integer_type_node))
1672    return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
1673
1674  if (mode == TYPE_MODE (widest_integer_literal_type_node))
1675    return unsignedp ? widest_unsigned_literal_type_node
1676		     : widest_integer_literal_type_node;
1677
1678  if (mode == QImode)
1679    return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1680
1681  if (mode == HImode)
1682    return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1683
1684  if (mode == SImode)
1685    return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1686
1687  if (mode == DImode)
1688    return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1689
1690#if HOST_BITS_PER_WIDE_INT >= 64
1691  if (mode == TYPE_MODE (intTI_type_node))
1692    return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1693#endif
1694
1695  if (mode == TYPE_MODE (float_type_node))
1696    return float_type_node;
1697
1698  if (mode == TYPE_MODE (double_type_node))
1699    return double_type_node;
1700
1701  if (mode == TYPE_MODE (long_double_type_node))
1702    return long_double_type_node;
1703
1704  if (mode == TYPE_MODE (void_type_node))
1705    return void_type_node;
1706
1707  if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
1708    return (unsignedp
1709	    ? make_unsigned_type (GET_MODE_PRECISION (mode))
1710	    : make_signed_type (GET_MODE_PRECISION (mode)));
1711
1712  if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
1713    return (unsignedp
1714	    ? make_unsigned_type (GET_MODE_PRECISION (mode))
1715	    : make_signed_type (GET_MODE_PRECISION (mode)));
1716
1717  if (COMPLEX_MODE_P (mode))
1718    {
1719      enum machine_mode inner_mode;
1720      tree inner_type;
1721
1722      if (mode == TYPE_MODE (complex_float_type_node))
1723	return complex_float_type_node;
1724      if (mode == TYPE_MODE (complex_double_type_node))
1725	return complex_double_type_node;
1726      if (mode == TYPE_MODE (complex_long_double_type_node))
1727	return complex_long_double_type_node;
1728
1729      if (mode == TYPE_MODE (complex_integer_type_node) && !unsignedp)
1730	return complex_integer_type_node;
1731
1732      inner_mode = GET_MODE_INNER (mode);
1733      inner_type = c_common_type_for_mode (inner_mode, unsignedp);
1734      if (inner_type != NULL_TREE)
1735	return build_complex_type (inner_type);
1736    }
1737  else if (VECTOR_MODE_P (mode))
1738    {
1739      enum machine_mode inner_mode = GET_MODE_INNER (mode);
1740      tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
1741      if (inner_type != NULL_TREE)
1742	return build_vector_type_for_mode (inner_type, mode);
1743    }
1744
1745  if (mode == TYPE_MODE (dfloat32_type_node))
1746    return dfloat32_type_node;
1747  if (mode == TYPE_MODE (dfloat64_type_node))
1748    return dfloat64_type_node;
1749  if (mode == TYPE_MODE (dfloat128_type_node))
1750    return dfloat128_type_node;
1751
1752  for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
1753    if (TYPE_MODE (TREE_VALUE (t)) == mode)
1754      return TREE_VALUE (t);
1755
1756  return 0;
1757}
1758
1759/* Return an unsigned type the same as TYPE in other respects.  */
1760tree
1761c_common_unsigned_type (tree type)
1762{
1763  tree type1 = TYPE_MAIN_VARIANT (type);
1764  if (type1 == signed_char_type_node || type1 == char_type_node)
1765    return unsigned_char_type_node;
1766  if (type1 == integer_type_node)
1767    return unsigned_type_node;
1768  if (type1 == short_integer_type_node)
1769    return short_unsigned_type_node;
1770  if (type1 == long_integer_type_node)
1771    return long_unsigned_type_node;
1772  if (type1 == long_long_integer_type_node)
1773    return long_long_unsigned_type_node;
1774  if (type1 == widest_integer_literal_type_node)
1775    return widest_unsigned_literal_type_node;
1776#if HOST_BITS_PER_WIDE_INT >= 64
1777  if (type1 == intTI_type_node)
1778    return unsigned_intTI_type_node;
1779#endif
1780  if (type1 == intDI_type_node)
1781    return unsigned_intDI_type_node;
1782  if (type1 == intSI_type_node)
1783    return unsigned_intSI_type_node;
1784  if (type1 == intHI_type_node)
1785    return unsigned_intHI_type_node;
1786  if (type1 == intQI_type_node)
1787    return unsigned_intQI_type_node;
1788
1789  return c_common_signed_or_unsigned_type (1, type);
1790}
1791
1792/* Return a signed type the same as TYPE in other respects.  */
1793
1794tree
1795c_common_signed_type (tree type)
1796{
1797  tree type1 = TYPE_MAIN_VARIANT (type);
1798  if (type1 == unsigned_char_type_node || type1 == char_type_node)
1799    return signed_char_type_node;
1800  if (type1 == unsigned_type_node)
1801    return integer_type_node;
1802  if (type1 == short_unsigned_type_node)
1803    return short_integer_type_node;
1804  if (type1 == long_unsigned_type_node)
1805    return long_integer_type_node;
1806  if (type1 == long_long_unsigned_type_node)
1807    return long_long_integer_type_node;
1808  if (type1 == widest_unsigned_literal_type_node)
1809    return widest_integer_literal_type_node;
1810#if HOST_BITS_PER_WIDE_INT >= 64
1811  if (type1 == unsigned_intTI_type_node)
1812    return intTI_type_node;
1813#endif
1814  if (type1 == unsigned_intDI_type_node)
1815    return intDI_type_node;
1816  if (type1 == unsigned_intSI_type_node)
1817    return intSI_type_node;
1818  if (type1 == unsigned_intHI_type_node)
1819    return intHI_type_node;
1820  if (type1 == unsigned_intQI_type_node)
1821    return intQI_type_node;
1822
1823  return c_common_signed_or_unsigned_type (0, type);
1824}
1825
1826/* Return a type the same as TYPE except unsigned or
1827   signed according to UNSIGNEDP.  */
1828
1829tree
1830c_common_signed_or_unsigned_type (int unsignedp, tree type)
1831{
1832  if (!INTEGRAL_TYPE_P (type)
1833      || TYPE_UNSIGNED (type) == unsignedp)
1834    return type;
1835
1836  /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
1837     the precision; they have precision set to match their range, but
1838     may use a wider mode to match an ABI.  If we change modes, we may
1839     wind up with bad conversions.  For INTEGER_TYPEs in C, must check
1840     the precision as well, so as to yield correct results for
1841     bit-field types.  C++ does not have these separate bit-field
1842     types, and producing a signed or unsigned variant of an
1843     ENUMERAL_TYPE may cause other problems as well.  */
1844
1845#define TYPE_OK(node)							    \
1846  (TYPE_MODE (type) == TYPE_MODE (node)					    \
1847   && (c_dialect_cxx () || TYPE_PRECISION (type) == TYPE_PRECISION (node)))
1848  if (TYPE_OK (signed_char_type_node))
1849    return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1850  if (TYPE_OK (integer_type_node))
1851    return unsignedp ? unsigned_type_node : integer_type_node;
1852  if (TYPE_OK (short_integer_type_node))
1853    return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1854  if (TYPE_OK (long_integer_type_node))
1855    return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1856  if (TYPE_OK (long_long_integer_type_node))
1857    return (unsignedp ? long_long_unsigned_type_node
1858	    : long_long_integer_type_node);
1859  if (TYPE_OK (widest_integer_literal_type_node))
1860    return (unsignedp ? widest_unsigned_literal_type_node
1861	    : widest_integer_literal_type_node);
1862
1863#if HOST_BITS_PER_WIDE_INT >= 64
1864  if (TYPE_OK (intTI_type_node))
1865    return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1866#endif
1867  if (TYPE_OK (intDI_type_node))
1868    return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1869  if (TYPE_OK (intSI_type_node))
1870    return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1871  if (TYPE_OK (intHI_type_node))
1872    return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1873  if (TYPE_OK (intQI_type_node))
1874    return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1875#undef TYPE_OK
1876
1877  if (c_dialect_cxx ())
1878    return type;
1879  else
1880    return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
1881}
1882
1883/* Build a bit-field integer type for the given WIDTH and UNSIGNEDP.  */
1884
1885tree
1886c_build_bitfield_integer_type (unsigned HOST_WIDE_INT width, int unsignedp)
1887{
1888  /* Extended integer types of the same width as a standard type have
1889     lesser rank, so those of the same width as int promote to int or
1890     unsigned int and are valid for printf formats expecting int or
1891     unsigned int.  To avoid such special cases, avoid creating
1892     extended integer types for bit-fields if a standard integer type
1893     is available.  */
1894  if (width == TYPE_PRECISION (integer_type_node))
1895    return unsignedp ? unsigned_type_node : integer_type_node;
1896  if (width == TYPE_PRECISION (signed_char_type_node))
1897    return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1898  if (width == TYPE_PRECISION (short_integer_type_node))
1899    return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1900  if (width == TYPE_PRECISION (long_integer_type_node))
1901    return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1902  if (width == TYPE_PRECISION (long_long_integer_type_node))
1903    return (unsignedp ? long_long_unsigned_type_node
1904	    : long_long_integer_type_node);
1905  return build_nonstandard_integer_type (width, unsignedp);
1906}
1907
1908/* The C version of the register_builtin_type langhook.  */
1909
1910void
1911c_register_builtin_type (tree type, const char* name)
1912{
1913  tree decl;
1914
1915  decl = build_decl (TYPE_DECL, get_identifier (name), type);
1916  DECL_ARTIFICIAL (decl) = 1;
1917  if (!TYPE_NAME (type))
1918    TYPE_NAME (type) = decl;
1919  pushdecl (decl);
1920
1921  registered_builtin_types = tree_cons (0, type, registered_builtin_types);
1922}
1923
1924
1925/* Return the minimum number of bits needed to represent VALUE in a
1926   signed or unsigned type, UNSIGNEDP says which.  */
1927
1928unsigned int
1929min_precision (tree value, int unsignedp)
1930{
1931  int log;
1932
1933  /* If the value is negative, compute its negative minus 1.  The latter
1934     adjustment is because the absolute value of the largest negative value
1935     is one larger than the largest positive value.  This is equivalent to
1936     a bit-wise negation, so use that operation instead.  */
1937
1938  if (tree_int_cst_sgn (value) < 0)
1939    value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
1940
1941  /* Return the number of bits needed, taking into account the fact
1942     that we need one more bit for a signed than unsigned type.  */
1943
1944  if (integer_zerop (value))
1945    log = 0;
1946  else
1947    log = tree_floor_log2 (value);
1948
1949  return log + 1 + !unsignedp;
1950}
1951
1952/* Print an error message for invalid operands to arith operation
1953   CODE.  */
1954
1955void
1956binary_op_error (enum tree_code code)
1957{
1958  const char *opname;
1959
1960  switch (code)
1961    {
1962    case PLUS_EXPR:
1963      opname = "+"; break;
1964    case MINUS_EXPR:
1965      opname = "-"; break;
1966    case MULT_EXPR:
1967      opname = "*"; break;
1968    case MAX_EXPR:
1969      opname = "max"; break;
1970    case MIN_EXPR:
1971      opname = "min"; break;
1972    case EQ_EXPR:
1973      opname = "=="; break;
1974    case NE_EXPR:
1975      opname = "!="; break;
1976    case LE_EXPR:
1977      opname = "<="; break;
1978    case GE_EXPR:
1979      opname = ">="; break;
1980    case LT_EXPR:
1981      opname = "<"; break;
1982    case GT_EXPR:
1983      opname = ">"; break;
1984    case LSHIFT_EXPR:
1985      opname = "<<"; break;
1986    case RSHIFT_EXPR:
1987      opname = ">>"; break;
1988    case TRUNC_MOD_EXPR:
1989    case FLOOR_MOD_EXPR:
1990      opname = "%"; break;
1991    case TRUNC_DIV_EXPR:
1992    case FLOOR_DIV_EXPR:
1993      opname = "/"; break;
1994    case BIT_AND_EXPR:
1995      opname = "&"; break;
1996    case BIT_IOR_EXPR:
1997      opname = "|"; break;
1998    case TRUTH_ANDIF_EXPR:
1999      opname = "&&"; break;
2000    case TRUTH_ORIF_EXPR:
2001      opname = "||"; break;
2002    case BIT_XOR_EXPR:
2003      opname = "^"; break;
2004    default:
2005      gcc_unreachable ();
2006    }
2007  error ("invalid operands to binary %s", opname);
2008}
2009
2010/* Subroutine of build_binary_op, used for comparison operations.
2011   See if the operands have both been converted from subword integer types
2012   and, if so, perhaps change them both back to their original type.
2013   This function is also responsible for converting the two operands
2014   to the proper common type for comparison.
2015
2016   The arguments of this function are all pointers to local variables
2017   of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
2018   RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
2019
2020   If this function returns nonzero, it means that the comparison has
2021   a constant value.  What this function returns is an expression for
2022   that value.  */
2023
2024tree
2025shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
2026		 enum tree_code *rescode_ptr)
2027{
2028  tree type;
2029  tree op0 = *op0_ptr;
2030  tree op1 = *op1_ptr;
2031  int unsignedp0, unsignedp1;
2032  int real1, real2;
2033  tree primop0, primop1;
2034  enum tree_code code = *rescode_ptr;
2035
2036  /* Throw away any conversions to wider types
2037     already present in the operands.  */
2038
2039  primop0 = get_narrower (op0, &unsignedp0);
2040  primop1 = get_narrower (op1, &unsignedp1);
2041
2042  /* Handle the case that OP0 does not *contain* a conversion
2043     but it *requires* conversion to FINAL_TYPE.  */
2044
2045  if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
2046    unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
2047  if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
2048    unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
2049
2050  /* If one of the operands must be floated, we cannot optimize.  */
2051  real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
2052  real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
2053
2054  /* If first arg is constant, swap the args (changing operation
2055     so value is preserved), for canonicalization.  Don't do this if
2056     the second arg is 0.  */
2057
2058  if (TREE_CONSTANT (primop0)
2059      && !integer_zerop (primop1) && !real_zerop (primop1))
2060    {
2061      tree tem = primop0;
2062      int temi = unsignedp0;
2063      primop0 = primop1;
2064      primop1 = tem;
2065      tem = op0;
2066      op0 = op1;
2067      op1 = tem;
2068      *op0_ptr = op0;
2069      *op1_ptr = op1;
2070      unsignedp0 = unsignedp1;
2071      unsignedp1 = temi;
2072      temi = real1;
2073      real1 = real2;
2074      real2 = temi;
2075
2076      switch (code)
2077	{
2078	case LT_EXPR:
2079	  code = GT_EXPR;
2080	  break;
2081	case GT_EXPR:
2082	  code = LT_EXPR;
2083	  break;
2084	case LE_EXPR:
2085	  code = GE_EXPR;
2086	  break;
2087	case GE_EXPR:
2088	  code = LE_EXPR;
2089	  break;
2090	default:
2091	  break;
2092	}
2093      *rescode_ptr = code;
2094    }
2095
2096  /* If comparing an integer against a constant more bits wide,
2097     maybe we can deduce a value of 1 or 0 independent of the data.
2098     Or else truncate the constant now
2099     rather than extend the variable at run time.
2100
2101     This is only interesting if the constant is the wider arg.
2102     Also, it is not safe if the constant is unsigned and the
2103     variable arg is signed, since in this case the variable
2104     would be sign-extended and then regarded as unsigned.
2105     Our technique fails in this case because the lowest/highest
2106     possible unsigned results don't follow naturally from the
2107     lowest/highest possible values of the variable operand.
2108     For just EQ_EXPR and NE_EXPR there is another technique that
2109     could be used: see if the constant can be faithfully represented
2110     in the other operand's type, by truncating it and reextending it
2111     and see if that preserves the constant's value.  */
2112
2113  if (!real1 && !real2
2114      && TREE_CODE (primop1) == INTEGER_CST
2115      && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
2116    {
2117      int min_gt, max_gt, min_lt, max_lt;
2118      tree maxval, minval;
2119      /* 1 if comparison is nominally unsigned.  */
2120      int unsignedp = TYPE_UNSIGNED (*restype_ptr);
2121      tree val;
2122
2123      type = c_common_signed_or_unsigned_type (unsignedp0,
2124					       TREE_TYPE (primop0));
2125
2126      maxval = TYPE_MAX_VALUE (type);
2127      minval = TYPE_MIN_VALUE (type);
2128
2129      if (unsignedp && !unsignedp0)
2130	*restype_ptr = c_common_signed_type (*restype_ptr);
2131
2132      if (TREE_TYPE (primop1) != *restype_ptr)
2133	{
2134	  /* Convert primop1 to target type, but do not introduce
2135	     additional overflow.  We know primop1 is an int_cst.  */
2136	  tree tmp = build_int_cst_wide (*restype_ptr,
2137					 TREE_INT_CST_LOW (primop1),
2138					 TREE_INT_CST_HIGH (primop1));
2139
2140	  primop1 = force_fit_type (tmp, 0, TREE_OVERFLOW (primop1),
2141				    TREE_CONSTANT_OVERFLOW (primop1));
2142	}
2143      if (type != *restype_ptr)
2144	{
2145	  minval = convert (*restype_ptr, minval);
2146	  maxval = convert (*restype_ptr, maxval);
2147	}
2148
2149      if (unsignedp && unsignedp0)
2150	{
2151	  min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
2152	  max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
2153	  min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
2154	  max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
2155	}
2156      else
2157	{
2158	  min_gt = INT_CST_LT (primop1, minval);
2159	  max_gt = INT_CST_LT (primop1, maxval);
2160	  min_lt = INT_CST_LT (minval, primop1);
2161	  max_lt = INT_CST_LT (maxval, primop1);
2162	}
2163
2164      val = 0;
2165      /* This used to be a switch, but Genix compiler can't handle that.  */
2166      if (code == NE_EXPR)
2167	{
2168	  if (max_lt || min_gt)
2169	    val = truthvalue_true_node;
2170	}
2171      else if (code == EQ_EXPR)
2172	{
2173	  if (max_lt || min_gt)
2174	    val = truthvalue_false_node;
2175	}
2176      else if (code == LT_EXPR)
2177	{
2178	  if (max_lt)
2179	    val = truthvalue_true_node;
2180	  if (!min_lt)
2181	    val = truthvalue_false_node;
2182	}
2183      else if (code == GT_EXPR)
2184	{
2185	  if (min_gt)
2186	    val = truthvalue_true_node;
2187	  if (!max_gt)
2188	    val = truthvalue_false_node;
2189	}
2190      else if (code == LE_EXPR)
2191	{
2192	  if (!max_gt)
2193	    val = truthvalue_true_node;
2194	  if (min_gt)
2195	    val = truthvalue_false_node;
2196	}
2197      else if (code == GE_EXPR)
2198	{
2199	  if (!min_lt)
2200	    val = truthvalue_true_node;
2201	  if (max_lt)
2202	    val = truthvalue_false_node;
2203	}
2204
2205      /* If primop0 was sign-extended and unsigned comparison specd,
2206	 we did a signed comparison above using the signed type bounds.
2207	 But the comparison we output must be unsigned.
2208
2209	 Also, for inequalities, VAL is no good; but if the signed
2210	 comparison had *any* fixed result, it follows that the
2211	 unsigned comparison just tests the sign in reverse
2212	 (positive values are LE, negative ones GE).
2213	 So we can generate an unsigned comparison
2214	 against an extreme value of the signed type.  */
2215
2216      if (unsignedp && !unsignedp0)
2217	{
2218	  if (val != 0)
2219	    switch (code)
2220	      {
2221	      case LT_EXPR:
2222	      case GE_EXPR:
2223		primop1 = TYPE_MIN_VALUE (type);
2224		val = 0;
2225		break;
2226
2227	      case LE_EXPR:
2228	      case GT_EXPR:
2229		primop1 = TYPE_MAX_VALUE (type);
2230		val = 0;
2231		break;
2232
2233	      default:
2234		break;
2235	      }
2236	  type = c_common_unsigned_type (type);
2237	}
2238
2239      if (TREE_CODE (primop0) != INTEGER_CST)
2240	{
2241	  if (val == truthvalue_false_node)
2242	    warning (0, "comparison is always false due to limited range of data type");
2243	  if (val == truthvalue_true_node)
2244	    warning (0, "comparison is always true due to limited range of data type");
2245	}
2246
2247      if (val != 0)
2248	{
2249	  /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
2250	  if (TREE_SIDE_EFFECTS (primop0))
2251	    return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
2252	  return val;
2253	}
2254
2255      /* Value is not predetermined, but do the comparison
2256	 in the type of the operand that is not constant.
2257	 TYPE is already properly set.  */
2258    }
2259
2260  /* If either arg is decimal float and the other is float, find the
2261     proper common type to use for comparison.  */
2262  else if (real1 && real2
2263	   && (DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0)))
2264	       || DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1)))))
2265    type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2266
2267  else if (real1 && real2
2268	   && (TYPE_PRECISION (TREE_TYPE (primop0))
2269	       == TYPE_PRECISION (TREE_TYPE (primop1))))
2270    type = TREE_TYPE (primop0);
2271
2272  /* If args' natural types are both narrower than nominal type
2273     and both extend in the same manner, compare them
2274     in the type of the wider arg.
2275     Otherwise must actually extend both to the nominal
2276     common type lest different ways of extending
2277     alter the result.
2278     (eg, (short)-1 == (unsigned short)-1  should be 0.)  */
2279
2280  else if (unsignedp0 == unsignedp1 && real1 == real2
2281	   && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
2282	   && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
2283    {
2284      type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2285      type = c_common_signed_or_unsigned_type (unsignedp0
2286					       || TYPE_UNSIGNED (*restype_ptr),
2287					       type);
2288      /* Make sure shorter operand is extended the right way
2289	 to match the longer operand.  */
2290      primop0
2291	= convert (c_common_signed_or_unsigned_type (unsignedp0,
2292						     TREE_TYPE (primop0)),
2293		   primop0);
2294      primop1
2295	= convert (c_common_signed_or_unsigned_type (unsignedp1,
2296						     TREE_TYPE (primop1)),
2297		   primop1);
2298    }
2299  else
2300    {
2301      /* Here we must do the comparison on the nominal type
2302	 using the args exactly as we received them.  */
2303      type = *restype_ptr;
2304      primop0 = op0;
2305      primop1 = op1;
2306
2307      if (!real1 && !real2 && integer_zerop (primop1)
2308	  && TYPE_UNSIGNED (*restype_ptr))
2309	{
2310	  tree value = 0;
2311	  switch (code)
2312	    {
2313	    case GE_EXPR:
2314	      /* All unsigned values are >= 0, so we warn if extra warnings
2315		 are requested.  However, if OP0 is a constant that is
2316		 >= 0, the signedness of the comparison isn't an issue,
2317		 so suppress the warning.  */
2318	      if (extra_warnings && !in_system_header
2319		  && !(TREE_CODE (primop0) == INTEGER_CST
2320		       && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2321						   primop0))))
2322		warning (0, "comparison of unsigned expression >= 0 is always true");
2323	      value = truthvalue_true_node;
2324	      break;
2325
2326	    case LT_EXPR:
2327	      if (extra_warnings && !in_system_header
2328		  && !(TREE_CODE (primop0) == INTEGER_CST
2329		       && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2330						   primop0))))
2331		warning (0, "comparison of unsigned expression < 0 is always false");
2332	      value = truthvalue_false_node;
2333	      break;
2334
2335	    default:
2336	      break;
2337	    }
2338
2339	  if (value != 0)
2340	    {
2341	      /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
2342	      if (TREE_SIDE_EFFECTS (primop0))
2343		return build2 (COMPOUND_EXPR, TREE_TYPE (value),
2344			       primop0, value);
2345	      return value;
2346	    }
2347	}
2348    }
2349
2350  *op0_ptr = convert (type, primop0);
2351  *op1_ptr = convert (type, primop1);
2352
2353  *restype_ptr = truthvalue_type_node;
2354
2355  return 0;
2356}
2357
2358/* Return a tree for the sum or difference (RESULTCODE says which)
2359   of pointer PTROP and integer INTOP.  */
2360
2361tree
2362pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
2363{
2364  tree size_exp, ret;
2365
2366  /* The result is a pointer of the same type that is being added.  */
2367
2368  tree result_type = TREE_TYPE (ptrop);
2369
2370  if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2371    {
2372      if (pedantic || warn_pointer_arith)
2373	pedwarn ("pointer of type %<void *%> used in arithmetic");
2374      size_exp = integer_one_node;
2375    }
2376  else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2377    {
2378      if (pedantic || warn_pointer_arith)
2379	pedwarn ("pointer to a function used in arithmetic");
2380      size_exp = integer_one_node;
2381    }
2382  else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
2383    {
2384      if (pedantic || warn_pointer_arith)
2385	pedwarn ("pointer to member function used in arithmetic");
2386      size_exp = integer_one_node;
2387    }
2388  else
2389    size_exp = size_in_bytes (TREE_TYPE (result_type));
2390
2391  /* We are manipulating pointer values, so we don't need to warn
2392     about relying on undefined signed overflow.  We disable the
2393     warning here because we use integer types so fold won't know that
2394     they are really pointers.  */
2395  fold_defer_overflow_warnings ();
2396
2397  /* If what we are about to multiply by the size of the elements
2398     contains a constant term, apply distributive law
2399     and multiply that constant term separately.
2400     This helps produce common subexpressions.  */
2401
2402  if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2403      && !TREE_CONSTANT (intop)
2404      && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2405      && TREE_CONSTANT (size_exp)
2406      /* If the constant comes from pointer subtraction,
2407	 skip this optimization--it would cause an error.  */
2408      && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2409      /* If the constant is unsigned, and smaller than the pointer size,
2410	 then we must skip this optimization.  This is because it could cause
2411	 an overflow error if the constant is negative but INTOP is not.  */
2412      && (!TYPE_UNSIGNED (TREE_TYPE (intop))
2413	  || (TYPE_PRECISION (TREE_TYPE (intop))
2414	      == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2415    {
2416      enum tree_code subcode = resultcode;
2417      tree int_type = TREE_TYPE (intop);
2418      if (TREE_CODE (intop) == MINUS_EXPR)
2419	subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2420      /* Convert both subexpression types to the type of intop,
2421	 because weird cases involving pointer arithmetic
2422	 can result in a sum or difference with different type args.  */
2423      ptrop = build_binary_op (subcode, ptrop,
2424			       convert (int_type, TREE_OPERAND (intop, 1)), 1);
2425      intop = convert (int_type, TREE_OPERAND (intop, 0));
2426    }
2427
2428  /* Convert the integer argument to a type the same size as sizetype
2429     so the multiply won't overflow spuriously.  */
2430
2431  if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
2432      || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
2433    intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
2434					     TYPE_UNSIGNED (sizetype)), intop);
2435
2436  /* Replace the integer argument with a suitable product by the object size.
2437     Do this multiplication as signed, then convert to the appropriate
2438     pointer type (actually unsigned integral).  */
2439
2440  intop = convert (result_type,
2441		   build_binary_op (MULT_EXPR, intop,
2442				    convert (TREE_TYPE (intop), size_exp), 1));
2443
2444  /* Create the sum or difference.  */
2445  ret = fold_build2 (resultcode, result_type, ptrop, intop);
2446
2447  fold_undefer_and_ignore_overflow_warnings ();
2448
2449  return ret;
2450}
2451
2452/* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
2453   or for an `if' or `while' statement or ?..: exp.  It should already
2454   have been validated to be of suitable type; otherwise, a bad
2455   diagnostic may result.
2456
2457   This preparation consists of taking the ordinary
2458   representation of an expression expr and producing a valid tree
2459   boolean expression describing whether expr is nonzero.  We could
2460   simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
2461   but we optimize comparisons, &&, ||, and !.
2462
2463   The resulting type should always be `truthvalue_type_node'.  */
2464
2465tree
2466c_common_truthvalue_conversion (tree expr)
2467{
2468  switch (TREE_CODE (expr))
2469    {
2470    case EQ_EXPR:   case NE_EXPR:   case UNEQ_EXPR: case LTGT_EXPR:
2471    case LE_EXPR:   case GE_EXPR:   case LT_EXPR:   case GT_EXPR:
2472    case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
2473    case ORDERED_EXPR: case UNORDERED_EXPR:
2474      if (TREE_TYPE (expr) == truthvalue_type_node)
2475	return expr;
2476      return build2 (TREE_CODE (expr), truthvalue_type_node,
2477		     TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
2478
2479    case TRUTH_ANDIF_EXPR:
2480    case TRUTH_ORIF_EXPR:
2481    case TRUTH_AND_EXPR:
2482    case TRUTH_OR_EXPR:
2483    case TRUTH_XOR_EXPR:
2484      if (TREE_TYPE (expr) == truthvalue_type_node)
2485	return expr;
2486      return build2 (TREE_CODE (expr), truthvalue_type_node,
2487		 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2488		 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)));
2489
2490    case TRUTH_NOT_EXPR:
2491      if (TREE_TYPE (expr) == truthvalue_type_node)
2492	return expr;
2493      return build1 (TREE_CODE (expr), truthvalue_type_node,
2494		 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2495
2496    case ERROR_MARK:
2497      return expr;
2498
2499    case INTEGER_CST:
2500      /* Avoid integer_zerop to ignore TREE_CONSTANT_OVERFLOW.  */
2501      return (TREE_INT_CST_LOW (expr) != 0 || TREE_INT_CST_HIGH (expr) != 0)
2502	     ? truthvalue_true_node
2503	     : truthvalue_false_node;
2504
2505    case REAL_CST:
2506      return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
2507	     ? truthvalue_true_node
2508	     : truthvalue_false_node;
2509
2510    case FUNCTION_DECL:
2511      expr = build_unary_op (ADDR_EXPR, expr, 0);
2512      /* Fall through.  */
2513
2514    case ADDR_EXPR:
2515      {
2516 	tree inner = TREE_OPERAND (expr, 0);
2517	if (DECL_P (inner)
2518	    && (TREE_CODE (inner) == PARM_DECL
2519		|| TREE_CODE (inner) == LABEL_DECL
2520		|| !DECL_WEAK (inner)))
2521	  {
2522            /* Common Ada/Pascal programmer's mistake.  We always warn
2523	       about this since it is so bad.  */
2524	    warning (OPT_Waddress,
2525		     "the address of %qD will always evaluate as %<true%>",
2526		     inner);
2527	    return truthvalue_true_node;
2528	  }
2529
2530	/* If we are taking the address of an external decl, it might be
2531	   zero if it is weak, so we cannot optimize.  */
2532	if (DECL_P (inner)
2533	    && DECL_EXTERNAL (inner))
2534	  break;
2535
2536	if (TREE_SIDE_EFFECTS (inner))
2537	  return build2 (COMPOUND_EXPR, truthvalue_type_node,
2538			 inner, truthvalue_true_node);
2539	else
2540	  return truthvalue_true_node;
2541      }
2542
2543    case COMPLEX_EXPR:
2544      return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
2545			       ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2546		c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2547		c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2548			      0);
2549
2550    case NEGATE_EXPR:
2551    case ABS_EXPR:
2552    case FLOAT_EXPR:
2553      /* These don't change whether an object is nonzero or zero.  */
2554      return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2555
2556    case LROTATE_EXPR:
2557    case RROTATE_EXPR:
2558      /* These don't change whether an object is zero or nonzero, but
2559	 we can't ignore them if their second arg has side-effects.  */
2560      if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
2561	return build2 (COMPOUND_EXPR, truthvalue_type_node,
2562		       TREE_OPERAND (expr, 1),
2563		       c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2564      else
2565	return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2566
2567    case COND_EXPR:
2568      /* Distribute the conversion into the arms of a COND_EXPR.  */
2569      return fold_build3 (COND_EXPR, truthvalue_type_node,
2570		TREE_OPERAND (expr, 0),
2571		c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2572		c_common_truthvalue_conversion (TREE_OPERAND (expr, 2)));
2573
2574    case CONVERT_EXPR:
2575    case NOP_EXPR:
2576      /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2577	 since that affects how `default_conversion' will behave.  */
2578      if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
2579	  || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2580	break;
2581      /* If this is widening the argument, we can ignore it.  */
2582      if (TYPE_PRECISION (TREE_TYPE (expr))
2583	  >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2584	return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2585      break;
2586
2587    case MODIFY_EXPR:
2588      if (!TREE_NO_WARNING (expr)
2589	  && warn_parentheses)
2590	{
2591	  warning (OPT_Wparentheses,
2592		   "suggest parentheses around assignment used as truth value");
2593	  TREE_NO_WARNING (expr) = 1;
2594	}
2595      break;
2596
2597    default:
2598      break;
2599    }
2600
2601  if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
2602    {
2603      tree t = save_expr (expr);
2604      return (build_binary_op
2605	      ((TREE_SIDE_EFFECTS (expr)
2606		? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2607	c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
2608	c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
2609	       0));
2610    }
2611
2612  return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
2613}
2614
2615static void def_builtin_1  (enum built_in_function fncode,
2616			    const char *name,
2617			    enum built_in_class fnclass,
2618			    tree fntype, tree libtype,
2619			    bool both_p, bool fallback_p, bool nonansi_p,
2620			    tree fnattrs, bool implicit_p);
2621
2622/* Make a variant type in the proper way for C/C++, propagating qualifiers
2623   down to the element type of an array.  */
2624
2625tree
2626c_build_qualified_type (tree type, int type_quals)
2627{
2628  if (type == error_mark_node)
2629    return type;
2630
2631  if (TREE_CODE (type) == ARRAY_TYPE)
2632    {
2633      tree t;
2634      tree element_type = c_build_qualified_type (TREE_TYPE (type),
2635						  type_quals);
2636
2637      /* See if we already have an identically qualified type.  */
2638      for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
2639	{
2640	  if (TYPE_QUALS (strip_array_types (t)) == type_quals
2641	      && TYPE_NAME (t) == TYPE_NAME (type)
2642	      && TYPE_CONTEXT (t) == TYPE_CONTEXT (type)
2643	      && attribute_list_equal (TYPE_ATTRIBUTES (t),
2644				       TYPE_ATTRIBUTES (type)))
2645	    break;
2646	}
2647      if (!t)
2648	{
2649	  t = build_variant_type_copy (type);
2650	  TREE_TYPE (t) = element_type;
2651	}
2652      return t;
2653    }
2654
2655  /* A restrict-qualified pointer type must be a pointer to object or
2656     incomplete type.  Note that the use of POINTER_TYPE_P also allows
2657     REFERENCE_TYPEs, which is appropriate for C++.  */
2658  if ((type_quals & TYPE_QUAL_RESTRICT)
2659      && (!POINTER_TYPE_P (type)
2660	  || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
2661    {
2662      error ("invalid use of %<restrict%>");
2663      type_quals &= ~TYPE_QUAL_RESTRICT;
2664    }
2665
2666  return build_qualified_type (type, type_quals);
2667}
2668
2669/* Apply the TYPE_QUALS to the new DECL.  */
2670
2671void
2672c_apply_type_quals_to_decl (int type_quals, tree decl)
2673{
2674  tree type = TREE_TYPE (decl);
2675
2676  if (type == error_mark_node)
2677    return;
2678
2679  if (((type_quals & TYPE_QUAL_CONST)
2680       || (type && TREE_CODE (type) == REFERENCE_TYPE))
2681      /* An object declared 'const' is only readonly after it is
2682	 initialized.  We don't have any way of expressing this currently,
2683	 so we need to be conservative and unset TREE_READONLY for types
2684	 with constructors.  Otherwise aliasing code will ignore stores in
2685	 an inline constructor.  */
2686      && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
2687    TREE_READONLY (decl) = 1;
2688  if (type_quals & TYPE_QUAL_VOLATILE)
2689    {
2690      TREE_SIDE_EFFECTS (decl) = 1;
2691      TREE_THIS_VOLATILE (decl) = 1;
2692    }
2693  if (type_quals & TYPE_QUAL_RESTRICT)
2694    {
2695      while (type && TREE_CODE (type) == ARRAY_TYPE)
2696	/* Allow 'restrict' on arrays of pointers.
2697	   FIXME currently we just ignore it.  */
2698	type = TREE_TYPE (type);
2699      if (!type
2700	  || !POINTER_TYPE_P (type)
2701	  || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
2702	error ("invalid use of %<restrict%>");
2703      else if (flag_strict_aliasing && type == TREE_TYPE (decl))
2704	/* Indicate we need to make a unique alias set for this pointer.
2705	   We can't do it here because it might be pointing to an
2706	   incomplete type.  */
2707	DECL_POINTER_ALIAS_SET (decl) = -2;
2708    }
2709}
2710
2711/* Hash function for the problem of multiple type definitions in
2712   different files.  This must hash all types that will compare
2713   equal via comptypes to the same value.  In practice it hashes
2714   on some of the simple stuff and leaves the details to comptypes.  */
2715
2716static hashval_t
2717c_type_hash (const void *p)
2718{
2719  int i = 0;
2720  int shift, size;
2721  tree t = (tree) p;
2722  tree t2;
2723  switch (TREE_CODE (t))
2724    {
2725    /* For pointers, hash on pointee type plus some swizzling.  */
2726    case POINTER_TYPE:
2727      return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
2728    /* Hash on number of elements and total size.  */
2729    case ENUMERAL_TYPE:
2730      shift = 3;
2731      t2 = TYPE_VALUES (t);
2732      break;
2733    case RECORD_TYPE:
2734      shift = 0;
2735      t2 = TYPE_FIELDS (t);
2736      break;
2737    case QUAL_UNION_TYPE:
2738      shift = 1;
2739      t2 = TYPE_FIELDS (t);
2740      break;
2741    case UNION_TYPE:
2742      shift = 2;
2743      t2 = TYPE_FIELDS (t);
2744      break;
2745    default:
2746      gcc_unreachable ();
2747    }
2748  for (; t2; t2 = TREE_CHAIN (t2))
2749    i++;
2750  size = TREE_INT_CST_LOW (TYPE_SIZE (t));
2751  return ((size << 24) | (i << shift));
2752}
2753
2754static GTY((param_is (union tree_node))) htab_t type_hash_table;
2755
2756/* Return the typed-based alias set for T, which may be an expression
2757   or a type.  Return -1 if we don't do anything special.  */
2758
2759HOST_WIDE_INT
2760c_common_get_alias_set (tree t)
2761{
2762  tree u;
2763  PTR *slot;
2764
2765  /* Permit type-punning when accessing a union, provided the access
2766     is directly through the union.  For example, this code does not
2767     permit taking the address of a union member and then storing
2768     through it.  Even the type-punning allowed here is a GCC
2769     extension, albeit a common and useful one; the C standard says
2770     that such accesses have implementation-defined behavior.  */
2771  for (u = t;
2772       TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
2773       u = TREE_OPERAND (u, 0))
2774    if (TREE_CODE (u) == COMPONENT_REF
2775	&& TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
2776      return 0;
2777
2778  /* That's all the expressions we handle specially.  */
2779  if (!TYPE_P (t))
2780    return -1;
2781
2782  /* The C standard guarantees that any object may be accessed via an
2783     lvalue that has character type.  */
2784  if (t == char_type_node
2785      || t == signed_char_type_node
2786      || t == unsigned_char_type_node)
2787    return 0;
2788
2789  /* If it has the may_alias attribute, it can alias anything.  */
2790  if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t)))
2791    return 0;
2792
2793  /* The C standard specifically allows aliasing between signed and
2794     unsigned variants of the same type.  We treat the signed
2795     variant as canonical.  */
2796  if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
2797    {
2798      tree t1 = c_common_signed_type (t);
2799
2800      /* t1 == t can happen for boolean nodes which are always unsigned.  */
2801      if (t1 != t)
2802	return get_alias_set (t1);
2803    }
2804  else if (POINTER_TYPE_P (t))
2805    {
2806      tree t1;
2807
2808      /* Unfortunately, there is no canonical form of a pointer type.
2809	 In particular, if we have `typedef int I', then `int *', and
2810	 `I *' are different types.  So, we have to pick a canonical
2811	 representative.  We do this below.
2812
2813	 Technically, this approach is actually more conservative that
2814	 it needs to be.  In particular, `const int *' and `int *'
2815	 should be in different alias sets, according to the C and C++
2816	 standard, since their types are not the same, and so,
2817	 technically, an `int **' and `const int **' cannot point at
2818	 the same thing.
2819
2820	 But, the standard is wrong.  In particular, this code is
2821	 legal C++:
2822
2823	    int *ip;
2824	    int **ipp = &ip;
2825	    const int* const* cipp = ipp;
2826
2827	 And, it doesn't make sense for that to be legal unless you
2828	 can dereference IPP and CIPP.  So, we ignore cv-qualifiers on
2829	 the pointed-to types.  This issue has been reported to the
2830	 C++ committee.  */
2831      t1 = build_type_no_quals (t);
2832      if (t1 != t)
2833	return get_alias_set (t1);
2834    }
2835
2836  /* Handle the case of multiple type nodes referring to "the same" type,
2837     which occurs with IMA.  These share an alias set.  FIXME:  Currently only
2838     C90 is handled.  (In C99 type compatibility is not transitive, which
2839     complicates things mightily. The alias set splay trees can theoretically
2840     represent this, but insertion is tricky when you consider all the
2841     different orders things might arrive in.) */
2842
2843  if (c_language != clk_c || flag_isoc99)
2844    return -1;
2845
2846  /* Save time if there's only one input file.  */
2847  if (num_in_fnames == 1)
2848    return -1;
2849
2850  /* Pointers need special handling if they point to any type that
2851     needs special handling (below).  */
2852  if (TREE_CODE (t) == POINTER_TYPE)
2853    {
2854      tree t2;
2855      /* Find bottom type under any nested POINTERs.  */
2856      for (t2 = TREE_TYPE (t);
2857     TREE_CODE (t2) == POINTER_TYPE;
2858     t2 = TREE_TYPE (t2))
2859  ;
2860      if (TREE_CODE (t2) != RECORD_TYPE
2861    && TREE_CODE (t2) != ENUMERAL_TYPE
2862    && TREE_CODE (t2) != QUAL_UNION_TYPE
2863    && TREE_CODE (t2) != UNION_TYPE)
2864  return -1;
2865      if (TYPE_SIZE (t2) == 0)
2866  return -1;
2867    }
2868  /* These are the only cases that need special handling.  */
2869  if (TREE_CODE (t) != RECORD_TYPE
2870      && TREE_CODE (t) != ENUMERAL_TYPE
2871      && TREE_CODE (t) != QUAL_UNION_TYPE
2872      && TREE_CODE (t) != UNION_TYPE
2873      && TREE_CODE (t) != POINTER_TYPE)
2874    return -1;
2875  /* Undefined? */
2876  if (TYPE_SIZE (t) == 0)
2877    return -1;
2878
2879  /* Look up t in hash table.  Only one of the compatible types within each
2880     alias set is recorded in the table.  */
2881  if (!type_hash_table)
2882    type_hash_table = htab_create_ggc (1021, c_type_hash,
2883	    (htab_eq) lang_hooks.types_compatible_p,
2884	    NULL);
2885  slot = htab_find_slot (type_hash_table, t, INSERT);
2886  if (*slot != NULL)
2887    {
2888      TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
2889      return TYPE_ALIAS_SET ((tree)*slot);
2890    }
2891  else
2892    /* Our caller will assign and record (in t) a new alias set; all we need
2893       to do is remember t in the hash table.  */
2894    *slot = t;
2895
2896  return -1;
2897}
2898
2899/* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
2900   second parameter indicates which OPERATOR is being applied.  The COMPLAIN
2901   flag controls whether we should diagnose possibly ill-formed
2902   constructs or not.  */
2903
2904tree
2905c_sizeof_or_alignof_type (tree type, bool is_sizeof, int complain)
2906{
2907  const char *op_name;
2908  tree value = NULL;
2909  enum tree_code type_code = TREE_CODE (type);
2910
2911  op_name = is_sizeof ? "sizeof" : "__alignof__";
2912
2913  if (type_code == FUNCTION_TYPE)
2914    {
2915      if (is_sizeof)
2916	{
2917	  if (complain && (pedantic || warn_pointer_arith))
2918	    pedwarn ("invalid application of %<sizeof%> to a function type");
2919	  value = size_one_node;
2920	}
2921      else
2922	value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
2923    }
2924  else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
2925    {
2926      if (type_code == VOID_TYPE
2927	  && complain && (pedantic || warn_pointer_arith))
2928	pedwarn ("invalid application of %qs to a void type", op_name);
2929      value = size_one_node;
2930    }
2931  else if (!COMPLETE_TYPE_P (type))
2932    {
2933      if (complain)
2934	error ("invalid application of %qs to incomplete type %qT ",
2935	       op_name, type);
2936      value = size_zero_node;
2937    }
2938  else
2939    {
2940      if (is_sizeof)
2941	/* Convert in case a char is more than one unit.  */
2942	value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
2943			    size_int (TYPE_PRECISION (char_type_node)
2944				      / BITS_PER_UNIT));
2945      else
2946	value = size_int (TYPE_ALIGN_UNIT (type));
2947    }
2948
2949  /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
2950     TYPE_IS_SIZETYPE means that certain things (like overflow) will
2951     never happen.  However, this node should really have type
2952     `size_t', which is just a typedef for an ordinary integer type.  */
2953  value = fold_convert (size_type_node, value);
2954  gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
2955
2956  return value;
2957}
2958
2959/* Implement the __alignof keyword: Return the minimum required
2960   alignment of EXPR, measured in bytes.  For VAR_DECL's and
2961   FIELD_DECL's return DECL_ALIGN (which can be set from an
2962   "aligned" __attribute__ specification).  */
2963
2964tree
2965c_alignof_expr (tree expr)
2966{
2967  tree t;
2968
2969  if (TREE_CODE (expr) == VAR_DECL)
2970    t = size_int (DECL_ALIGN_UNIT (expr));
2971
2972  else if (TREE_CODE (expr) == COMPONENT_REF
2973	   && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
2974    {
2975      error ("%<__alignof%> applied to a bit-field");
2976      t = size_one_node;
2977    }
2978  else if (TREE_CODE (expr) == COMPONENT_REF
2979	   && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
2980    t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
2981
2982  else if (TREE_CODE (expr) == INDIRECT_REF)
2983    {
2984      tree t = TREE_OPERAND (expr, 0);
2985      tree best = t;
2986      int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2987
2988      while ((TREE_CODE (t) == NOP_EXPR || TREE_CODE (t) == CONVERT_EXPR)
2989	     && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
2990	{
2991	  int thisalign;
2992
2993	  t = TREE_OPERAND (t, 0);
2994	  thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2995	  if (thisalign > bestalign)
2996	    best = t, bestalign = thisalign;
2997	}
2998      return c_alignof (TREE_TYPE (TREE_TYPE (best)));
2999    }
3000  else
3001    return c_alignof (TREE_TYPE (expr));
3002
3003  return fold_convert (size_type_node, t);
3004}
3005
3006/* Handle C and C++ default attributes.  */
3007
3008enum built_in_attribute
3009{
3010#define DEF_ATTR_NULL_TREE(ENUM) ENUM,
3011#define DEF_ATTR_INT(ENUM, VALUE) ENUM,
3012#define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
3013#define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
3014#include "builtin-attrs.def"
3015#undef DEF_ATTR_NULL_TREE
3016#undef DEF_ATTR_INT
3017#undef DEF_ATTR_IDENT
3018#undef DEF_ATTR_TREE_LIST
3019  ATTR_LAST
3020};
3021
3022static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
3023
3024static void c_init_attributes (void);
3025
3026enum c_builtin_type
3027{
3028#define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
3029#define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
3030#define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
3031#define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
3032#define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3033#define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3034#define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
3035#define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME,
3036#define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME,
3037#define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
3038#define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
3039#define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
3040#define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3041#define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3042#define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
3043  NAME,
3044#define DEF_POINTER_TYPE(NAME, TYPE) NAME,
3045#include "builtin-types.def"
3046#undef DEF_PRIMITIVE_TYPE
3047#undef DEF_FUNCTION_TYPE_0
3048#undef DEF_FUNCTION_TYPE_1
3049#undef DEF_FUNCTION_TYPE_2
3050#undef DEF_FUNCTION_TYPE_3
3051#undef DEF_FUNCTION_TYPE_4
3052#undef DEF_FUNCTION_TYPE_5
3053#undef DEF_FUNCTION_TYPE_6
3054#undef DEF_FUNCTION_TYPE_7
3055#undef DEF_FUNCTION_TYPE_VAR_0
3056#undef DEF_FUNCTION_TYPE_VAR_1
3057#undef DEF_FUNCTION_TYPE_VAR_2
3058#undef DEF_FUNCTION_TYPE_VAR_3
3059#undef DEF_FUNCTION_TYPE_VAR_4
3060#undef DEF_FUNCTION_TYPE_VAR_5
3061#undef DEF_POINTER_TYPE
3062  BT_LAST
3063};
3064
3065typedef enum c_builtin_type builtin_type;
3066
3067/* A temporary array for c_common_nodes_and_builtins.  Used in
3068   communication with def_fn_type.  */
3069static tree builtin_types[(int) BT_LAST + 1];
3070
3071/* A helper function for c_common_nodes_and_builtins.  Build function type
3072   for DEF with return type RET and N arguments.  If VAR is true, then the
3073   function should be variadic after those N arguments.
3074
3075   Takes special care not to ICE if any of the types involved are
3076   error_mark_node, which indicates that said type is not in fact available
3077   (see builtin_type_for_size).  In which case the function type as a whole
3078   should be error_mark_node.  */
3079
3080static void
3081def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
3082{
3083  tree args = NULL, t;
3084  va_list list;
3085  int i;
3086
3087  va_start (list, n);
3088  for (i = 0; i < n; ++i)
3089    {
3090      builtin_type a = va_arg (list, builtin_type);
3091      t = builtin_types[a];
3092      if (t == error_mark_node)
3093	goto egress;
3094      args = tree_cons (NULL_TREE, t, args);
3095    }
3096  va_end (list);
3097
3098  args = nreverse (args);
3099  if (!var)
3100    args = chainon (args, void_list_node);
3101
3102  t = builtin_types[ret];
3103  if (t == error_mark_node)
3104    goto egress;
3105  t = build_function_type (t, args);
3106
3107 egress:
3108  builtin_types[def] = t;
3109}
3110
3111/* Build tree nodes and builtin functions common to both C and C++ language
3112   frontends.  */
3113
3114void
3115c_common_nodes_and_builtins (void)
3116{
3117  int wchar_type_size;
3118  tree array_domain_type;
3119  tree va_list_ref_type_node;
3120  tree va_list_arg_type_node;
3121
3122  /* Define `int' and `char' first so that dbx will output them first.  */
3123  record_builtin_type (RID_INT, NULL, integer_type_node);
3124  record_builtin_type (RID_CHAR, "char", char_type_node);
3125
3126  /* `signed' is the same as `int'.  FIXME: the declarations of "signed",
3127     "unsigned long", "long long unsigned" and "unsigned short" were in C++
3128     but not C.  Are the conditionals here needed?  */
3129  if (c_dialect_cxx ())
3130    record_builtin_type (RID_SIGNED, NULL, integer_type_node);
3131  record_builtin_type (RID_LONG, "long int", long_integer_type_node);
3132  record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
3133  record_builtin_type (RID_MAX, "long unsigned int",
3134		       long_unsigned_type_node);
3135  if (c_dialect_cxx ())
3136    record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
3137  record_builtin_type (RID_MAX, "long long int",
3138		       long_long_integer_type_node);
3139  record_builtin_type (RID_MAX, "long long unsigned int",
3140		       long_long_unsigned_type_node);
3141  if (c_dialect_cxx ())
3142    record_builtin_type (RID_MAX, "long long unsigned",
3143			 long_long_unsigned_type_node);
3144  record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
3145  record_builtin_type (RID_MAX, "short unsigned int",
3146		       short_unsigned_type_node);
3147  if (c_dialect_cxx ())
3148    record_builtin_type (RID_MAX, "unsigned short",
3149			 short_unsigned_type_node);
3150
3151  /* Define both `signed char' and `unsigned char'.  */
3152  record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
3153  record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
3154
3155  /* These are types that c_common_type_for_size and
3156     c_common_type_for_mode use.  */
3157  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3158					 intQI_type_node));
3159  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3160					 intHI_type_node));
3161  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3162					 intSI_type_node));
3163  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3164					 intDI_type_node));
3165#if HOST_BITS_PER_WIDE_INT >= 64
3166  if (targetm.scalar_mode_supported_p (TImode))
3167    lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3168					   get_identifier ("__int128_t"),
3169					   intTI_type_node));
3170#endif
3171  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3172					 unsigned_intQI_type_node));
3173  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3174					 unsigned_intHI_type_node));
3175  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3176					 unsigned_intSI_type_node));
3177  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3178					 unsigned_intDI_type_node));
3179#if HOST_BITS_PER_WIDE_INT >= 64
3180  if (targetm.scalar_mode_supported_p (TImode))
3181    lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3182					   get_identifier ("__uint128_t"),
3183					   unsigned_intTI_type_node));
3184#endif
3185
3186  /* Create the widest literal types.  */
3187  widest_integer_literal_type_node
3188    = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
3189  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3190					 widest_integer_literal_type_node));
3191
3192  widest_unsigned_literal_type_node
3193    = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
3194  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3195					 widest_unsigned_literal_type_node));
3196
3197  /* `unsigned long' is the standard type for sizeof.
3198     Note that stddef.h uses `unsigned long',
3199     and this must agree, even if long and int are the same size.  */
3200  size_type_node =
3201    TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
3202  signed_size_type_node = c_common_signed_type (size_type_node);
3203  set_sizetype (size_type_node);
3204
3205  pid_type_node =
3206    TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
3207
3208  build_common_tree_nodes_2 (flag_short_double);
3209
3210  record_builtin_type (RID_FLOAT, NULL, float_type_node);
3211  record_builtin_type (RID_DOUBLE, NULL, double_type_node);
3212  record_builtin_type (RID_MAX, "long double", long_double_type_node);
3213
3214  /* Only supported decimal floating point extension if the target
3215     actually supports underlying modes. */
3216  if (targetm.scalar_mode_supported_p (SDmode)
3217      && targetm.scalar_mode_supported_p (DDmode)
3218      && targetm.scalar_mode_supported_p (TDmode))
3219    {
3220      record_builtin_type (RID_DFLOAT32, NULL, dfloat32_type_node);
3221      record_builtin_type (RID_DFLOAT64, NULL, dfloat64_type_node);
3222      record_builtin_type (RID_DFLOAT128, NULL, dfloat128_type_node);
3223    }
3224
3225  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3226					 get_identifier ("complex int"),
3227					 complex_integer_type_node));
3228  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3229					 get_identifier ("complex float"),
3230					 complex_float_type_node));
3231  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3232					 get_identifier ("complex double"),
3233					 complex_double_type_node));
3234  lang_hooks.decls.pushdecl
3235    (build_decl (TYPE_DECL, get_identifier ("complex long double"),
3236		 complex_long_double_type_node));
3237
3238  if (c_dialect_cxx ())
3239    /* For C++, make fileptr_type_node a distinct void * type until
3240       FILE type is defined.  */
3241    fileptr_type_node = build_variant_type_copy (ptr_type_node);
3242
3243  record_builtin_type (RID_VOID, NULL, void_type_node);
3244
3245  /* This node must not be shared.  */
3246  void_zero_node = make_node (INTEGER_CST);
3247  TREE_TYPE (void_zero_node) = void_type_node;
3248
3249  void_list_node = build_void_list_node ();
3250
3251  /* Make a type to be the domain of a few array types
3252     whose domains don't really matter.
3253     200 is small enough that it always fits in size_t
3254     and large enough that it can hold most function names for the
3255     initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
3256  array_domain_type = build_index_type (size_int (200));
3257
3258  /* Make a type for arrays of characters.
3259     With luck nothing will ever really depend on the length of this
3260     array type.  */
3261  char_array_type_node
3262    = build_array_type (char_type_node, array_domain_type);
3263
3264  /* Likewise for arrays of ints.  */
3265  int_array_type_node
3266    = build_array_type (integer_type_node, array_domain_type);
3267
3268  string_type_node = build_pointer_type (char_type_node);
3269  const_string_type_node
3270    = build_pointer_type (build_qualified_type
3271			  (char_type_node, TYPE_QUAL_CONST));
3272
3273  /* This is special for C++ so functions can be overloaded.  */
3274  wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
3275  wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
3276  wchar_type_size = TYPE_PRECISION (wchar_type_node);
3277  if (c_dialect_cxx ())
3278    {
3279      if (TYPE_UNSIGNED (wchar_type_node))
3280	wchar_type_node = make_unsigned_type (wchar_type_size);
3281      else
3282	wchar_type_node = make_signed_type (wchar_type_size);
3283      record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
3284    }
3285  else
3286    {
3287      signed_wchar_type_node = c_common_signed_type (wchar_type_node);
3288      unsigned_wchar_type_node = c_common_unsigned_type (wchar_type_node);
3289    }
3290
3291  /* This is for wide string constants.  */
3292  wchar_array_type_node
3293    = build_array_type (wchar_type_node, array_domain_type);
3294
3295  wint_type_node =
3296    TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
3297
3298  intmax_type_node =
3299    TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
3300  uintmax_type_node =
3301    TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
3302
3303  default_function_type = build_function_type (integer_type_node, NULL_TREE);
3304  ptrdiff_type_node
3305    = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
3306  unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
3307
3308  lang_hooks.decls.pushdecl
3309    (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
3310		 va_list_type_node));
3311
3312  if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
3313    {
3314      va_list_arg_type_node = va_list_ref_type_node =
3315	build_pointer_type (TREE_TYPE (va_list_type_node));
3316    }
3317  else
3318    {
3319      va_list_arg_type_node = va_list_type_node;
3320      va_list_ref_type_node = build_reference_type (va_list_type_node);
3321    }
3322
3323#define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
3324  builtin_types[ENUM] = VALUE;
3325#define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
3326  def_fn_type (ENUM, RETURN, 0, 0);
3327#define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
3328  def_fn_type (ENUM, RETURN, 0, 1, ARG1);
3329#define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
3330  def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
3331#define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3332  def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
3333#define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3334  def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4);
3335#define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5)	\
3336  def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3337#define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3338			    ARG6)					\
3339  def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
3340#define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3341			    ARG6, ARG7)					\
3342  def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
3343#define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
3344  def_fn_type (ENUM, RETURN, 1, 0);
3345#define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
3346  def_fn_type (ENUM, RETURN, 1, 1, ARG1);
3347#define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
3348  def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
3349#define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3350  def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
3351#define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3352  def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4);
3353#define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3354  def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3355#define DEF_POINTER_TYPE(ENUM, TYPE) \
3356  builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]);
3357
3358#include "builtin-types.def"
3359
3360#undef DEF_PRIMITIVE_TYPE
3361#undef DEF_FUNCTION_TYPE_1
3362#undef DEF_FUNCTION_TYPE_2
3363#undef DEF_FUNCTION_TYPE_3
3364#undef DEF_FUNCTION_TYPE_4
3365#undef DEF_FUNCTION_TYPE_5
3366#undef DEF_FUNCTION_TYPE_6
3367#undef DEF_FUNCTION_TYPE_VAR_0
3368#undef DEF_FUNCTION_TYPE_VAR_1
3369#undef DEF_FUNCTION_TYPE_VAR_2
3370#undef DEF_FUNCTION_TYPE_VAR_3
3371#undef DEF_FUNCTION_TYPE_VAR_4
3372#undef DEF_FUNCTION_TYPE_VAR_5
3373#undef DEF_POINTER_TYPE
3374  builtin_types[(int) BT_LAST] = NULL_TREE;
3375
3376  c_init_attributes ();
3377
3378#define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
3379		    NONANSI_P, ATTRS, IMPLICIT, COND)			\
3380  if (NAME && COND)							\
3381    def_builtin_1 (ENUM, NAME, CLASS,                                   \
3382		   builtin_types[(int) TYPE],                           \
3383		   builtin_types[(int) LIBTYPE],                        \
3384		   BOTH_P, FALLBACK_P, NONANSI_P,                       \
3385		   built_in_attributes[(int) ATTRS], IMPLICIT);
3386#include "builtins.def"
3387#undef DEF_BUILTIN
3388
3389  build_common_builtin_nodes ();
3390
3391  targetm.init_builtins ();
3392  if (flag_mudflap)
3393    mudflap_init ();
3394
3395  main_identifier_node = get_identifier ("main");
3396
3397  /* Create the built-in __null node.  It is important that this is
3398     not shared.  */
3399  null_node = make_node (INTEGER_CST);
3400  TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
3401
3402  /* Since builtin_types isn't gc'ed, don't export these nodes.  */
3403  memset (builtin_types, 0, sizeof (builtin_types));
3404}
3405
3406/* Look up the function in built_in_decls that corresponds to DECL
3407   and set ASMSPEC as its user assembler name.  DECL must be a
3408   function decl that declares a builtin.  */
3409
3410void
3411set_builtin_user_assembler_name (tree decl, const char *asmspec)
3412{
3413  tree builtin;
3414  gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
3415	      && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
3416	      && asmspec != 0);
3417
3418  builtin = built_in_decls [DECL_FUNCTION_CODE (decl)];
3419  set_user_assembler_name (builtin, asmspec);
3420  if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMCPY)
3421    init_block_move_fn (asmspec);
3422  else if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMSET)
3423    init_block_clear_fn (asmspec);
3424}
3425
3426/* The number of named compound-literals generated thus far.  */
3427static GTY(()) int compound_literal_number;
3428
3429/* Set DECL_NAME for DECL, a VAR_DECL for a compound-literal.  */
3430
3431void
3432set_compound_literal_name (tree decl)
3433{
3434  char *name;
3435  ASM_FORMAT_PRIVATE_NAME (name, "__compound_literal",
3436			   compound_literal_number);
3437  compound_literal_number++;
3438  DECL_NAME (decl) = get_identifier (name);
3439}
3440
3441tree
3442build_va_arg (tree expr, tree type)
3443{
3444  return build1 (VA_ARG_EXPR, type, expr);
3445}
3446
3447
3448/* Linked list of disabled built-in functions.  */
3449
3450typedef struct disabled_builtin
3451{
3452  const char *name;
3453  struct disabled_builtin *next;
3454} disabled_builtin;
3455static disabled_builtin *disabled_builtins = NULL;
3456
3457static bool builtin_function_disabled_p (const char *);
3458
3459/* Disable a built-in function specified by -fno-builtin-NAME.  If NAME
3460   begins with "__builtin_", give an error.  */
3461
3462void
3463disable_builtin_function (const char *name)
3464{
3465  if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
3466    error ("cannot disable built-in function %qs", name);
3467  else
3468    {
3469      disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
3470      new_disabled_builtin->name = name;
3471      new_disabled_builtin->next = disabled_builtins;
3472      disabled_builtins = new_disabled_builtin;
3473    }
3474}
3475
3476
3477/* Return true if the built-in function NAME has been disabled, false
3478   otherwise.  */
3479
3480static bool
3481builtin_function_disabled_p (const char *name)
3482{
3483  disabled_builtin *p;
3484  for (p = disabled_builtins; p != NULL; p = p->next)
3485    {
3486      if (strcmp (name, p->name) == 0)
3487	return true;
3488    }
3489  return false;
3490}
3491
3492
3493/* Worker for DEF_BUILTIN.
3494   Possibly define a builtin function with one or two names.
3495   Does not declare a non-__builtin_ function if flag_no_builtin, or if
3496   nonansi_p and flag_no_nonansi_builtin.  */
3497
3498static void
3499def_builtin_1 (enum built_in_function fncode,
3500	       const char *name,
3501	       enum built_in_class fnclass,
3502	       tree fntype, tree libtype,
3503	       bool both_p, bool fallback_p, bool nonansi_p,
3504	       tree fnattrs, bool implicit_p)
3505{
3506  tree decl;
3507  const char *libname;
3508
3509  if (fntype == error_mark_node)
3510    return;
3511
3512  gcc_assert ((!both_p && !fallback_p)
3513	      || !strncmp (name, "__builtin_",
3514			   strlen ("__builtin_")));
3515
3516  libname = name + strlen ("__builtin_");
3517  decl = lang_hooks.builtin_function (name, fntype, fncode, fnclass,
3518				      (fallback_p ? libname : NULL),
3519				      fnattrs);
3520  if (both_p
3521      && !flag_no_builtin && !builtin_function_disabled_p (libname)
3522      && !(nonansi_p && flag_no_nonansi_builtin))
3523    lang_hooks.builtin_function (libname, libtype, fncode, fnclass,
3524				 NULL, fnattrs);
3525
3526  built_in_decls[(int) fncode] = decl;
3527  if (implicit_p)
3528    implicit_built_in_decls[(int) fncode] = decl;
3529}
3530
3531/* Nonzero if the type T promotes to int.  This is (nearly) the
3532   integral promotions defined in ISO C99 6.3.1.1/2.  */
3533
3534bool
3535c_promoting_integer_type_p (tree t)
3536{
3537  switch (TREE_CODE (t))
3538    {
3539    case INTEGER_TYPE:
3540      return (TYPE_MAIN_VARIANT (t) == char_type_node
3541	      || TYPE_MAIN_VARIANT (t) == signed_char_type_node
3542	      || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
3543	      || TYPE_MAIN_VARIANT (t) == short_integer_type_node
3544	      || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
3545	      || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
3546
3547    case ENUMERAL_TYPE:
3548      /* ??? Technically all enumerations not larger than an int
3549	 promote to an int.  But this is used along code paths
3550	 that only want to notice a size change.  */
3551      return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
3552
3553    case BOOLEAN_TYPE:
3554      return 1;
3555
3556    default:
3557      return 0;
3558    }
3559}
3560
3561/* Return 1 if PARMS specifies a fixed number of parameters
3562   and none of their types is affected by default promotions.  */
3563
3564int
3565self_promoting_args_p (tree parms)
3566{
3567  tree t;
3568  for (t = parms; t; t = TREE_CHAIN (t))
3569    {
3570      tree type = TREE_VALUE (t);
3571
3572      if (type == error_mark_node)
3573	continue;
3574
3575      if (TREE_CHAIN (t) == 0 && type != void_type_node)
3576	return 0;
3577
3578      if (type == 0)
3579	return 0;
3580
3581      if (TYPE_MAIN_VARIANT (type) == float_type_node)
3582	return 0;
3583
3584      if (c_promoting_integer_type_p (type))
3585	return 0;
3586    }
3587  return 1;
3588}
3589
3590/* Recursively examines the array elements of TYPE, until a non-array
3591   element type is found.  */
3592
3593tree
3594strip_array_types (tree type)
3595{
3596  while (TREE_CODE (type) == ARRAY_TYPE)
3597    type = TREE_TYPE (type);
3598
3599  return type;
3600}
3601
3602/* Recursively remove any '*' or '&' operator from TYPE.  */
3603tree
3604strip_pointer_operator (tree t)
3605{
3606  while (POINTER_TYPE_P (t))
3607    t = TREE_TYPE (t);
3608  return t;
3609}
3610
3611/* Used to compare case labels.  K1 and K2 are actually tree nodes
3612   representing case labels, or NULL_TREE for a `default' label.
3613   Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
3614   K2, and 0 if K1 and K2 are equal.  */
3615
3616int
3617case_compare (splay_tree_key k1, splay_tree_key k2)
3618{
3619  /* Consider a NULL key (such as arises with a `default' label) to be
3620     smaller than anything else.  */
3621  if (!k1)
3622    return k2 ? -1 : 0;
3623  else if (!k2)
3624    return k1 ? 1 : 0;
3625
3626  return tree_int_cst_compare ((tree) k1, (tree) k2);
3627}
3628
3629/* Process a case label for the range LOW_VALUE ... HIGH_VALUE.  If
3630   LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
3631   actually a `default' label.  If only HIGH_VALUE is NULL_TREE, then
3632   case label was declared using the usual C/C++ syntax, rather than
3633   the GNU case range extension.  CASES is a tree containing all the
3634   case ranges processed so far; COND is the condition for the
3635   switch-statement itself.  Returns the CASE_LABEL_EXPR created, or
3636   ERROR_MARK_NODE if no CASE_LABEL_EXPR is created.  */
3637
3638tree
3639c_add_case_label (splay_tree cases, tree cond, tree orig_type,
3640		  tree low_value, tree high_value)
3641{
3642  tree type;
3643  tree label;
3644  tree case_label;
3645  splay_tree_node node;
3646
3647  /* Create the LABEL_DECL itself.  */
3648  label = create_artificial_label ();
3649
3650  /* If there was an error processing the switch condition, bail now
3651     before we get more confused.  */
3652  if (!cond || cond == error_mark_node)
3653    goto error_out;
3654
3655  if ((low_value && TREE_TYPE (low_value)
3656       && POINTER_TYPE_P (TREE_TYPE (low_value)))
3657      || (high_value && TREE_TYPE (high_value)
3658	  && POINTER_TYPE_P (TREE_TYPE (high_value))))
3659    {
3660      error ("pointers are not permitted as case values");
3661      goto error_out;
3662    }
3663
3664  /* Case ranges are a GNU extension.  */
3665  if (high_value && pedantic)
3666    pedwarn ("range expressions in switch statements are non-standard");
3667
3668  type = TREE_TYPE (cond);
3669  if (low_value)
3670    {
3671      low_value = check_case_value (low_value);
3672      low_value = convert_and_check (type, low_value);
3673      if (low_value == error_mark_node)
3674	goto error_out;
3675    }
3676  if (high_value)
3677    {
3678      high_value = check_case_value (high_value);
3679      high_value = convert_and_check (type, high_value);
3680      if (high_value == error_mark_node)
3681	goto error_out;
3682    }
3683
3684  if (low_value && high_value)
3685    {
3686      /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
3687	 really a case range, even though it was written that way.
3688	 Remove the HIGH_VALUE to simplify later processing.  */
3689      if (tree_int_cst_equal (low_value, high_value))
3690	high_value = NULL_TREE;
3691      else if (!tree_int_cst_lt (low_value, high_value))
3692	warning (0, "empty range specified");
3693    }
3694
3695  /* See if the case is in range of the type of the original testing
3696     expression.  If both low_value and high_value are out of range,
3697     don't insert the case label and return NULL_TREE.  */
3698  if (low_value
3699      && !check_case_bounds (type, orig_type,
3700			     &low_value, high_value ? &high_value : NULL))
3701    return NULL_TREE;
3702
3703  /* Look up the LOW_VALUE in the table of case labels we already
3704     have.  */
3705  node = splay_tree_lookup (cases, (splay_tree_key) low_value);
3706  /* If there was not an exact match, check for overlapping ranges.
3707     There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
3708     that's a `default' label and the only overlap is an exact match.  */
3709  if (!node && (low_value || high_value))
3710    {
3711      splay_tree_node low_bound;
3712      splay_tree_node high_bound;
3713
3714      /* Even though there wasn't an exact match, there might be an
3715	 overlap between this case range and another case range.
3716	 Since we've (inductively) not allowed any overlapping case
3717	 ranges, we simply need to find the greatest low case label
3718	 that is smaller that LOW_VALUE, and the smallest low case
3719	 label that is greater than LOW_VALUE.  If there is an overlap
3720	 it will occur in one of these two ranges.  */
3721      low_bound = splay_tree_predecessor (cases,
3722					  (splay_tree_key) low_value);
3723      high_bound = splay_tree_successor (cases,
3724					 (splay_tree_key) low_value);
3725
3726      /* Check to see if the LOW_BOUND overlaps.  It is smaller than
3727	 the LOW_VALUE, so there is no need to check unless the
3728	 LOW_BOUND is in fact itself a case range.  */
3729      if (low_bound
3730	  && CASE_HIGH ((tree) low_bound->value)
3731	  && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
3732				    low_value) >= 0)
3733	node = low_bound;
3734      /* Check to see if the HIGH_BOUND overlaps.  The low end of that
3735	 range is bigger than the low end of the current range, so we
3736	 are only interested if the current range is a real range, and
3737	 not an ordinary case label.  */
3738      else if (high_bound
3739	       && high_value
3740	       && (tree_int_cst_compare ((tree) high_bound->key,
3741					 high_value)
3742		   <= 0))
3743	node = high_bound;
3744    }
3745  /* If there was an overlap, issue an error.  */
3746  if (node)
3747    {
3748      tree duplicate = CASE_LABEL ((tree) node->value);
3749
3750      if (high_value)
3751	{
3752	  error ("duplicate (or overlapping) case value");
3753	  error ("%Jthis is the first entry overlapping that value", duplicate);
3754	}
3755      else if (low_value)
3756	{
3757	  error ("duplicate case value") ;
3758	  error ("%Jpreviously used here", duplicate);
3759	}
3760      else
3761	{
3762	  error ("multiple default labels in one switch");
3763	  error ("%Jthis is the first default label", duplicate);
3764	}
3765      goto error_out;
3766    }
3767
3768  /* Add a CASE_LABEL to the statement-tree.  */
3769  case_label = add_stmt (build_case_label (low_value, high_value, label));
3770  /* Register this case label in the splay tree.  */
3771  splay_tree_insert (cases,
3772		     (splay_tree_key) low_value,
3773		     (splay_tree_value) case_label);
3774
3775  return case_label;
3776
3777 error_out:
3778  /* Add a label so that the back-end doesn't think that the beginning of
3779     the switch is unreachable.  Note that we do not add a case label, as
3780     that just leads to duplicates and thence to failure later on.  */
3781  if (!cases->root)
3782    {
3783      tree t = create_artificial_label ();
3784      add_stmt (build_stmt (LABEL_EXPR, t));
3785    }
3786  return error_mark_node;
3787}
3788
3789/* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
3790   Used to verify that case values match up with enumerator values.  */
3791
3792static void
3793match_case_to_enum_1 (tree key, tree type, tree label)
3794{
3795  char buf[2 + 2*HOST_BITS_PER_WIDE_INT/4 + 1];
3796
3797  /* ??? Not working too hard to print the double-word value.
3798     Should perhaps be done with %lwd in the diagnostic routines?  */
3799  if (TREE_INT_CST_HIGH (key) == 0)
3800    snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_UNSIGNED,
3801	      TREE_INT_CST_LOW (key));
3802  else if (!TYPE_UNSIGNED (type)
3803	   && TREE_INT_CST_HIGH (key) == -1
3804	   && TREE_INT_CST_LOW (key) != 0)
3805    snprintf (buf, sizeof (buf), "-" HOST_WIDE_INT_PRINT_UNSIGNED,
3806	      -TREE_INT_CST_LOW (key));
3807  else
3808    snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_DOUBLE_HEX,
3809	      TREE_INT_CST_HIGH (key), TREE_INT_CST_LOW (key));
3810
3811  if (TYPE_NAME (type) == 0)
3812    warning (0, "%Jcase value %qs not in enumerated type",
3813	     CASE_LABEL (label), buf);
3814  else
3815    warning (0, "%Jcase value %qs not in enumerated type %qT",
3816	     CASE_LABEL (label), buf, type);
3817}
3818
3819/* Subroutine of c_do_switch_warnings, called via splay_tree_foreach.
3820   Used to verify that case values match up with enumerator values.  */
3821
3822static int
3823match_case_to_enum (splay_tree_node node, void *data)
3824{
3825  tree label = (tree) node->value;
3826  tree type = (tree) data;
3827
3828  /* Skip default case.  */
3829  if (!CASE_LOW (label))
3830    return 0;
3831
3832  /* If CASE_LOW_SEEN is not set, that means CASE_LOW did not appear
3833     when we did our enum->case scan.  Reset our scratch bit after.  */
3834  if (!CASE_LOW_SEEN (label))
3835    match_case_to_enum_1 (CASE_LOW (label), type, label);
3836  else
3837    CASE_LOW_SEEN (label) = 0;
3838
3839  /* If CASE_HIGH is non-null, we have a range.  If CASE_HIGH_SEEN is
3840     not set, that means that CASE_HIGH did not appear when we did our
3841     enum->case scan.  Reset our scratch bit after.  */
3842  if (CASE_HIGH (label))
3843    {
3844      if (!CASE_HIGH_SEEN (label))
3845	match_case_to_enum_1 (CASE_HIGH (label), type, label);
3846      else
3847	CASE_HIGH_SEEN (label) = 0;
3848    }
3849
3850  return 0;
3851}
3852
3853/* Handle -Wswitch*.  Called from the front end after parsing the
3854   switch construct.  */
3855/* ??? Should probably be somewhere generic, since other languages
3856   besides C and C++ would want this.  At the moment, however, C/C++
3857   are the only tree-ssa languages that support enumerations at all,
3858   so the point is moot.  */
3859
3860void
3861c_do_switch_warnings (splay_tree cases, location_t switch_location,
3862		      tree type, tree cond)
3863{
3864  splay_tree_node default_node;
3865  splay_tree_node node;
3866  tree chain;
3867
3868  if (!warn_switch && !warn_switch_enum && !warn_switch_default)
3869    return;
3870
3871  default_node = splay_tree_lookup (cases, (splay_tree_key) NULL);
3872  if (!default_node)
3873    warning (OPT_Wswitch_default, "%Hswitch missing default case",
3874	     &switch_location);
3875
3876  /* From here on, we only care about about enumerated types.  */
3877  if (!type || TREE_CODE (type) != ENUMERAL_TYPE)
3878    return;
3879
3880  /* If the switch expression was an enumerated type, check that
3881     exactly all enumeration literals are covered by the cases.
3882     The check is made when -Wswitch was specified and there is no
3883     default case, or when -Wswitch-enum was specified.  */
3884
3885  if (!warn_switch_enum
3886      && !(warn_switch && !default_node))
3887    return;
3888
3889  /* Clearing COND if it is not an integer constant simplifies
3890     the tests inside the loop below.  */
3891  if (TREE_CODE (cond) != INTEGER_CST)
3892    cond = NULL_TREE;
3893
3894  /* The time complexity here is O(N*lg(N)) worst case, but for the
3895      common case of monotonically increasing enumerators, it is
3896      O(N), since the nature of the splay tree will keep the next
3897      element adjacent to the root at all times.  */
3898
3899  for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain))
3900    {
3901      tree value = TREE_VALUE (chain);
3902      node = splay_tree_lookup (cases, (splay_tree_key) value);
3903      if (node)
3904	{
3905	  /* Mark the CASE_LOW part of the case entry as seen.  */
3906	  tree label = (tree) node->value;
3907	  CASE_LOW_SEEN (label) = 1;
3908	  continue;
3909	}
3910
3911      /* Even though there wasn't an exact match, there might be a
3912	 case range which includes the enumator's value.  */
3913      node = splay_tree_predecessor (cases, (splay_tree_key) value);
3914      if (node && CASE_HIGH ((tree) node->value))
3915	{
3916	  tree label = (tree) node->value;
3917	  int cmp = tree_int_cst_compare (CASE_HIGH (label), value);
3918	  if (cmp >= 0)
3919	    {
3920	      /* If we match the upper bound exactly, mark the CASE_HIGH
3921		 part of the case entry as seen.  */
3922	      if (cmp == 0)
3923		CASE_HIGH_SEEN (label) = 1;
3924	      continue;
3925	    }
3926	}
3927
3928      /* We've now determined that this enumerated literal isn't
3929	 handled by the case labels of the switch statement.  */
3930
3931      /* If the switch expression is a constant, we only really care
3932	 about whether that constant is handled by the switch.  */
3933      if (cond && tree_int_cst_compare (cond, value))
3934	continue;
3935
3936      warning (0, "%Henumeration value %qE not handled in switch",
3937	       &switch_location, TREE_PURPOSE (chain));
3938    }
3939
3940  /* Warn if there are case expressions that don't correspond to
3941     enumerators.  This can occur since C and C++ don't enforce
3942     type-checking of assignments to enumeration variables.
3943
3944     The time complexity here is now always O(N) worst case, since
3945     we should have marked both the lower bound and upper bound of
3946     every disjoint case label, with CASE_LOW_SEEN and CASE_HIGH_SEEN
3947     above.  This scan also resets those fields.  */
3948  splay_tree_foreach (cases, match_case_to_enum, type);
3949}
3950
3951/* Finish an expression taking the address of LABEL (an
3952   IDENTIFIER_NODE).  Returns an expression for the address.  */
3953
3954tree
3955finish_label_address_expr (tree label)
3956{
3957  tree result;
3958
3959  if (pedantic)
3960    pedwarn ("taking the address of a label is non-standard");
3961
3962  if (label == error_mark_node)
3963    return error_mark_node;
3964
3965  label = lookup_label (label);
3966  if (label == NULL_TREE)
3967    result = null_pointer_node;
3968  else
3969    {
3970      TREE_USED (label) = 1;
3971      result = build1 (ADDR_EXPR, ptr_type_node, label);
3972      /* The current function in not necessarily uninlinable.
3973	 Computed gotos are incompatible with inlining, but the value
3974	 here could be used only in a diagnostic, for example.  */
3975    }
3976
3977  return result;
3978}
3979
3980/* Hook used by expand_expr to expand language-specific tree codes.  */
3981/* The only things that should go here are bits needed to expand
3982   constant initializers.  Everything else should be handled by the
3983   gimplification routines.  */
3984
3985rtx
3986c_expand_expr (tree exp, rtx target, enum machine_mode tmode,
3987	       int modifier /* Actually enum_modifier.  */,
3988	       rtx *alt_rtl)
3989{
3990  switch (TREE_CODE (exp))
3991    {
3992    case COMPOUND_LITERAL_EXPR:
3993      {
3994	/* Initialize the anonymous variable declared in the compound
3995	   literal, then return the variable.  */
3996	tree decl = COMPOUND_LITERAL_EXPR_DECL (exp);
3997	emit_local_var (decl);
3998	return expand_expr_real (decl, target, tmode, modifier, alt_rtl);
3999      }
4000
4001    default:
4002      gcc_unreachable ();
4003    }
4004}
4005
4006/* Hook used by staticp to handle language-specific tree codes.  */
4007
4008tree
4009c_staticp (tree exp)
4010{
4011  return (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
4012	  && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp))
4013	  ? exp : NULL);
4014}
4015
4016
4017/* Given a boolean expression ARG, return a tree representing an increment
4018   or decrement (as indicated by CODE) of ARG.  The front end must check for
4019   invalid cases (e.g., decrement in C++).  */
4020tree
4021boolean_increment (enum tree_code code, tree arg)
4022{
4023  tree val;
4024  tree true_res = boolean_true_node;
4025
4026  arg = stabilize_reference (arg);
4027  switch (code)
4028    {
4029    case PREINCREMENT_EXPR:
4030      val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4031      break;
4032    case POSTINCREMENT_EXPR:
4033      val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4034      arg = save_expr (arg);
4035      val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4036      val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4037      break;
4038    case PREDECREMENT_EXPR:
4039      val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
4040		    invert_truthvalue (arg));
4041      break;
4042    case POSTDECREMENT_EXPR:
4043      val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
4044		    invert_truthvalue (arg));
4045      arg = save_expr (arg);
4046      val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4047      val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4048      break;
4049    default:
4050      gcc_unreachable ();
4051    }
4052  TREE_SIDE_EFFECTS (val) = 1;
4053  return val;
4054}
4055
4056/* Built-in macros for stddef.h, that require macros defined in this
4057   file.  */
4058void
4059c_stddef_cpp_builtins(void)
4060{
4061  builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
4062  builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
4063  builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
4064  builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
4065  builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE, 0);
4066  builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE, 0);
4067}
4068
4069static void
4070c_init_attributes (void)
4071{
4072  /* Fill in the built_in_attributes array.  */
4073#define DEF_ATTR_NULL_TREE(ENUM)				\
4074  built_in_attributes[(int) ENUM] = NULL_TREE;
4075#define DEF_ATTR_INT(ENUM, VALUE)				\
4076  built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
4077#define DEF_ATTR_IDENT(ENUM, STRING)				\
4078  built_in_attributes[(int) ENUM] = get_identifier (STRING);
4079#define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN)	\
4080  built_in_attributes[(int) ENUM]			\
4081    = tree_cons (built_in_attributes[(int) PURPOSE],	\
4082		 built_in_attributes[(int) VALUE],	\
4083		 built_in_attributes[(int) CHAIN]);
4084#include "builtin-attrs.def"
4085#undef DEF_ATTR_NULL_TREE
4086#undef DEF_ATTR_INT
4087#undef DEF_ATTR_IDENT
4088#undef DEF_ATTR_TREE_LIST
4089}
4090
4091/* Attribute handlers common to C front ends.  */
4092
4093/* Handle a "packed" attribute; arguments as in
4094   struct attribute_spec.handler.  */
4095
4096static tree
4097handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4098			 int flags, bool *no_add_attrs)
4099{
4100  if (TYPE_P (*node))
4101    {
4102      if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4103	*node = build_variant_type_copy (*node);
4104      TYPE_PACKED (*node) = 1;
4105    }
4106  else if (TREE_CODE (*node) == FIELD_DECL)
4107    {
4108      if (TYPE_ALIGN (TREE_TYPE (*node)) <= BITS_PER_UNIT)
4109	warning (OPT_Wattributes,
4110		 "%qE attribute ignored for field of type %qT",
4111		 name, TREE_TYPE (*node));
4112      else
4113	DECL_PACKED (*node) = 1;
4114    }
4115  /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
4116     used for DECL_REGISTER.  It wouldn't mean anything anyway.
4117     We can't set DECL_PACKED on the type of a TYPE_DECL, because
4118     that changes what the typedef is typing.  */
4119  else
4120    {
4121      warning (OPT_Wattributes, "%qE attribute ignored", name);
4122      *no_add_attrs = true;
4123    }
4124
4125  return NULL_TREE;
4126}
4127
4128/* Handle a "nocommon" attribute; arguments as in
4129   struct attribute_spec.handler.  */
4130
4131static tree
4132handle_nocommon_attribute (tree *node, tree name,
4133			   tree ARG_UNUSED (args),
4134			   int ARG_UNUSED (flags), bool *no_add_attrs)
4135{
4136  if (TREE_CODE (*node) == VAR_DECL)
4137    DECL_COMMON (*node) = 0;
4138  else
4139    {
4140      warning (OPT_Wattributes, "%qE attribute ignored", name);
4141      *no_add_attrs = true;
4142    }
4143
4144  return NULL_TREE;
4145}
4146
4147/* Handle a "common" attribute; arguments as in
4148   struct attribute_spec.handler.  */
4149
4150static tree
4151handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4152			 int ARG_UNUSED (flags), bool *no_add_attrs)
4153{
4154  if (TREE_CODE (*node) == VAR_DECL)
4155    DECL_COMMON (*node) = 1;
4156  else
4157    {
4158      warning (OPT_Wattributes, "%qE attribute ignored", name);
4159      *no_add_attrs = true;
4160    }
4161
4162  return NULL_TREE;
4163}
4164
4165/* Handle a "noreturn" attribute; arguments as in
4166   struct attribute_spec.handler.  */
4167
4168static tree
4169handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4170			   int ARG_UNUSED (flags), bool *no_add_attrs)
4171{
4172  tree type = TREE_TYPE (*node);
4173
4174  /* See FIXME comment in c_common_attribute_table.  */
4175  if (TREE_CODE (*node) == FUNCTION_DECL)
4176    TREE_THIS_VOLATILE (*node) = 1;
4177  else if (TREE_CODE (type) == POINTER_TYPE
4178	   && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4179    TREE_TYPE (*node)
4180      = build_pointer_type
4181	(build_type_variant (TREE_TYPE (type),
4182			     TYPE_READONLY (TREE_TYPE (type)), 1));
4183  else
4184    {
4185      warning (OPT_Wattributes, "%qE attribute ignored", name);
4186      *no_add_attrs = true;
4187    }
4188
4189  return NULL_TREE;
4190}
4191
4192/* Handle a "noinline" attribute; arguments as in
4193   struct attribute_spec.handler.  */
4194
4195static tree
4196handle_noinline_attribute (tree *node, tree name,
4197			   tree ARG_UNUSED (args),
4198			   int ARG_UNUSED (flags), bool *no_add_attrs)
4199{
4200  if (TREE_CODE (*node) == FUNCTION_DECL)
4201    DECL_UNINLINABLE (*node) = 1;
4202  else
4203    {
4204      warning (OPT_Wattributes, "%qE attribute ignored", name);
4205      *no_add_attrs = true;
4206    }
4207
4208  return NULL_TREE;
4209}
4210
4211/* Handle a "always_inline" attribute; arguments as in
4212   struct attribute_spec.handler.  */
4213
4214static tree
4215handle_always_inline_attribute (tree *node, tree name,
4216				tree ARG_UNUSED (args),
4217				int ARG_UNUSED (flags),
4218				bool *no_add_attrs)
4219{
4220  if (TREE_CODE (*node) == FUNCTION_DECL)
4221    {
4222      /* Do nothing else, just set the attribute.  We'll get at
4223	 it later with lookup_attribute.  */
4224    }
4225  else
4226    {
4227      warning (OPT_Wattributes, "%qE attribute ignored", name);
4228      *no_add_attrs = true;
4229    }
4230
4231  return NULL_TREE;
4232}
4233
4234/* Handle a "gnu_inline" attribute; arguments as in
4235   struct attribute_spec.handler.  */
4236
4237static tree
4238handle_gnu_inline_attribute (tree *node, tree name,
4239			     tree ARG_UNUSED (args),
4240			     int ARG_UNUSED (flags),
4241			     bool *no_add_attrs)
4242{
4243  if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
4244    {
4245      /* Do nothing else, just set the attribute.  We'll get at
4246	 it later with lookup_attribute.  */
4247    }
4248  else
4249    {
4250      warning (OPT_Wattributes, "%qE attribute ignored", name);
4251      *no_add_attrs = true;
4252    }
4253
4254  return NULL_TREE;
4255}
4256
4257/* Handle a "flatten" attribute; arguments as in
4258   struct attribute_spec.handler.  */
4259
4260static tree
4261handle_flatten_attribute (tree *node, tree name,
4262			  tree args ATTRIBUTE_UNUSED,
4263			  int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4264{
4265  if (TREE_CODE (*node) == FUNCTION_DECL)
4266    /* Do nothing else, just set the attribute.  We'll get at
4267       it later with lookup_attribute.  */
4268    ;
4269  else
4270    {
4271      warning (OPT_Wattributes, "%qE attribute ignored", name);
4272      *no_add_attrs = true;
4273    }
4274
4275  return NULL_TREE;
4276}
4277
4278
4279/* Handle a "used" attribute; arguments as in
4280   struct attribute_spec.handler.  */
4281
4282static tree
4283handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
4284		       int ARG_UNUSED (flags), bool *no_add_attrs)
4285{
4286  tree node = *pnode;
4287
4288  if (TREE_CODE (node) == FUNCTION_DECL
4289      || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
4290    {
4291      TREE_USED (node) = 1;
4292      DECL_PRESERVE_P (node) = 1;
4293    }
4294  else
4295    {
4296      warning (OPT_Wattributes, "%qE attribute ignored", name);
4297      *no_add_attrs = true;
4298    }
4299
4300  return NULL_TREE;
4301}
4302
4303/* Handle a "unused" attribute; arguments as in
4304   struct attribute_spec.handler.  */
4305
4306static tree
4307handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4308			 int flags, bool *no_add_attrs)
4309{
4310  if (DECL_P (*node))
4311    {
4312      tree decl = *node;
4313
4314      if (TREE_CODE (decl) == PARM_DECL
4315	  || TREE_CODE (decl) == VAR_DECL
4316	  || TREE_CODE (decl) == FUNCTION_DECL
4317	  || TREE_CODE (decl) == LABEL_DECL
4318	  || TREE_CODE (decl) == TYPE_DECL)
4319	TREE_USED (decl) = 1;
4320      else
4321	{
4322	  warning (OPT_Wattributes, "%qE attribute ignored", name);
4323	  *no_add_attrs = true;
4324	}
4325    }
4326  else
4327    {
4328      if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4329	*node = build_variant_type_copy (*node);
4330      TREE_USED (*node) = 1;
4331    }
4332
4333  return NULL_TREE;
4334}
4335
4336/* Handle a "externally_visible" attribute; arguments as in
4337   struct attribute_spec.handler.  */
4338
4339static tree
4340handle_externally_visible_attribute (tree *pnode, tree name,
4341				     tree ARG_UNUSED (args),
4342				     int ARG_UNUSED (flags),
4343				     bool *no_add_attrs)
4344{
4345  tree node = *pnode;
4346
4347  if (TREE_CODE (node) == FUNCTION_DECL || TREE_CODE (node) == VAR_DECL)
4348    {
4349      if ((!TREE_STATIC (node) && TREE_CODE (node) != FUNCTION_DECL
4350	   && !DECL_EXTERNAL (node)) || !TREE_PUBLIC (node))
4351	{
4352	  warning (OPT_Wattributes,
4353		   "%qE attribute have effect only on public objects", name);
4354	  *no_add_attrs = true;
4355	}
4356    }
4357  else
4358    {
4359      warning (OPT_Wattributes, "%qE attribute ignored", name);
4360      *no_add_attrs = true;
4361    }
4362
4363  return NULL_TREE;
4364}
4365
4366/* Handle a "const" attribute; arguments as in
4367   struct attribute_spec.handler.  */
4368
4369static tree
4370handle_const_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4371			int ARG_UNUSED (flags), bool *no_add_attrs)
4372{
4373  tree type = TREE_TYPE (*node);
4374
4375  /* See FIXME comment on noreturn in c_common_attribute_table.  */
4376  if (TREE_CODE (*node) == FUNCTION_DECL)
4377    TREE_READONLY (*node) = 1;
4378  else if (TREE_CODE (type) == POINTER_TYPE
4379	   && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4380    TREE_TYPE (*node)
4381      = build_pointer_type
4382	(build_type_variant (TREE_TYPE (type), 1,
4383			     TREE_THIS_VOLATILE (TREE_TYPE (type))));
4384  else
4385    {
4386      warning (OPT_Wattributes, "%qE attribute ignored", name);
4387      *no_add_attrs = true;
4388    }
4389
4390  return NULL_TREE;
4391}
4392
4393/* Handle a "transparent_union" attribute; arguments as in
4394   struct attribute_spec.handler.  */
4395
4396static tree
4397handle_transparent_union_attribute (tree *node, tree name,
4398				    tree ARG_UNUSED (args), int flags,
4399				    bool *no_add_attrs)
4400{
4401  tree type = NULL;
4402
4403  *no_add_attrs = true;
4404
4405  if (DECL_P (*node))
4406    {
4407      if (TREE_CODE (*node) != TYPE_DECL)
4408	goto ignored;
4409      node = &TREE_TYPE (*node);
4410      type = *node;
4411    }
4412  else if (TYPE_P (*node))
4413    type = *node;
4414  else
4415    goto ignored;
4416
4417  if (TREE_CODE (type) == UNION_TYPE)
4418    {
4419      /* When IN_PLACE is set, leave the check for FIELDS and MODE to
4420	 the code in finish_struct.  */
4421      if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4422	{
4423	  if (TYPE_FIELDS (type) == NULL_TREE
4424	      || TYPE_MODE (type) != DECL_MODE (TYPE_FIELDS (type)))
4425	    goto ignored;
4426
4427	  /* A type variant isn't good enough, since we don't a cast
4428	     to such a type removed as a no-op.  */
4429	  *node = type = build_duplicate_type (type);
4430	}
4431
4432      TYPE_TRANSPARENT_UNION (type) = 1;
4433      return NULL_TREE;
4434    }
4435
4436 ignored:
4437  warning (OPT_Wattributes, "%qE attribute ignored", name);
4438  return NULL_TREE;
4439}
4440
4441/* Handle a "constructor" attribute; arguments as in
4442   struct attribute_spec.handler.  */
4443
4444static tree
4445handle_constructor_attribute (tree *node, tree name,
4446			      tree ARG_UNUSED (args),
4447			      int ARG_UNUSED (flags),
4448			      bool *no_add_attrs)
4449{
4450  tree decl = *node;
4451  tree type = TREE_TYPE (decl);
4452
4453  if (TREE_CODE (decl) == FUNCTION_DECL
4454      && TREE_CODE (type) == FUNCTION_TYPE
4455      && decl_function_context (decl) == 0)
4456    {
4457      DECL_STATIC_CONSTRUCTOR (decl) = 1;
4458      TREE_USED (decl) = 1;
4459    }
4460  else
4461    {
4462      warning (OPT_Wattributes, "%qE attribute ignored", name);
4463      *no_add_attrs = true;
4464    }
4465
4466  return NULL_TREE;
4467}
4468
4469/* Handle a "destructor" attribute; arguments as in
4470   struct attribute_spec.handler.  */
4471
4472static tree
4473handle_destructor_attribute (tree *node, tree name,
4474			     tree ARG_UNUSED (args),
4475			     int ARG_UNUSED (flags),
4476			     bool *no_add_attrs)
4477{
4478  tree decl = *node;
4479  tree type = TREE_TYPE (decl);
4480
4481  if (TREE_CODE (decl) == FUNCTION_DECL
4482      && TREE_CODE (type) == FUNCTION_TYPE
4483      && decl_function_context (decl) == 0)
4484    {
4485      DECL_STATIC_DESTRUCTOR (decl) = 1;
4486      TREE_USED (decl) = 1;
4487    }
4488  else
4489    {
4490      warning (OPT_Wattributes, "%qE attribute ignored", name);
4491      *no_add_attrs = true;
4492    }
4493
4494  return NULL_TREE;
4495}
4496
4497/* Handle a "mode" attribute; arguments as in
4498   struct attribute_spec.handler.  */
4499
4500static tree
4501handle_mode_attribute (tree *node, tree name, tree args,
4502		       int ARG_UNUSED (flags), bool *no_add_attrs)
4503{
4504  tree type = *node;
4505
4506  *no_add_attrs = true;
4507
4508  if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
4509    warning (OPT_Wattributes, "%qE attribute ignored", name);
4510  else
4511    {
4512      int j;
4513      const char *p = IDENTIFIER_POINTER (TREE_VALUE (args));
4514      int len = strlen (p);
4515      enum machine_mode mode = VOIDmode;
4516      tree typefm;
4517      bool valid_mode;
4518
4519      if (len > 4 && p[0] == '_' && p[1] == '_'
4520	  && p[len - 1] == '_' && p[len - 2] == '_')
4521	{
4522	  char *newp = (char *) alloca (len - 1);
4523
4524	  strcpy (newp, &p[2]);
4525	  newp[len - 4] = '\0';
4526	  p = newp;
4527	}
4528
4529      /* Change this type to have a type with the specified mode.
4530	 First check for the special modes.  */
4531      if (!strcmp (p, "byte"))
4532	mode = byte_mode;
4533      else if (!strcmp (p, "word"))
4534	mode = word_mode;
4535      else if (!strcmp (p, "pointer"))
4536	mode = ptr_mode;
4537      else
4538	for (j = 0; j < NUM_MACHINE_MODES; j++)
4539	  if (!strcmp (p, GET_MODE_NAME (j)))
4540	    {
4541	      mode = (enum machine_mode) j;
4542	      break;
4543	    }
4544
4545      if (mode == VOIDmode)
4546	{
4547	  error ("unknown machine mode %qs", p);
4548	  return NULL_TREE;
4549	}
4550
4551      valid_mode = false;
4552      switch (GET_MODE_CLASS (mode))
4553	{
4554	case MODE_INT:
4555	case MODE_PARTIAL_INT:
4556	case MODE_FLOAT:
4557	case MODE_DECIMAL_FLOAT:
4558	  valid_mode = targetm.scalar_mode_supported_p (mode);
4559	  break;
4560
4561	case MODE_COMPLEX_INT:
4562	case MODE_COMPLEX_FLOAT:
4563	  valid_mode = targetm.scalar_mode_supported_p (GET_MODE_INNER (mode));
4564	  break;
4565
4566	case MODE_VECTOR_INT:
4567	case MODE_VECTOR_FLOAT:
4568	  warning (OPT_Wattributes, "specifying vector types with "
4569		   "__attribute__ ((mode)) is deprecated");
4570	  warning (OPT_Wattributes,
4571		   "use __attribute__ ((vector_size)) instead");
4572	  valid_mode = vector_mode_valid_p (mode);
4573	  break;
4574
4575	default:
4576	  break;
4577	}
4578      if (!valid_mode)
4579	{
4580	  error ("unable to emulate %qs", p);
4581	  return NULL_TREE;
4582	}
4583
4584      if (POINTER_TYPE_P (type))
4585	{
4586	  tree (*fn)(tree, enum machine_mode, bool);
4587
4588	  if (!targetm.valid_pointer_mode (mode))
4589	    {
4590	      error ("invalid pointer mode %qs", p);
4591	      return NULL_TREE;
4592	    }
4593
4594	  if (TREE_CODE (type) == POINTER_TYPE)
4595	    fn = build_pointer_type_for_mode;
4596	  else
4597	    fn = build_reference_type_for_mode;
4598	  typefm = fn (TREE_TYPE (type), mode, false);
4599	}
4600      else
4601	typefm = lang_hooks.types.type_for_mode (mode, TYPE_UNSIGNED (type));
4602
4603      if (typefm == NULL_TREE)
4604	{
4605	  error ("no data type for mode %qs", p);
4606	  return NULL_TREE;
4607	}
4608      else if (TREE_CODE (type) == ENUMERAL_TYPE)
4609	{
4610	  /* For enumeral types, copy the precision from the integer
4611	     type returned above.  If not an INTEGER_TYPE, we can't use
4612	     this mode for this type.  */
4613	  if (TREE_CODE (typefm) != INTEGER_TYPE)
4614	    {
4615	      error ("cannot use mode %qs for enumeral types", p);
4616	      return NULL_TREE;
4617	    }
4618
4619	  if (flags & ATTR_FLAG_TYPE_IN_PLACE)
4620	    {
4621	      TYPE_PRECISION (type) = TYPE_PRECISION (typefm);
4622	      typefm = type;
4623	    }
4624	  else
4625	    {
4626	      /* We cannot build a type variant, as there's code that assumes
4627		 that TYPE_MAIN_VARIANT has the same mode.  This includes the
4628		 debug generators.  Instead, create a subrange type.  This
4629		 results in all of the enumeral values being emitted only once
4630		 in the original, and the subtype gets them by reference.  */
4631	      if (TYPE_UNSIGNED (type))
4632		typefm = make_unsigned_type (TYPE_PRECISION (typefm));
4633	      else
4634		typefm = make_signed_type (TYPE_PRECISION (typefm));
4635	      TREE_TYPE (typefm) = type;
4636	    }
4637	}
4638      else if (VECTOR_MODE_P (mode)
4639	       ? TREE_CODE (type) != TREE_CODE (TREE_TYPE (typefm))
4640	       : TREE_CODE (type) != TREE_CODE (typefm))
4641	{
4642	  error ("mode %qs applied to inappropriate type", p);
4643	  return NULL_TREE;
4644	}
4645
4646      *node = typefm;
4647    }
4648
4649  return NULL_TREE;
4650}
4651
4652/* Handle a "section" attribute; arguments as in
4653   struct attribute_spec.handler.  */
4654
4655static tree
4656handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
4657			  int ARG_UNUSED (flags), bool *no_add_attrs)
4658{
4659  tree decl = *node;
4660
4661  if (targetm.have_named_sections)
4662    {
4663      user_defined_section_attribute = true;
4664
4665      if ((TREE_CODE (decl) == FUNCTION_DECL
4666	   || TREE_CODE (decl) == VAR_DECL)
4667	  && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
4668	{
4669	  if (TREE_CODE (decl) == VAR_DECL
4670	      && current_function_decl != NULL_TREE
4671	      && !TREE_STATIC (decl))
4672	    {
4673	      error ("%Jsection attribute cannot be specified for "
4674		     "local variables", decl);
4675	      *no_add_attrs = true;
4676	    }
4677
4678	  /* The decl may have already been given a section attribute
4679	     from a previous declaration.  Ensure they match.  */
4680	  else if (DECL_SECTION_NAME (decl) != NULL_TREE
4681		   && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
4682			      TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
4683	    {
4684	      error ("section of %q+D conflicts with previous declaration",
4685		     *node);
4686	      *no_add_attrs = true;
4687	    }
4688	  else
4689	    DECL_SECTION_NAME (decl) = TREE_VALUE (args);
4690	}
4691      else
4692	{
4693	  error ("section attribute not allowed for %q+D", *node);
4694	  *no_add_attrs = true;
4695	}
4696    }
4697  else
4698    {
4699      error ("%Jsection attributes are not supported for this target", *node);
4700      *no_add_attrs = true;
4701    }
4702
4703  return NULL_TREE;
4704}
4705
4706/* Handle a "aligned" attribute; arguments as in
4707   struct attribute_spec.handler.  */
4708
4709static tree
4710handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
4711			  int flags, bool *no_add_attrs)
4712{
4713  tree decl = NULL_TREE;
4714  tree *type = NULL;
4715  int is_type = 0;
4716  tree align_expr = (args ? TREE_VALUE (args)
4717		     : size_int (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
4718  int i;
4719
4720  if (DECL_P (*node))
4721    {
4722      decl = *node;
4723      type = &TREE_TYPE (decl);
4724      is_type = TREE_CODE (*node) == TYPE_DECL;
4725    }
4726  else if (TYPE_P (*node))
4727    type = node, is_type = 1;
4728
4729  if (TREE_CODE (align_expr) != INTEGER_CST)
4730    {
4731      error ("requested alignment is not a constant");
4732      *no_add_attrs = true;
4733    }
4734  else if ((i = tree_log2 (align_expr)) == -1)
4735    {
4736      error ("requested alignment is not a power of 2");
4737      *no_add_attrs = true;
4738    }
4739  else if (i > HOST_BITS_PER_INT - 2)
4740    {
4741      error ("requested alignment is too large");
4742      *no_add_attrs = true;
4743    }
4744  else if (is_type)
4745    {
4746      /* If we have a TYPE_DECL, then copy the type, so that we
4747	 don't accidentally modify a builtin type.  See pushdecl.  */
4748      if (decl && TREE_TYPE (decl) != error_mark_node
4749	  && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
4750	{
4751	  tree tt = TREE_TYPE (decl);
4752	  *type = build_variant_type_copy (*type);
4753	  DECL_ORIGINAL_TYPE (decl) = tt;
4754	  TYPE_NAME (*type) = decl;
4755	  TREE_USED (*type) = TREE_USED (decl);
4756	  TREE_TYPE (decl) = *type;
4757	}
4758      else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4759	*type = build_variant_type_copy (*type);
4760
4761      TYPE_ALIGN (*type) = (1 << i) * BITS_PER_UNIT;
4762      TYPE_USER_ALIGN (*type) = 1;
4763    }
4764  else if (TREE_CODE (decl) != VAR_DECL
4765	   && TREE_CODE (decl) != FIELD_DECL)
4766    {
4767      error ("alignment may not be specified for %q+D", decl);
4768      *no_add_attrs = true;
4769    }
4770  else
4771    {
4772      DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT;
4773      DECL_USER_ALIGN (decl) = 1;
4774    }
4775
4776  return NULL_TREE;
4777}
4778
4779/* Handle a "weak" attribute; arguments as in
4780   struct attribute_spec.handler.  */
4781
4782static tree
4783handle_weak_attribute (tree *node, tree name,
4784		       tree ARG_UNUSED (args),
4785		       int ARG_UNUSED (flags),
4786		       bool * ARG_UNUSED (no_add_attrs))
4787{
4788  if (TREE_CODE (*node) == FUNCTION_DECL
4789      || TREE_CODE (*node) == VAR_DECL)
4790    declare_weak (*node);
4791  else
4792    warning (OPT_Wattributes, "%qE attribute ignored", name);
4793
4794
4795  return NULL_TREE;
4796}
4797
4798/* Handle an "alias" attribute; arguments as in
4799   struct attribute_spec.handler.  */
4800
4801static tree
4802handle_alias_attribute (tree *node, tree name, tree args,
4803			int ARG_UNUSED (flags), bool *no_add_attrs)
4804{
4805  tree decl = *node;
4806
4807  if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
4808      || (TREE_CODE (decl) != FUNCTION_DECL
4809	  && TREE_PUBLIC (decl) && !DECL_EXTERNAL (decl))
4810      /* A static variable declaration is always a tentative definition,
4811	 but the alias is a non-tentative definition which overrides.  */
4812      || (TREE_CODE (decl) != FUNCTION_DECL
4813	  && ! TREE_PUBLIC (decl) && DECL_INITIAL (decl)))
4814    {
4815      error ("%q+D defined both normally and as an alias", decl);
4816      *no_add_attrs = true;
4817    }
4818
4819  /* Note that the very first time we process a nested declaration,
4820     decl_function_context will not be set.  Indeed, *would* never
4821     be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
4822     we do below.  After such frobbery, pushdecl would set the context.
4823     In any case, this is never what we want.  */
4824  else if (decl_function_context (decl) == 0 && current_function_decl == NULL)
4825    {
4826      tree id;
4827
4828      id = TREE_VALUE (args);
4829      if (TREE_CODE (id) != STRING_CST)
4830	{
4831	  error ("alias argument not a string");
4832	  *no_add_attrs = true;
4833	  return NULL_TREE;
4834	}
4835      id = get_identifier (TREE_STRING_POINTER (id));
4836      /* This counts as a use of the object pointed to.  */
4837      TREE_USED (id) = 1;
4838
4839      if (TREE_CODE (decl) == FUNCTION_DECL)
4840	DECL_INITIAL (decl) = error_mark_node;
4841      else
4842	{
4843	  if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
4844	    DECL_EXTERNAL (decl) = 1;
4845	  else
4846	    DECL_EXTERNAL (decl) = 0;
4847	  TREE_STATIC (decl) = 1;
4848	}
4849    }
4850  else
4851    {
4852      warning (OPT_Wattributes, "%qE attribute ignored", name);
4853      *no_add_attrs = true;
4854    }
4855
4856  return NULL_TREE;
4857}
4858
4859/* Handle a "weakref" attribute; arguments as in struct
4860   attribute_spec.handler.  */
4861
4862static tree
4863handle_weakref_attribute (tree *node, tree ARG_UNUSED (name), tree args,
4864			  int flags, bool *no_add_attrs)
4865{
4866  tree attr = NULL_TREE;
4867
4868  /* We must ignore the attribute when it is associated with
4869     local-scoped decls, since attribute alias is ignored and many
4870     such symbols do not even have a DECL_WEAK field.  */
4871  if (decl_function_context (*node) || current_function_decl)
4872    {
4873      warning (OPT_Wattributes, "%qE attribute ignored", name);
4874      *no_add_attrs = true;
4875      return NULL_TREE;
4876    }
4877
4878  /* The idea here is that `weakref("name")' mutates into `weakref,
4879     alias("name")', and weakref without arguments, in turn,
4880     implicitly adds weak. */
4881
4882  if (args)
4883    {
4884      attr = tree_cons (get_identifier ("alias"), args, attr);
4885      attr = tree_cons (get_identifier ("weakref"), NULL_TREE, attr);
4886
4887      *no_add_attrs = true;
4888
4889      decl_attributes (node, attr, flags);
4890    }
4891  else
4892    {
4893      if (lookup_attribute ("alias", DECL_ATTRIBUTES (*node)))
4894	error ("%Jweakref attribute must appear before alias attribute",
4895	       *node);
4896
4897      /* Can't call declare_weak because it wants this to be TREE_PUBLIC,
4898	 and that isn't supported; and because it wants to add it to
4899	 the list of weak decls, which isn't helpful.  */
4900      DECL_WEAK (*node) = 1;
4901    }
4902
4903  return NULL_TREE;
4904}
4905
4906/* Handle an "visibility" attribute; arguments as in
4907   struct attribute_spec.handler.  */
4908
4909static tree
4910handle_visibility_attribute (tree *node, tree name, tree args,
4911			     int ARG_UNUSED (flags),
4912			     bool *ARG_UNUSED (no_add_attrs))
4913{
4914  tree decl = *node;
4915  tree id = TREE_VALUE (args);
4916  enum symbol_visibility vis;
4917
4918  if (TYPE_P (*node))
4919    {
4920      if (TREE_CODE (*node) == ENUMERAL_TYPE)
4921	/* OK */;
4922      else if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE)
4923	{
4924	  warning (OPT_Wattributes, "%qE attribute ignored on non-class types",
4925		   name);
4926	  return NULL_TREE;
4927	}
4928      else if (TYPE_FIELDS (*node))
4929	{
4930	  error ("%qE attribute ignored because %qT is already defined",
4931		 name, *node);
4932	  return NULL_TREE;
4933	}
4934    }
4935  else if (decl_function_context (decl) != 0 || !TREE_PUBLIC (decl))
4936    {
4937      warning (OPT_Wattributes, "%qE attribute ignored", name);
4938      return NULL_TREE;
4939    }
4940
4941  if (TREE_CODE (id) != STRING_CST)
4942    {
4943      error ("visibility argument not a string");
4944      return NULL_TREE;
4945    }
4946
4947  /*  If this is a type, set the visibility on the type decl.  */
4948  if (TYPE_P (decl))
4949    {
4950      decl = TYPE_NAME (decl);
4951      if (!decl)
4952	return NULL_TREE;
4953      if (TREE_CODE (decl) == IDENTIFIER_NODE)
4954	{
4955	   warning (OPT_Wattributes, "%qE attribute ignored on types",
4956		    name);
4957	   return NULL_TREE;
4958	}
4959    }
4960
4961  if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
4962    vis = VISIBILITY_DEFAULT;
4963  else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
4964    vis = VISIBILITY_INTERNAL;
4965  else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
4966    vis = VISIBILITY_HIDDEN;
4967  else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
4968    vis = VISIBILITY_PROTECTED;
4969  else
4970    {
4971      error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
4972      vis = VISIBILITY_DEFAULT;
4973    }
4974
4975  if (DECL_VISIBILITY_SPECIFIED (decl)
4976      && vis != DECL_VISIBILITY (decl)
4977      && lookup_attribute ("visibility", (TYPE_P (*node)
4978					  ? TYPE_ATTRIBUTES (*node)
4979					  : DECL_ATTRIBUTES (decl))))
4980    error ("%qD redeclared with different visibility", decl);
4981
4982  DECL_VISIBILITY (decl) = vis;
4983  DECL_VISIBILITY_SPECIFIED (decl) = 1;
4984
4985  /* Go ahead and attach the attribute to the node as well.  This is needed
4986     so we can determine whether we have VISIBILITY_DEFAULT because the
4987     visibility was not specified, or because it was explicitly overridden
4988     from the containing scope.  */
4989
4990  return NULL_TREE;
4991}
4992
4993/* Determine the ELF symbol visibility for DECL, which is either a
4994   variable or a function.  It is an error to use this function if a
4995   definition of DECL is not available in this translation unit.
4996   Returns true if the final visibility has been determined by this
4997   function; false if the caller is free to make additional
4998   modifications.  */
4999
5000bool
5001c_determine_visibility (tree decl)
5002{
5003  gcc_assert (TREE_CODE (decl) == VAR_DECL
5004	      || TREE_CODE (decl) == FUNCTION_DECL);
5005
5006  /* If the user explicitly specified the visibility with an
5007     attribute, honor that.  DECL_VISIBILITY will have been set during
5008     the processing of the attribute.  We check for an explicit
5009     attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
5010     to distinguish the use of an attribute from the use of a "#pragma
5011     GCC visibility push(...)"; in the latter case we still want other
5012     considerations to be able to overrule the #pragma.  */
5013  if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl)))
5014    return true;
5015
5016  /* Anything that is exported must have default visibility.  */
5017  if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
5018      && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
5019    {
5020      DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
5021      DECL_VISIBILITY_SPECIFIED (decl) = 1;
5022      return true;
5023    }
5024
5025  /* Set default visibility to whatever the user supplied with
5026     visibility_specified depending on #pragma GCC visibility.  */
5027  if (!DECL_VISIBILITY_SPECIFIED (decl))
5028    {
5029      DECL_VISIBILITY (decl) = default_visibility;
5030      DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
5031    }
5032  return false;
5033}
5034
5035/* Handle an "tls_model" attribute; arguments as in
5036   struct attribute_spec.handler.  */
5037
5038static tree
5039handle_tls_model_attribute (tree *node, tree name, tree args,
5040			    int ARG_UNUSED (flags), bool *no_add_attrs)
5041{
5042  tree id;
5043  tree decl = *node;
5044  enum tls_model kind;
5045
5046  *no_add_attrs = true;
5047
5048  if (!DECL_THREAD_LOCAL_P (decl))
5049    {
5050      warning (OPT_Wattributes, "%qE attribute ignored", name);
5051      return NULL_TREE;
5052    }
5053
5054  kind = DECL_TLS_MODEL (decl);
5055  id = TREE_VALUE (args);
5056  if (TREE_CODE (id) != STRING_CST)
5057    {
5058      error ("tls_model argument not a string");
5059      return NULL_TREE;
5060    }
5061
5062  if (!strcmp (TREE_STRING_POINTER (id), "local-exec"))
5063    kind = TLS_MODEL_LOCAL_EXEC;
5064  else if (!strcmp (TREE_STRING_POINTER (id), "initial-exec"))
5065    kind = TLS_MODEL_INITIAL_EXEC;
5066  else if (!strcmp (TREE_STRING_POINTER (id), "local-dynamic"))
5067    kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
5068  else if (!strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
5069    kind = TLS_MODEL_GLOBAL_DYNAMIC;
5070  else
5071    error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
5072
5073  DECL_TLS_MODEL (decl) = kind;
5074  return NULL_TREE;
5075}
5076
5077/* Handle a "no_instrument_function" attribute; arguments as in
5078   struct attribute_spec.handler.  */
5079
5080static tree
5081handle_no_instrument_function_attribute (tree *node, tree name,
5082					 tree ARG_UNUSED (args),
5083					 int ARG_UNUSED (flags),
5084					 bool *no_add_attrs)
5085{
5086  tree decl = *node;
5087
5088  if (TREE_CODE (decl) != FUNCTION_DECL)
5089    {
5090      error ("%J%qE attribute applies only to functions", decl, name);
5091      *no_add_attrs = true;
5092    }
5093  else if (DECL_INITIAL (decl))
5094    {
5095      error ("%Jcan%'t set %qE attribute after definition", decl, name);
5096      *no_add_attrs = true;
5097    }
5098  else
5099    DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
5100
5101  return NULL_TREE;
5102}
5103
5104/* Handle a "malloc" attribute; arguments as in
5105   struct attribute_spec.handler.  */
5106
5107static tree
5108handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5109			 int ARG_UNUSED (flags), bool *no_add_attrs)
5110{
5111  if (TREE_CODE (*node) == FUNCTION_DECL
5112      && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
5113    DECL_IS_MALLOC (*node) = 1;
5114  else
5115    {
5116      warning (OPT_Wattributes, "%qE attribute ignored", name);
5117      *no_add_attrs = true;
5118    }
5119
5120  return NULL_TREE;
5121}
5122
5123/* Handle a "returns_twice" attribute; arguments as in
5124   struct attribute_spec.handler.  */
5125
5126static tree
5127handle_returns_twice_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5128			 int ARG_UNUSED (flags), bool *no_add_attrs)
5129{
5130  if (TREE_CODE (*node) == FUNCTION_DECL)
5131    DECL_IS_RETURNS_TWICE (*node) = 1;
5132  else
5133    {
5134      warning (OPT_Wattributes, "%qE attribute ignored", name);
5135      *no_add_attrs = true;
5136    }
5137
5138  return NULL_TREE;
5139}
5140
5141/* Handle a "no_limit_stack" attribute; arguments as in
5142   struct attribute_spec.handler.  */
5143
5144static tree
5145handle_no_limit_stack_attribute (tree *node, tree name,
5146				 tree ARG_UNUSED (args),
5147				 int ARG_UNUSED (flags),
5148				 bool *no_add_attrs)
5149{
5150  tree decl = *node;
5151
5152  if (TREE_CODE (decl) != FUNCTION_DECL)
5153    {
5154      error ("%J%qE attribute applies only to functions", decl, name);
5155      *no_add_attrs = true;
5156    }
5157  else if (DECL_INITIAL (decl))
5158    {
5159      error ("%Jcan%'t set %qE attribute after definition", decl, name);
5160      *no_add_attrs = true;
5161    }
5162  else
5163    DECL_NO_LIMIT_STACK (decl) = 1;
5164
5165  return NULL_TREE;
5166}
5167
5168/* Handle a "pure" attribute; arguments as in
5169   struct attribute_spec.handler.  */
5170
5171static tree
5172handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5173		       int ARG_UNUSED (flags), bool *no_add_attrs)
5174{
5175  if (TREE_CODE (*node) == FUNCTION_DECL)
5176    DECL_IS_PURE (*node) = 1;
5177  /* ??? TODO: Support types.  */
5178  else
5179    {
5180      warning (OPT_Wattributes, "%qE attribute ignored", name);
5181      *no_add_attrs = true;
5182    }
5183
5184  return NULL_TREE;
5185}
5186
5187/* Handle a "no vops" attribute; arguments as in
5188   struct attribute_spec.handler.  */
5189
5190static tree
5191handle_novops_attribute (tree *node, tree ARG_UNUSED (name),
5192			 tree ARG_UNUSED (args), int ARG_UNUSED (flags),
5193			 bool *ARG_UNUSED (no_add_attrs))
5194{
5195  gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
5196  DECL_IS_NOVOPS (*node) = 1;
5197  return NULL_TREE;
5198}
5199
5200/* Handle a "deprecated" attribute; arguments as in
5201   struct attribute_spec.handler.  */
5202
5203static tree
5204handle_deprecated_attribute (tree *node, tree name,
5205			     tree ARG_UNUSED (args), int flags,
5206			     bool *no_add_attrs)
5207{
5208  tree type = NULL_TREE;
5209  int warn = 0;
5210  tree what = NULL_TREE;
5211
5212  if (DECL_P (*node))
5213    {
5214      tree decl = *node;
5215      type = TREE_TYPE (decl);
5216
5217      if (TREE_CODE (decl) == TYPE_DECL
5218	  || TREE_CODE (decl) == PARM_DECL
5219	  || TREE_CODE (decl) == VAR_DECL
5220	  || TREE_CODE (decl) == FUNCTION_DECL
5221	  || TREE_CODE (decl) == FIELD_DECL)
5222	TREE_DEPRECATED (decl) = 1;
5223      else
5224	warn = 1;
5225    }
5226  else if (TYPE_P (*node))
5227    {
5228      if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5229	*node = build_variant_type_copy (*node);
5230      TREE_DEPRECATED (*node) = 1;
5231      type = *node;
5232    }
5233  else
5234    warn = 1;
5235
5236  if (warn)
5237    {
5238      *no_add_attrs = true;
5239      if (type && TYPE_NAME (type))
5240	{
5241	  if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
5242	    what = TYPE_NAME (*node);
5243	  else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
5244		   && DECL_NAME (TYPE_NAME (type)))
5245	    what = DECL_NAME (TYPE_NAME (type));
5246	}
5247      if (what)
5248	warning (OPT_Wattributes, "%qE attribute ignored for %qE", name, what);
5249      else
5250	warning (OPT_Wattributes, "%qE attribute ignored", name);
5251    }
5252
5253  return NULL_TREE;
5254}
5255
5256/* Handle a "vector_size" attribute; arguments as in
5257   struct attribute_spec.handler.  */
5258
5259static tree
5260handle_vector_size_attribute (tree *node, tree name, tree args,
5261			      int ARG_UNUSED (flags),
5262			      bool *no_add_attrs)
5263{
5264  unsigned HOST_WIDE_INT vecsize, nunits;
5265  enum machine_mode orig_mode;
5266  tree type = *node, new_type, size;
5267
5268  *no_add_attrs = true;
5269
5270  size = TREE_VALUE (args);
5271
5272  if (!host_integerp (size, 1))
5273    {
5274      warning (OPT_Wattributes, "%qE attribute ignored", name);
5275      return NULL_TREE;
5276    }
5277
5278  /* Get the vector size (in bytes).  */
5279  vecsize = tree_low_cst (size, 1);
5280
5281  /* We need to provide for vector pointers, vector arrays, and
5282     functions returning vectors.  For example:
5283
5284       __attribute__((vector_size(16))) short *foo;
5285
5286     In this case, the mode is SI, but the type being modified is
5287     HI, so we need to look further.  */
5288
5289  while (POINTER_TYPE_P (type)
5290	 || TREE_CODE (type) == FUNCTION_TYPE
5291	 || TREE_CODE (type) == METHOD_TYPE
5292	 || TREE_CODE (type) == ARRAY_TYPE)
5293    type = TREE_TYPE (type);
5294
5295  /* Get the mode of the type being modified.  */
5296  orig_mode = TYPE_MODE (type);
5297
5298  if (TREE_CODE (type) == RECORD_TYPE
5299      || TREE_CODE (type) == UNION_TYPE
5300      || TREE_CODE (type) == VECTOR_TYPE
5301      || (!SCALAR_FLOAT_MODE_P (orig_mode)
5302	  && GET_MODE_CLASS (orig_mode) != MODE_INT)
5303      || !host_integerp (TYPE_SIZE_UNIT (type), 1))
5304    {
5305      error ("invalid vector type for attribute %qE", name);
5306      return NULL_TREE;
5307    }
5308
5309  if (vecsize % tree_low_cst (TYPE_SIZE_UNIT (type), 1))
5310    {
5311      error ("vector size not an integral multiple of component size");
5312      return NULL;
5313    }
5314
5315  if (vecsize == 0)
5316    {
5317      error ("zero vector size");
5318      return NULL;
5319    }
5320
5321  /* Calculate how many units fit in the vector.  */
5322  nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
5323  if (nunits & (nunits - 1))
5324    {
5325      error ("number of components of the vector not a power of two");
5326      return NULL_TREE;
5327    }
5328
5329  new_type = build_vector_type (type, nunits);
5330
5331  /* Build back pointers if needed.  */
5332  *node = reconstruct_complex_type (*node, new_type);
5333
5334  return NULL_TREE;
5335}
5336
5337/* Handle the "nonnull" attribute.  */
5338static tree
5339handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
5340			  tree args, int ARG_UNUSED (flags),
5341			  bool *no_add_attrs)
5342{
5343  tree type = *node;
5344  unsigned HOST_WIDE_INT attr_arg_num;
5345
5346  /* If no arguments are specified, all pointer arguments should be
5347     non-null.  Verify a full prototype is given so that the arguments
5348     will have the correct types when we actually check them later.  */
5349  if (!args)
5350    {
5351      if (!TYPE_ARG_TYPES (type))
5352	{
5353	  error ("nonnull attribute without arguments on a non-prototype");
5354	  *no_add_attrs = true;
5355	}
5356      return NULL_TREE;
5357    }
5358
5359  /* Argument list specified.  Verify that each argument number references
5360     a pointer argument.  */
5361  for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
5362    {
5363      tree argument;
5364      unsigned HOST_WIDE_INT arg_num = 0, ck_num;
5365
5366      if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
5367	{
5368	  error ("nonnull argument has invalid operand number (argument %lu)",
5369		 (unsigned long) attr_arg_num);
5370	  *no_add_attrs = true;
5371	  return NULL_TREE;
5372	}
5373
5374      argument = TYPE_ARG_TYPES (type);
5375      if (argument)
5376	{
5377	  for (ck_num = 1; ; ck_num++)
5378	    {
5379	      if (!argument || ck_num == arg_num)
5380		break;
5381	      argument = TREE_CHAIN (argument);
5382	    }
5383
5384	  if (!argument
5385	      || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
5386	    {
5387	      error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
5388		     (unsigned long) attr_arg_num, (unsigned long) arg_num);
5389	      *no_add_attrs = true;
5390	      return NULL_TREE;
5391	    }
5392
5393	  if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
5394	    {
5395	      error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
5396		   (unsigned long) attr_arg_num, (unsigned long) arg_num);
5397	      *no_add_attrs = true;
5398	      return NULL_TREE;
5399	    }
5400	}
5401    }
5402
5403  return NULL_TREE;
5404}
5405
5406/* Check the argument list of a function call for null in argument slots
5407   that are marked as requiring a non-null pointer argument.  */
5408
5409static void
5410check_function_nonnull (tree attrs, tree params)
5411{
5412  tree a, args, param;
5413  int param_num;
5414
5415  for (a = attrs; a; a = TREE_CHAIN (a))
5416    {
5417      if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
5418	{
5419	  args = TREE_VALUE (a);
5420
5421	  /* Walk the argument list.  If we encounter an argument number we
5422	     should check for non-null, do it.  If the attribute has no args,
5423	     then every pointer argument is checked (in which case the check
5424	     for pointer type is done in check_nonnull_arg).  */
5425	  for (param = params, param_num = 1; ;
5426	       param_num++, param = TREE_CHAIN (param))
5427	    {
5428	      if (!param)
5429	break;
5430	      if (!args || nonnull_check_p (args, param_num))
5431	check_function_arguments_recurse (check_nonnull_arg, NULL,
5432					  TREE_VALUE (param),
5433					  param_num);
5434	    }
5435	}
5436    }
5437}
5438
5439/* Check that the Nth argument of a function call (counting backwards
5440   from the end) is a (pointer)0.  */
5441
5442static void
5443check_function_sentinel (tree attrs, tree params, tree typelist)
5444{
5445  tree attr = lookup_attribute ("sentinel", attrs);
5446
5447  if (attr)
5448    {
5449      /* Skip over the named arguments.  */
5450      while (typelist && params)
5451      {
5452	typelist = TREE_CHAIN (typelist);
5453	params = TREE_CHAIN (params);
5454      }
5455
5456      if (typelist || !params)
5457	warning (OPT_Wformat,
5458		 "not enough variable arguments to fit a sentinel");
5459      else
5460	{
5461	  tree sentinel, end;
5462	  unsigned pos = 0;
5463
5464	  if (TREE_VALUE (attr))
5465	    {
5466	      tree p = TREE_VALUE (TREE_VALUE (attr));
5467	      pos = TREE_INT_CST_LOW (p);
5468	    }
5469
5470	  sentinel = end = params;
5471
5472	  /* Advance `end' ahead of `sentinel' by `pos' positions.  */
5473	  while (pos > 0 && TREE_CHAIN (end))
5474	    {
5475	      pos--;
5476	      end = TREE_CHAIN (end);
5477	    }
5478	  if (pos > 0)
5479	    {
5480	      warning (OPT_Wformat,
5481		       "not enough variable arguments to fit a sentinel");
5482	      return;
5483	    }
5484
5485	  /* Now advance both until we find the last parameter.  */
5486	  while (TREE_CHAIN (end))
5487	    {
5488	      end = TREE_CHAIN (end);
5489	      sentinel = TREE_CHAIN (sentinel);
5490	    }
5491
5492	  /* Validate the sentinel.  */
5493	  if ((!POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (sentinel)))
5494	       || !integer_zerop (TREE_VALUE (sentinel)))
5495	      /* Although __null (in C++) is only an integer we allow it
5496		 nevertheless, as we are guaranteed that it's exactly
5497		 as wide as a pointer, and we don't want to force
5498		 users to cast the NULL they have written there.
5499		 We warn with -Wstrict-null-sentinel, though.  */
5500	      && (warn_strict_null_sentinel
5501		  || null_node != TREE_VALUE (sentinel)))
5502	    warning (OPT_Wformat, "missing sentinel in function call");
5503	}
5504    }
5505}
5506
5507/* Helper for check_function_nonnull; given a list of operands which
5508   must be non-null in ARGS, determine if operand PARAM_NUM should be
5509   checked.  */
5510
5511static bool
5512nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
5513{
5514  unsigned HOST_WIDE_INT arg_num = 0;
5515
5516  for (; args; args = TREE_CHAIN (args))
5517    {
5518      bool found = get_nonnull_operand (TREE_VALUE (args), &arg_num);
5519
5520      gcc_assert (found);
5521
5522      if (arg_num == param_num)
5523	return true;
5524    }
5525  return false;
5526}
5527
5528/* Check that the function argument PARAM (which is operand number
5529   PARAM_NUM) is non-null.  This is called by check_function_nonnull
5530   via check_function_arguments_recurse.  */
5531
5532static void
5533check_nonnull_arg (void * ARG_UNUSED (ctx), tree param,
5534		   unsigned HOST_WIDE_INT param_num)
5535{
5536  /* Just skip checking the argument if it's not a pointer.  This can
5537     happen if the "nonnull" attribute was given without an operand
5538     list (which means to check every pointer argument).  */
5539
5540  if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
5541    return;
5542
5543  if (integer_zerop (param))
5544    warning (OPT_Wnonnull, "null argument where non-null required "
5545	     "(argument %lu)", (unsigned long) param_num);
5546}
5547
5548/* Helper for nonnull attribute handling; fetch the operand number
5549   from the attribute argument list.  */
5550
5551static bool
5552get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
5553{
5554  /* Verify the arg number is a constant.  */
5555  if (TREE_CODE (arg_num_expr) != INTEGER_CST
5556      || TREE_INT_CST_HIGH (arg_num_expr) != 0)
5557    return false;
5558
5559  *valp = TREE_INT_CST_LOW (arg_num_expr);
5560  return true;
5561}
5562
5563/* Handle a "nothrow" attribute; arguments as in
5564   struct attribute_spec.handler.  */
5565
5566static tree
5567handle_nothrow_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5568			  int ARG_UNUSED (flags), bool *no_add_attrs)
5569{
5570  if (TREE_CODE (*node) == FUNCTION_DECL)
5571    TREE_NOTHROW (*node) = 1;
5572  /* ??? TODO: Support types.  */
5573  else
5574    {
5575      warning (OPT_Wattributes, "%qE attribute ignored", name);
5576      *no_add_attrs = true;
5577    }
5578
5579  return NULL_TREE;
5580}
5581
5582/* Handle a "cleanup" attribute; arguments as in
5583   struct attribute_spec.handler.  */
5584
5585static tree
5586handle_cleanup_attribute (tree *node, tree name, tree args,
5587			  int ARG_UNUSED (flags), bool *no_add_attrs)
5588{
5589  tree decl = *node;
5590  tree cleanup_id, cleanup_decl;
5591
5592  /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
5593     for global destructors in C++.  This requires infrastructure that
5594     we don't have generically at the moment.  It's also not a feature
5595     we'd be missing too much, since we do have attribute constructor.  */
5596  if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
5597    {
5598      warning (OPT_Wattributes, "%qE attribute ignored", name);
5599      *no_add_attrs = true;
5600      return NULL_TREE;
5601    }
5602
5603  /* Verify that the argument is a function in scope.  */
5604  /* ??? We could support pointers to functions here as well, if
5605     that was considered desirable.  */
5606  cleanup_id = TREE_VALUE (args);
5607  if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
5608    {
5609      error ("cleanup argument not an identifier");
5610      *no_add_attrs = true;
5611      return NULL_TREE;
5612    }
5613  cleanup_decl = lookup_name (cleanup_id);
5614  if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
5615    {
5616      error ("cleanup argument not a function");
5617      *no_add_attrs = true;
5618      return NULL_TREE;
5619    }
5620
5621  /* That the function has proper type is checked with the
5622     eventual call to build_function_call.  */
5623
5624  return NULL_TREE;
5625}
5626
5627/* Handle a "warn_unused_result" attribute.  No special handling.  */
5628
5629static tree
5630handle_warn_unused_result_attribute (tree *node, tree name,
5631			       tree ARG_UNUSED (args),
5632			       int ARG_UNUSED (flags), bool *no_add_attrs)
5633{
5634  /* Ignore the attribute for functions not returning any value.  */
5635  if (VOID_TYPE_P (TREE_TYPE (*node)))
5636    {
5637      warning (OPT_Wattributes, "%qE attribute ignored", name);
5638      *no_add_attrs = true;
5639    }
5640
5641  return NULL_TREE;
5642}
5643
5644/* Handle a "sentinel" attribute.  */
5645
5646static tree
5647handle_sentinel_attribute (tree *node, tree name, tree args,
5648			   int ARG_UNUSED (flags), bool *no_add_attrs)
5649{
5650  tree params = TYPE_ARG_TYPES (*node);
5651
5652  if (!params)
5653    {
5654      warning (OPT_Wattributes,
5655	       "%qE attribute requires prototypes with named arguments", name);
5656      *no_add_attrs = true;
5657    }
5658  else
5659    {
5660      while (TREE_CHAIN (params))
5661	params = TREE_CHAIN (params);
5662
5663      if (VOID_TYPE_P (TREE_VALUE (params)))
5664	{
5665	  warning (OPT_Wattributes,
5666		   "%qE attribute only applies to variadic functions", name);
5667	  *no_add_attrs = true;
5668	}
5669    }
5670
5671  if (args)
5672    {
5673      tree position = TREE_VALUE (args);
5674
5675      if (TREE_CODE (position) != INTEGER_CST)
5676	{
5677	  warning (0, "requested position is not an integer constant");
5678	  *no_add_attrs = true;
5679	}
5680      else
5681	{
5682	  if (tree_int_cst_lt (position, integer_zero_node))
5683	    {
5684	      warning (0, "requested position is less than zero");
5685	      *no_add_attrs = true;
5686	    }
5687	}
5688    }
5689
5690  return NULL_TREE;
5691}
5692
5693/* Check for valid arguments being passed to a function.  */
5694void
5695check_function_arguments (tree attrs, tree params, tree typelist)
5696{
5697  /* Check for null being passed in a pointer argument that must be
5698     non-null.  We also need to do this if format checking is enabled.  */
5699
5700  if (warn_nonnull)
5701    check_function_nonnull (attrs, params);
5702
5703  /* Check for errors in format strings.  */
5704
5705  if (warn_format || warn_missing_format_attribute)
5706      check_function_format (attrs, params);
5707
5708  if (warn_format)
5709    check_function_sentinel (attrs, params, typelist);
5710}
5711
5712/* Generic argument checking recursion routine.  PARAM is the argument to
5713   be checked.  PARAM_NUM is the number of the argument.  CALLBACK is invoked
5714   once the argument is resolved.  CTX is context for the callback.  */
5715void
5716check_function_arguments_recurse (void (*callback)
5717				  (void *, tree, unsigned HOST_WIDE_INT),
5718				  void *ctx, tree param,
5719				  unsigned HOST_WIDE_INT param_num)
5720{
5721  if ((TREE_CODE (param) == NOP_EXPR || TREE_CODE (param) == CONVERT_EXPR)
5722      && (TYPE_PRECISION (TREE_TYPE (param))
5723	  == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (param, 0)))))
5724    {
5725      /* Strip coercion.  */
5726      check_function_arguments_recurse (callback, ctx,
5727					TREE_OPERAND (param, 0), param_num);
5728      return;
5729    }
5730
5731  if (TREE_CODE (param) == CALL_EXPR)
5732    {
5733      tree type = TREE_TYPE (TREE_TYPE (TREE_OPERAND (param, 0)));
5734      tree attrs;
5735      bool found_format_arg = false;
5736
5737      /* See if this is a call to a known internationalization function
5738	 that modifies a format arg.  Such a function may have multiple
5739	 format_arg attributes (for example, ngettext).  */
5740
5741      for (attrs = TYPE_ATTRIBUTES (type);
5742	   attrs;
5743	   attrs = TREE_CHAIN (attrs))
5744	if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
5745	  {
5746	    tree inner_args;
5747	    tree format_num_expr;
5748	    int format_num;
5749	    int i;
5750
5751	    /* Extract the argument number, which was previously checked
5752	       to be valid.  */
5753	    format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
5754
5755	    gcc_assert (TREE_CODE (format_num_expr) == INTEGER_CST
5756			&& !TREE_INT_CST_HIGH (format_num_expr));
5757
5758	    format_num = TREE_INT_CST_LOW (format_num_expr);
5759
5760	    for (inner_args = TREE_OPERAND (param, 1), i = 1;
5761		 inner_args != 0;
5762		 inner_args = TREE_CHAIN (inner_args), i++)
5763	      if (i == format_num)
5764		{
5765		  check_function_arguments_recurse (callback, ctx,
5766						    TREE_VALUE (inner_args),
5767						    param_num);
5768		  found_format_arg = true;
5769		  break;
5770		}
5771	  }
5772
5773      /* If we found a format_arg attribute and did a recursive check,
5774	 we are done with checking this argument.  Otherwise, we continue
5775	 and this will be considered a non-literal.  */
5776      if (found_format_arg)
5777	return;
5778    }
5779
5780  if (TREE_CODE (param) == COND_EXPR)
5781    {
5782      /* Check both halves of the conditional expression.  */
5783      check_function_arguments_recurse (callback, ctx,
5784					TREE_OPERAND (param, 1), param_num);
5785      check_function_arguments_recurse (callback, ctx,
5786					TREE_OPERAND (param, 2), param_num);
5787      return;
5788    }
5789
5790  (*callback) (ctx, param, param_num);
5791}
5792
5793/* Function to help qsort sort FIELD_DECLs by name order.  */
5794
5795int
5796field_decl_cmp (const void *x_p, const void *y_p)
5797{
5798  const tree *const x = (const tree *const) x_p;
5799  const tree *const y = (const tree *const) y_p;
5800
5801  if (DECL_NAME (*x) == DECL_NAME (*y))
5802    /* A nontype is "greater" than a type.  */
5803    return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
5804  if (DECL_NAME (*x) == NULL_TREE)
5805    return -1;
5806  if (DECL_NAME (*y) == NULL_TREE)
5807    return 1;
5808  if (DECL_NAME (*x) < DECL_NAME (*y))
5809    return -1;
5810  return 1;
5811}
5812
5813static struct {
5814  gt_pointer_operator new_value;
5815  void *cookie;
5816} resort_data;
5817
5818/* This routine compares two fields like field_decl_cmp but using the
5819pointer operator in resort_data.  */
5820
5821static int
5822resort_field_decl_cmp (const void *x_p, const void *y_p)
5823{
5824  const tree *const x = (const tree *const) x_p;
5825  const tree *const y = (const tree *const) y_p;
5826
5827  if (DECL_NAME (*x) == DECL_NAME (*y))
5828    /* A nontype is "greater" than a type.  */
5829    return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
5830  if (DECL_NAME (*x) == NULL_TREE)
5831    return -1;
5832  if (DECL_NAME (*y) == NULL_TREE)
5833    return 1;
5834  {
5835    tree d1 = DECL_NAME (*x);
5836    tree d2 = DECL_NAME (*y);
5837    resort_data.new_value (&d1, resort_data.cookie);
5838    resort_data.new_value (&d2, resort_data.cookie);
5839    if (d1 < d2)
5840      return -1;
5841  }
5842  return 1;
5843}
5844
5845/* Resort DECL_SORTED_FIELDS because pointers have been reordered.  */
5846
5847void
5848resort_sorted_fields (void *obj,
5849		      void * ARG_UNUSED (orig_obj),
5850		      gt_pointer_operator new_value,
5851		      void *cookie)
5852{
5853  struct sorted_fields_type *sf = (struct sorted_fields_type *) obj;
5854  resort_data.new_value = new_value;
5855  resort_data.cookie = cookie;
5856  qsort (&sf->elts[0], sf->len, sizeof (tree),
5857	 resort_field_decl_cmp);
5858}
5859
5860/* Subroutine of c_parse_error.
5861   Return the result of concatenating LHS and RHS. RHS is really
5862   a string literal, its first character is indicated by RHS_START and
5863   RHS_SIZE is its length (including the terminating NUL character).
5864
5865   The caller is responsible for deleting the returned pointer.  */
5866
5867static char *
5868catenate_strings (const char *lhs, const char *rhs_start, int rhs_size)
5869{
5870  const int lhs_size = strlen (lhs);
5871  char *result = XNEWVEC (char, lhs_size + rhs_size);
5872  strncpy (result, lhs, lhs_size);
5873  strncpy (result + lhs_size, rhs_start, rhs_size);
5874  return result;
5875}
5876
5877/* Issue the error given by GMSGID, indicating that it occurred before
5878   TOKEN, which had the associated VALUE.  */
5879
5880void
5881c_parse_error (const char *gmsgid, enum cpp_ttype token, tree value)
5882{
5883#define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
5884
5885  char *message = NULL;
5886
5887  if (token == CPP_EOF)
5888    message = catenate_messages (gmsgid, " at end of input");
5889  else if (token == CPP_CHAR || token == CPP_WCHAR)
5890    {
5891      unsigned int val = TREE_INT_CST_LOW (value);
5892      const char *const ell = (token == CPP_CHAR) ? "" : "L";
5893      if (val <= UCHAR_MAX && ISGRAPH (val))
5894	message = catenate_messages (gmsgid, " before %s'%c'");
5895      else
5896	message = catenate_messages (gmsgid, " before %s'\\x%x'");
5897
5898      error (message, ell, val);
5899      free (message);
5900      message = NULL;
5901    }
5902  else if (token == CPP_STRING || token == CPP_WSTRING)
5903    message = catenate_messages (gmsgid, " before string constant");
5904  else if (token == CPP_NUMBER)
5905    message = catenate_messages (gmsgid, " before numeric constant");
5906  else if (token == CPP_NAME)
5907    {
5908      message = catenate_messages (gmsgid, " before %qE");
5909      error (message, value);
5910      free (message);
5911      message = NULL;
5912    }
5913  else if (token == CPP_PRAGMA)
5914    message = catenate_messages (gmsgid, " before %<#pragma%>");
5915  else if (token == CPP_PRAGMA_EOL)
5916    message = catenate_messages (gmsgid, " before end of line");
5917  else if (token < N_TTYPES)
5918    {
5919      message = catenate_messages (gmsgid, " before %qs token");
5920      error (message, cpp_type2name (token));
5921      free (message);
5922      message = NULL;
5923    }
5924  else
5925    error (gmsgid);
5926
5927  if (message)
5928    {
5929      error (message);
5930      free (message);
5931    }
5932#undef catenate_messages
5933}
5934
5935/* Walk a gimplified function and warn for functions whose return value is
5936   ignored and attribute((warn_unused_result)) is set.  This is done before
5937   inlining, so we don't have to worry about that.  */
5938
5939void
5940c_warn_unused_result (tree *top_p)
5941{
5942  tree t = *top_p;
5943  tree_stmt_iterator i;
5944  tree fdecl, ftype;
5945
5946  switch (TREE_CODE (t))
5947    {
5948    case STATEMENT_LIST:
5949      for (i = tsi_start (*top_p); !tsi_end_p (i); tsi_next (&i))
5950	c_warn_unused_result (tsi_stmt_ptr (i));
5951      break;
5952
5953    case COND_EXPR:
5954      c_warn_unused_result (&COND_EXPR_THEN (t));
5955      c_warn_unused_result (&COND_EXPR_ELSE (t));
5956      break;
5957    case BIND_EXPR:
5958      c_warn_unused_result (&BIND_EXPR_BODY (t));
5959      break;
5960    case TRY_FINALLY_EXPR:
5961    case TRY_CATCH_EXPR:
5962      c_warn_unused_result (&TREE_OPERAND (t, 0));
5963      c_warn_unused_result (&TREE_OPERAND (t, 1));
5964      break;
5965    case CATCH_EXPR:
5966      c_warn_unused_result (&CATCH_BODY (t));
5967      break;
5968    case EH_FILTER_EXPR:
5969      c_warn_unused_result (&EH_FILTER_FAILURE (t));
5970      break;
5971
5972    case CALL_EXPR:
5973      if (TREE_USED (t))
5974	break;
5975
5976      /* This is a naked call, as opposed to a CALL_EXPR nested inside
5977	 a MODIFY_EXPR.  All calls whose value is ignored should be
5978	 represented like this.  Look for the attribute.  */
5979      fdecl = get_callee_fndecl (t);
5980      if (fdecl)
5981	ftype = TREE_TYPE (fdecl);
5982      else
5983	{
5984	  ftype = TREE_TYPE (TREE_OPERAND (t, 0));
5985	  /* Look past pointer-to-function to the function type itself.  */
5986	  ftype = TREE_TYPE (ftype);
5987	}
5988
5989      if (lookup_attribute ("warn_unused_result", TYPE_ATTRIBUTES (ftype)))
5990	{
5991	  if (fdecl)
5992	    warning (0, "%Hignoring return value of %qD, "
5993		     "declared with attribute warn_unused_result",
5994		     EXPR_LOCUS (t), fdecl);
5995	  else
5996	    warning (0, "%Hignoring return value of function "
5997		     "declared with attribute warn_unused_result",
5998		     EXPR_LOCUS (t));
5999	}
6000      break;
6001
6002    default:
6003      /* Not a container, not a call, or a call whose value is used.  */
6004      break;
6005    }
6006}
6007
6008/* Convert a character from the host to the target execution character
6009   set.  cpplib handles this, mostly.  */
6010
6011HOST_WIDE_INT
6012c_common_to_target_charset (HOST_WIDE_INT c)
6013{
6014  /* Character constants in GCC proper are sign-extended under -fsigned-char,
6015     zero-extended under -fno-signed-char.  cpplib insists that characters
6016     and character constants are always unsigned.  Hence we must convert
6017     back and forth.  */
6018  cppchar_t uc = ((cppchar_t)c) & ((((cppchar_t)1) << CHAR_BIT)-1);
6019
6020  uc = cpp_host_to_exec_charset (parse_in, uc);
6021
6022  if (flag_signed_char)
6023    return ((HOST_WIDE_INT)uc) << (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE)
6024			       >> (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE);
6025  else
6026    return uc;
6027}
6028
6029/* Build the result of __builtin_offsetof.  EXPR is a nested sequence of
6030   component references, with STOP_REF, or alternatively an INDIRECT_REF of
6031   NULL, at the bottom; much like the traditional rendering of offsetof as a
6032   macro.  Returns the folded and properly cast result.  */
6033
6034static tree
6035fold_offsetof_1 (tree expr, tree stop_ref)
6036{
6037  enum tree_code code = PLUS_EXPR;
6038  tree base, off, t;
6039
6040  if (expr == stop_ref && TREE_CODE (expr) != ERROR_MARK)
6041    return size_zero_node;
6042
6043  switch (TREE_CODE (expr))
6044    {
6045    case ERROR_MARK:
6046      return expr;
6047
6048    case VAR_DECL:
6049      error ("cannot apply %<offsetof%> to static data member %qD", expr);
6050      return error_mark_node;
6051
6052    case CALL_EXPR:
6053      error ("cannot apply %<offsetof%> when %<operator[]%> is overloaded");
6054      return error_mark_node;
6055
6056    case INTEGER_CST:
6057      gcc_assert (integer_zerop (expr));
6058      return size_zero_node;
6059
6060    case NOP_EXPR:
6061    case INDIRECT_REF:
6062      base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6063      gcc_assert (base == error_mark_node || base == size_zero_node);
6064      return base;
6065
6066    case COMPONENT_REF:
6067      base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6068      if (base == error_mark_node)
6069	return base;
6070
6071      t = TREE_OPERAND (expr, 1);
6072      if (DECL_C_BIT_FIELD (t))
6073	{
6074	  error ("attempt to take address of bit-field structure "
6075		 "member %qD", t);
6076	  return error_mark_node;
6077	}
6078      off = size_binop (PLUS_EXPR, DECL_FIELD_OFFSET (t),
6079			size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t), 1)
6080				  / BITS_PER_UNIT));
6081      break;
6082
6083    case ARRAY_REF:
6084      base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6085      if (base == error_mark_node)
6086	return base;
6087
6088      t = TREE_OPERAND (expr, 1);
6089      if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
6090	{
6091	  code = MINUS_EXPR;
6092	  t = fold_build1 (NEGATE_EXPR, TREE_TYPE (t), t);
6093	}
6094      t = convert (sizetype, t);
6095      off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
6096      break;
6097
6098    case COMPOUND_EXPR:
6099      /* Handle static members of volatile structs.  */
6100      t = TREE_OPERAND (expr, 1);
6101      gcc_assert (TREE_CODE (t) == VAR_DECL);
6102      return fold_offsetof_1 (t, stop_ref);
6103
6104    default:
6105      gcc_unreachable ();
6106    }
6107
6108  return size_binop (code, base, off);
6109}
6110
6111tree
6112fold_offsetof (tree expr, tree stop_ref)
6113{
6114  /* Convert back from the internal sizetype to size_t.  */
6115  return convert (size_type_node, fold_offsetof_1 (expr, stop_ref));
6116}
6117
6118/* Print an error message for an invalid lvalue.  USE says
6119   how the lvalue is being used and so selects the error message.  */
6120
6121void
6122lvalue_error (enum lvalue_use use)
6123{
6124  switch (use)
6125    {
6126    case lv_assign:
6127      error ("lvalue required as left operand of assignment");
6128      break;
6129    case lv_increment:
6130      error ("lvalue required as increment operand");
6131      break;
6132    case lv_decrement:
6133      error ("lvalue required as decrement operand");
6134      break;
6135    case lv_addressof:
6136      error ("lvalue required as unary %<&%> operand");
6137      break;
6138    case lv_asm:
6139      error ("lvalue required in asm statement");
6140      break;
6141    default:
6142      gcc_unreachable ();
6143    }
6144}
6145
6146/* *PTYPE is an incomplete array.  Complete it with a domain based on
6147   INITIAL_VALUE.  If INITIAL_VALUE is not present, use 1 if DO_DEFAULT
6148   is true.  Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6149   2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty.  */
6150
6151int
6152complete_array_type (tree *ptype, tree initial_value, bool do_default)
6153{
6154  tree maxindex, type, main_type, elt, unqual_elt;
6155  int failure = 0, quals;
6156
6157  maxindex = size_zero_node;
6158  if (initial_value)
6159    {
6160      if (TREE_CODE (initial_value) == STRING_CST)
6161	{
6162	  int eltsize
6163	    = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
6164	  maxindex = size_int (TREE_STRING_LENGTH (initial_value)/eltsize - 1);
6165	}
6166      else if (TREE_CODE (initial_value) == CONSTRUCTOR)
6167	{
6168	  VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6169
6170	  if (VEC_empty (constructor_elt, v))
6171	    {
6172	      if (pedantic)
6173		failure = 3;
6174	      maxindex = integer_minus_one_node;
6175	    }
6176	  else
6177	    {
6178	      tree curindex;
6179	      unsigned HOST_WIDE_INT cnt;
6180	      constructor_elt *ce;
6181
6182	      if (VEC_index (constructor_elt, v, 0)->index)
6183		maxindex = fold_convert (sizetype,
6184					 VEC_index (constructor_elt,
6185						    v, 0)->index);
6186	      curindex = maxindex;
6187
6188	      for (cnt = 1;
6189		   VEC_iterate (constructor_elt, v, cnt, ce);
6190		   cnt++)
6191		{
6192		  if (ce->index)
6193		    curindex = fold_convert (sizetype, ce->index);
6194		  else
6195		    curindex = size_binop (PLUS_EXPR, curindex, size_one_node);
6196
6197		  if (tree_int_cst_lt (maxindex, curindex))
6198		    maxindex = curindex;
6199		}
6200	    }
6201	}
6202      else
6203	{
6204	  /* Make an error message unless that happened already.  */
6205	  if (initial_value != error_mark_node)
6206	    failure = 1;
6207	}
6208    }
6209  else
6210    {
6211      failure = 2;
6212      if (!do_default)
6213	return failure;
6214    }
6215
6216  type = *ptype;
6217  elt = TREE_TYPE (type);
6218  quals = TYPE_QUALS (strip_array_types (elt));
6219  if (quals == 0)
6220    unqual_elt = elt;
6221  else
6222    unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
6223
6224  /* Using build_distinct_type_copy and modifying things afterward instead
6225     of using build_array_type to create a new type preserves all of the
6226     TYPE_LANG_FLAG_? bits that the front end may have set.  */
6227  main_type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
6228  TREE_TYPE (main_type) = unqual_elt;
6229  TYPE_DOMAIN (main_type) = build_index_type (maxindex);
6230  layout_type (main_type);
6231
6232  if (quals == 0)
6233    type = main_type;
6234  else
6235    type = c_build_qualified_type (main_type, quals);
6236
6237  *ptype = type;
6238  return failure;
6239}
6240
6241
6242/* Used to help initialize the builtin-types.def table.  When a type of
6243   the correct size doesn't exist, use error_mark_node instead of NULL.
6244   The later results in segfaults even when a decl using the type doesn't
6245   get invoked.  */
6246
6247tree
6248builtin_type_for_size (int size, bool unsignedp)
6249{
6250  tree type = lang_hooks.types.type_for_size (size, unsignedp);
6251  return type ? type : error_mark_node;
6252}
6253
6254/* A helper function for resolve_overloaded_builtin in resolving the
6255   overloaded __sync_ builtins.  Returns a positive power of 2 if the
6256   first operand of PARAMS is a pointer to a supported data type.
6257   Returns 0 if an error is encountered.  */
6258
6259static int
6260sync_resolve_size (tree function, tree params)
6261{
6262  tree type;
6263  int size;
6264
6265  if (params == NULL)
6266    {
6267      error ("too few arguments to function %qE", function);
6268      return 0;
6269    }
6270
6271  type = TREE_TYPE (TREE_VALUE (params));
6272  if (TREE_CODE (type) != POINTER_TYPE)
6273    goto incompatible;
6274
6275  type = TREE_TYPE (type);
6276  if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
6277    goto incompatible;
6278
6279  size = tree_low_cst (TYPE_SIZE_UNIT (type), 1);
6280  if (size == 1 || size == 2 || size == 4 || size == 8 || size == 16)
6281    return size;
6282
6283 incompatible:
6284  error ("incompatible type for argument %d of %qE", 1, function);
6285  return 0;
6286}
6287
6288/* A helper function for resolve_overloaded_builtin.  Adds casts to
6289   PARAMS to make arguments match up with those of FUNCTION.  Drops
6290   the variadic arguments at the end.  Returns false if some error
6291   was encountered; true on success.  */
6292
6293static bool
6294sync_resolve_params (tree orig_function, tree function, tree params)
6295{
6296  tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (function));
6297  tree ptype;
6298  int number;
6299
6300  /* We've declared the implementation functions to use "volatile void *"
6301     as the pointer parameter, so we shouldn't get any complaints from the
6302     call to check_function_arguments what ever type the user used.  */
6303  arg_types = TREE_CHAIN (arg_types);
6304  ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
6305  number = 2;
6306
6307  /* For the rest of the values, we need to cast these to FTYPE, so that we
6308     don't get warnings for passing pointer types, etc.  */
6309  while (arg_types != void_list_node)
6310    {
6311      tree val;
6312
6313      params = TREE_CHAIN (params);
6314      if (params == NULL)
6315	{
6316	  error ("too few arguments to function %qE", orig_function);
6317	  return false;
6318	}
6319
6320      /* ??? Ideally for the first conversion we'd use convert_for_assignment
6321	 so that we get warnings for anything that doesn't match the pointer
6322	 type.  This isn't portable across the C and C++ front ends atm.  */
6323      val = TREE_VALUE (params);
6324      val = convert (ptype, val);
6325      val = convert (TREE_VALUE (arg_types), val);
6326      TREE_VALUE (params) = val;
6327
6328      arg_types = TREE_CHAIN (arg_types);
6329      number++;
6330    }
6331
6332  /* The definition of these primitives is variadic, with the remaining
6333     being "an optional list of variables protected by the memory barrier".
6334     No clue what that's supposed to mean, precisely, but we consider all
6335     call-clobbered variables to be protected so we're safe.  */
6336  TREE_CHAIN (params) = NULL;
6337
6338  return true;
6339}
6340
6341/* A helper function for resolve_overloaded_builtin.  Adds a cast to
6342   RESULT to make it match the type of the first pointer argument in
6343   PARAMS.  */
6344
6345static tree
6346sync_resolve_return (tree params, tree result)
6347{
6348  tree ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
6349  ptype = TYPE_MAIN_VARIANT (ptype);
6350  return convert (ptype, result);
6351}
6352
6353/* Some builtin functions are placeholders for other expressions.  This
6354   function should be called immediately after parsing the call expression
6355   before surrounding code has committed to the type of the expression.
6356
6357   FUNCTION is the DECL that has been invoked; it is known to be a builtin.
6358   PARAMS is the argument list for the call.  The return value is non-null
6359   when expansion is complete, and null if normal processing should
6360   continue.  */
6361
6362tree
6363resolve_overloaded_builtin (tree function, tree params)
6364{
6365  enum built_in_function orig_code = DECL_FUNCTION_CODE (function);
6366  switch (DECL_BUILT_IN_CLASS (function))
6367    {
6368    case BUILT_IN_NORMAL:
6369      break;
6370    case BUILT_IN_MD:
6371      if (targetm.resolve_overloaded_builtin)
6372	return targetm.resolve_overloaded_builtin (function, params);
6373      else
6374	return NULL_TREE;
6375    default:
6376      return NULL_TREE;
6377    }
6378
6379  /* Handle BUILT_IN_NORMAL here.  */
6380  switch (orig_code)
6381    {
6382    case BUILT_IN_FETCH_AND_ADD_N:
6383    case BUILT_IN_FETCH_AND_SUB_N:
6384    case BUILT_IN_FETCH_AND_OR_N:
6385    case BUILT_IN_FETCH_AND_AND_N:
6386    case BUILT_IN_FETCH_AND_XOR_N:
6387    case BUILT_IN_FETCH_AND_NAND_N:
6388    case BUILT_IN_ADD_AND_FETCH_N:
6389    case BUILT_IN_SUB_AND_FETCH_N:
6390    case BUILT_IN_OR_AND_FETCH_N:
6391    case BUILT_IN_AND_AND_FETCH_N:
6392    case BUILT_IN_XOR_AND_FETCH_N:
6393    case BUILT_IN_NAND_AND_FETCH_N:
6394    case BUILT_IN_BOOL_COMPARE_AND_SWAP_N:
6395    case BUILT_IN_VAL_COMPARE_AND_SWAP_N:
6396    case BUILT_IN_LOCK_TEST_AND_SET_N:
6397    case BUILT_IN_LOCK_RELEASE_N:
6398      {
6399	int n = sync_resolve_size (function, params);
6400	tree new_function, result;
6401
6402	if (n == 0)
6403	  return error_mark_node;
6404
6405	new_function = built_in_decls[orig_code + exact_log2 (n) + 1];
6406	if (!sync_resolve_params (function, new_function, params))
6407	  return error_mark_node;
6408
6409	result = build_function_call (new_function, params);
6410	if (orig_code != BUILT_IN_BOOL_COMPARE_AND_SWAP_N
6411	    && orig_code != BUILT_IN_LOCK_RELEASE_N)
6412	  result = sync_resolve_return (params, result);
6413
6414	return result;
6415      }
6416
6417    default:
6418      return NULL_TREE;
6419    }
6420}
6421
6422/* Ignoring their sign, return true if two scalar types are the same.  */
6423bool
6424same_scalar_type_ignoring_signedness (tree t1, tree t2)
6425{
6426  enum tree_code c1 = TREE_CODE (t1), c2 = TREE_CODE (t2);
6427
6428  gcc_assert ((c1 == INTEGER_TYPE || c1 == REAL_TYPE)
6429	      && (c2 == INTEGER_TYPE || c2 == REAL_TYPE));
6430
6431  /* Equality works here because c_common_signed_type uses
6432     TYPE_MAIN_VARIANT.  */
6433  return lang_hooks.types.signed_type (t1)
6434    == lang_hooks.types.signed_type (t2);
6435}
6436
6437/* Check for missing format attributes on function pointers.  LTYPE is
6438   the new type or left-hand side type.  RTYPE is the old type or
6439   right-hand side type.  Returns TRUE if LTYPE is missing the desired
6440   attribute.  */
6441
6442bool
6443check_missing_format_attribute (tree ltype, tree rtype)
6444{
6445  tree const ttr = TREE_TYPE (rtype), ttl = TREE_TYPE (ltype);
6446  tree ra;
6447
6448  for (ra = TYPE_ATTRIBUTES (ttr); ra; ra = TREE_CHAIN (ra))
6449    if (is_attribute_p ("format", TREE_PURPOSE (ra)))
6450      break;
6451  if (ra)
6452    {
6453      tree la;
6454      for (la = TYPE_ATTRIBUTES (ttl); la; la = TREE_CHAIN (la))
6455	if (is_attribute_p ("format", TREE_PURPOSE (la)))
6456	  break;
6457      return !la;
6458    }
6459  else
6460    return false;
6461}
6462
6463/* Subscripting with type char is likely to lose on a machine where
6464   chars are signed.  So warn on any machine, but optionally.  Don't
6465   warn for unsigned char since that type is safe.  Don't warn for
6466   signed char because anyone who uses that must have done so
6467   deliberately. Furthermore, we reduce the false positive load by
6468   warning only for non-constant value of type char.  */
6469
6470void
6471warn_array_subscript_with_type_char (tree index)
6472{
6473  if (TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node
6474      && TREE_CODE (index) != INTEGER_CST)
6475    warning (OPT_Wchar_subscripts, "array subscript has type %<char%>");
6476}
6477
6478/* Implement -Wparentheses for the unexpected C precedence rules, to
6479   cover cases like x + y << z which readers are likely to
6480   misinterpret.  We have seen an expression in which CODE is a binary
6481   operator used to combine expressions headed by CODE_LEFT and
6482   CODE_RIGHT.  CODE_LEFT and CODE_RIGHT may be ERROR_MARK, which
6483   means that that side of the expression was not formed using a
6484   binary operator, or it was enclosed in parentheses.  */
6485
6486void
6487warn_about_parentheses (enum tree_code code, enum tree_code code_left,
6488			enum tree_code code_right)
6489{
6490  if (!warn_parentheses)
6491    return;
6492
6493  if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
6494    {
6495      if (code_left == PLUS_EXPR || code_left == MINUS_EXPR
6496	  || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6497	warning (OPT_Wparentheses,
6498		 "suggest parentheses around + or - inside shift");
6499    }
6500
6501  if (code == TRUTH_ORIF_EXPR)
6502    {
6503      if (code_left == TRUTH_ANDIF_EXPR
6504	  || code_right == TRUTH_ANDIF_EXPR)
6505	warning (OPT_Wparentheses,
6506		 "suggest parentheses around && within ||");
6507    }
6508
6509  if (code == BIT_IOR_EXPR)
6510    {
6511      if (code_left == BIT_AND_EXPR || code_left == BIT_XOR_EXPR
6512	  || code_left == PLUS_EXPR || code_left == MINUS_EXPR
6513	  || code_right == BIT_AND_EXPR || code_right == BIT_XOR_EXPR
6514	  || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6515	warning (OPT_Wparentheses,
6516		 "suggest parentheses around arithmetic in operand of |");
6517      /* Check cases like x|y==z */
6518      if (TREE_CODE_CLASS (code_left) == tcc_comparison
6519	  || TREE_CODE_CLASS (code_right) == tcc_comparison)
6520	warning (OPT_Wparentheses,
6521		 "suggest parentheses around comparison in operand of |");
6522    }
6523
6524  if (code == BIT_XOR_EXPR)
6525    {
6526      if (code_left == BIT_AND_EXPR
6527	  || code_left == PLUS_EXPR || code_left == MINUS_EXPR
6528	  || code_right == BIT_AND_EXPR
6529	  || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6530	warning (OPT_Wparentheses,
6531		 "suggest parentheses around arithmetic in operand of ^");
6532      /* Check cases like x^y==z */
6533      if (TREE_CODE_CLASS (code_left) == tcc_comparison
6534	  || TREE_CODE_CLASS (code_right) == tcc_comparison)
6535	warning (OPT_Wparentheses,
6536		 "suggest parentheses around comparison in operand of ^");
6537    }
6538
6539  if (code == BIT_AND_EXPR)
6540    {
6541      if (code_left == PLUS_EXPR || code_left == MINUS_EXPR
6542	  || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6543	warning (OPT_Wparentheses,
6544		 "suggest parentheses around + or - in operand of &");
6545      /* Check cases like x&y==z */
6546      if (TREE_CODE_CLASS (code_left) == tcc_comparison
6547	  || TREE_CODE_CLASS (code_right) == tcc_comparison)
6548	warning (OPT_Wparentheses,
6549		 "suggest parentheses around comparison in operand of &");
6550    }
6551
6552  /* Similarly, check for cases like 1<=i<=10 that are probably errors.  */
6553  if (TREE_CODE_CLASS (code) == tcc_comparison
6554      && (TREE_CODE_CLASS (code_left) == tcc_comparison
6555	  || TREE_CODE_CLASS (code_right) == tcc_comparison))
6556    warning (OPT_Wparentheses, "comparisons like X<=Y<=Z do not "
6557	     "have their mathematical meaning");
6558}
6559
6560
6561#include "gt-c-common.h"
6562