OSDN Git Service

f3d4a281bdad14cbd4e8d8325f98d20ccbc88010
[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))