OSDN Git Service

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