OSDN Git Service

* gcc/doc/extended.texi: Replace the dash character with
[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, 2006, 2007, 2008, 2009
4    Free Software Foundation, Inc.
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
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 "tm_p.h"
37 #include "obstack.h"
38 #include "cpplib.h"
39 #include "target.h"
40 #include "langhooks.h"
41 #include "tree-inline.h"
42 #include "c-tree.h"
43 #include "toplev.h"
44 #include "diagnostic.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 #include "target-def.h"
52 #include "gimple.h"
53 #include "fixed-value.h"
54 #include "libfuncs.h"
55
56 cpp_reader *parse_in;           /* Declared in c-pragma.h.  */
57
58 /* The following symbols are subsumed in the c_global_trees array, and
59    listed here individually for documentation purposes.
60
61    INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
62
63         tree short_integer_type_node;
64         tree long_integer_type_node;
65         tree long_long_integer_type_node;
66
67         tree short_unsigned_type_node;
68         tree long_unsigned_type_node;
69         tree long_long_unsigned_type_node;
70
71         tree truthvalue_type_node;
72         tree truthvalue_false_node;
73         tree truthvalue_true_node;
74
75         tree ptrdiff_type_node;
76
77         tree unsigned_char_type_node;
78         tree signed_char_type_node;
79         tree wchar_type_node;
80
81         tree char16_type_node;
82         tree char32_type_node;
83
84         tree float_type_node;
85         tree double_type_node;
86         tree long_double_type_node;
87
88         tree complex_integer_type_node;
89         tree complex_float_type_node;
90         tree complex_double_type_node;
91         tree complex_long_double_type_node;
92
93         tree dfloat32_type_node;
94         tree dfloat64_type_node;
95         tree_dfloat128_type_node;
96
97         tree intQI_type_node;
98         tree intHI_type_node;
99         tree intSI_type_node;
100         tree intDI_type_node;
101         tree intTI_type_node;
102
103         tree unsigned_intQI_type_node;
104         tree unsigned_intHI_type_node;
105         tree unsigned_intSI_type_node;
106         tree unsigned_intDI_type_node;
107         tree unsigned_intTI_type_node;
108
109         tree widest_integer_literal_type_node;
110         tree widest_unsigned_literal_type_node;
111
112    Nodes for types `void *' and `const void *'.
113
114         tree ptr_type_node, const_ptr_type_node;
115
116    Nodes for types `char *' and `const char *'.
117
118         tree string_type_node, const_string_type_node;
119
120    Type `char[SOMENUMBER]'.
121    Used when an array of char is needed and the size is irrelevant.
122
123         tree char_array_type_node;
124
125    Type `int[SOMENUMBER]' or something like it.
126    Used when an array of int needed and the size is irrelevant.
127
128         tree int_array_type_node;
129
130    Type `wchar_t[SOMENUMBER]' or something like it.
131    Used when a wide string literal is created.
132
133         tree wchar_array_type_node;
134
135    Type `char16_t[SOMENUMBER]' or something like it.
136    Used when a UTF-16 string literal is created.
137
138         tree char16_array_type_node;
139
140    Type `char32_t[SOMENUMBER]' or something like it.
141    Used when a UTF-32 string literal is created.
142
143         tree char32_array_type_node;
144
145    Type `int ()' -- used for implicit declaration of functions.
146
147         tree default_function_type;
148
149    A VOID_TYPE node, packaged in a TREE_LIST.
150
151         tree void_list_node;
152
153   The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
154   and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
155   VAR_DECLS, but C++ does.)
156
157         tree function_name_decl_node;
158         tree pretty_function_name_decl_node;
159         tree c99_function_name_decl_node;
160
161   Stack of nested function name VAR_DECLs.
162
163         tree saved_function_name_decls;
164
165 */
166
167 tree c_global_trees[CTI_MAX];
168 \f
169 /* Switches common to the C front ends.  */
170
171 /* Nonzero if preprocessing only.  */
172
173 int flag_preprocess_only;
174
175 /* Nonzero means don't output line number information.  */
176
177 char flag_no_line_commands;
178
179 /* Nonzero causes -E output not to be done, but directives such as
180    #define that have side effects are still obeyed.  */
181
182 char flag_no_output;
183
184 /* Nonzero means dump macros in some fashion.  */
185
186 char flag_dump_macros;
187
188 /* Nonzero means pass #include lines through to the output.  */
189
190 char flag_dump_includes;
191
192 /* Nonzero means process PCH files while preprocessing.  */
193
194 bool flag_pch_preprocess;
195
196 /* The file name to which we should write a precompiled header, or
197    NULL if no header will be written in this compile.  */
198
199 const char *pch_file;
200
201 /* Nonzero if an ISO standard was selected.  It rejects macros in the
202    user's namespace.  */
203 int flag_iso;
204
205 /* Nonzero if -undef was given.  It suppresses target built-in macros
206    and assertions.  */
207 int flag_undef;
208
209 /* Nonzero means don't recognize the non-ANSI builtin functions.  */
210
211 int flag_no_builtin;
212
213 /* Nonzero means don't recognize the non-ANSI builtin functions.
214    -ansi sets this.  */
215
216 int flag_no_nonansi_builtin;
217
218 /* Nonzero means give `double' the same size as `float'.  */
219
220 int flag_short_double;
221
222 /* Nonzero means give `wchar_t' the same size as `short'.  */
223
224 int flag_short_wchar;
225
226 /* Nonzero means allow implicit conversions between vectors with
227    differing numbers of subparts and/or differing element types.  */
228 int flag_lax_vector_conversions;
229
230 /* Nonzero means allow Microsoft extensions without warnings or errors.  */
231 int flag_ms_extensions;
232
233 /* Nonzero means don't recognize the keyword `asm'.  */
234
235 int flag_no_asm;
236
237 /* Nonzero means to treat bitfields as signed unless they say `unsigned'.  */
238
239 int flag_signed_bitfields = 1;
240
241 /* Warn about #pragma directives that are not recognized.  */
242
243 int warn_unknown_pragmas; /* Tri state variable.  */
244
245 /* Warn about format/argument anomalies in calls to formatted I/O functions
246    (*printf, *scanf, strftime, strfmon, etc.).  */
247
248 int warn_format;
249
250 /* Warn about using __null (as NULL in C++) as sentinel.  For code compiled
251    with GCC this doesn't matter as __null is guaranteed to have the right
252    size.  */
253
254 int warn_strict_null_sentinel;
255
256 /* Zero means that faster, ...NonNil variants of objc_msgSend...
257    calls will be used in ObjC; passing nil receivers to such calls
258    will most likely result in crashes.  */
259 int flag_nil_receivers = 1;
260
261 /* Nonzero means that code generation will be altered to support
262    "zero-link" execution.  This currently affects ObjC only, but may
263    affect other languages in the future.  */
264 int flag_zero_link = 0;
265
266 /* Nonzero means emit an '__OBJC, __image_info' for the current translation
267    unit.  It will inform the ObjC runtime that class definition(s) herein
268    contained are to replace one(s) previously loaded.  */
269 int flag_replace_objc_classes = 0;
270
271 /* C/ObjC language option variables.  */
272
273
274 /* Nonzero means allow type mismatches in conditional expressions;
275    just make their values `void'.  */
276
277 int flag_cond_mismatch;
278
279 /* Nonzero means enable C89 Amendment 1 features.  */
280
281 int flag_isoc94;
282
283 /* Nonzero means use the ISO C99 dialect of C.  */
284
285 int flag_isoc99;
286
287 /* Nonzero means that we have builtin functions, and main is an int.  */
288
289 int flag_hosted = 1;
290
291
292 /* ObjC language option variables.  */
293
294
295 /* Open and close the file for outputting class declarations, if
296    requested (ObjC).  */
297
298 int flag_gen_declaration;
299
300 /* Tells the compiler that this is a special run.  Do not perform any
301    compiling, instead we are to test some platform dependent features
302    and output a C header file with appropriate definitions.  */
303
304 int print_struct_values;
305
306 /* Tells the compiler what is the constant string class for ObjC.  */
307
308 const char *constant_string_class_name;
309
310
311 /* C++ language option variables.  */
312
313
314 /* Nonzero means don't recognize any extension keywords.  */
315
316 int flag_no_gnu_keywords;
317
318 /* Nonzero means do emit exported implementations of functions even if
319    they can be inlined.  */
320
321 int flag_implement_inlines = 1;
322
323 /* Nonzero means that implicit instantiations will be emitted if needed.  */
324
325 int flag_implicit_templates = 1;
326
327 /* Nonzero means that implicit instantiations of inline templates will be
328    emitted if needed, even if instantiations of non-inline templates
329    aren't.  */
330
331 int flag_implicit_inline_templates = 1;
332
333 /* Nonzero means generate separate instantiation control files and
334    juggle them at link time.  */
335
336 int flag_use_repository;
337
338 /* Nonzero if we want to issue diagnostics that the standard says are not
339    required.  */
340
341 int flag_optional_diags = 1;
342
343 /* Nonzero means we should attempt to elide constructors when possible.  */
344
345 int flag_elide_constructors = 1;
346
347 /* Nonzero means that member functions defined in class scope are
348    inline by default.  */
349
350 int flag_default_inline = 1;
351
352 /* Controls whether compiler generates 'type descriptor' that give
353    run-time type information.  */
354
355 int flag_rtti = 1;
356
357 /* Nonzero if we want to conserve space in the .o files.  We do this
358    by putting uninitialized data and runtime initialized data into
359    .common instead of .data at the expense of not flagging multiple
360    definitions.  */
361
362 int flag_conserve_space;
363
364 /* Nonzero if we want to obey access control semantics.  */
365
366 int flag_access_control = 1;
367
368 /* Nonzero if we want to check the return value of new and avoid calling
369    constructors if it is a null pointer.  */
370
371 int flag_check_new;
372
373 /* The C++ dialect being used. C++98 is the default.  */
374
375 enum cxx_dialect cxx_dialect = cxx98;
376
377 /* Nonzero if we want the new ISO rules for pushing a new scope for `for'
378    initialization variables.
379    0: Old rules, set by -fno-for-scope.
380    2: New ISO rules, set by -ffor-scope.
381    1: Try to implement new ISO rules, but with backup compatibility
382    (and warnings).  This is the default, for now.  */
383
384 int flag_new_for_scope = 1;
385
386 /* Nonzero if we want to emit defined symbols with common-like linkage as
387    weak symbols where possible, in order to conform to C++ semantics.
388    Otherwise, emit them as local symbols.  */
389
390 int flag_weak = 1;
391
392 /* 0 means we want the preprocessor to not emit line directives for
393    the current working directory.  1 means we want it to do it.  -1
394    means we should decide depending on whether debugging information
395    is being emitted or not.  */
396
397 int flag_working_directory = -1;
398
399 /* Nonzero to use __cxa_atexit, rather than atexit, to register
400    destructors for local statics and global objects.  '2' means it has been
401    set nonzero as a default, not by a command-line flag.  */
402
403 int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
404
405 /* Nonzero to use __cxa_get_exception_ptr in C++ exception-handling
406    code.  '2' means it has not been set explicitly on the command line.  */
407
408 int flag_use_cxa_get_exception_ptr = 2;
409
410 /* Nonzero means to implement standard semantics for exception
411    specifications, calling unexpected if an exception is thrown that
412    doesn't match the specification.  Zero means to treat them as
413    assertions and optimize accordingly, but not check them.  */
414
415 int flag_enforce_eh_specs = 1;
416
417 /* Nonzero means to generate thread-safe code for initializing local
418    statics.  */
419
420 int flag_threadsafe_statics = 1;
421
422 /* Nonzero if we want to pretty-print template specializations as the
423    template signature followed by the arguments.  */
424
425 int flag_pretty_templates = 1;
426
427 /* Nonzero means warn about implicit declarations.  */
428
429 int warn_implicit = 1;
430
431 /* Maximum template instantiation depth.  This limit exists to limit the
432    time it takes to notice infinite template instantiations; the default
433    value of 1024 is likely to be in the next C++ standard.  */
434
435 int max_tinst_depth = 1024;
436
437
438
439 /* The elements of `ridpointers' are identifier nodes for the reserved
440    type names and storage classes.  It is indexed by a RID_... value.  */
441 tree *ridpointers;
442
443 tree (*make_fname_decl) (location_t, tree, int);
444
445 /* Nonzero means don't warn about problems that occur when the code is
446    executed.  */
447 int c_inhibit_evaluation_warnings;
448
449 /* Whether lexing has been completed, so subsequent preprocessor
450    errors should use the compiler's input_location.  */
451 bool done_lexing = false;
452
453 /* Information about how a function name is generated.  */
454 struct fname_var_t
455 {
456   tree *const decl;     /* pointer to the VAR_DECL.  */
457   const unsigned rid;   /* RID number for the identifier.  */
458   const int pretty;     /* How pretty is it? */
459 };
460
461 /* The three ways of getting then name of the current function.  */
462
463 const struct fname_var_t fname_vars[] =
464 {
465   /* C99 compliant __func__, must be first.  */
466   {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
467   /* GCC __FUNCTION__ compliant.  */
468   {&function_name_decl_node, RID_FUNCTION_NAME, 0},
469   /* GCC __PRETTY_FUNCTION__ compliant.  */
470   {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
471   {NULL, 0, 0},
472 };
473
474 static tree c_fully_fold_internal (tree expr, bool, bool *, bool *);
475 static tree check_case_value (tree);
476 static bool check_case_bounds (tree, tree, tree *, tree *);
477
478 static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
479 static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
480 static tree handle_common_attribute (tree *, tree, tree, int, bool *);
481 static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
482 static tree handle_hot_attribute (tree *, tree, tree, int, bool *);
483 static tree handle_cold_attribute (tree *, tree, tree, int, bool *);
484 static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
485 static tree handle_noclone_attribute (tree *, tree, tree, int, bool *);
486 static tree handle_always_inline_attribute (tree *, tree, tree, int,
487                                             bool *);
488 static tree handle_gnu_inline_attribute (tree *, tree, tree, int, bool *);
489 static tree handle_artificial_attribute (tree *, tree, tree, int, bool *);
490 static tree handle_flatten_attribute (tree *, tree, tree, int, bool *);
491 static tree handle_error_attribute (tree *, tree, tree, int, bool *);
492 static tree handle_used_attribute (tree *, tree, tree, int, bool *);
493 static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
494 static tree handle_externally_visible_attribute (tree *, tree, tree, int,
495                                                  bool *);
496 static tree handle_const_attribute (tree *, tree, tree, int, bool *);
497 static tree handle_transparent_union_attribute (tree *, tree, tree,
498                                                 int, bool *);
499 static tree handle_constructor_attribute (tree *, tree, tree, int, bool *);
500 static tree handle_destructor_attribute (tree *, tree, tree, int, bool *);
501 static tree handle_mode_attribute (tree *, tree, tree, int, bool *);
502 static tree handle_section_attribute (tree *, tree, tree, int, bool *);
503 static tree handle_aligned_attribute (tree *, tree, tree, int, bool *);
504 static tree handle_weak_attribute (tree *, tree, tree, int, bool *) ;
505 static tree handle_alias_attribute (tree *, tree, tree, int, bool *);
506 static tree handle_weakref_attribute (tree *, tree, tree, int, bool *) ;
507 static tree handle_visibility_attribute (tree *, tree, tree, int,
508                                          bool *);
509 static tree handle_tls_model_attribute (tree *, tree, tree, int,
510                                         bool *);
511 static tree handle_no_instrument_function_attribute (tree *, tree,
512                                                      tree, int, bool *);
513 static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
514 static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
515 static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
516                                              bool *);
517 static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
518 static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
519 static tree handle_deprecated_attribute (tree *, tree, tree, int,
520                                          bool *);
521 static tree handle_vector_size_attribute (tree *, tree, tree, int,
522                                           bool *);
523 static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
524 static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
525 static tree handle_cleanup_attribute (tree *, tree, tree, int, bool *);
526 static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
527                                                  bool *);
528 static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
529 static tree handle_type_generic_attribute (tree *, tree, tree, int, bool *);
530 static tree handle_alloc_size_attribute (tree *, tree, tree, int, bool *);
531 static tree handle_target_attribute (tree *, tree, tree, int, bool *);
532 static tree handle_optimize_attribute (tree *, tree, tree, int, bool *);
533
534 static void check_function_nonnull (tree, int, tree *);
535 static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
536 static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
537 static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
538 static int resort_field_decl_cmp (const void *, const void *);
539
540 /* Reserved words.  The third field is a mask: keywords are disabled
541    if they match the mask.
542
543    Masks for languages:
544    C --std=c89: D_C99 | D_CXXONLY | D_OBJC | D_CXX_OBJC
545    C --std=c99: D_CXXONLY | D_OBJC
546    ObjC is like C except that D_OBJC and D_CXX_OBJC are not set
547    C++ --std=c98: D_CONLY | D_CXXOX | D_OBJC
548    C++ --std=c0x: D_CONLY | D_OBJC
549    ObjC++ is like C++ except that D_OBJC is not set
550
551    If -fno-asm is used, D_ASM is added to the mask.  If
552    -fno-gnu-keywords is used, D_EXT is added.  If -fno-asm and C in
553    C89 mode, D_EXT89 is added for both -fno-asm and -fno-gnu-keywords.
554    In C with -Wc++-compat, we warn if D_CXXWARN is set.  */
555
556 const struct c_common_resword c_common_reswords[] =
557 {
558   { "_Bool",            RID_BOOL,      D_CONLY },
559   { "_Complex",         RID_COMPLEX,    0 },
560   { "_Imaginary",       RID_IMAGINARY, D_CONLY },
561   { "_Decimal32",       RID_DFLOAT32,  D_CONLY | D_EXT },
562   { "_Decimal64",       RID_DFLOAT64,  D_CONLY | D_EXT },
563   { "_Decimal128",      RID_DFLOAT128, D_CONLY | D_EXT },
564   { "_Fract",           RID_FRACT,     D_CONLY | D_EXT },
565   { "_Accum",           RID_ACCUM,     D_CONLY | D_EXT },
566   { "_Sat",             RID_SAT,       D_CONLY | D_EXT },
567   { "__FUNCTION__",     RID_FUNCTION_NAME, 0 },
568   { "__PRETTY_FUNCTION__", RID_PRETTY_FUNCTION_NAME, 0 },
569   { "__alignof",        RID_ALIGNOF,    0 },
570   { "__alignof__",      RID_ALIGNOF,    0 },
571   { "__asm",            RID_ASM,        0 },
572   { "__asm__",          RID_ASM,        0 },
573   { "__attribute",      RID_ATTRIBUTE,  0 },
574   { "__attribute__",    RID_ATTRIBUTE,  0 },
575   { "__builtin_choose_expr", RID_CHOOSE_EXPR, D_CONLY },
576   { "__builtin_offsetof", RID_OFFSETOF, 0 },
577   { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, D_CONLY },
578   { "__builtin_va_arg", RID_VA_ARG,     0 },
579   { "__complex",        RID_COMPLEX,    0 },
580   { "__complex__",      RID_COMPLEX,    0 },
581   { "__const",          RID_CONST,      0 },
582   { "__const__",        RID_CONST,      0 },
583   { "__decltype",       RID_DECLTYPE,   D_CXXONLY },
584   { "__extension__",    RID_EXTENSION,  0 },
585   { "__func__",         RID_C99_FUNCTION_NAME, 0 },
586   { "__has_nothrow_assign", RID_HAS_NOTHROW_ASSIGN, D_CXXONLY },
587   { "__has_nothrow_constructor", RID_HAS_NOTHROW_CONSTRUCTOR, D_CXXONLY },
588   { "__has_nothrow_copy", RID_HAS_NOTHROW_COPY, D_CXXONLY },
589   { "__has_trivial_assign", RID_HAS_TRIVIAL_ASSIGN, D_CXXONLY },
590   { "__has_trivial_constructor", RID_HAS_TRIVIAL_CONSTRUCTOR, D_CXXONLY },
591   { "__has_trivial_copy", RID_HAS_TRIVIAL_COPY, D_CXXONLY },
592   { "__has_trivial_destructor", RID_HAS_TRIVIAL_DESTRUCTOR, D_CXXONLY },
593   { "__has_virtual_destructor", RID_HAS_VIRTUAL_DESTRUCTOR, D_CXXONLY },
594   { "__is_abstract",    RID_IS_ABSTRACT, D_CXXONLY },
595   { "__is_base_of",     RID_IS_BASE_OF, D_CXXONLY },
596   { "__is_class",       RID_IS_CLASS,   D_CXXONLY },
597   { "__is_convertible_to", RID_IS_CONVERTIBLE_TO, D_CXXONLY },
598   { "__is_empty",       RID_IS_EMPTY,   D_CXXONLY },
599   { "__is_enum",        RID_IS_ENUM,    D_CXXONLY },
600   { "__is_pod",         RID_IS_POD,     D_CXXONLY },
601   { "__is_polymorphic", RID_IS_POLYMORPHIC, D_CXXONLY },
602   { "__is_standard_layout", RID_IS_STD_LAYOUT, D_CXXONLY },
603   { "__is_trivial",     RID_IS_TRIVIAL, D_CXXONLY },
604   { "__is_union",       RID_IS_UNION,   D_CXXONLY },
605   { "__imag",           RID_IMAGPART,   0 },
606   { "__imag__",         RID_IMAGPART,   0 },
607   { "__inline",         RID_INLINE,     0 },
608   { "__inline__",       RID_INLINE,     0 },
609   { "__label__",        RID_LABEL,      0 },
610   { "__null",           RID_NULL,       0 },
611   { "__real",           RID_REALPART,   0 },
612   { "__real__",         RID_REALPART,   0 },
613   { "__restrict",       RID_RESTRICT,   0 },
614   { "__restrict__",     RID_RESTRICT,   0 },
615   { "__signed",         RID_SIGNED,     0 },
616   { "__signed__",       RID_SIGNED,     0 },
617   { "__thread",         RID_THREAD,     0 },
618   { "__typeof",         RID_TYPEOF,     0 },
619   { "__typeof__",       RID_TYPEOF,     0 },
620   { "__volatile",       RID_VOLATILE,   0 },
621   { "__volatile__",     RID_VOLATILE,   0 },
622   { "alignof",          RID_ALIGNOF,    D_CXXONLY | D_CXX0X | D_CXXWARN },
623   { "asm",              RID_ASM,        D_ASM },
624   { "auto",             RID_AUTO,       0 },
625   { "bool",             RID_BOOL,       D_CXXONLY | D_CXXWARN },
626   { "break",            RID_BREAK,      0 },
627   { "case",             RID_CASE,       0 },
628   { "catch",            RID_CATCH,      D_CXX_OBJC | D_CXXWARN },
629   { "char",             RID_CHAR,       0 },
630   { "char16_t",         RID_CHAR16,     D_CXXONLY | D_CXX0X | D_CXXWARN },
631   { "char32_t",         RID_CHAR32,     D_CXXONLY | D_CXX0X | D_CXXWARN },
632   { "class",            RID_CLASS,      D_CXX_OBJC | D_CXXWARN },
633   { "const",            RID_CONST,      0 },
634   { "constexpr",        RID_CONSTEXPR,  D_CXXONLY | D_CXX0X | D_CXXWARN },
635   { "const_cast",       RID_CONSTCAST,  D_CXXONLY | D_CXXWARN },
636   { "continue",         RID_CONTINUE,   0 },
637   { "decltype",         RID_DECLTYPE,   D_CXXONLY | D_CXX0X | D_CXXWARN },
638   { "default",          RID_DEFAULT,    0 },
639   { "delete",           RID_DELETE,     D_CXXONLY | D_CXXWARN },
640   { "do",               RID_DO,         0 },
641   { "double",           RID_DOUBLE,     0 },
642   { "dynamic_cast",     RID_DYNCAST,    D_CXXONLY | D_CXXWARN },
643   { "else",             RID_ELSE,       0 },
644   { "enum",             RID_ENUM,       0 },
645   { "explicit",         RID_EXPLICIT,   D_CXXONLY | D_CXXWARN },
646   { "export",           RID_EXPORT,     D_CXXONLY | D_CXXWARN },
647   { "extern",           RID_EXTERN,     0 },
648   { "false",            RID_FALSE,      D_CXXONLY | D_CXXWARN },
649   { "float",            RID_FLOAT,      0 },
650   { "for",              RID_FOR,        0 },
651   { "friend",           RID_FRIEND,     D_CXXONLY | D_CXXWARN },
652   { "goto",             RID_GOTO,       0 },
653   { "if",               RID_IF,         0 },
654   { "inline",           RID_INLINE,     D_EXT89 },
655   { "int",              RID_INT,        0 },
656   { "long",             RID_LONG,       0 },
657   { "mutable",          RID_MUTABLE,    D_CXXONLY | D_CXXWARN },
658   { "namespace",        RID_NAMESPACE,  D_CXXONLY | D_CXXWARN },
659   { "new",              RID_NEW,        D_CXXONLY | D_CXXWARN },
660   { "operator",         RID_OPERATOR,   D_CXXONLY | D_CXXWARN },
661   { "private",          RID_PRIVATE,    D_CXX_OBJC | D_CXXWARN },
662   { "protected",        RID_PROTECTED,  D_CXX_OBJC | D_CXXWARN },
663   { "public",           RID_PUBLIC,     D_CXX_OBJC | D_CXXWARN },
664   { "register",         RID_REGISTER,   0 },
665   { "reinterpret_cast", RID_REINTCAST,  D_CXXONLY | D_CXXWARN },
666   { "restrict",         RID_RESTRICT,   D_CONLY | D_C99 },
667   { "return",           RID_RETURN,     0 },
668   { "short",            RID_SHORT,      0 },
669   { "signed",           RID_SIGNED,     0 },
670   { "sizeof",           RID_SIZEOF,     0 },
671   { "static",           RID_STATIC,     0 },
672   { "static_assert",    RID_STATIC_ASSERT, D_CXXONLY | D_CXX0X | D_CXXWARN },
673   { "static_cast",      RID_STATCAST,   D_CXXONLY | D_CXXWARN },
674   { "struct",           RID_STRUCT,     0 },
675   { "switch",           RID_SWITCH,     0 },
676   { "template",         RID_TEMPLATE,   D_CXXONLY | D_CXXWARN },
677   { "this",             RID_THIS,       D_CXXONLY | D_CXXWARN },
678   { "throw",            RID_THROW,      D_CXX_OBJC | D_CXXWARN },
679   { "true",             RID_TRUE,       D_CXXONLY | D_CXXWARN },
680   { "try",              RID_TRY,        D_CXX_OBJC | D_CXXWARN },
681   { "typedef",          RID_TYPEDEF,    0 },
682   { "typename",         RID_TYPENAME,   D_CXXONLY | D_CXXWARN },
683   { "typeid",           RID_TYPEID,     D_CXXONLY | D_CXXWARN },
684   { "typeof",           RID_TYPEOF,     D_ASM | D_EXT },
685   { "union",            RID_UNION,      0 },
686   { "unsigned",         RID_UNSIGNED,   0 },
687   { "using",            RID_USING,      D_CXXONLY | D_CXXWARN },
688   { "virtual",          RID_VIRTUAL,    D_CXXONLY | D_CXXWARN },
689   { "void",             RID_VOID,       0 },
690   { "volatile",         RID_VOLATILE,   0 },
691   { "wchar_t",          RID_WCHAR,      D_CXXONLY },
692   { "while",            RID_WHILE,      0 },
693   /* These Objective-C keywords are recognized only immediately after
694      an '@'.  */
695   { "compatibility_alias", RID_AT_ALIAS,        D_OBJC },
696   { "defs",             RID_AT_DEFS,            D_OBJC },
697   { "encode",           RID_AT_ENCODE,          D_OBJC },
698   { "end",              RID_AT_END,             D_OBJC },
699   { "implementation",   RID_AT_IMPLEMENTATION,  D_OBJC },
700   { "interface",        RID_AT_INTERFACE,       D_OBJC },
701   { "protocol",         RID_AT_PROTOCOL,        D_OBJC },
702   { "selector",         RID_AT_SELECTOR,        D_OBJC },
703   { "finally",          RID_AT_FINALLY,         D_OBJC },
704   { "synchronized",     RID_AT_SYNCHRONIZED,    D_OBJC },
705   /* These are recognized only in protocol-qualifier context
706      (see above) */
707   { "bycopy",           RID_BYCOPY,             D_OBJC },
708   { "byref",            RID_BYREF,              D_OBJC },
709   { "in",               RID_IN,                 D_OBJC },
710   { "inout",            RID_INOUT,              D_OBJC },
711   { "oneway",           RID_ONEWAY,             D_OBJC },
712   { "out",              RID_OUT,                D_OBJC },
713 };
714
715 const unsigned int num_c_common_reswords =
716   sizeof c_common_reswords / sizeof (struct c_common_resword);
717
718 /* Table of machine-independent attributes common to all C-like languages.  */
719 const struct attribute_spec c_common_attribute_table[] =
720 {
721   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
722   { "packed",                 0, 0, false, false, false,
723                               handle_packed_attribute },
724   { "nocommon",               0, 0, true,  false, false,
725                               handle_nocommon_attribute },
726   { "common",                 0, 0, true,  false, false,
727                               handle_common_attribute },
728   /* FIXME: logically, noreturn attributes should be listed as
729      "false, true, true" and apply to function types.  But implementing this
730      would require all the places in the compiler that use TREE_THIS_VOLATILE
731      on a decl to identify non-returning functions to be located and fixed
732      to check the function type instead.  */
733   { "noreturn",               0, 0, true,  false, false,
734                               handle_noreturn_attribute },
735   { "volatile",               0, 0, true,  false, false,
736                               handle_noreturn_attribute },
737   { "noinline",               0, 0, true,  false, false,
738                               handle_noinline_attribute },
739   { "noclone",                0, 0, true,  false, false,
740                               handle_noclone_attribute },
741   { "always_inline",          0, 0, true,  false, false,
742                               handle_always_inline_attribute },
743   { "gnu_inline",             0, 0, true,  false, false,
744                               handle_gnu_inline_attribute },
745   { "artificial",             0, 0, true,  false, false,
746                               handle_artificial_attribute },
747   { "flatten",                0, 0, true,  false, false,
748                               handle_flatten_attribute },
749   { "used",                   0, 0, true,  false, false,
750                               handle_used_attribute },
751   { "unused",                 0, 0, false, false, false,
752                               handle_unused_attribute },
753   { "externally_visible",     0, 0, true,  false, false,
754                               handle_externally_visible_attribute },
755   /* The same comments as for noreturn attributes apply to const ones.  */
756   { "const",                  0, 0, true,  false, false,
757                               handle_const_attribute },
758   { "transparent_union",      0, 0, false, false, false,
759                               handle_transparent_union_attribute },
760   { "constructor",            0, 1, true,  false, false,
761                               handle_constructor_attribute },
762   { "destructor",             0, 1, true,  false, false,
763                               handle_destructor_attribute },
764   { "mode",                   1, 1, false,  true, false,
765                               handle_mode_attribute },
766   { "section",                1, 1, true,  false, false,
767                               handle_section_attribute },
768   { "aligned",                0, 1, false, false, false,
769                               handle_aligned_attribute },
770   { "weak",                   0, 0, true,  false, false,
771                               handle_weak_attribute },
772   { "alias",                  1, 1, true,  false, false,
773                               handle_alias_attribute },
774   { "weakref",                0, 1, true,  false, false,
775                               handle_weakref_attribute },
776   { "no_instrument_function", 0, 0, true,  false, false,
777                               handle_no_instrument_function_attribute },
778   { "malloc",                 0, 0, true,  false, false,
779                               handle_malloc_attribute },
780   { "returns_twice",          0, 0, true,  false, false,
781                               handle_returns_twice_attribute },
782   { "no_stack_limit",         0, 0, true,  false, false,
783                               handle_no_limit_stack_attribute },
784   { "pure",                   0, 0, true,  false, false,
785                               handle_pure_attribute },
786   /* For internal use (marking of builtins) only.  The name contains space
787      to prevent its usage in source code.  */
788   { "no vops",                0, 0, true,  false, false,
789                               handle_novops_attribute },
790   { "deprecated",             0, 1, false, false, false,
791                               handle_deprecated_attribute },
792   { "vector_size",            1, 1, false, true, false,
793                               handle_vector_size_attribute },
794   { "visibility",             1, 1, false, false, false,
795                               handle_visibility_attribute },
796   { "tls_model",              1, 1, true,  false, false,
797                               handle_tls_model_attribute },
798   { "nonnull",                0, -1, false, true, true,
799                               handle_nonnull_attribute },
800   { "nothrow",                0, 0, true,  false, false,
801                               handle_nothrow_attribute },
802   { "may_alias",              0, 0, false, true, false, NULL },
803   { "cleanup",                1, 1, true, false, false,
804                               handle_cleanup_attribute },
805   { "warn_unused_result",     0, 0, false, true, true,
806                               handle_warn_unused_result_attribute },
807   { "sentinel",               0, 1, false, true, true,
808                               handle_sentinel_attribute },
809   /* For internal use (marking of builtins) only.  The name contains space
810      to prevent its usage in source code.  */
811   { "type generic",           0, 0, false, true, true,
812                               handle_type_generic_attribute },
813   { "alloc_size",             1, 2, false, true, true,
814                               handle_alloc_size_attribute },
815   { "cold",                   0, 0, true,  false, false,
816                               handle_cold_attribute },
817   { "hot",                    0, 0, true,  false, false,
818                               handle_hot_attribute },
819   { "warning",                1, 1, true,  false, false,
820                               handle_error_attribute },
821   { "error",                  1, 1, true,  false, false,
822                               handle_error_attribute },
823   { "target",                 1, -1, true, false, false,
824                               handle_target_attribute },
825   { "optimize",               1, -1, true, false, false,
826                               handle_optimize_attribute },
827   { NULL,                     0, 0, false, false, false, NULL }
828 };
829
830 /* Give the specifications for the format attributes, used by C and all
831    descendants.  */
832
833 const struct attribute_spec c_common_format_attribute_table[] =
834 {
835   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
836   { "format",                 3, 3, false, true,  true,
837                               handle_format_attribute },
838   { "format_arg",             1, 1, false, true,  true,
839                               handle_format_arg_attribute },
840   { NULL,                     0, 0, false, false, false, NULL }
841 };
842
843 /* Push current bindings for the function name VAR_DECLS.  */
844
845 void
846 start_fname_decls (void)
847 {
848   unsigned ix;
849   tree saved = NULL_TREE;
850
851   for (ix = 0; fname_vars[ix].decl; ix++)
852     {
853       tree decl = *fname_vars[ix].decl;
854
855       if (decl)
856         {
857           saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
858           *fname_vars[ix].decl = NULL_TREE;
859         }
860     }
861   if (saved || saved_function_name_decls)
862     /* Normally they'll have been NULL, so only push if we've got a
863        stack, or they are non-NULL.  */
864     saved_function_name_decls = tree_cons (saved, NULL_TREE,
865                                            saved_function_name_decls);
866 }
867
868 /* Finish up the current bindings, adding them into the current function's
869    statement tree.  This must be done _before_ finish_stmt_tree is called.
870    If there is no current function, we must be at file scope and no statements
871    are involved. Pop the previous bindings.  */
872
873 void
874 finish_fname_decls (void)
875 {
876   unsigned ix;
877   tree stmts = NULL_TREE;
878   tree stack = saved_function_name_decls;
879
880   for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
881     append_to_statement_list (TREE_VALUE (stack), &stmts);
882
883   if (stmts)
884     {
885       tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
886
887       if (TREE_CODE (*bodyp) == BIND_EXPR)
888         bodyp = &BIND_EXPR_BODY (*bodyp);
889
890       append_to_statement_list_force (*bodyp, &stmts);
891       *bodyp = stmts;
892     }
893
894   for (ix = 0; fname_vars[ix].decl; ix++)
895     *fname_vars[ix].decl = NULL_TREE;
896
897   if (stack)
898     {
899       /* We had saved values, restore them.  */
900       tree saved;
901
902       for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
903         {
904           tree decl = TREE_PURPOSE (saved);
905           unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
906
907           *fname_vars[ix].decl = decl;
908         }
909       stack = TREE_CHAIN (stack);
910     }
911   saved_function_name_decls = stack;
912 }
913
914 /* Return the text name of the current function, suitably prettified
915    by PRETTY_P.  Return string must be freed by caller.  */
916
917 const char *
918 fname_as_string (int pretty_p)
919 {
920   const char *name = "top level";
921   char *namep;
922   int vrb = 2, len;
923   cpp_string cstr = { 0, 0 }, strname;
924
925   if (!pretty_p)
926     {
927       name = "";
928       vrb = 0;
929     }
930
931   if (current_function_decl)
932     name = lang_hooks.decl_printable_name (current_function_decl, vrb);
933
934   len = strlen (name) + 3; /* Two for '"'s.  One for NULL.  */
935
936   namep = XNEWVEC (char, len);
937   snprintf (namep, len, "\"%s\"", name);
938   strname.text = (unsigned char *) namep;
939   strname.len = len - 1;
940
941   if (cpp_interpret_string (parse_in, &strname, 1, &cstr, CPP_STRING))
942     {
943       XDELETEVEC (namep);
944       return (const char *) cstr.text;
945     }
946
947   return namep;
948 }
949
950 /* Return the VAR_DECL for a const char array naming the current
951    function. If the VAR_DECL has not yet been created, create it
952    now. RID indicates how it should be formatted and IDENTIFIER_NODE
953    ID is its name (unfortunately C and C++ hold the RID values of
954    keywords in different places, so we can't derive RID from ID in
955    this language independent code. LOC is the location of the
956    function.  */
957
958 tree
959 fname_decl (location_t loc, unsigned int rid, tree id)
960 {
961   unsigned ix;
962   tree decl = NULL_TREE;
963
964   for (ix = 0; fname_vars[ix].decl; ix++)
965     if (fname_vars[ix].rid == rid)
966       break;
967
968   decl = *fname_vars[ix].decl;
969   if (!decl)
970     {
971       /* If a tree is built here, it would normally have the lineno of
972          the current statement.  Later this tree will be moved to the
973          beginning of the function and this line number will be wrong.
974          To avoid this problem set the lineno to 0 here; that prevents
975          it from appearing in the RTL.  */
976       tree stmts;
977       location_t saved_location = input_location;
978       input_location = UNKNOWN_LOCATION;
979
980       stmts = push_stmt_list ();
981       decl = (*make_fname_decl) (loc, id, fname_vars[ix].pretty);
982       stmts = pop_stmt_list (stmts);
983       if (!IS_EMPTY_STMT (stmts))
984         saved_function_name_decls
985           = tree_cons (decl, stmts, saved_function_name_decls);
986       *fname_vars[ix].decl = decl;
987       input_location = saved_location;
988     }
989   if (!ix && !current_function_decl)
990     pedwarn (loc, 0, "%qD is not defined outside of function scope", decl);
991
992   return decl;
993 }
994
995 /* Given a STRING_CST, give it a suitable array-of-chars data type.  */
996
997 tree
998 fix_string_type (tree value)
999 {
1000   int length = TREE_STRING_LENGTH (value);
1001   int nchars;
1002   tree e_type, i_type, a_type;
1003
1004   /* Compute the number of elements, for the array type.  */
1005   if (TREE_TYPE (value) == char_array_type_node || !TREE_TYPE (value))
1006     {
1007       nchars = length;
1008       e_type = char_type_node;
1009     }
1010   else if (TREE_TYPE (value) == char16_array_type_node)
1011     {
1012       nchars = length / (TYPE_PRECISION (char16_type_node) / BITS_PER_UNIT);
1013       e_type = char16_type_node;
1014     }
1015   else if (TREE_TYPE (value) == char32_array_type_node)
1016     {
1017       nchars = length / (TYPE_PRECISION (char32_type_node) / BITS_PER_UNIT);
1018       e_type = char32_type_node;
1019     }
1020   else
1021     {
1022       nchars = length / (TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT);
1023       e_type = wchar_type_node;
1024     }
1025
1026   /* C89 2.2.4.1, C99 5.2.4.1 (Translation limits).  The analogous
1027      limit in C++98 Annex B is very large (65536) and is not normative,
1028      so we do not diagnose it (warn_overlength_strings is forced off
1029      in c_common_post_options).  */
1030   if (warn_overlength_strings)
1031     {
1032       const int nchars_max = flag_isoc99 ? 4095 : 509;
1033       const int relevant_std = flag_isoc99 ? 99 : 90;
1034       if (nchars - 1 > nchars_max)
1035         /* Translators: The %d after 'ISO C' will be 90 or 99.  Do not
1036            separate the %d from the 'C'.  'ISO' should not be
1037            translated, but it may be moved after 'C%d' in languages
1038            where modifiers follow nouns.  */
1039         pedwarn (input_location, OPT_Woverlength_strings,
1040                  "string length %qd is greater than the length %qd "
1041                  "ISO C%d compilers are required to support",
1042                  nchars - 1, nchars_max, relevant_std);
1043     }
1044
1045   /* Create the array type for the string constant.  The ISO C++
1046      standard says that a string literal has type `const char[N]' or
1047      `const wchar_t[N]'.  We use the same logic when invoked as a C
1048      front-end with -Wwrite-strings.
1049      ??? We should change the type of an expression depending on the
1050      state of a warning flag.  We should just be warning -- see how
1051      this is handled in the C++ front-end for the deprecated implicit
1052      conversion from string literals to `char*' or `wchar_t*'.
1053
1054      The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
1055      array type being the unqualified version of that type.
1056      Therefore, if we are constructing an array of const char, we must
1057      construct the matching unqualified array type first.  The C front
1058      end does not require this, but it does no harm, so we do it
1059      unconditionally.  */
1060   i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
1061   a_type = build_array_type (e_type, i_type);
1062   if (c_dialect_cxx() || warn_write_strings)
1063     a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
1064
1065   TREE_TYPE (value) = a_type;
1066   TREE_CONSTANT (value) = 1;
1067   TREE_READONLY (value) = 1;
1068   TREE_STATIC (value) = 1;
1069   return value;
1070 }
1071 \f
1072 /* Fully fold EXPR, an expression that was not folded (beyond integer
1073    constant expressions and null pointer constants) when being built
1074    up.  If IN_INIT, this is in a static initializer and certain
1075    changes are made to the folding done.  Clear *MAYBE_CONST if
1076    MAYBE_CONST is not NULL and EXPR is definitely not a constant
1077    expression because it contains an evaluated operator (in C99) or an
1078    operator outside of sizeof returning an integer constant (in C90)
1079    not permitted in constant expressions, or because it contains an
1080    evaluated arithmetic overflow.  (*MAYBE_CONST should typically be
1081    set to true by callers before calling this function.)  Return the
1082    folded expression.  Function arguments have already been folded
1083    before calling this function, as have the contents of SAVE_EXPR,
1084    TARGET_EXPR, BIND_EXPR, VA_ARG_EXPR, OBJ_TYPE_REF and
1085    C_MAYBE_CONST_EXPR.  */
1086
1087 tree
1088 c_fully_fold (tree expr, bool in_init, bool *maybe_const)
1089 {
1090   tree ret;
1091   tree eptype = NULL_TREE;
1092   bool dummy = true;
1093   bool maybe_const_itself = true;
1094   location_t loc = EXPR_LOCATION (expr);
1095
1096   /* This function is not relevant to C++ because C++ folds while
1097      parsing, and may need changes to be correct for C++ when C++
1098      stops folding while parsing.  */
1099   if (c_dialect_cxx ())
1100     gcc_unreachable ();
1101
1102   if (!maybe_const)
1103     maybe_const = &dummy;
1104   if (TREE_CODE (expr) == EXCESS_PRECISION_EXPR)
1105     {
1106       eptype = TREE_TYPE (expr);
1107       expr = TREE_OPERAND (expr, 0);
1108     }
1109   ret = c_fully_fold_internal (expr, in_init, maybe_const,
1110                                &maybe_const_itself);
1111   if (eptype)
1112     ret = fold_convert_loc (loc, eptype, ret);
1113   *maybe_const &= maybe_const_itself;
1114   return ret;
1115 }
1116
1117 /* Internal helper for c_fully_fold.  EXPR and IN_INIT are as for
1118    c_fully_fold.  *MAYBE_CONST_OPERANDS is cleared because of operands
1119    not permitted, while *MAYBE_CONST_ITSELF is cleared because of
1120    arithmetic overflow (for C90, *MAYBE_CONST_OPERANDS is carried from
1121    both evaluated and unevaluated subexpressions while
1122    *MAYBE_CONST_ITSELF is carried from only evaluated
1123    subexpressions).  */
1124
1125 static tree
1126 c_fully_fold_internal (tree expr, bool in_init, bool *maybe_const_operands,
1127                        bool *maybe_const_itself)
1128 {
1129   tree ret = expr;
1130   enum tree_code code = TREE_CODE (expr);
1131   enum tree_code_class kind = TREE_CODE_CLASS (code);
1132   location_t loc = EXPR_LOCATION (expr);
1133   tree op0, op1, op2, op3;
1134   tree orig_op0, orig_op1, orig_op2;
1135   bool op0_const = true, op1_const = true, op2_const = true;
1136   bool op0_const_self = true, op1_const_self = true, op2_const_self = true;
1137   bool nowarning = TREE_NO_WARNING (expr);
1138   int unused_p;
1139
1140   /* This function is not relevant to C++ because C++ folds while
1141      parsing, and may need changes to be correct for C++ when C++
1142      stops folding while parsing.  */
1143   if (c_dialect_cxx ())
1144     gcc_unreachable ();
1145
1146   /* Constants, declarations, statements, errors, SAVE_EXPRs and
1147      anything else not counted as an expression cannot usefully be
1148      folded further at this point.  */
1149   if (!IS_EXPR_CODE_CLASS (kind)
1150       || kind == tcc_statement
1151       || code == SAVE_EXPR)
1152     return expr;
1153
1154   /* Operands of variable-length expressions (function calls) have
1155      already been folded, as have __builtin_* function calls, and such
1156      expressions cannot occur in constant expressions.  */
1157   if (kind == tcc_vl_exp)
1158     {
1159       *maybe_const_operands = false;
1160       ret = fold (expr);
1161       goto out;
1162     }
1163
1164   if (code == C_MAYBE_CONST_EXPR)
1165     {
1166       tree pre = C_MAYBE_CONST_EXPR_PRE (expr);
1167       tree inner = C_MAYBE_CONST_EXPR_EXPR (expr);
1168       if (C_MAYBE_CONST_EXPR_NON_CONST (expr))
1169         *maybe_const_operands = false;
1170       if (C_MAYBE_CONST_EXPR_INT_OPERANDS (expr))
1171         *maybe_const_itself = false;
1172       if (pre && !in_init)
1173         ret = build2 (COMPOUND_EXPR, TREE_TYPE (expr), pre, inner);
1174       else
1175         ret = inner;
1176       goto out;
1177     }
1178
1179   /* Assignment, increment, decrement, function call and comma
1180      operators, and statement expressions, cannot occur in constant
1181      expressions if evaluated / outside of sizeof.  (Function calls
1182      were handled above, though VA_ARG_EXPR is treated like a function
1183      call here, and statement expressions are handled through
1184      C_MAYBE_CONST_EXPR to avoid folding inside them.)  */
1185   switch (code)
1186     {
1187     case MODIFY_EXPR:
1188     case PREDECREMENT_EXPR:
1189     case PREINCREMENT_EXPR:
1190     case POSTDECREMENT_EXPR:
1191     case POSTINCREMENT_EXPR:
1192     case COMPOUND_EXPR:
1193       *maybe_const_operands = false;
1194       break;
1195
1196     case VA_ARG_EXPR:
1197     case TARGET_EXPR:
1198     case BIND_EXPR:
1199     case OBJ_TYPE_REF:
1200       *maybe_const_operands = false;
1201       ret = fold (expr);
1202       goto out;
1203
1204     default:
1205       break;
1206     }
1207
1208   /* Fold individual tree codes as appropriate.  */
1209   switch (code)
1210     {
1211     case COMPOUND_LITERAL_EXPR:
1212       /* Any non-constancy will have been marked in a containing
1213          C_MAYBE_CONST_EXPR; there is no more folding to do here.  */
1214       goto out;
1215
1216     case COMPONENT_REF:
1217       orig_op0 = op0 = TREE_OPERAND (expr, 0);
1218       op1 = TREE_OPERAND (expr, 1);
1219       op2 = TREE_OPERAND (expr, 2);
1220       op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1221                                    maybe_const_itself);
1222       STRIP_TYPE_NOPS (op0);
1223       if (op0 != orig_op0)
1224         ret = build3 (COMPONENT_REF, TREE_TYPE (expr), op0, op1, op2);
1225       if (ret != expr)
1226         {
1227           TREE_READONLY (ret) = TREE_READONLY (expr);
1228           TREE_THIS_VOLATILE (ret) = TREE_THIS_VOLATILE (expr);
1229         }
1230       goto out;
1231
1232     case ARRAY_REF:
1233       orig_op0 = op0 = TREE_OPERAND (expr, 0);
1234       orig_op1 = op1 = TREE_OPERAND (expr, 1);
1235       op2 = TREE_OPERAND (expr, 2);
1236       op3 = TREE_OPERAND (expr, 3);
1237       op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1238                                    maybe_const_itself);
1239       STRIP_TYPE_NOPS (op0);
1240       op1 = c_fully_fold_internal (op1, in_init, maybe_const_operands,
1241                                    maybe_const_itself);
1242       STRIP_TYPE_NOPS (op1);
1243       op1 = decl_constant_value_for_optimization (op1);
1244       if (op0 != orig_op0 || op1 != orig_op1)
1245         ret = build4 (ARRAY_REF, TREE_TYPE (expr), op0, op1, op2, op3);
1246       if (ret != expr)
1247         {
1248           TREE_READONLY (ret) = TREE_READONLY (expr);
1249           TREE_SIDE_EFFECTS (ret) = TREE_SIDE_EFFECTS (expr);
1250           TREE_THIS_VOLATILE (ret) = TREE_THIS_VOLATILE (expr);
1251         }
1252       ret = fold (ret);
1253       goto out;
1254
1255     case COMPOUND_EXPR:
1256     case MODIFY_EXPR:
1257     case PREDECREMENT_EXPR:
1258     case PREINCREMENT_EXPR:
1259     case POSTDECREMENT_EXPR:
1260     case POSTINCREMENT_EXPR:
1261     case PLUS_EXPR:
1262     case MINUS_EXPR:
1263     case MULT_EXPR:
1264     case POINTER_PLUS_EXPR:
1265     case TRUNC_DIV_EXPR:
1266     case CEIL_DIV_EXPR:
1267     case FLOOR_DIV_EXPR:
1268     case TRUNC_MOD_EXPR:
1269     case RDIV_EXPR:
1270     case EXACT_DIV_EXPR:
1271     case LSHIFT_EXPR:
1272     case RSHIFT_EXPR:
1273     case BIT_IOR_EXPR:
1274     case BIT_XOR_EXPR:
1275     case BIT_AND_EXPR:
1276     case LT_EXPR:
1277     case LE_EXPR:
1278     case GT_EXPR:
1279     case GE_EXPR:
1280     case EQ_EXPR:
1281     case NE_EXPR:
1282     case COMPLEX_EXPR:
1283     case TRUTH_AND_EXPR:
1284     case TRUTH_OR_EXPR:
1285     case TRUTH_XOR_EXPR:
1286     case UNORDERED_EXPR:
1287     case ORDERED_EXPR:
1288     case UNLT_EXPR:
1289     case UNLE_EXPR:
1290     case UNGT_EXPR:
1291     case UNGE_EXPR:
1292     case UNEQ_EXPR:
1293       /* Binary operations evaluating both arguments (increment and
1294          decrement are binary internally in GCC).  */
1295       orig_op0 = op0 = TREE_OPERAND (expr, 0);
1296       orig_op1 = op1 = TREE_OPERAND (expr, 1);
1297       op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1298                                    maybe_const_itself);
1299       STRIP_TYPE_NOPS (op0);
1300       if (code != MODIFY_EXPR
1301           && code != PREDECREMENT_EXPR
1302           && code != PREINCREMENT_EXPR
1303           && code != POSTDECREMENT_EXPR
1304           && code != POSTINCREMENT_EXPR)
1305         op0 = decl_constant_value_for_optimization (op0);
1306       /* The RHS of a MODIFY_EXPR was fully folded when building that
1307          expression for the sake of conversion warnings.  */
1308       if (code != MODIFY_EXPR)
1309         op1 = c_fully_fold_internal (op1, in_init, maybe_const_operands,
1310                                      maybe_const_itself);
1311       STRIP_TYPE_NOPS (op1);
1312       op1 = decl_constant_value_for_optimization (op1);
1313       if (op0 != orig_op0 || op1 != orig_op1 || in_init)
1314         ret = in_init
1315           ? fold_build2_initializer_loc (loc, code, TREE_TYPE (expr), op0, op1)
1316           : fold_build2_loc (loc, code, TREE_TYPE (expr), op0, op1);
1317       else
1318         ret = fold (expr);
1319       if (TREE_OVERFLOW_P (ret)
1320           && !TREE_OVERFLOW_P (op0)
1321           && !TREE_OVERFLOW_P (op1))
1322         overflow_warning (EXPR_LOCATION (expr), ret);
1323       goto out;
1324
1325     case INDIRECT_REF:
1326     case FIX_TRUNC_EXPR:
1327     case FLOAT_EXPR:
1328     CASE_CONVERT:
1329     case NON_LVALUE_EXPR:
1330     case NEGATE_EXPR:
1331     case BIT_NOT_EXPR:
1332     case TRUTH_NOT_EXPR:
1333     case ADDR_EXPR:
1334     case CONJ_EXPR:
1335     case REALPART_EXPR:
1336     case IMAGPART_EXPR:
1337       /* Unary operations.  */
1338       orig_op0 = op0 = TREE_OPERAND (expr, 0);
1339       op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1340                                    maybe_const_itself);
1341       STRIP_TYPE_NOPS (op0);
1342       if (code != ADDR_EXPR && code != REALPART_EXPR && code != IMAGPART_EXPR)
1343         op0 = decl_constant_value_for_optimization (op0);
1344       if (op0 != orig_op0 || in_init)
1345         ret = in_init
1346           ? fold_build1_initializer_loc (loc, code, TREE_TYPE (expr), op0)
1347           : fold_build1_loc (loc, code, TREE_TYPE (expr), op0);
1348       else
1349         ret = fold (expr);
1350       if (code == INDIRECT_REF
1351           && ret != expr
1352           && TREE_CODE (ret) == INDIRECT_REF)
1353         {
1354           TREE_READONLY (ret) = TREE_READONLY (expr);
1355           TREE_SIDE_EFFECTS (ret) = TREE_SIDE_EFFECTS (expr);
1356           TREE_THIS_VOLATILE (ret) = TREE_THIS_VOLATILE (expr);
1357         }
1358       switch (code)
1359         {
1360         case FIX_TRUNC_EXPR:
1361         case FLOAT_EXPR:
1362         CASE_CONVERT:
1363           /* Don't warn about explicit conversions.  We will already
1364              have warned about suspect implicit conversions.  */
1365           break;
1366
1367         default:
1368           if (TREE_OVERFLOW_P (ret) && !TREE_OVERFLOW_P (op0))
1369             overflow_warning (EXPR_LOCATION (expr), ret);
1370           break;
1371         }
1372       goto out;
1373
1374     case TRUTH_ANDIF_EXPR:
1375     case TRUTH_ORIF_EXPR:
1376       /* Binary operations not necessarily evaluating both
1377          arguments.  */
1378       orig_op0 = op0 = TREE_OPERAND (expr, 0);
1379       orig_op1 = op1 = TREE_OPERAND (expr, 1);
1380       op0 = c_fully_fold_internal (op0, in_init, &op0_const, &op0_const_self);
1381       STRIP_TYPE_NOPS (op0);
1382
1383       unused_p = (op0 == (code == TRUTH_ANDIF_EXPR
1384                           ? truthvalue_false_node
1385                           : truthvalue_true_node));
1386       c_inhibit_evaluation_warnings += unused_p;
1387       op1 = c_fully_fold_internal (op1, in_init, &op1_const, &op1_const_self);
1388       STRIP_TYPE_NOPS (op1);
1389       c_inhibit_evaluation_warnings -= unused_p;
1390
1391       if (op0 != orig_op0 || op1 != orig_op1 || in_init)
1392         ret = in_init
1393           ? fold_build2_initializer_loc (loc, code, TREE_TYPE (expr), op0, op1)
1394           : fold_build2_loc (loc, code, TREE_TYPE (expr), op0, op1);
1395       else
1396         ret = fold (expr);
1397       *maybe_const_operands &= op0_const;
1398       *maybe_const_itself &= op0_const_self;
1399       if (!(flag_isoc99
1400             && op0_const
1401             && op0_const_self
1402             && (code == TRUTH_ANDIF_EXPR
1403                 ? op0 == truthvalue_false_node
1404                 : op0 == truthvalue_true_node)))
1405         *maybe_const_operands &= op1_const;
1406       if (!(op0_const
1407             && op0_const_self
1408             && (code == TRUTH_ANDIF_EXPR
1409                 ? op0 == truthvalue_false_node
1410                 : op0 == truthvalue_true_node)))
1411         *maybe_const_itself &= op1_const_self;
1412       goto out;
1413
1414     case COND_EXPR:
1415       orig_op0 = op0 = TREE_OPERAND (expr, 0);
1416       orig_op1 = op1 = TREE_OPERAND (expr, 1);
1417       orig_op2 = op2 = TREE_OPERAND (expr, 2);
1418       op0 = c_fully_fold_internal (op0, in_init, &op0_const, &op0_const_self);
1419
1420       STRIP_TYPE_NOPS (op0);
1421       c_inhibit_evaluation_warnings += (op0 == truthvalue_false_node);
1422       op1 = c_fully_fold_internal (op1, in_init, &op1_const, &op1_const_self);
1423       STRIP_TYPE_NOPS (op1);
1424       c_inhibit_evaluation_warnings -= (op0 == truthvalue_false_node);
1425
1426       c_inhibit_evaluation_warnings += (op0 == truthvalue_true_node);
1427       op2 = c_fully_fold_internal (op2, in_init, &op2_const, &op2_const_self);
1428       STRIP_TYPE_NOPS (op2);
1429       c_inhibit_evaluation_warnings -= (op0 == truthvalue_true_node);
1430
1431       if (op0 != orig_op0 || op1 != orig_op1 || op2 != orig_op2)
1432         ret = fold_build3_loc (loc, code, TREE_TYPE (expr), op0, op1, op2);
1433       else
1434         ret = fold (expr);
1435       *maybe_const_operands &= op0_const;
1436       *maybe_const_itself &= op0_const_self;
1437       if (!(flag_isoc99
1438             && op0_const
1439             && op0_const_self
1440             && op0 == truthvalue_false_node))
1441         *maybe_const_operands &= op1_const;
1442       if (!(op0_const
1443             && op0_const_self
1444             && op0 == truthvalue_false_node))
1445         *maybe_const_itself &= op1_const_self;
1446       if (!(flag_isoc99
1447             && op0_const
1448             && op0_const_self
1449             && op0 == truthvalue_true_node))
1450         *maybe_const_operands &= op2_const;
1451       if (!(op0_const
1452             && op0_const_self
1453             && op0 == truthvalue_true_node))
1454         *maybe_const_itself &= op2_const_self;
1455       goto out;
1456
1457     case EXCESS_PRECISION_EXPR:
1458       /* Each case where an operand with excess precision may be
1459          encountered must remove the EXCESS_PRECISION_EXPR around
1460          inner operands and possibly put one around the whole
1461          expression or possibly convert to the semantic type (which
1462          c_fully_fold does); we cannot tell at this stage which is
1463          appropriate in any particular case.  */
1464       gcc_unreachable ();
1465
1466     default:
1467       /* Various codes may appear through folding built-in functions
1468          and their arguments.  */
1469       goto out;
1470     }
1471
1472  out:
1473   /* Some folding may introduce NON_LVALUE_EXPRs; all lvalue checks
1474      have been done by this point, so remove them again.  */
1475   nowarning |= TREE_NO_WARNING (ret);
1476   STRIP_TYPE_NOPS (ret);
1477   if (nowarning && !TREE_NO_WARNING (ret))
1478     {
1479       if (!CAN_HAVE_LOCATION_P (ret))
1480         ret = build1 (NOP_EXPR, TREE_TYPE (ret), ret);
1481       TREE_NO_WARNING (ret) = 1;
1482     }
1483   if (ret != expr)
1484     protected_set_expr_location (ret, loc);
1485   return ret;
1486 }
1487
1488 /* If not optimizing, EXP is not a VAR_DECL, or EXP has array type,
1489    return EXP.  Otherwise, return either EXP or its known constant
1490    value (if it has one), but return EXP if EXP has mode BLKmode.  ???
1491    Is the BLKmode test appropriate?  */
1492
1493 tree
1494 decl_constant_value_for_optimization (tree exp)
1495 {
1496   tree ret;
1497
1498   /* This function is only used by C, for c_fully_fold and other
1499      optimization, and may not be correct for C++.  */
1500   if (c_dialect_cxx ())
1501     gcc_unreachable ();
1502
1503   if (!optimize
1504       || TREE_CODE (exp) != VAR_DECL
1505       || TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE
1506       || DECL_MODE (exp) == BLKmode)
1507     return exp;
1508
1509   ret = decl_constant_value (exp);
1510   /* Avoid unwanted tree sharing between the initializer and current
1511      function's body where the tree can be modified e.g. by the
1512      gimplifier.  */
1513   if (ret != exp && TREE_STATIC (exp))
1514     ret = unshare_expr (ret);
1515   return ret;
1516 }
1517
1518 /* Print a warning if a constant expression had overflow in folding.
1519    Invoke this function on every expression that the language
1520    requires to be a constant expression.
1521    Note the ANSI C standard says it is erroneous for a
1522    constant expression to overflow.  */
1523
1524 void
1525 constant_expression_warning (tree value)
1526 {
1527   if (warn_overflow && pedantic 
1528       && (TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
1529           || TREE_CODE (value) == FIXED_CST
1530           || TREE_CODE (value) == VECTOR_CST
1531           || TREE_CODE (value) == COMPLEX_CST)
1532       && TREE_OVERFLOW (value))
1533     pedwarn (input_location, OPT_Woverflow, "overflow in constant expression");
1534 }
1535
1536 /* The same as above but print an unconditional error.  */
1537 void
1538 constant_expression_error (tree value)
1539 {
1540   if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
1541        || TREE_CODE (value) == FIXED_CST
1542        || TREE_CODE (value) == VECTOR_CST
1543        || TREE_CODE (value) == COMPLEX_CST)
1544       && TREE_OVERFLOW (value))
1545     error ("overflow in constant expression");
1546 }
1547
1548 /* Print a warning if an expression had overflow in folding and its
1549    operands hadn't.
1550
1551    Invoke this function on every expression that
1552    (1) appears in the source code, and
1553    (2) is a constant expression that overflowed, and
1554    (3) is not already checked by convert_and_check;
1555    however, do not invoke this function on operands of explicit casts
1556    or when the expression is the result of an operator and any operand
1557    already overflowed.  */
1558
1559 void
1560 overflow_warning (location_t loc, tree value)
1561 {
1562   if (c_inhibit_evaluation_warnings != 0)
1563     return;
1564
1565   switch (TREE_CODE (value))
1566     {
1567     case INTEGER_CST:
1568       warning_at (loc, OPT_Woverflow, "integer overflow in expression");
1569       break;
1570       
1571     case REAL_CST:
1572       warning_at (loc, OPT_Woverflow,
1573                   "floating point overflow in expression");
1574       break;
1575       
1576     case FIXED_CST:
1577       warning_at (loc, OPT_Woverflow, "fixed-point overflow in expression");
1578       break;
1579
1580     case VECTOR_CST:
1581       warning_at (loc, OPT_Woverflow, "vector overflow in expression");
1582       break;
1583       
1584     case COMPLEX_CST:
1585       if (TREE_CODE (TREE_REALPART (value)) == INTEGER_CST)
1586         warning_at (loc, OPT_Woverflow,
1587                     "complex integer overflow in expression");
1588       else if (TREE_CODE (TREE_REALPART (value)) == REAL_CST)
1589         warning_at (loc, OPT_Woverflow,
1590                     "complex floating point overflow in expression");
1591       break;
1592
1593     default:
1594       break;
1595     }
1596 }
1597
1598 /* Warn about uses of logical || / && operator in a context where it
1599    is likely that the bitwise equivalent was intended by the
1600    programmer.  We have seen an expression in which CODE is a binary
1601    operator used to combine expressions OP_LEFT and OP_RIGHT, which before folding
1602    had CODE_LEFT and CODE_RIGHT, into an expression of type TYPE.  */
1603 void
1604 warn_logical_operator (location_t location, enum tree_code code, tree type,
1605                        enum tree_code code_left, tree op_left, 
1606                        enum tree_code ARG_UNUSED (code_right), tree op_right)
1607 {
1608   int or_op = (code == TRUTH_ORIF_EXPR || code == TRUTH_OR_EXPR);
1609   int in0_p, in1_p, in_p;
1610   tree low0, low1, low, high0, high1, high, lhs, rhs, tem;
1611   bool strict_overflow_p = false;
1612
1613   if (code != TRUTH_ANDIF_EXPR
1614       && code != TRUTH_AND_EXPR
1615       && code != TRUTH_ORIF_EXPR
1616       && code != TRUTH_OR_EXPR)
1617     return;
1618
1619   /* Warn if &&/|| are being used in a context where it is
1620      likely that the bitwise equivalent was intended by the
1621      programmer. That is, an expression such as op && MASK
1622      where op should not be any boolean expression, nor a
1623      constant, and mask seems to be a non-boolean integer constant.  */
1624   if (!truth_value_p (code_left)
1625       && INTEGRAL_TYPE_P (TREE_TYPE (op_left))
1626       && !CONSTANT_CLASS_P (op_left)
1627       && !TREE_NO_WARNING (op_left)
1628       && TREE_CODE (op_right) == INTEGER_CST
1629       && !integer_zerop (op_right)
1630       && !integer_onep (op_right))
1631     {
1632       if (or_op)
1633         warning_at (location, OPT_Wlogical_op, "logical %<or%>"
1634                     " applied to non-boolean constant");
1635       else
1636         warning_at (location, OPT_Wlogical_op, "logical %<and%>"
1637                     " applied to non-boolean constant");
1638       TREE_NO_WARNING (op_left) = true;
1639       return;
1640     }
1641
1642   /* We do not warn for constants because they are typical of macro
1643      expansions that test for features.  */
1644   if (CONSTANT_CLASS_P (op_left) || CONSTANT_CLASS_P (op_right))
1645     return;
1646
1647   /* This warning only makes sense with logical operands.  */
1648   if (!(truth_value_p (TREE_CODE (op_left))
1649         || INTEGRAL_TYPE_P (TREE_TYPE (op_left)))
1650       || !(truth_value_p (TREE_CODE (op_right))
1651            || INTEGRAL_TYPE_P (TREE_TYPE (op_right))))
1652     return;
1653
1654   lhs = make_range (op_left, &in0_p, &low0, &high0, &strict_overflow_p);
1655   rhs = make_range (op_right, &in1_p, &low1, &high1, &strict_overflow_p);
1656
1657   if (lhs && TREE_CODE (lhs) == C_MAYBE_CONST_EXPR)
1658     lhs = C_MAYBE_CONST_EXPR_EXPR (lhs);
1659
1660   if (rhs && TREE_CODE (rhs) == C_MAYBE_CONST_EXPR)
1661     rhs = C_MAYBE_CONST_EXPR_EXPR (rhs);
1662   
1663   /* If this is an OR operation, invert both sides; we will invert
1664      again at the end.  */
1665   if (or_op)
1666     in0_p = !in0_p, in1_p = !in1_p;
1667   
1668   /* If both expressions are the same, if we can merge the ranges, and we
1669      can build the range test, return it or it inverted.  */
1670   if (lhs && rhs && operand_equal_p (lhs, rhs, 0)
1671       && merge_ranges (&in_p, &low, &high, in0_p, low0, high0,
1672                        in1_p, low1, high1)
1673       && 0 != (tem = build_range_check (UNKNOWN_LOCATION,
1674                                         type, lhs, in_p, low, high)))
1675     {
1676       if (TREE_CODE (tem) != INTEGER_CST)
1677         return;
1678
1679       if (or_op)
1680         warning_at (location, OPT_Wlogical_op,
1681                     "logical %<or%> "
1682                     "of collectively exhaustive tests is always true");
1683       else
1684         warning_at (location, OPT_Wlogical_op,
1685                     "logical %<and%> "
1686                     "of mutually exclusive tests is always false");
1687     }
1688 }
1689
1690
1691 /* Print a warning about casts that might indicate violation
1692    of strict aliasing rules if -Wstrict-aliasing is used and
1693    strict aliasing mode is in effect. OTYPE is the original
1694    TREE_TYPE of EXPR, and TYPE the type we're casting to. */
1695
1696 bool
1697 strict_aliasing_warning (tree otype, tree type, tree expr)
1698 {
1699   /* Strip pointer conversion chains and get to the correct original type.  */
1700   STRIP_NOPS (expr);
1701   otype = TREE_TYPE (expr);
1702
1703   if (!(flag_strict_aliasing
1704         && POINTER_TYPE_P (type)
1705         && POINTER_TYPE_P (otype)
1706         && !VOID_TYPE_P (TREE_TYPE (type)))
1707       /* If the type we are casting to is a ref-all pointer
1708          dereferencing it is always valid.  */
1709       || TYPE_REF_CAN_ALIAS_ALL (type))
1710     return false;
1711
1712   if ((warn_strict_aliasing > 1) && TREE_CODE (expr) == ADDR_EXPR
1713       && (DECL_P (TREE_OPERAND (expr, 0))
1714           || handled_component_p (TREE_OPERAND (expr, 0))))
1715     {
1716       /* Casting the address of an object to non void pointer. Warn
1717          if the cast breaks type based aliasing.  */
1718       if (!COMPLETE_TYPE_P (TREE_TYPE (type)) && warn_strict_aliasing == 2)
1719         {
1720           warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
1721                    "might break strict-aliasing rules");
1722           return true;
1723         }
1724       else
1725         {
1726           /* warn_strict_aliasing >= 3.   This includes the default (3).  
1727              Only warn if the cast is dereferenced immediately.  */
1728           alias_set_type set1 =
1729             get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
1730           alias_set_type set2 = get_alias_set (TREE_TYPE (type));
1731
1732           if (set1 != set2 && set2 != 0
1733               && (set1 == 0 || !alias_sets_conflict_p (set1, set2)))
1734             {
1735               warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1736                        "pointer will break strict-aliasing rules");
1737               return true;
1738             }
1739           else if (warn_strict_aliasing == 2
1740                    && !alias_sets_must_conflict_p (set1, set2))
1741             {
1742               warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1743                        "pointer might break strict-aliasing rules");
1744               return true;
1745             }
1746         }
1747     }
1748   else
1749     if ((warn_strict_aliasing == 1) && !VOID_TYPE_P (TREE_TYPE (otype)))
1750       {
1751         /* At this level, warn for any conversions, even if an address is
1752            not taken in the same statement.  This will likely produce many
1753            false positives, but could be useful to pinpoint problems that
1754            are not revealed at higher levels.  */
1755         alias_set_type set1 = get_alias_set (TREE_TYPE (otype));
1756         alias_set_type set2 = get_alias_set (TREE_TYPE (type));
1757         if (!COMPLETE_TYPE_P (type)
1758             || !alias_sets_must_conflict_p (set1, set2))
1759           {
1760             warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1761                      "pointer might break strict-aliasing rules");
1762             return true;
1763           }
1764       }
1765
1766   return false;
1767 }
1768
1769 /* Warn for unlikely, improbable, or stupid DECL declarations
1770    of `main'.  */
1771
1772 void
1773 check_main_parameter_types (tree decl)
1774 {
1775   tree args;
1776   int argct = 0;
1777
1778   for (args = TYPE_ARG_TYPES (TREE_TYPE (decl)); args;
1779       args = TREE_CHAIN (args))
1780    {
1781      tree type = args ? TREE_VALUE (args) : 0;
1782
1783      if (type == void_type_node || type == error_mark_node )
1784        break;
1785
1786      ++argct;
1787      switch (argct)
1788        {
1789        case 1:
1790          if (TYPE_MAIN_VARIANT (type) != integer_type_node)
1791            pedwarn (input_location, OPT_Wmain, "first argument of %q+D should be %<int%>", 
1792                     decl);
1793          break;
1794
1795        case 2:
1796          if (TREE_CODE (type) != POINTER_TYPE
1797              || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1798              || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1799                  != char_type_node))
1800            pedwarn (input_location, OPT_Wmain, "second argument of %q+D should be %<char **%>",
1801                     decl);
1802          break;
1803
1804        case 3:
1805          if (TREE_CODE (type) != POINTER_TYPE
1806              || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1807              || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1808                  != char_type_node))
1809            pedwarn (input_location, OPT_Wmain, "third argument of %q+D should probably be "
1810                     "%<char **%>", decl);
1811          break;
1812        }
1813    }
1814
1815   /* It is intentional that this message does not mention the third
1816     argument because it's only mentioned in an appendix of the
1817     standard.  */
1818   if (argct > 0 && (argct < 2 || argct > 3))
1819     pedwarn (input_location, OPT_Wmain, "%q+D takes only zero or two arguments", decl);
1820 }
1821
1822 /* True if pointers to distinct types T1 and T2 can be converted to
1823    each other without an explicit cast.  Only returns true for opaque
1824    vector types.  */
1825 bool
1826 vector_targets_convertible_p (const_tree t1, const_tree t2)
1827 {
1828   if (TREE_CODE (t1) == VECTOR_TYPE && TREE_CODE (t2) == VECTOR_TYPE
1829       && (TYPE_VECTOR_OPAQUE (t1) || TYPE_VECTOR_OPAQUE (t2))
1830       && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1831     return true;
1832
1833   return false;
1834 }
1835
1836 /* True if vector types T1 and T2 can be converted to each other
1837    without an explicit cast.  If EMIT_LAX_NOTE is true, and T1 and T2
1838    can only be converted with -flax-vector-conversions yet that is not
1839    in effect, emit a note telling the user about that option if such
1840    a note has not previously been emitted.  */
1841 bool
1842 vector_types_convertible_p (const_tree t1, const_tree t2, bool emit_lax_note)
1843 {
1844   static bool emitted_lax_note = false;
1845   bool convertible_lax;
1846
1847   if ((TYPE_VECTOR_OPAQUE (t1) || TYPE_VECTOR_OPAQUE (t2))
1848       && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1849     return true;
1850
1851   convertible_lax =
1852     (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
1853      && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
1854          TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
1855      && (INTEGRAL_TYPE_P (TREE_TYPE (t1))
1856          == INTEGRAL_TYPE_P (TREE_TYPE (t2))));
1857
1858   if (!convertible_lax || flag_lax_vector_conversions)
1859     return convertible_lax;
1860
1861   if (TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
1862       && lang_hooks.types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1863     return true;
1864
1865   if (emit_lax_note && !emitted_lax_note)
1866     {
1867       emitted_lax_note = true;
1868       inform (input_location, "use -flax-vector-conversions to permit "
1869               "conversions between vectors with differing "
1870               "element types or numbers of subparts");
1871     }
1872
1873   return false;
1874 }
1875
1876 /* This is a helper function of build_binary_op.
1877
1878    For certain operations if both args were extended from the same
1879    smaller type, do the arithmetic in that type and then extend.
1880
1881    BITWISE indicates a bitwise operation.
1882    For them, this optimization is safe only if
1883    both args are zero-extended or both are sign-extended.
1884    Otherwise, we might change the result.
1885    Eg, (short)-1 | (unsigned short)-1 is (int)-1
1886    but calculated in (unsigned short) it would be (unsigned short)-1.  
1887 */
1888 tree shorten_binary_op (tree result_type, tree op0, tree op1, bool bitwise)
1889 {
1890   int unsigned0, unsigned1;
1891   tree arg0, arg1;
1892   int uns;
1893   tree type;
1894
1895   /* Cast OP0 and OP1 to RESULT_TYPE.  Doing so prevents
1896      excessive narrowing when we call get_narrower below.  For
1897      example, suppose that OP0 is of unsigned int extended
1898      from signed char and that RESULT_TYPE is long long int.
1899      If we explicitly cast OP0 to RESULT_TYPE, OP0 would look
1900      like
1901      
1902      (long long int) (unsigned int) signed_char
1903
1904      which get_narrower would narrow down to
1905      
1906      (unsigned int) signed char
1907      
1908      If we do not cast OP0 first, get_narrower would return
1909      signed_char, which is inconsistent with the case of the
1910      explicit cast.  */
1911   op0 = convert (result_type, op0);
1912   op1 = convert (result_type, op1);
1913
1914   arg0 = get_narrower (op0, &unsigned0);
1915   arg1 = get_narrower (op1, &unsigned1);
1916
1917   /* UNS is 1 if the operation to be done is an unsigned one.  */
1918   uns = TYPE_UNSIGNED (result_type);
1919
1920   /* Handle the case that OP0 (or OP1) does not *contain* a conversion
1921      but it *requires* conversion to FINAL_TYPE.  */
1922   
1923   if ((TYPE_PRECISION (TREE_TYPE (op0))
1924        == TYPE_PRECISION (TREE_TYPE (arg0)))
1925       && TREE_TYPE (op0) != result_type)
1926     unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
1927   if ((TYPE_PRECISION (TREE_TYPE (op1))
1928        == TYPE_PRECISION (TREE_TYPE (arg1)))
1929       && TREE_TYPE (op1) != result_type)
1930     unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
1931   
1932   /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE.  */
1933   
1934   /* For bitwise operations, signedness of nominal type
1935      does not matter.  Consider only how operands were extended.  */
1936   if (bitwise)
1937     uns = unsigned0;
1938   
1939   /* Note that in all three cases below we refrain from optimizing
1940      an unsigned operation on sign-extended args.
1941      That would not be valid.  */
1942   
1943   /* Both args variable: if both extended in same way
1944      from same width, do it in that width.
1945      Do it unsigned if args were zero-extended.  */
1946   if ((TYPE_PRECISION (TREE_TYPE (arg0))
1947        < TYPE_PRECISION (result_type))
1948       && (TYPE_PRECISION (TREE_TYPE (arg1))
1949           == TYPE_PRECISION (TREE_TYPE (arg0)))
1950       && unsigned0 == unsigned1
1951       && (unsigned0 || !uns))
1952     return c_common_signed_or_unsigned_type
1953       (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
1954
1955   else if (TREE_CODE (arg0) == INTEGER_CST
1956            && (unsigned1 || !uns)
1957            && (TYPE_PRECISION (TREE_TYPE (arg1))
1958                < TYPE_PRECISION (result_type))
1959            && (type
1960                = c_common_signed_or_unsigned_type (unsigned1,
1961                                                    TREE_TYPE (arg1)))
1962            && !POINTER_TYPE_P (type)
1963            && int_fits_type_p (arg0, type))
1964     return type;
1965
1966   else if (TREE_CODE (arg1) == INTEGER_CST
1967            && (unsigned0 || !uns)
1968            && (TYPE_PRECISION (TREE_TYPE (arg0))
1969                < TYPE_PRECISION (result_type))
1970            && (type
1971                = c_common_signed_or_unsigned_type (unsigned0,
1972                                                    TREE_TYPE (arg0)))
1973            && !POINTER_TYPE_P (type)
1974            && int_fits_type_p (arg1, type))
1975     return type;
1976
1977   return result_type;
1978 }
1979
1980 /* Warns if the conversion of EXPR to TYPE may alter a value.
1981    This is a helper function for warnings_for_convert_and_check.  */
1982
1983 static void
1984 conversion_warning (tree type, tree expr)
1985 {
1986   bool give_warning = false;
1987
1988   int i;
1989   const int expr_num_operands = TREE_OPERAND_LENGTH (expr);
1990   tree expr_type = TREE_TYPE (expr);
1991
1992   if (!warn_conversion && !warn_sign_conversion)
1993     return;
1994
1995   /* If any operand is artificial, then this expression was generated
1996      by the compiler and we do not warn.  */
1997   for (i = 0; i < expr_num_operands; i++)
1998     {
1999       tree op = TREE_OPERAND (expr, i);
2000       if (op && DECL_P (op) && DECL_ARTIFICIAL (op))
2001         return;
2002     }
2003
2004   switch (TREE_CODE (expr))
2005     {
2006     case EQ_EXPR:
2007     case NE_EXPR:
2008     case LE_EXPR:
2009     case GE_EXPR:
2010     case LT_EXPR:
2011     case GT_EXPR:
2012     case TRUTH_ANDIF_EXPR:
2013     case TRUTH_ORIF_EXPR:
2014     case TRUTH_AND_EXPR:
2015     case TRUTH_OR_EXPR:
2016     case TRUTH_XOR_EXPR:
2017     case TRUTH_NOT_EXPR:
2018       /* Conversion from boolean to a signed:1 bit-field (which only
2019          can hold the values 0 and -1) doesn't lose information - but
2020          it does change the value.  */
2021       if (TYPE_PRECISION (type) == 1 && !TYPE_UNSIGNED (type)) 
2022         warning (OPT_Wconversion,
2023                  "conversion to %qT from boolean expression", type);
2024       return;
2025
2026     case REAL_CST:
2027     case INTEGER_CST:
2028
2029       /* Warn for real constant that is not an exact integer converted
2030          to integer type.  */
2031       if (TREE_CODE (expr_type) == REAL_TYPE
2032           && TREE_CODE (type) == INTEGER_TYPE)
2033         {
2034           if (!real_isinteger (TREE_REAL_CST_PTR (expr), TYPE_MODE (expr_type)))
2035             give_warning = true;
2036         }
2037       /* Warn for an integer constant that does not fit into integer type.  */
2038       else if (TREE_CODE (expr_type) == INTEGER_TYPE
2039                && TREE_CODE (type) == INTEGER_TYPE
2040                && !int_fits_type_p (expr, type))
2041         {
2042           if (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (expr_type) 
2043               && tree_int_cst_sgn (expr) < 0)
2044             warning (OPT_Wsign_conversion,
2045                      "negative integer implicitly converted to unsigned type");
2046           else if (!TYPE_UNSIGNED (type) && TYPE_UNSIGNED (expr_type))
2047             warning (OPT_Wsign_conversion,  "conversion of unsigned constant "
2048                      "value to negative integer");
2049           else
2050             give_warning = true;
2051         }
2052       else if (TREE_CODE (type) == REAL_TYPE)
2053         {
2054           /* Warn for an integer constant that does not fit into real type.  */
2055           if (TREE_CODE (expr_type) == INTEGER_TYPE)
2056             {
2057               REAL_VALUE_TYPE a = real_value_from_int_cst (0, expr);
2058               if (!exact_real_truncate (TYPE_MODE (type), &a))
2059                 give_warning = true;
2060             }
2061           /* Warn for a real constant that does not fit into a smaller
2062              real type.  */
2063           else if (TREE_CODE (expr_type) == REAL_TYPE
2064                    && TYPE_PRECISION (type) < TYPE_PRECISION (expr_type))
2065             {
2066               REAL_VALUE_TYPE a = TREE_REAL_CST (expr);
2067               if (!exact_real_truncate (TYPE_MODE (type), &a))
2068                 give_warning = true;
2069             }
2070         }
2071
2072       if (give_warning)
2073         warning (OPT_Wconversion,
2074                  "conversion to %qT alters %qT constant value",
2075                  type, expr_type);
2076
2077       return;
2078
2079     case COND_EXPR:
2080       {
2081         /* In case of COND_EXPR, if both operands are constants or
2082            COND_EXPR, then we do not care about the type of COND_EXPR,
2083            only about the conversion of each operand.  */
2084         tree op1 = TREE_OPERAND (expr, 1);
2085         tree op2 = TREE_OPERAND (expr, 2);
2086
2087         if ((TREE_CODE (op1) == REAL_CST || TREE_CODE (op1) == INTEGER_CST 
2088              || TREE_CODE (op1) == COND_EXPR)
2089             && (TREE_CODE (op2) == REAL_CST || TREE_CODE (op2) == INTEGER_CST
2090                 || TREE_CODE (op2) == COND_EXPR))
2091           {
2092             conversion_warning (type, op1);
2093             conversion_warning (type, op2);
2094             return;
2095           }
2096         /* Fall through.  */
2097       }
2098
2099     default: /* 'expr' is not a constant.  */
2100
2101       /* Warn for real types converted to integer types.  */
2102       if (TREE_CODE (expr_type) == REAL_TYPE
2103           && TREE_CODE (type) == INTEGER_TYPE)
2104         give_warning = true;
2105
2106       else if (TREE_CODE (expr_type) == INTEGER_TYPE
2107                && TREE_CODE (type) == INTEGER_TYPE)
2108         {
2109           /* Don't warn about unsigned char y = 0xff, x = (int) y;  */
2110           expr = get_unwidened (expr, 0);
2111           expr_type = TREE_TYPE (expr);
2112
2113           /* Don't warn for short y; short x = ((int)y & 0xff);  */
2114           if (TREE_CODE (expr) == BIT_AND_EXPR 
2115                 || TREE_CODE (expr) == BIT_IOR_EXPR 
2116               || TREE_CODE (expr) == BIT_XOR_EXPR)
2117             {
2118               /* If both args were extended from a shortest type,
2119                  use that type if that is safe.  */
2120               expr_type = shorten_binary_op (expr_type, 
2121                                              TREE_OPERAND (expr, 0), 
2122                                              TREE_OPERAND (expr, 1), 
2123                                              /* bitwise */1);
2124
2125               if (TREE_CODE (expr) == BIT_AND_EXPR)
2126                 {
2127                   tree op0 = TREE_OPERAND (expr, 0);
2128                   tree op1 = TREE_OPERAND (expr, 1);
2129                   bool unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
2130                   bool unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
2131
2132                   /* If one of the operands is a non-negative constant
2133                      that fits in the target type, then the type of the
2134                      other operand does not matter. */
2135                   if ((TREE_CODE (op0) == INTEGER_CST
2136                        && int_fits_type_p (op0, c_common_signed_type (type))
2137                        && int_fits_type_p (op0, c_common_unsigned_type (type)))
2138                       || (TREE_CODE (op1) == INTEGER_CST
2139                           && int_fits_type_p (op1, c_common_signed_type (type))
2140                           && int_fits_type_p (op1, 
2141                                               c_common_unsigned_type (type))))
2142                     return;
2143                   /* If constant is unsigned and fits in the target
2144                      type, then the result will also fit.  */
2145                   else if ((TREE_CODE (op0) == INTEGER_CST
2146                             && unsigned0 
2147                             && int_fits_type_p (op0, type))
2148                            || (TREE_CODE (op1) == INTEGER_CST
2149                                && unsigned1
2150                                && int_fits_type_p (op1, type)))
2151                     return;
2152                 }
2153             }
2154           /* Warn for integer types converted to smaller integer types.  */
2155           if (TYPE_PRECISION (type) < TYPE_PRECISION (expr_type)) 
2156             give_warning = true;
2157
2158           /* When they are the same width but different signedness,
2159              then the value may change.  */
2160           else if ((TYPE_PRECISION (type) == TYPE_PRECISION (expr_type)
2161                     && TYPE_UNSIGNED (expr_type) != TYPE_UNSIGNED (type))
2162                    /* Even when converted to a bigger type, if the type is
2163                       unsigned but expr is signed, then negative values
2164                       will be changed.  */
2165                    || (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (expr_type)))
2166             warning (OPT_Wsign_conversion, "conversion to %qT from %qT "
2167                      "may change the sign of the result",
2168                      type, expr_type);
2169         }
2170
2171       /* Warn for integer types converted to real types if and only if
2172          all the range of values of the integer type cannot be
2173          represented by the real type.  */
2174       else if (TREE_CODE (expr_type) == INTEGER_TYPE
2175                && TREE_CODE (type) == REAL_TYPE)
2176         {
2177           tree type_low_bound = TYPE_MIN_VALUE (expr_type);
2178           tree type_high_bound = TYPE_MAX_VALUE (expr_type);
2179           REAL_VALUE_TYPE real_low_bound 
2180             = real_value_from_int_cst (0, type_low_bound);
2181           REAL_VALUE_TYPE real_high_bound 
2182             = real_value_from_int_cst (0, type_high_bound);
2183
2184           if (!exact_real_truncate (TYPE_MODE (type), &real_low_bound)
2185               || !exact_real_truncate (TYPE_MODE (type), &real_high_bound))
2186             give_warning = true;
2187         }
2188
2189       /* Warn for real types converted to smaller real types.  */
2190       else if (TREE_CODE (expr_type) == REAL_TYPE
2191                && TREE_CODE (type) == REAL_TYPE
2192                && TYPE_PRECISION (type) < TYPE_PRECISION (expr_type))
2193         give_warning = true;
2194
2195
2196       if (give_warning)
2197         warning (OPT_Wconversion,
2198                  "conversion to %qT from %qT may alter its value",
2199                  type, expr_type);
2200     }
2201 }
2202
2203 /* Produce warnings after a conversion. RESULT is the result of
2204    converting EXPR to TYPE.  This is a helper function for
2205    convert_and_check and cp_convert_and_check.  */
2206
2207 void
2208 warnings_for_convert_and_check (tree type, tree expr, tree result)
2209 {
2210   if (TREE_CODE (expr) == INTEGER_CST
2211       && (TREE_CODE (type) == INTEGER_TYPE
2212           || TREE_CODE (type) == ENUMERAL_TYPE)
2213       && !int_fits_type_p (expr, type))
2214     {
2215       /* Do not diagnose overflow in a constant expression merely
2216          because a conversion overflowed.  */
2217       if (TREE_OVERFLOW (result))
2218         TREE_OVERFLOW (result) = TREE_OVERFLOW (expr);
2219
2220       if (TYPE_UNSIGNED (type))
2221         {
2222           /* This detects cases like converting -129 or 256 to
2223              unsigned char.  */
2224           if (!int_fits_type_p (expr, c_common_signed_type (type)))
2225             warning (OPT_Woverflow,
2226                      "large integer implicitly truncated to unsigned type");
2227           else
2228             conversion_warning (type, expr);
2229         }
2230       else if (!int_fits_type_p (expr, c_common_unsigned_type (type))) 
2231         warning (OPT_Woverflow,
2232                  "overflow in implicit constant conversion");
2233       /* No warning for converting 0x80000000 to int.  */
2234       else if (pedantic
2235                && (TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE
2236                    || TYPE_PRECISION (TREE_TYPE (expr))
2237                    != TYPE_PRECISION (type)))
2238         warning (OPT_Woverflow,
2239                  "overflow in implicit constant conversion");
2240
2241       else
2242         conversion_warning (type, expr);
2243     }
2244   else if ((TREE_CODE (result) == INTEGER_CST
2245             || TREE_CODE (result) == FIXED_CST) && TREE_OVERFLOW (result))
2246     warning (OPT_Woverflow,
2247              "overflow in implicit constant conversion");
2248   else
2249     conversion_warning (type, expr);
2250 }
2251
2252
2253 /* Convert EXPR to TYPE, warning about conversion problems with constants.
2254    Invoke this function on every expression that is converted implicitly,
2255    i.e. because of language rules and not because of an explicit cast.  */
2256
2257 tree
2258 convert_and_check (tree type, tree expr)
2259 {
2260   tree result;
2261   tree expr_for_warning;
2262
2263   /* Convert from a value with possible excess precision rather than
2264      via the semantic type, but do not warn about values not fitting
2265      exactly in the semantic type.  */
2266   if (TREE_CODE (expr) == EXCESS_PRECISION_EXPR)
2267     {
2268       tree orig_type = TREE_TYPE (expr);
2269       expr = TREE_OPERAND (expr, 0);
2270       expr_for_warning = convert (orig_type, expr);
2271       if (orig_type == type)
2272         return expr_for_warning;
2273     }
2274   else
2275     expr_for_warning = expr;
2276
2277   if (TREE_TYPE (expr) == type)
2278     return expr;
2279   
2280   result = convert (type, expr);
2281
2282   if (c_inhibit_evaluation_warnings == 0
2283       && !TREE_OVERFLOW_P (expr)
2284       && result != error_mark_node)
2285     warnings_for_convert_and_check (type, expr_for_warning, result);
2286
2287   return result;
2288 }
2289 \f
2290 /* A node in a list that describes references to variables (EXPR), which are
2291    either read accesses if WRITER is zero, or write accesses, in which case
2292    WRITER is the parent of EXPR.  */
2293 struct tlist
2294 {
2295   struct tlist *next;
2296   tree expr, writer;
2297 };
2298
2299 /* Used to implement a cache the results of a call to verify_tree.  We only
2300    use this for SAVE_EXPRs.  */
2301 struct tlist_cache
2302 {
2303   struct tlist_cache *next;
2304   struct tlist *cache_before_sp;
2305   struct tlist *cache_after_sp;
2306   tree expr;
2307 };
2308
2309 /* Obstack to use when allocating tlist structures, and corresponding
2310    firstobj.  */
2311 static struct obstack tlist_obstack;
2312 static char *tlist_firstobj = 0;
2313
2314 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
2315    warnings.  */
2316 static struct tlist *warned_ids;
2317 /* SAVE_EXPRs need special treatment.  We process them only once and then
2318    cache the results.  */
2319 static struct tlist_cache *save_expr_cache;
2320
2321 static void add_tlist (struct tlist **, struct tlist *, tree, int);
2322 static void merge_tlist (struct tlist **, struct tlist *, int);
2323 static void verify_tree (tree, struct tlist **, struct tlist **, tree);
2324 static int warning_candidate_p (tree);
2325 static bool candidate_equal_p (const_tree, const_tree);
2326 static void warn_for_collisions (struct tlist *);
2327 static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
2328 static struct tlist *new_tlist (struct tlist *, tree, tree);
2329
2330 /* Create a new struct tlist and fill in its fields.  */
2331 static struct tlist *
2332 new_tlist (struct tlist *next, tree t, tree writer)
2333 {
2334   struct tlist *l;
2335   l = XOBNEW (&tlist_obstack, struct tlist);
2336   l->next = next;
2337   l->expr = t;
2338   l->writer = writer;
2339   return l;
2340 }
2341
2342 /* Add duplicates of the nodes found in ADD to the list *TO.  If EXCLUDE_WRITER
2343    is nonnull, we ignore any node we find which has a writer equal to it.  */
2344
2345 static void
2346 add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
2347 {
2348   while (add)
2349     {
2350       struct tlist *next = add->next;
2351       if (!copy)
2352         add->next = *to;
2353       if (!exclude_writer || !candidate_equal_p (add->writer, exclude_writer))
2354         *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
2355       add = next;
2356     }
2357 }
2358
2359 /* Merge the nodes of ADD into TO.  This merging process is done so that for
2360    each variable that already exists in TO, no new node is added; however if
2361    there is a write access recorded in ADD, and an occurrence on TO is only
2362    a read access, then the occurrence in TO will be modified to record the
2363    write.  */
2364
2365 static void
2366 merge_tlist (struct tlist **to, struct tlist *add, int copy)
2367 {
2368   struct tlist **end = to;
2369
2370   while (*end)
2371     end = &(*end)->next;
2372
2373   while (add)
2374     {
2375       int found = 0;
2376       struct tlist *tmp2;
2377       struct tlist *next = add->next;
2378
2379       for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
2380         if (candidate_equal_p (tmp2->expr, add->expr))
2381           {
2382             found = 1;
2383             if (!tmp2->writer)
2384               tmp2->writer = add->writer;
2385           }
2386       if (!found)
2387         {
2388           *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
2389           end = &(*end)->next;
2390           *end = 0;
2391         }
2392       add = next;
2393     }
2394 }
2395
2396 /* WRITTEN is a variable, WRITER is its parent.  Warn if any of the variable
2397    references in list LIST conflict with it, excluding reads if ONLY writers
2398    is nonzero.  */
2399
2400 static void
2401 warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
2402                        int only_writes)
2403 {
2404   struct tlist *tmp;
2405
2406   /* Avoid duplicate warnings.  */
2407   for (tmp = warned_ids; tmp; tmp = tmp->next)
2408     if (candidate_equal_p (tmp->expr, written))
2409       return;
2410
2411   while (list)
2412     {
2413       if (candidate_equal_p (list->expr, written)
2414           && !candidate_equal_p (list->writer, writer)
2415           && (!only_writes || list->writer))
2416         {
2417           warned_ids = new_tlist (warned_ids, written, NULL_TREE);
2418           warning_at (EXPR_HAS_LOCATION (writer)
2419                       ? EXPR_LOCATION (writer) : input_location,
2420                       OPT_Wsequence_point, "operation on %qE may be undefined",
2421                       list->expr);
2422         }
2423       list = list->next;
2424     }
2425 }
2426
2427 /* Given a list LIST of references to variables, find whether any of these
2428    can cause conflicts due to missing sequence points.  */
2429
2430 static void
2431 warn_for_collisions (struct tlist *list)
2432 {
2433   struct tlist *tmp;
2434
2435   for (tmp = list; tmp; tmp = tmp->next)
2436     {
2437       if (tmp->writer)
2438         warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
2439     }
2440 }
2441
2442 /* Return nonzero if X is a tree that can be verified by the sequence point
2443    warnings.  */
2444 static int
2445 warning_candidate_p (tree x)
2446 {
2447   /* !VOID_TYPE_P (TREE_TYPE (x)) is workaround for cp/tree.c
2448      (lvalue_p) crash on TRY/CATCH. */
2449   return !(DECL_P (x) && DECL_ARTIFICIAL (x))
2450     && TREE_TYPE (x) && !VOID_TYPE_P (TREE_TYPE (x)) && lvalue_p (x);
2451 }
2452
2453 /* Return nonzero if X and Y appear to be the same candidate (or NULL) */
2454 static bool
2455 candidate_equal_p (const_tree x, const_tree y)
2456 {
2457   return (x == y) || (x && y && operand_equal_p (x, y, 0));
2458 }
2459
2460 /* Walk the tree X, and record accesses to variables.  If X is written by the
2461    parent tree, WRITER is the parent.
2462    We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP.  If this
2463    expression or its only operand forces a sequence point, then everything up
2464    to the sequence point is stored in PBEFORE_SP.  Everything else gets stored
2465    in PNO_SP.
2466    Once we return, we will have emitted warnings if any subexpression before
2467    such a sequence point could be undefined.  On a higher level, however, the
2468    sequence point may not be relevant, and we'll merge the two lists.
2469
2470    Example: (b++, a) + b;
2471    The call that processes the COMPOUND_EXPR will store the increment of B
2472    in PBEFORE_SP, and the use of A in PNO_SP.  The higher-level call that
2473    processes the PLUS_EXPR will need to merge the two lists so that
2474    eventually, all accesses end up on the same list (and we'll warn about the
2475    unordered subexpressions b++ and b.
2476
2477    A note on merging.  If we modify the former example so that our expression
2478    becomes
2479      (b++, b) + a
2480    care must be taken not simply to add all three expressions into the final
2481    PNO_SP list.  The function merge_tlist takes care of that by merging the
2482    before-SP list of the COMPOUND_EXPR into its after-SP list in a special
2483    way, so that no more than one access to B is recorded.  */
2484
2485 static void
2486 verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
2487              tree writer)
2488 {
2489   struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
2490   enum tree_code code;
2491   enum tree_code_class cl;
2492
2493   /* X may be NULL if it is the operand of an empty statement expression
2494      ({ }).  */
2495   if (x == NULL)
2496     return;
2497
2498  restart:
2499   code = TREE_CODE (x);
2500   cl = TREE_CODE_CLASS (code);
2501
2502   if (warning_candidate_p (x))
2503     *pno_sp = new_tlist (*pno_sp, x, writer);
2504
2505   switch (code)
2506     {
2507     case CONSTRUCTOR:
2508       return;
2509
2510     case COMPOUND_EXPR:
2511     case TRUTH_ANDIF_EXPR:
2512     case TRUTH_ORIF_EXPR:
2513       tmp_before = tmp_nosp = tmp_list3 = 0;
2514       verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
2515       warn_for_collisions (tmp_nosp);
2516       merge_tlist (pbefore_sp, tmp_before, 0);
2517       merge_tlist (pbefore_sp, tmp_nosp, 0);
2518       verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
2519       merge_tlist (pbefore_sp, tmp_list3, 0);
2520       return;
2521
2522     case COND_EXPR:
2523       tmp_before = tmp_list2 = 0;
2524       verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
2525       warn_for_collisions (tmp_list2);
2526       merge_tlist (pbefore_sp, tmp_before, 0);
2527       merge_tlist (pbefore_sp, tmp_list2, 1);
2528
2529       tmp_list3 = tmp_nosp = 0;
2530       verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
2531       warn_for_collisions (tmp_nosp);
2532       merge_tlist (pbefore_sp, tmp_list3, 0);
2533
2534       tmp_list3 = tmp_list2 = 0;
2535       verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
2536       warn_for_collisions (tmp_list2);
2537       merge_tlist (pbefore_sp, tmp_list3, 0);
2538       /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
2539          two first, to avoid warning for (a ? b++ : b++).  */
2540       merge_tlist (&tmp_nosp, tmp_list2, 0);
2541       add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
2542       return;
2543
2544     case PREDECREMENT_EXPR:
2545     case PREINCREMENT_EXPR:
2546     case POSTDECREMENT_EXPR:
2547     case POSTINCREMENT_EXPR:
2548       verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
2549       return;
2550
2551     case MODIFY_EXPR:
2552       tmp_before = tmp_nosp = tmp_list3 = 0;
2553       verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
2554       verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
2555       /* Expressions inside the LHS are not ordered wrt. the sequence points
2556          in the RHS.  Example:
2557            *a = (a++, 2)
2558          Despite the fact that the modification of "a" is in the before_sp
2559          list (tmp_before), it conflicts with the use of "a" in the LHS.
2560          We can handle this by adding the contents of tmp_list3
2561          to those of tmp_before, and redoing the collision warnings for that
2562          list.  */
2563       add_tlist (&tmp_before, tmp_list3, x, 1);
2564       warn_for_collisions (tmp_before);
2565       /* Exclude the LHS itself here; we first have to merge it into the
2566          tmp_nosp list.  This is done to avoid warning for "a = a"; if we
2567          didn't exclude the LHS, we'd get it twice, once as a read and once
2568          as a write.  */
2569       add_tlist (pno_sp, tmp_list3, x, 0);
2570       warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
2571
2572       merge_tlist (pbefore_sp, tmp_before, 0);
2573       if (warning_candidate_p (TREE_OPERAND (x, 0)))
2574         merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
2575       add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
2576       return;
2577
2578     case CALL_EXPR:
2579       /* We need to warn about conflicts among arguments and conflicts between
2580          args and the function address.  Side effects of the function address,
2581          however, are not ordered by the sequence point of the call.  */
2582       {
2583         call_expr_arg_iterator iter;
2584         tree arg;
2585         tmp_before = tmp_nosp = 0; 
2586         verify_tree (CALL_EXPR_FN (x), &tmp_before, &tmp_nosp, NULL_TREE);
2587         FOR_EACH_CALL_EXPR_ARG (arg, iter, x)
2588           {
2589             tmp_list2 = tmp_list3 = 0;
2590             verify_tree (arg, &tmp_list2, &tmp_list3, NULL_TREE);
2591             merge_tlist (&tmp_list3, tmp_list2, 0);
2592             add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
2593           }
2594         add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
2595         warn_for_collisions (tmp_before);
2596         add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
2597         return;
2598       }
2599
2600     case TREE_LIST:
2601       /* Scan all the list, e.g. indices of multi dimensional array.  */
2602       while (x)
2603         {
2604           tmp_before = tmp_nosp = 0;
2605           verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
2606           merge_tlist (&tmp_nosp, tmp_before, 0);
2607           add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
2608           x = TREE_CHAIN (x);
2609         }
2610       return;
2611
2612     case SAVE_EXPR:
2613       {
2614         struct tlist_cache *t;
2615         for (t = save_expr_cache; t; t = t->next)
2616           if (candidate_equal_p (t->expr, x))
2617             break;
2618
2619         if (!t)
2620           {
2621             t = XOBNEW (&tlist_obstack, struct tlist_cache);
2622             t->next = save_expr_cache;
2623             t->expr = x;
2624             save_expr_cache = t;
2625
2626             tmp_before = tmp_nosp = 0;
2627             verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
2628             warn_for_collisions (tmp_nosp);
2629
2630             tmp_list3 = 0;
2631             while (tmp_nosp)
2632               {
2633                 struct tlist *t = tmp_nosp;
2634                 tmp_nosp = t->next;
2635                 merge_tlist (&tmp_list3, t, 0);
2636               }
2637             t->cache_before_sp = tmp_before;
2638             t->cache_after_sp = tmp_list3;
2639           }
2640         merge_tlist (pbefore_sp, t->cache_before_sp, 1);
2641         add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
2642         return;
2643       }
2644
2645     case ADDR_EXPR:
2646       x = TREE_OPERAND (x, 0);
2647       if (DECL_P (x))
2648         return;
2649       writer = 0;
2650       goto restart;
2651
2652     default:
2653       /* For other expressions, simply recurse on their operands.
2654          Manual tail recursion for unary expressions.
2655          Other non-expressions need not be processed.  */
2656       if (cl == tcc_unary)
2657         {
2658           x = TREE_OPERAND (x, 0);
2659           writer = 0;
2660           goto restart;
2661         }
2662       else if (IS_EXPR_CODE_CLASS (cl))
2663         {
2664           int lp;
2665           int max = TREE_OPERAND_LENGTH (x);
2666           for (lp = 0; lp < max; lp++)
2667             {
2668               tmp_before = tmp_nosp = 0;
2669               verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
2670               merge_tlist (&tmp_nosp, tmp_before, 0);
2671               add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
2672             }
2673         }
2674       return;
2675     }
2676 }
2677
2678 /* Try to warn for undefined behavior in EXPR due to missing sequence
2679    points.  */
2680
2681 void
2682 verify_sequence_points (tree expr)
2683 {
2684   struct tlist *before_sp = 0, *after_sp = 0;
2685
2686   warned_ids = 0;
2687   save_expr_cache = 0;
2688   if (tlist_firstobj == 0)
2689     {
2690       gcc_obstack_init (&tlist_obstack);
2691       tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
2692     }
2693
2694   verify_tree (expr, &before_sp, &after_sp, 0);
2695   warn_for_collisions (after_sp);
2696   obstack_free (&tlist_obstack, tlist_firstobj);
2697 }
2698 \f
2699 /* Validate the expression after `case' and apply default promotions.  */
2700
2701 static tree
2702 check_case_value (tree value)
2703 {
2704   if (value == NULL_TREE)
2705     return value;
2706
2707   /* ??? Can we ever get nops here for a valid case value?  We
2708      shouldn't for C.  */
2709   STRIP_TYPE_NOPS (value);
2710   /* In C++, the following is allowed:
2711
2712        const int i = 3;
2713        switch (...) { case i: ... }
2714
2715      So, we try to reduce the VALUE to a constant that way.  */
2716   if (c_dialect_cxx ())
2717     {
2718       value = decl_constant_value (value);
2719       STRIP_TYPE_NOPS (value);
2720       value = fold (value);
2721     }
2722
2723   if (TREE_CODE (value) == INTEGER_CST)
2724     /* Promote char or short to int.  */
2725     value = perform_integral_promotions (value);
2726   else if (value != error_mark_node)
2727     {
2728       error ("case label does not reduce to an integer constant");
2729       value = error_mark_node;
2730     }
2731
2732   constant_expression_warning (value);
2733
2734   return value;
2735 }
2736 \f
2737 /* See if the case values LOW and HIGH are in the range of the original
2738    type (i.e. before the default conversion to int) of the switch testing
2739    expression.
2740    TYPE is the promoted type of the testing expression, and ORIG_TYPE is
2741    the type before promoting it.  CASE_LOW_P is a pointer to the lower
2742    bound of the case label, and CASE_HIGH_P is the upper bound or NULL
2743    if the case is not a case range.
2744    The caller has to make sure that we are not called with NULL for
2745    CASE_LOW_P (i.e. the default case).
2746    Returns true if the case label is in range of ORIG_TYPE (saturated or
2747    untouched) or false if the label is out of range.  */
2748
2749 static bool
2750 check_case_bounds (tree type, tree orig_type,
2751                    tree *case_low_p, tree *case_high_p)
2752 {
2753   tree min_value, max_value;
2754   tree case_low = *case_low_p;
2755   tree case_high = case_high_p ? *case_high_p : case_low;
2756
2757   /* If there was a problem with the original type, do nothing.  */
2758   if (orig_type == error_mark_node)
2759     return true;
2760
2761   min_value = TYPE_MIN_VALUE (orig_type);
2762   max_value = TYPE_MAX_VALUE (orig_type);
2763
2764   /* Case label is less than minimum for type.  */
2765   if (tree_int_cst_compare (case_low, min_value) < 0
2766       && tree_int_cst_compare (case_high, min_value) < 0)
2767     {
2768       warning (0, "case label value is less than minimum value for type");
2769       return false;
2770     }
2771
2772   /* Case value is greater than maximum for type.  */
2773   if (tree_int_cst_compare (case_low, max_value) > 0
2774       && tree_int_cst_compare (case_high, max_value) > 0)
2775     {
2776       warning (0, "case label value exceeds maximum value for type");
2777       return false;
2778     }
2779
2780   /* Saturate lower case label value to minimum.  */
2781   if (tree_int_cst_compare (case_high, min_value) >= 0
2782       && tree_int_cst_compare (case_low, min_value) < 0)
2783     {
2784       warning (0, "lower value in case label range"
2785                " less than minimum value for type");
2786       case_low = min_value;
2787     }
2788
2789   /* Saturate upper case label value to maximum.  */
2790   if (tree_int_cst_compare (case_low, max_value) <= 0
2791       && tree_int_cst_compare (case_high, max_value) > 0)
2792     {
2793       warning (0, "upper value in case label range"
2794                " exceeds maximum value for type");
2795       case_high = max_value;
2796     }
2797
2798   if (*case_low_p != case_low)
2799     *case_low_p = convert (type, case_low);
2800   if (case_high_p && *case_high_p != case_high)
2801     *case_high_p = convert (type, case_high);
2802
2803   return true;
2804 }
2805 \f
2806 /* Return an integer type with BITS bits of precision,
2807    that is unsigned if UNSIGNEDP is nonzero, otherwise signed.  */
2808
2809 tree
2810 c_common_type_for_size (unsigned int bits, int unsignedp)
2811 {
2812   if (bits == TYPE_PRECISION (integer_type_node))
2813     return unsignedp ? unsigned_type_node : integer_type_node;
2814
2815   if (bits == TYPE_PRECISION (signed_char_type_node))
2816     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2817
2818   if (bits == TYPE_PRECISION (short_integer_type_node))
2819     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2820
2821   if (bits == TYPE_PRECISION (long_integer_type_node))
2822     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2823
2824   if (bits == TYPE_PRECISION (long_long_integer_type_node))
2825     return (unsignedp ? long_long_unsigned_type_node
2826             : long_long_integer_type_node);
2827
2828   if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
2829     return (unsignedp ? widest_unsigned_literal_type_node
2830             : widest_integer_literal_type_node);
2831
2832   if (bits <= TYPE_PRECISION (intQI_type_node))
2833     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2834
2835   if (bits <= TYPE_PRECISION (intHI_type_node))
2836     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2837
2838   if (bits <= TYPE_PRECISION (intSI_type_node))
2839     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2840
2841   if (bits <= TYPE_PRECISION (intDI_type_node))
2842     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2843
2844   return 0;
2845 }
2846
2847 /* Return a fixed-point type that has at least IBIT ibits and FBIT fbits
2848    that is unsigned if UNSIGNEDP is nonzero, otherwise signed;
2849    and saturating if SATP is nonzero, otherwise not saturating.  */
2850
2851 tree
2852 c_common_fixed_point_type_for_size (unsigned int ibit, unsigned int fbit,
2853                                     int unsignedp, int satp)
2854 {
2855   enum machine_mode mode;
2856   if (ibit == 0)
2857     mode = unsignedp ? UQQmode : QQmode;
2858   else
2859     mode = unsignedp ? UHAmode : HAmode;
2860
2861   for (; mode != VOIDmode; mode = GET_MODE_WIDER_MODE (mode))
2862     if (GET_MODE_IBIT (mode) >= ibit && GET_MODE_FBIT (mode) >= fbit)
2863       break;
2864
2865   if (mode == VOIDmode || !targetm.scalar_mode_supported_p (mode))
2866     {
2867       sorry ("GCC cannot support operators with integer types and "
2868              "fixed-point types that have too many integral and "
2869              "fractional bits together");
2870       return 0;
2871     }
2872
2873   return c_common_type_for_mode (mode, satp);
2874 }
2875
2876 /* Used for communication between c_common_type_for_mode and
2877    c_register_builtin_type.  */
2878 static GTY(()) tree registered_builtin_types;
2879
2880 /* Return a data type that has machine mode MODE.
2881    If the mode is an integer,
2882    then UNSIGNEDP selects between signed and unsigned types.
2883    If the mode is a fixed-point mode,
2884    then UNSIGNEDP selects between saturating and nonsaturating types.  */
2885
2886 tree
2887 c_common_type_for_mode (enum machine_mode mode, int unsignedp)
2888 {
2889   tree t;
2890
2891   if (mode == TYPE_MODE (integer_type_node))
2892     return unsignedp ? unsigned_type_node : integer_type_node;
2893
2894   if (mode == TYPE_MODE (signed_char_type_node))
2895     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2896
2897   if (mode == TYPE_MODE (short_integer_type_node))
2898     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2899
2900   if (mode == TYPE_MODE (long_integer_type_node))
2901     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2902
2903   if (mode == TYPE_MODE (long_long_integer_type_node))
2904     return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
2905
2906   if (mode == TYPE_MODE (widest_integer_literal_type_node))
2907     return unsignedp ? widest_unsigned_literal_type_node
2908                      : widest_integer_literal_type_node;
2909
2910   if (mode == QImode)
2911     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2912
2913   if (mode == HImode)
2914     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2915
2916   if (mode == SImode)
2917     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2918
2919   if (mode == DImode)
2920     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2921
2922 #if HOST_BITS_PER_WIDE_INT >= 64
2923   if (mode == TYPE_MODE (intTI_type_node))
2924     return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2925 #endif
2926
2927   if (mode == TYPE_MODE (float_type_node))
2928     return float_type_node;
2929
2930   if (mode == TYPE_MODE (double_type_node))
2931     return double_type_node;
2932
2933   if (mode == TYPE_MODE (long_double_type_node))
2934     return long_double_type_node;
2935
2936   if (mode == TYPE_MODE (void_type_node))
2937     return void_type_node;
2938
2939   if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
2940     return (unsignedp
2941             ? make_unsigned_type (GET_MODE_PRECISION (mode))
2942             : make_signed_type (GET_MODE_PRECISION (mode)));
2943
2944   if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
2945     return (unsignedp
2946             ? make_unsigned_type (GET_MODE_PRECISION (mode))
2947             : make_signed_type (GET_MODE_PRECISION (mode)));
2948
2949   if (COMPLEX_MODE_P (mode))
2950     {
2951       enum machine_mode inner_mode;
2952       tree inner_type;
2953
2954       if (mode == TYPE_MODE (complex_float_type_node))
2955         return complex_float_type_node;
2956       if (mode == TYPE_MODE (complex_double_type_node))
2957         return complex_double_type_node;
2958       if (mode == TYPE_MODE (complex_long_double_type_node))
2959         return complex_long_double_type_node;
2960
2961       if (mode == TYPE_MODE (complex_integer_type_node) && !unsignedp)
2962         return complex_integer_type_node;
2963
2964       inner_mode = GET_MODE_INNER (mode);
2965       inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2966       if (inner_type != NULL_TREE)
2967         return build_complex_type (inner_type);
2968     }
2969   else if (VECTOR_MODE_P (mode))
2970     {
2971       enum machine_mode inner_mode = GET_MODE_INNER (mode);
2972       tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2973       if (inner_type != NULL_TREE)
2974         return build_vector_type_for_mode (inner_type, mode);
2975     }
2976
2977   if (mode == TYPE_MODE (dfloat32_type_node))
2978     return dfloat32_type_node;
2979   if (mode == TYPE_MODE (dfloat64_type_node))
2980     return dfloat64_type_node;
2981   if (mode == TYPE_MODE (dfloat128_type_node))
2982     return dfloat128_type_node;
2983
2984   if (ALL_SCALAR_FIXED_POINT_MODE_P (mode))
2985     {
2986       if (mode == TYPE_MODE (short_fract_type_node))
2987         return unsignedp ? sat_short_fract_type_node : short_fract_type_node;
2988       if (mode == TYPE_MODE (fract_type_node))
2989         return unsignedp ? sat_fract_type_node : fract_type_node;
2990       if (mode == TYPE_MODE (long_fract_type_node))
2991         return unsignedp ? sat_long_fract_type_node : long_fract_type_node;
2992       if (mode == TYPE_MODE (long_long_fract_type_node))
2993         return unsignedp ? sat_long_long_fract_type_node
2994                          : long_long_fract_type_node;
2995
2996       if (mode == TYPE_MODE (unsigned_short_fract_type_node))
2997         return unsignedp ? sat_unsigned_short_fract_type_node
2998                          : unsigned_short_fract_type_node;
2999       if (mode == TYPE_MODE (unsigned_fract_type_node))
3000         return unsignedp ? sat_unsigned_fract_type_node
3001                          : unsigned_fract_type_node;
3002       if (mode == TYPE_MODE (unsigned_long_fract_type_node))
3003         return unsignedp ? sat_unsigned_long_fract_type_node
3004                          : unsigned_long_fract_type_node;
3005       if (mode == TYPE_MODE (unsigned_long_long_fract_type_node))
3006         return unsignedp ? sat_unsigned_long_long_fract_type_node
3007                          : unsigned_long_long_fract_type_node;
3008
3009       if (mode == TYPE_MODE (short_accum_type_node))
3010         return unsignedp ? sat_short_accum_type_node : short_accum_type_node;
3011       if (mode == TYPE_MODE (accum_type_node))
3012         return unsignedp ? sat_accum_type_node : accum_type_node;
3013       if (mode == TYPE_MODE (long_accum_type_node))
3014         return unsignedp ? sat_long_accum_type_node : long_accum_type_node;
3015       if (mode == TYPE_MODE (long_long_accum_type_node))
3016         return unsignedp ? sat_long_long_accum_type_node
3017                          : long_long_accum_type_node;
3018
3019       if (mode == TYPE_MODE (unsigned_short_accum_type_node))
3020         return unsignedp ? sat_unsigned_short_accum_type_node
3021                          : unsigned_short_accum_type_node;
3022       if (mode == TYPE_MODE (unsigned_accum_type_node))
3023         return unsignedp ? sat_unsigned_accum_type_node
3024                          : unsigned_accum_type_node;
3025       if (mode == TYPE_MODE (unsigned_long_accum_type_node))
3026         return unsignedp ? sat_unsigned_long_accum_type_node
3027                          : unsigned_long_accum_type_node;
3028       if (mode == TYPE_MODE (unsigned_long_long_accum_type_node))
3029         return unsignedp ? sat_unsigned_long_long_accum_type_node
3030                          : unsigned_long_long_accum_type_node;
3031
3032       if (mode == QQmode)
3033         return unsignedp ? sat_qq_type_node : qq_type_node;
3034       if (mode == HQmode)
3035         return unsignedp ? sat_hq_type_node : hq_type_node;
3036       if (mode == SQmode)
3037         return unsignedp ? sat_sq_type_node : sq_type_node;
3038       if (mode == DQmode)
3039         return unsignedp ? sat_dq_type_node : dq_type_node;
3040       if (mode == TQmode)
3041         return unsignedp ? sat_tq_type_node : tq_type_node;
3042
3043       if (mode == UQQmode)
3044         return unsignedp ? sat_uqq_type_node : uqq_type_node;
3045       if (mode == UHQmode)
3046         return unsignedp ? sat_uhq_type_node : uhq_type_node;
3047       if (mode == USQmode)
3048         return unsignedp ? sat_usq_type_node : usq_type_node;
3049       if (mode == UDQmode)
3050         return unsignedp ? sat_udq_type_node : udq_type_node;
3051       if (mode == UTQmode)
3052         return unsignedp ? sat_utq_type_node : utq_type_node;
3053
3054       if (mode == HAmode)
3055         return unsignedp ? sat_ha_type_node : ha_type_node;
3056       if (mode == SAmode)
3057         return unsignedp ? sat_sa_type_node : sa_type_node;
3058       if (mode == DAmode)
3059         return unsignedp ? sat_da_type_node : da_type_node;
3060       if (mode == TAmode)
3061         return unsignedp ? sat_ta_type_node : ta_type_node;
3062
3063       if (mode == UHAmode)
3064         return unsignedp ? sat_uha_type_node : uha_type_node;
3065       if (mode == USAmode)
3066         return unsignedp ? sat_usa_type_node : usa_type_node;
3067       if (mode == UDAmode)
3068         return unsignedp ? sat_uda_type_node : uda_type_node;
3069       if (mode == UTAmode)
3070         return unsignedp ? sat_uta_type_node : uta_type_node;
3071     }
3072
3073   for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
3074     if (TYPE_MODE (TREE_VALUE (t)) == mode)
3075       return TREE_VALUE (t);
3076
3077   return 0;
3078 }
3079
3080 tree
3081 c_common_unsigned_type (tree type)
3082 {
3083   return c_common_signed_or_unsigned_type (1, type);
3084 }
3085
3086 /* Return a signed type the same as TYPE in other respects.  */
3087
3088 tree
3089 c_common_signed_type (tree type)
3090 {
3091   return c_common_signed_or_unsigned_type (0, type);
3092 }
3093
3094 /* Return a type the same as TYPE except unsigned or
3095    signed according to UNSIGNEDP.  */
3096
3097 tree
3098 c_common_signed_or_unsigned_type (int unsignedp, tree type)
3099 {
3100   tree type1;
3101
3102   /* This block of code emulates the behavior of the old
3103      c_common_unsigned_type. In particular, it returns
3104      long_unsigned_type_node if passed a long, even when a int would
3105      have the same size. This is necessary for warnings to work
3106      correctly in archs where sizeof(int) == sizeof(long) */
3107
3108   type1 = TYPE_MAIN_VARIANT (type);
3109   if (type1 == signed_char_type_node || type1 == char_type_node || type1 == unsigned_char_type_node)
3110     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3111   if (type1 == integer_type_node || type1 == unsigned_type_node)
3112     return unsignedp ? unsigned_type_node : integer_type_node;
3113   if (type1 == short_integer_type_node || type1 == short_unsigned_type_node)
3114     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3115   if (type1 == long_integer_type_node || type1 == long_unsigned_type_node)
3116     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3117   if (type1 == long_long_integer_type_node || type1 == long_long_unsigned_type_node)
3118     return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
3119   if (type1 == widest_integer_literal_type_node || type1 == widest_unsigned_literal_type_node)
3120     return unsignedp ? widest_unsigned_literal_type_node : widest_integer_literal_type_node;
3121 #if HOST_BITS_PER_WIDE_INT >= 64
3122   if (type1 == intTI_type_node || type1 == unsigned_intTI_type_node)
3123     return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
3124 #endif
3125   if (type1 == intDI_type_node || type1 == unsigned_intDI_type_node)
3126     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
3127   if (type1 == intSI_type_node || type1 == unsigned_intSI_type_node)
3128     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
3129   if (type1 == intHI_type_node || type1 == unsigned_intHI_type_node)
3130     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
3131   if (type1 == intQI_type_node || type1 == unsigned_intQI_type_node)
3132     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
3133
3134 #define C_COMMON_FIXED_TYPES(NAME)          \
3135   if (type1 == short_ ## NAME ## _type_node \
3136       || type1 == unsigned_short_ ## NAME ## _type_node) \
3137     return unsignedp ? unsigned_short_ ## NAME ## _type_node \
3138                      : short_ ## NAME ## _type_node; \
3139   if (type1 == NAME ## _type_node \
3140       || type1 == unsigned_ ## NAME ## _type_node) \
3141     return unsignedp ? unsigned_ ## NAME ## _type_node \
3142                      : NAME ## _type_node; \
3143   if (type1 == long_ ## NAME ## _type_node \
3144       || type1 == unsigned_long_ ## NAME ## _type_node) \
3145     return unsignedp ? unsigned_long_ ## NAME ## _type_node \
3146                      : long_ ## NAME ## _type_node; \
3147   if (type1 == long_long_ ## NAME ## _type_node \
3148       || type1 == unsigned_long_long_ ## NAME ## _type_node) \
3149     return unsignedp ? unsigned_long_long_ ## NAME ## _type_node \
3150                      : long_long_ ## NAME ## _type_node;
3151
3152 #define C_COMMON_FIXED_MODE_TYPES(NAME) \
3153   if (type1 == NAME ## _type_node \
3154       || type1 == u ## NAME ## _type_node) \
3155     return unsignedp ? u ## NAME ## _type_node \
3156                      : NAME ## _type_node;
3157
3158 #define C_COMMON_FIXED_TYPES_SAT(NAME) \
3159   if (type1 == sat_ ## short_ ## NAME ## _type_node \
3160       || type1 == sat_ ## unsigned_short_ ## NAME ## _type_node) \
3161     return unsignedp ? sat_ ## unsigned_short_ ## NAME ## _type_node \
3162                      : sat_ ## short_ ## NAME ## _type_node; \
3163   if (type1 == sat_ ## NAME ## _type_node \
3164       || type1 == sat_ ## unsigned_ ## NAME ## _type_node) \
3165     return unsignedp ? sat_ ## unsigned_ ## NAME ## _type_node \
3166                      : sat_ ## NAME ## _type_node; \
3167   if (type1 == sat_ ## long_ ## NAME ## _type_node \
3168       || type1 == sat_ ## unsigned_long_ ## NAME ## _type_node) \
3169     return unsignedp ? sat_ ## unsigned_long_ ## NAME ## _type_node \
3170                      : sat_ ## long_ ## NAME ## _type_node; \
3171   if (type1 == sat_ ## long_long_ ## NAME ## _type_node \
3172       || type1 == sat_ ## unsigned_long_long_ ## NAME ## _type_node) \
3173     return unsignedp ? sat_ ## unsigned_long_long_ ## NAME ## _type_node \
3174                      : sat_ ## long_long_ ## NAME ## _type_node;
3175
3176 #define C_COMMON_FIXED_MODE_TYPES_SAT(NAME)     \
3177   if (type1 == sat_ ## NAME ## _type_node \
3178       || type1 == sat_ ## u ## NAME ## _type_node) \
3179     return unsignedp ? sat_ ## u ## NAME ## _type_node \
3180                      : sat_ ## NAME ## _type_node;
3181
3182   C_COMMON_FIXED_TYPES (fract);
3183   C_COMMON_FIXED_TYPES_SAT (fract);
3184   C_COMMON_FIXED_TYPES (accum);
3185   C_COMMON_FIXED_TYPES_SAT (accum);
3186
3187   C_COMMON_FIXED_MODE_TYPES (qq);
3188   C_COMMON_FIXED_MODE_TYPES (hq);
3189   C_COMMON_FIXED_MODE_TYPES (sq);
3190   C_COMMON_FIXED_MODE_TYPES (dq);
3191   C_COMMON_FIXED_MODE_TYPES (tq);
3192   C_COMMON_FIXED_MODE_TYPES_SAT (qq);
3193   C_COMMON_FIXED_MODE_TYPES_SAT (hq);
3194   C_COMMON_FIXED_MODE_TYPES_SAT (sq);
3195   C_COMMON_FIXED_MODE_TYPES_SAT (dq);
3196   C_COMMON_FIXED_MODE_TYPES_SAT (tq);
3197   C_COMMON_FIXED_MODE_TYPES (ha);
3198   C_COMMON_FIXED_MODE_TYPES (sa);
3199   C_COMMON_FIXED_MODE_TYPES (da);
3200   C_COMMON_FIXED_MODE_TYPES (ta);
3201   C_COMMON_FIXED_MODE_TYPES_SAT (ha);
3202   C_COMMON_FIXED_MODE_TYPES_SAT (sa);
3203   C_COMMON_FIXED_MODE_TYPES_SAT (da);
3204   C_COMMON_FIXED_MODE_TYPES_SAT (ta);
3205
3206   /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
3207      the precision; they have precision set to match their range, but
3208      may use a wider mode to match an ABI.  If we change modes, we may
3209      wind up with bad conversions.  For INTEGER_TYPEs in C, must check
3210      the precision as well, so as to yield correct results for
3211      bit-field types.  C++ does not have these separate bit-field
3212      types, and producing a signed or unsigned variant of an
3213      ENUMERAL_TYPE may cause other problems as well.  */
3214
3215   if (!INTEGRAL_TYPE_P (type)
3216       || TYPE_UNSIGNED (type) == unsignedp)
3217     return type;
3218
3219 #define TYPE_OK(node)                                                       \
3220   (TYPE_MODE (type) == TYPE_MODE (node)                                     \
3221    && TYPE_PRECISION (type) == TYPE_PRECISION (node))
3222   if (TYPE_OK (signed_char_type_node))
3223     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3224   if (TYPE_OK (integer_type_node))
3225     return unsignedp ? unsigned_type_node : integer_type_node;
3226   if (TYPE_OK (short_integer_type_node))
3227     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3228   if (TYPE_OK (long_integer_type_node))
3229     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3230   if (TYPE_OK (long_long_integer_type_node))
3231     return (unsignedp ? long_long_unsigned_type_node
3232             : long_long_integer_type_node);
3233   if (TYPE_OK (widest_integer_literal_type_node))
3234     return (unsignedp ? widest_unsigned_literal_type_node
3235             : widest_integer_literal_type_node);
3236
3237 #if HOST_BITS_PER_WIDE_INT >= 64
3238   if (TYPE_OK (intTI_type_node))
3239     return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
3240 #endif
3241   if (TYPE_OK (intDI_type_node))
3242     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
3243   if (TYPE_OK (intSI_type_node))
3244     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
3245   if (TYPE_OK (intHI_type_node))
3246     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
3247   if (TYPE_OK (intQI_type_node))
3248     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
3249 #undef TYPE_OK
3250
3251   return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
3252 }
3253
3254 /* Build a bit-field integer type for the given WIDTH and UNSIGNEDP.  */
3255
3256 tree
3257 c_build_bitfield_integer_type (unsigned HOST_WIDE_INT width, int unsignedp)
3258 {
3259   /* Extended integer types of the same width as a standard type have
3260      lesser rank, so those of the same width as int promote to int or
3261      unsigned int and are valid for printf formats expecting int or
3262      unsigned int.  To avoid such special cases, avoid creating
3263      extended integer types for bit-fields if a standard integer type
3264      is available.  */
3265   if (width == TYPE_PRECISION (integer_type_node))
3266     return unsignedp ? unsigned_type_node : integer_type_node;
3267   if (width == TYPE_PRECISION (signed_char_type_node))
3268     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3269   if (width == TYPE_PRECISION (short_integer_type_node))
3270     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3271   if (width == TYPE_PRECISION (long_integer_type_node))
3272     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3273   if (width == TYPE_PRECISION (long_long_integer_type_node))
3274     return (unsignedp ? long_long_unsigned_type_node
3275             : long_long_integer_type_node);
3276   return build_nonstandard_integer_type (width, unsignedp);
3277 }
3278
3279 /* The C version of the register_builtin_type langhook.  */
3280
3281 void
3282 c_register_builtin_type (tree type, const char* name)
3283 {
3284   tree decl;
3285
3286   decl = build_decl (UNKNOWN_LOCATION,
3287                      TYPE_DECL, get_identifier (name), type);
3288   DECL_ARTIFICIAL (decl) = 1;
3289   if (!TYPE_NAME (type))
3290     TYPE_NAME (type) = decl;
3291   pushdecl (decl);
3292
3293   registered_builtin_types = tree_cons (0, type, registered_builtin_types);
3294 }
3295 \f
3296 /* Print an error message for invalid operands to arith operation
3297    CODE with TYPE0 for operand 0, and TYPE1 for operand 1.
3298    LOCATION is the location of the message.  */
3299
3300 void
3301 binary_op_error (location_t location, enum tree_code code,
3302                  tree type0, tree type1)
3303 {
3304   const char *opname;
3305
3306   switch (code)
3307     {
3308     case PLUS_EXPR:
3309       opname = "+"; break;
3310     case MINUS_EXPR:
3311       opname = "-"; break;
3312     case MULT_EXPR:
3313       opname = "*"; break;
3314     case MAX_EXPR:
3315       opname = "max"; break;
3316     case MIN_EXPR:
3317       opname = "min"; break;
3318     case EQ_EXPR:
3319       opname = "=="; break;
3320     case NE_EXPR:
3321       opname = "!="; break;
3322     case LE_EXPR:
3323       opname = "<="; break;
3324     case GE_EXPR:
3325       opname = ">="; break;
3326     case LT_EXPR:
3327       opname = "<"; break;
3328     case GT_EXPR:
3329       opname = ">"; break;
3330     case LSHIFT_EXPR:
3331       opname = "<<"; break;
3332     case RSHIFT_EXPR:
3333       opname = ">>"; break;
3334     case TRUNC_MOD_EXPR:
3335     case FLOOR_MOD_EXPR:
3336       opname = "%"; break;
3337     case TRUNC_DIV_EXPR:
3338     case FLOOR_DIV_EXPR:
3339       opname = "/"; break;
3340     case BIT_AND_EXPR:
3341       opname = "&"; break;
3342     case BIT_IOR_EXPR:
3343       opname = "|"; break;
3344     case TRUTH_ANDIF_EXPR:
3345       opname = "&&"; break;
3346     case TRUTH_ORIF_EXPR:
3347       opname = "||"; break;
3348     case BIT_XOR_EXPR:
3349       opname = "^"; break;
3350     default:
3351       gcc_unreachable ();
3352     }
3353   error_at (location,
3354             "invalid operands to binary %s (have %qT and %qT)", opname,
3355             type0, type1);
3356 }
3357 \f
3358 /* Subroutine of build_binary_op, used for comparison operations.
3359    See if the operands have both been converted from subword integer types
3360    and, if so, perhaps change them both back to their original type.
3361    This function is also responsible for converting the two operands
3362    to the proper common type for comparison.
3363
3364    The arguments of this function are all pointers to local variables
3365    of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
3366    RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
3367
3368    If this function returns nonzero, it means that the comparison has
3369    a constant value.  What this function returns is an expression for
3370    that value.  */
3371
3372 tree
3373 shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
3374                  enum tree_code *rescode_ptr)
3375 {
3376   tree type;
3377   tree op0 = *op0_ptr;
3378   tree op1 = *op1_ptr;
3379   int unsignedp0, unsignedp1;
3380   int real1, real2;
3381   tree primop0, primop1;
3382   enum tree_code code = *rescode_ptr;
3383
3384   /* Throw away any conversions to wider types
3385      already present in the operands.  */
3386
3387   primop0 = get_narrower (op0, &unsignedp0);
3388   primop1 = get_narrower (op1, &unsignedp1);
3389
3390   /* Handle the case that OP0 does not *contain* a conversion
3391      but it *requires* conversion to FINAL_TYPE.  */
3392
3393   if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
3394     unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
3395   if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
3396     unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
3397
3398   /* If one of the operands must be floated, we cannot optimize.  */
3399   real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
3400   real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
3401
3402   /* If first arg is constant, swap the args (changing operation
3403      so value is preserved), for canonicalization.  Don't do this if
3404      the second arg is 0.  */
3405
3406   if (TREE_CONSTANT (primop0)
3407       && !integer_zerop (primop1) && !real_zerop (primop1)
3408       && !fixed_zerop (primop1))
3409     {
3410       tree tem = primop0;
3411       int temi = unsignedp0;
3412       primop0 = primop1;
3413       primop1 = tem;
3414       tem = op0;
3415       op0 = op1;
3416       op1 = tem;
3417       *op0_ptr = op0;
3418       *op1_ptr = op1;
3419       unsignedp0 = unsignedp1;
3420       unsignedp1 = temi;
3421       temi = real1;
3422       real1 = real2;
3423       real2 = temi;
3424
3425       switch (code)
3426         {
3427         case LT_EXPR:
3428           code = GT_EXPR;
3429           break;
3430         case GT_EXPR:
3431           code = LT_EXPR;
3432           break;
3433         case LE_EXPR:
3434           code = GE_EXPR;
3435           break;
3436         case GE_EXPR:
3437           code = LE_EXPR;
3438           break;
3439         default:
3440           break;
3441         }
3442       *rescode_ptr = code;
3443     }
3444
3445   /* If comparing an integer against a constant more bits wide,
3446      maybe we can deduce a value of 1 or 0 independent of the data.
3447      Or else truncate the constant now
3448      rather than extend the variable at run time.
3449
3450      This is only interesting if the constant is the wider arg.
3451      Also, it is not safe if the constant is unsigned and the
3452      variable arg is signed, since in this case the variable
3453      would be sign-extended and then regarded as unsigned.
3454      Our technique fails in this case because the lowest/highest
3455      possible unsigned results don't follow naturally from the
3456      lowest/highest possible values of the variable operand.
3457      For just EQ_EXPR and NE_EXPR there is another technique that
3458      could be used: see if the constant can be faithfully represented
3459      in the other operand's type, by truncating it and reextending it
3460      and see if that preserves the constant's value.  */
3461
3462   if (!real1 && !real2
3463       && TREE_CODE (TREE_TYPE (primop0)) != FIXED_POINT_TYPE
3464       && TREE_CODE (primop1) == INTEGER_CST
3465       && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
3466     {
3467       int min_gt, max_gt, min_lt, max_lt;
3468       tree maxval, minval;
3469       /* 1 if comparison is nominally unsigned.  */
3470       int unsignedp = TYPE_UNSIGNED (*restype_ptr);
3471       tree val;
3472
3473       type = c_common_signed_or_unsigned_type (unsignedp0,
3474                                                TREE_TYPE (primop0));
3475
3476       maxval = TYPE_MAX_VALUE (type);
3477       minval = TYPE_MIN_VALUE (type);
3478
3479       if (unsignedp && !unsignedp0)
3480         *restype_ptr = c_common_signed_type (*restype_ptr);
3481
3482       if (TREE_TYPE (primop1) != *restype_ptr)
3483         {
3484           /* Convert primop1 to target type, but do not introduce
3485              additional overflow.  We know primop1 is an int_cst.  */
3486           primop1 = force_fit_type_double (*restype_ptr,
3487                                            TREE_INT_CST_LOW (primop1),
3488                                            TREE_INT_CST_HIGH (primop1), 0,
3489                                            TREE_OVERFLOW (primop1));
3490         }
3491       if (type != *restype_ptr)
3492         {
3493           minval = convert (*restype_ptr, minval);
3494           maxval = convert (*restype_ptr, maxval);
3495         }
3496
3497       if (unsignedp && unsignedp0)
3498         {
3499           min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
3500           max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
3501           min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
3502           max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
3503         }
3504       else
3505         {
3506           min_gt = INT_CST_LT (primop1, minval);
3507           max_gt = INT_CST_LT (primop1, maxval);
3508           min_lt = INT_CST_LT (minval, primop1);
3509           max_lt = INT_CST_LT (maxval, primop1);
3510         }
3511
3512       val = 0;
3513       /* This used to be a switch, but Genix compiler can't handle that.  */
3514       if (code == NE_EXPR)
3515         {
3516           if (max_lt || min_gt)
3517             val = truthvalue_true_node;
3518         }
3519       else if (code == EQ_EXPR)
3520         {
3521           if (max_lt || min_gt)
3522             val = truthvalue_false_node;
3523         }
3524       else if (code == LT_EXPR)
3525         {
3526           if (max_lt)
3527             val = truthvalue_true_node;
3528           if (!min_lt)
3529             val = truthvalue_false_node;
3530         }
3531       else if (code == GT_EXPR)
3532         {
3533           if (min_gt)
3534             val = truthvalue_true_node;
3535           if (!max_gt)
3536             val = truthvalue_false_node;
3537         }
3538       else if (code == LE_EXPR)
3539         {
3540           if (!max_gt)
3541             val = truthvalue_true_node;
3542           if (min_gt)
3543             val = truthvalue_false_node;
3544         }
3545       else if (code == GE_EXPR)
3546         {
3547           if (!min_lt)
3548             val = truthvalue_true_node;
3549           if (max_lt)
3550             val = truthvalue_false_node;
3551         }
3552
3553       /* If primop0 was sign-extended and unsigned comparison specd,
3554          we did a signed comparison above using the signed type bounds.
3555          But the comparison we output must be unsigned.
3556
3557          Also, for inequalities, VAL is no good; but if the signed
3558          comparison had *any* fixed result, it follows that the
3559          unsigned comparison just tests the sign in reverse
3560          (positive values are LE, negative ones GE).
3561          So we can generate an unsigned comparison
3562          against an extreme value of the signed type.  */
3563
3564       if (unsignedp && !unsignedp0)
3565         {
3566           if (val != 0)
3567             switch (code)
3568               {
3569               case LT_EXPR:
3570               case GE_EXPR:
3571                 primop1 = TYPE_MIN_VALUE (type);
3572                 val = 0;
3573                 break;
3574
3575               case LE_EXPR:
3576               case GT_EXPR:
3577                 primop1 = TYPE_MAX_VALUE (type);
3578                 val = 0;
3579                 break;
3580
3581               default:
3582                 break;
3583               }
3584           type = c_common_unsigned_type (type);
3585         }
3586
3587       if (TREE_CODE (primop0) != INTEGER_CST)
3588         {
3589           if (val == truthvalue_false_node)
3590             warning (OPT_Wtype_limits, "comparison is always false due to limited range of data type");
3591           if (val == truthvalue_true_node)
3592             warning (OPT_Wtype_limits, "comparison is always true due to limited range of data type");
3593         }
3594
3595       if (val != 0)
3596         {
3597           /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
3598           if (TREE_SIDE_EFFECTS (primop0))
3599             return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
3600           return val;
3601         }
3602
3603       /* Value is not predetermined, but do the comparison
3604          in the type of the operand that is not constant.
3605          TYPE is already properly set.  */
3606     }
3607
3608   /* If either arg is decimal float and the other is float, find the
3609      proper common type to use for comparison.  */
3610   else if (real1 && real2
3611            && (DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0)))
3612                || DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1)))))
3613     type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
3614
3615   else if (real1 && real2
3616            && (TYPE_PRECISION (TREE_TYPE (primop0))
3617                == TYPE_PRECISION (TREE_TYPE (primop1))))
3618     type = TREE_TYPE (primop0);
3619
3620   /* If args' natural types are both narrower than nominal type
3621      and both extend in the same manner, compare them
3622      in the type of the wider arg.
3623      Otherwise must actually extend both to the nominal
3624      common type lest different ways of extending
3625      alter the result.
3626      (eg, (short)-1 == (unsigned short)-1  should be 0.)  */
3627
3628   else if (unsignedp0 == unsignedp1 && real1 == real2
3629            && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
3630            && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
3631     {
3632       type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
3633       type = c_common_signed_or_unsigned_type (unsignedp0
3634                                                || TYPE_UNSIGNED (*restype_ptr),
3635                                                type);
3636       /* Make sure shorter operand is extended the right way
3637          to match the longer operand.  */
3638       primop0
3639         = convert (c_common_signed_or_unsigned_type (unsignedp0,
3640                                                      TREE_TYPE (primop0)),
3641                    primop0);
3642       primop1
3643         = convert (c_common_signed_or_unsigned_type (unsignedp1,
3644                                                      TREE_TYPE (primop1)),
3645                    primop1);
3646     }
3647   else
3648     {
3649       /* Here we must do the comparison on the nominal type
3650          using the args exactly as we received them.  */
3651       type = *restype_ptr;
3652       primop0 = op0;
3653       primop1 = op1;
3654
3655       if (!real1 && !real2 && integer_zerop (primop1)
3656           && TYPE_UNSIGNED (*restype_ptr))
3657         {
3658           tree value = 0;
3659           switch (code)
3660             {
3661             case GE_EXPR:
3662               /* All unsigned values are >= 0, so we warn.  However,
3663                  if OP0 is a constant that is >= 0, the signedness of
3664                  the comparison isn't an issue, so suppress the
3665                  warning.  */
3666               if (warn_type_limits && !in_system_header
3667                   && !(TREE_CODE (primop0) == INTEGER_CST
3668                        && !TREE_OVERFLOW (convert (c_common_signed_type (type),
3669                                                    primop0))))
3670                 warning (OPT_Wtype_limits, 
3671                          "comparison of unsigned expression >= 0 is always true");
3672               value = truthvalue_true_node;
3673               break;
3674
3675             case LT_EXPR:
3676               if (warn_type_limits && !in_system_header
3677                   && !(TREE_CODE (primop0) == INTEGER_CST
3678                        && !TREE_OVERFLOW (convert (c_common_signed_type (type),
3679                                                    primop0))))
3680                 warning (OPT_Wtype_limits, 
3681                          "comparison of unsigned expression < 0 is always false");
3682               value = truthvalue_false_node;
3683               break;
3684
3685             default:
3686               break;
3687             }
3688
3689           if (value != 0)
3690             {
3691               /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
3692               if (TREE_SIDE_EFFECTS (primop0))
3693                 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
3694                                primop0, value);
3695               return value;
3696             }
3697         }
3698     }
3699
3700   *op0_ptr = convert (type, primop0);
3701   *op1_ptr = convert (type, primop1);
3702
3703   *restype_ptr = truthvalue_type_node;
3704
3705   return 0;
3706 }
3707 \f
3708 /* Return a tree for the sum or difference (RESULTCODE says which)
3709    of pointer PTROP and integer INTOP.  */
3710
3711 tree
3712 pointer_int_sum (location_t loc, enum tree_code resultcode,
3713                  tree ptrop, tree intop)
3714 {
3715   tree size_exp, ret;
3716
3717   /* The result is a pointer of the same type that is being added.  */
3718   tree result_type = TREE_TYPE (ptrop);
3719
3720   if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
3721     {
3722       pedwarn (loc, pedantic ? OPT_pedantic : OPT_Wpointer_arith, 
3723                "pointer of type %<void *%> used in arithmetic");
3724       size_exp = integer_one_node;
3725     }
3726   else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
3727     {
3728       pedwarn (loc, pedantic ? OPT_pedantic : OPT_Wpointer_arith, 
3729                "pointer to a function used in arithmetic");
3730       size_exp = integer_one_node;
3731     }
3732   else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
3733     {
3734       pedwarn (loc, pedantic ? OPT_pedantic : OPT_Wpointer_arith, 
3735                "pointer to member function used in arithmetic");
3736       size_exp = integer_one_node;
3737     }
3738   else
3739     size_exp = size_in_bytes (TREE_TYPE (result_type));
3740
3741   /* We are manipulating pointer values, so we don't need to warn
3742      about relying on undefined signed overflow.  We disable the
3743      warning here because we use integer types so fold won't know that
3744      they are really pointers.  */
3745   fold_defer_overflow_warnings ();
3746
3747   /* If what we are about to multiply by the size of the elements
3748      contains a constant term, apply distributive law
3749      and multiply that constant term separately.
3750      This helps produce common subexpressions.  */
3751   if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
3752       && !TREE_CONSTANT (intop)
3753       && TREE_CONSTANT (TREE_OPERAND (intop, 1))
3754       && TREE_CONSTANT (size_exp)
3755       /* If the constant comes from pointer subtraction,
3756          skip this optimization--it would cause an error.  */
3757       && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
3758       /* If the constant is unsigned, and smaller than the pointer size,
3759          then we must skip this optimization.  This is because it could cause
3760          an overflow error if the constant is negative but INTOP is not.  */
3761       && (!TYPE_UNSIGNED (TREE_TYPE (intop))
3762           || (TYPE_PRECISION (TREE_TYPE (intop))
3763               == TYPE_PRECISION (TREE_TYPE (ptrop)))))
3764     {
3765       enum tree_code subcode = resultcode;
3766       tree int_type = TREE_TYPE (intop);
3767       if (TREE_CODE (intop) == MINUS_EXPR)
3768         subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
3769       /* Convert both subexpression types to the type of intop,
3770          because weird cases involving pointer arithmetic
3771          can result in a sum or difference with different type args.  */
3772       ptrop = build_binary_op (EXPR_LOCATION (TREE_OPERAND (intop, 1)),
3773                                subcode, ptrop,
3774                                convert (int_type, TREE_OPERAND (intop, 1)), 1);
3775       intop = convert (int_type, TREE_OPERAND (intop, 0));
3776     }
3777
3778   /* Convert the integer argument to a type the same size as sizetype
3779      so the multiply won't overflow spuriously.  */
3780   if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
3781       || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
3782     intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
3783                                              TYPE_UNSIGNED (sizetype)), intop);
3784
3785   /* Replace the integer argument with a suitable product by the object size.
3786      Do this multiplication as signed, then convert to the appropriate
3787      type for the pointer operation.  */
3788   intop = convert (sizetype,
3789                    build_binary_op (loc,
3790                                     MULT_EXPR, intop,
3791                                     convert (TREE_TYPE (intop), size_exp), 1));
3792
3793   /* Create the sum or difference.  */
3794   if (resultcode == MINUS_EXPR)
3795     intop = fold_build1_loc (loc, NEGATE_EXPR, sizetype, intop);
3796
3797   ret = fold_build2_loc (loc, POINTER_PLUS_EXPR, result_type, ptrop, intop);
3798
3799   fold_undefer_and_ignore_overflow_warnings ();
3800
3801   return ret;
3802 }
3803 \f
3804 /* Wrap a C_MAYBE_CONST_EXPR around an expression that is fully folded
3805    and if NON_CONST is known not to be permitted in an evaluated part
3806    of a constant expression.  */
3807
3808 tree
3809 c_wrap_maybe_const (tree expr, bool non_const)
3810 {
3811   bool nowarning = TREE_NO_WARNING (expr);
3812   location_t loc = EXPR_LOCATION (expr);
3813
3814   /* This should never be called for C++.  */
3815   if (c_dialect_cxx ())
3816     gcc_unreachable ();
3817
3818   /* The result of folding may have a NOP_EXPR to set TREE_NO_WARNING.  */
3819   STRIP_TYPE_NOPS (expr);
3820   expr = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (expr), NULL, expr);
3821   C_MAYBE_CONST_EXPR_NON_CONST (expr) = non_const;
3822   if (nowarning)
3823     TREE_NO_WARNING (expr) = 1;
3824   protected_set_expr_location (expr, loc);
3825
3826   return expr;
3827 }
3828
3829 /* Wrap a SAVE_EXPR around EXPR, if appropriate.  Like save_expr, but
3830    for C folds the inside expression and wraps a C_MAYBE_CONST_EXPR
3831    around the SAVE_EXPR if needed so that c_fully_fold does not need
3832    to look inside SAVE_EXPRs.  */
3833
3834 tree
3835 c_save_expr (tree expr)
3836 {
3837   bool maybe_const = true;
3838   if (c_dialect_cxx ())
3839     return save_expr (expr);
3840   expr = c_fully_fold (expr, false, &maybe_const);
3841   expr = save_expr (expr);
3842   if (!maybe_const)
3843     expr = c_wrap_maybe_const (expr, true);
3844   return expr;
3845 }
3846
3847 /* Return whether EXPR is a declaration whose address can never be
3848    NULL.  */
3849
3850 bool
3851 decl_with_nonnull_addr_p (const_tree expr)
3852 {
3853   return (DECL_P (expr)
3854           && (TREE_CODE (expr) == PARM_DECL
3855               || TREE_CODE (expr) == LABEL_DECL
3856               || !DECL_WEAK (expr)));
3857 }
3858
3859 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
3860    or for an `if' or `while' statement or ?..: exp.  It should already
3861    have been validated to be of suitable type; otherwise, a bad
3862    diagnostic may result.
3863
3864    The EXPR is located at LOCATION.
3865
3866    This preparation consists of taking the ordinary
3867    representation of an expression expr and producing a valid tree
3868    boolean expression describing whether expr is nonzero.  We could
3869    simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
3870    but we optimize comparisons, &&, ||, and !.
3871
3872    The resulting type should always be `truthvalue_type_node'.  */
3873
3874 tree
3875 c_common_truthvalue_conversion (location_t location, tree expr)
3876 {
3877   switch (TREE_CODE (expr))
3878     {
3879     case EQ_EXPR:   case NE_EXPR:   case UNEQ_EXPR: case LTGT_EXPR:
3880     case LE_EXPR:   case GE_EXPR:   case LT_EXPR:   case GT_EXPR:
3881     case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
3882     case ORDERED_EXPR: case UNORDERED_EXPR:
3883       if (TREE_TYPE (expr) == truthvalue_type_node)
3884         return expr;
3885       expr = build2 (TREE_CODE (expr), truthvalue_type_node,
3886                      TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
3887       goto ret;
3888
3889     case TRUTH_ANDIF_EXPR:
3890     case TRUTH_ORIF_EXPR:
3891     case TRUTH_AND_EXPR:
3892     case TRUTH_OR_EXPR:
3893     case TRUTH_XOR_EXPR:
3894       if (TREE_TYPE (expr) == truthvalue_type_node)
3895         return expr;
3896       expr = build2 (TREE_CODE (expr), truthvalue_type_node,
3897                      c_common_truthvalue_conversion (location, 
3898                                                      TREE_OPERAND (expr, 0)),
3899                      c_common_truthvalue_conversion (location,
3900                                                      TREE_OPERAND (expr, 1)));
3901       goto ret;
3902
3903     case TRUTH_NOT_EXPR:
3904       if (TREE_TYPE (expr) == truthvalue_type_node)
3905         return expr;
3906       expr = build1 (TREE_CODE (expr), truthvalue_type_node,
3907                      c_common_truthvalue_conversion (location,
3908                                                      TREE_OPERAND (expr, 0)));
3909       goto ret;
3910
3911     case ERROR_MARK:
3912       return expr;
3913
3914     case INTEGER_CST:
3915       return integer_zerop (expr) ? truthvalue_false_node
3916                                   : truthvalue_true_node;
3917
3918     case REAL_CST:
3919       return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
3920              ? truthvalue_true_node
3921              : truthvalue_false_node;
3922
3923     case FIXED_CST:
3924       return fixed_compare (NE_EXPR, &TREE_FIXED_CST (expr),
3925                             &FCONST0 (TYPE_MODE (TREE_TYPE (expr))))
3926              ? truthvalue_true_node
3927              : truthvalue_false_node;
3928
3929     case FUNCTION_DECL:
3930       expr = build_unary_op (location, ADDR_EXPR, expr, 0);
3931       /* Fall through.  */
3932
3933     case ADDR_EXPR:
3934       {
3935         tree inner = TREE_OPERAND (expr, 0);
3936         if (decl_with_nonnull_addr_p (inner))
3937           {
3938             /* Common Ada/Pascal programmer's mistake.  */
3939             warning_at (location,
3940                         OPT_Waddress,
3941                         "the address of %qD will always evaluate as %<true%>",
3942                         inner);
3943             return truthvalue_true_node;
3944           }
3945
3946         /* If we still have a decl, it is possible for its address to
3947            be NULL, so we cannot optimize.  */
3948         if (DECL_P (inner))
3949           {
3950             gcc_assert (DECL_WEAK (inner));
3951             break;
3952           }
3953
3954         if (TREE_SIDE_EFFECTS (inner))
3955           {
3956             expr = build2 (COMPOUND_EXPR, truthvalue_type_node,
3957                            inner, truthvalue_true_node);
3958             goto ret;
3959           }
3960         else
3961           return truthvalue_true_node;
3962       }
3963
3964     case COMPLEX_EXPR:
3965       expr = build_binary_op (EXPR_LOCATION (expr),
3966                               (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
3967                                ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
3968                 c_common_truthvalue_conversion (location,
3969                                                 TREE_OPERAND (expr, 0)),
3970                 c_common_truthvalue_conversion (location,
3971                                                 TREE_OPERAND (expr, 1)),
3972                               0);
3973       goto ret;
3974
3975     case NEGATE_EXPR:
3976     case ABS_EXPR:
3977     case FLOAT_EXPR:
3978     case EXCESS_PRECISION_EXPR:
3979       /* These don't change whether an object is nonzero or zero.  */
3980       return c_common_truthvalue_conversion (location, TREE_OPERAND (expr, 0));
3981
3982     case LROTATE_EXPR:
3983     case RROTATE_EXPR:
3984       /* These don't change whether an object is zero or nonzero, but
3985          we can't ignore them if their second arg has side-effects.  */
3986       if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
3987         {
3988           expr = build2 (COMPOUND_EXPR, truthvalue_type_node,
3989                          TREE_OPERAND (expr, 1),
3990                          c_common_truthvalue_conversion 
3991                          (location, TREE_OPERAND (expr, 0)));
3992           goto ret;
3993         }
3994       else
3995         return c_common_truthvalue_conversion (location,
3996                                                TREE_OPERAND (expr, 0));
3997
3998     case COND_EXPR:
3999       /* Distribute the conversion into the arms of a COND_EXPR.  */
4000       if (c_dialect_cxx ())
4001         {
4002           expr = fold_build3_loc (location, COND_EXPR, truthvalue_type_node,
4003                               TREE_OPERAND (expr, 0),
4004                               c_common_truthvalue_conversion (location,
4005                                                               TREE_OPERAND (expr,
4006                                                                             1)),
4007                               c_common_truthvalue_conversion (location,
4008                                                               TREE_OPERAND (expr,
4009                                                                             2)));
4010           goto ret;
4011         }
4012       else
4013         {
4014           /* Folding will happen later for C.  */
4015           expr = build3 (COND_EXPR, truthvalue_type_node,
4016                          TREE_OPERAND (expr, 0),
4017                          c_common_truthvalue_conversion (location,
4018                                                          TREE_OPERAND (expr, 1)),
4019                          c_common_truthvalue_conversion (location,
4020                                                          TREE_OPERAND (expr, 2)));
4021           goto ret;
4022         }
4023
4024     CASE_CONVERT:
4025       /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
4026          since that affects how `default_conversion' will behave.  */
4027       if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
4028           || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
4029         break;
4030       /* If this is widening the argument, we can ignore it.  */
4031       if (TYPE_PRECISION (TREE_TYPE (expr))
4032           >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
4033         return c_common_truthvalue_conversion (location,
4034                                                TREE_OPERAND (expr, 0));
4035       break;
4036
4037     case MODIFY_EXPR:
4038       if (!TREE_NO_WARNING (expr)
4039           && warn_parentheses)
4040         {
4041           warning (OPT_Wparentheses,
4042                    "suggest parentheses around assignment used as truth value");
4043           TREE_NO_WARNING (expr) = 1;
4044         }
4045       break;
4046
4047     default:
4048       break;
4049     }
4050
4051   if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
4052     {
4053       tree t = c_save_expr (expr);
4054       expr = (build_binary_op
4055               (EXPR_LOCATION (expr),
4056                (TREE_SIDE_EFFECTS (expr)
4057                 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
4058         c_common_truthvalue_conversion
4059                (location,
4060                 build_unary_op (location, REALPART_EXPR, t, 0)),
4061         c_common_truthvalue_conversion
4062                (location,
4063                 build_unary_op (location, IMAGPART_EXPR, t, 0)),
4064                0));
4065       goto ret;
4066     }
4067
4068   if (TREE_CODE (TREE_TYPE (expr)) == FIXED_POINT_TYPE)
4069     {
4070       tree fixed_zero_node = build_fixed (TREE_TYPE (expr),
4071                                           FCONST0 (TYPE_MODE
4072                                                    (TREE_TYPE (expr))));
4073       return build_binary_op (location, NE_EXPR, expr, fixed_zero_node, 1);
4074     }
4075   else
4076     return build_binary_op (location, NE_EXPR, expr, integer_zero_node, 1);
4077
4078  ret:
4079   protected_set_expr_location (expr, location);
4080   return expr;
4081 }
4082 \f
4083 static void def_builtin_1  (enum built_in_function fncode,
4084                             const char *name,
4085                             enum built_in_class fnclass,
4086                             tree fntype, tree libtype,
4087                             bool both_p, bool fallback_p, bool nonansi_p,
4088                             tree fnattrs, bool implicit_p);
4089
4090
4091 /* Apply the TYPE_QUALS to the new DECL.  */
4092
4093 void
4094 c_apply_type_quals_to_decl (int type_quals, tree decl)
4095 {
4096   tree type = TREE_TYPE (decl);
4097
4098   if (type == error_mark_node)
4099     return;
4100
4101   if (((type_quals & TYPE_QUAL_CONST)
4102        || (type && TREE_CODE (type) == REFERENCE_TYPE))
4103       /* An object declared 'const' is only readonly after it is
4104          initialized.  We don't have any way of expressing this currently,
4105          so we need to be conservative and unset TREE_READONLY for types
4106          with constructors.  Otherwise aliasing code will ignore stores in
4107          an inline constructor.  */
4108       && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
4109     TREE_READONLY (decl) = 1;
4110   if (type_quals & TYPE_QUAL_VOLATILE)
4111     {
4112       TREE_SIDE_EFFECTS (decl) = 1;
4113       TREE_THIS_VOLATILE (decl) = 1;
4114     }
4115   if (type_quals & TYPE_QUAL_RESTRICT)
4116     {
4117       while (type && TREE_CODE (type) == ARRAY_TYPE)
4118         /* Allow 'restrict' on arrays of pointers.
4119            FIXME currently we just ignore it.  */
4120         type = TREE_TYPE (type);
4121       if (!type
4122           || !POINTER_TYPE_P (type)
4123           || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
4124         error ("invalid use of %<restrict%>");
4125     }
4126 }
4127
4128 /* Hash function for the problem of multiple type definitions in
4129    different files.  This must hash all types that will compare
4130    equal via comptypes to the same value.  In practice it hashes
4131    on some of the simple stuff and leaves the details to comptypes.  */
4132
4133 static hashval_t
4134 c_type_hash (const void *p)
4135 {
4136   int i = 0;
4137   int shift, size;
4138   const_tree const t = (const_tree) p;
4139   tree t2;
4140   switch (TREE_CODE (t))
4141     {
4142     /* For pointers, hash on pointee type plus some swizzling.  */
4143     case POINTER_TYPE:
4144       return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
4145     /* Hash on number of elements and total size.  */
4146     case ENUMERAL_TYPE:
4147       shift = 3;
4148       t2 = TYPE_VALUES (t);
4149       break;
4150     case RECORD_TYPE:
4151       shift = 0;
4152       t2 = TYPE_FIELDS (t);
4153       break;
4154     case QUAL_UNION_TYPE:
4155       shift = 1;
4156       t2 = TYPE_FIELDS (t);
4157       break;
4158     case UNION_TYPE:
4159       shift = 2;
4160       t2 = TYPE_FIELDS (t);
4161       break;
4162     default:
4163       gcc_unreachable ();
4164     }
4165   for (; t2; t2 = TREE_CHAIN (t2))
4166     i++;
4167   /* We might have a VLA here.  */
4168   if (TREE_CODE (TYPE_SIZE (t)) != INTEGER_CST)
4169     size = 0;
4170   else
4171     size = TREE_INT_CST_LOW (TYPE_SIZE (t));
4172   return ((size << 24) | (i << shift));
4173 }
4174
4175 static GTY((param_is (union tree_node))) htab_t type_hash_table;
4176
4177 /* Return the typed-based alias set for T, which may be an expression
4178    or a type.  Return -1 if we don't do anything special.  */
4179
4180 alias_set_type
4181 c_common_get_alias_set (tree t)
4182 {
4183   tree u;
4184   PTR *slot;
4185
4186   /* Permit type-punning when accessing a union, provided the access
4187      is directly through the union.  For example, this code does not
4188      permit taking the address of a union member and then storing
4189      through it.  Even the type-punning allowed here is a GCC
4190      extension, albeit a common and useful one; the C standard says
4191      that such accesses have implementation-defined behavior.  */
4192   for (u = t;
4193        TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
4194        u = TREE_OPERAND (u, 0))
4195     if (TREE_CODE (u) == COMPONENT_REF
4196         && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
4197       return 0;
4198
4199   /* That's all the expressions we handle specially.  */
4200   if (!TYPE_P (t))
4201     return -1;
4202
4203   /* The C standard guarantees that any object may be accessed via an
4204      lvalue that has character type.  */
4205   if (t == char_type_node
4206       || t == signed_char_type_node
4207       || t == unsigned_char_type_node)
4208     return 0;
4209
4210   /* The C standard specifically allows aliasing between signed and
4211      unsigned variants of the same type.  We treat the signed
4212      variant as canonical.  */
4213   if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
4214     {
4215       tree t1 = c_common_signed_type (t);
4216
4217       /* t1 == t can happen for boolean nodes which are always unsigned.  */
4218       if (t1 != t)
4219         return get_alias_set (t1);
4220     }
4221   else if (POINTER_TYPE_P (t))
4222     {
4223       tree t1;
4224
4225       /* Unfortunately, there is no canonical form of a pointer type.
4226          In particular, if we have `typedef int I', then `int *', and
4227          `I *' are different types.  So, we have to pick a canonical
4228          representative.  We do this below.
4229
4230          Technically, this approach is actually more conservative that
4231          it needs to be.  In particular, `const int *' and `int *'
4232          should be in different alias sets, according to the C and C++
4233          standard, since their types are not the same, and so,
4234          technically, an `int **' and `const int **' cannot point at
4235          the same thing.
4236
4237          But, the standard is wrong.  In particular, this code is
4238          legal C++:
4239
4240             int *ip;
4241             int **ipp = &ip;
4242             const int* const* cipp = ipp;
4243
4244          And, it doesn't make sense for that to be legal unless you
4245          can dereference IPP and CIPP.  So, we ignore cv-qualifiers on
4246          the pointed-to types.  This issue has been reported to the
4247          C++ committee.  */
4248       t1 = build_type_no_quals (t);
4249       if (t1 != t)
4250         return get_alias_set (t1);
4251     }
4252
4253   /* Handle the case of multiple type nodes referring to "the same" type,
4254      which occurs with IMA.  These share an alias set.  FIXME:  Currently only
4255      C90 is handled.  (In C99 type compatibility is not transitive, which
4256      complicates things mightily. The alias set splay trees can theoretically
4257      represent this, but insertion is tricky when you consider all the
4258      different orders things might arrive in.) */
4259
4260   if (c_language != clk_c || flag_isoc99)
4261     return -1;
4262
4263   /* Save time if there's only one input file.  */
4264   if (num_in_fnames == 1)
4265     return -1;
4266
4267   /* Pointers need special handling if they point to any type that
4268      needs special handling (below).  */
4269   if (TREE_CODE (t) == POINTER_TYPE)
4270     {
4271       tree t2;
4272       /* Find bottom type under any nested POINTERs.  */
4273       for (t2 = TREE_TYPE (t);
4274            TREE_CODE (t2) == POINTER_TYPE;
4275            t2 = TREE_TYPE (t2))
4276         ;
4277       if (TREE_CODE (t2) != RECORD_TYPE
4278           && TREE_CODE (t2) != ENUMERAL_TYPE
4279           && TREE_CODE (t2) != QUAL_UNION_TYPE
4280           && TREE_CODE (t2) != UNION_TYPE)
4281         return -1;
4282       if (TYPE_SIZE (t2) == 0)
4283         return -1;
4284     }
4285   /* These are the only cases that need special handling.  */
4286   if (TREE_CODE (t) != RECORD_TYPE
4287       && TREE_CODE (t) != ENUMERAL_TYPE
4288       && TREE_CODE (t) != QUAL_UNION_TYPE
4289       && TREE_CODE (t) != UNION_TYPE
4290       && TREE_CODE (t) != POINTER_TYPE)
4291     return -1;
4292   /* Undefined? */
4293   if (TYPE_SIZE (t) == 0)
4294     return -1;
4295
4296   /* Look up t in hash table.  Only one of the compatible types within each
4297      alias set is recorded in the table.  */
4298   if (!type_hash_table)
4299     type_hash_table = htab_create_ggc (1021, c_type_hash,
4300             (htab_eq) lang_hooks.types_compatible_p,
4301             NULL);
4302   slot = htab_find_slot (type_hash_table, t, INSERT);
4303   if (*slot != NULL)
4304     {
4305       TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
4306       return TYPE_ALIAS_SET ((tree)*slot);
4307     }
4308   else
4309     /* Our caller will assign and record (in t) a new alias set; all we need
4310        to do is remember t in the hash table.  */
4311     *slot = t;
4312
4313   return -1;
4314 }
4315 \f
4316 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where
4317    the second parameter indicates which OPERATOR is being applied.
4318    The COMPLAIN flag controls whether we should diagnose possibly
4319    ill-formed constructs or not.  LOC is the location of the SIZEOF or
4320    TYPEOF operator.  */
4321
4322 tree
4323 c_sizeof_or_alignof_type (location_t loc,
4324                           tree type, bool is_sizeof, int complain)
4325 {
4326   const char *op_name;
4327   tree value = NULL;
4328   enum tree_code type_code = TREE_CODE (type);
4329
4330   op_name = is_sizeof ? "sizeof" : "__alignof__";
4331
4332   if (type_code == FUNCTION_TYPE)
4333     {
4334       if (is_sizeof)
4335         {
4336           if (complain && (pedantic || warn_pointer_arith))
4337             pedwarn (loc, pedantic ? OPT_pedantic : OPT_Wpointer_arith, 
4338                      "invalid application of %<sizeof%> to a function type");
4339           else if (!complain)
4340             return error_mark_node;
4341           value = size_one_node;
4342         }
4343       else
4344         value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
4345     }
4346   else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
4347     {
4348       if (type_code == VOID_TYPE
4349           && complain && (pedantic || warn_pointer_arith))
4350         pedwarn (loc, pedantic ? OPT_pedantic : OPT_Wpointer_arith, 
4351                  "invalid application of %qs to a void type", op_name);
4352       else if (!complain)
4353         return error_mark_node;
4354       value = size_one_node;
4355     }
4356   else if (!COMPLETE_TYPE_P (type))
4357     {
4358       if (complain)
4359         error_at (loc, "invalid application of %qs to incomplete type %qT ",
4360                   op_name, type);
4361       value = size_zero_node;
4362     }
4363   else
4364     {
4365       if (is_sizeof)
4366         /* Convert in case a char is more than one unit.  */
4367         value = size_binop_loc (loc, CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
4368                                 size_int (TYPE_PRECISION (char_type_node)
4369                                           / BITS_PER_UNIT));
4370       else
4371         value = size_int (TYPE_ALIGN_UNIT (type));
4372     }
4373
4374   /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
4375      TYPE_IS_SIZETYPE means that certain things (like overflow) will
4376      never happen.  However, this node should really have type
4377      `size_t', which is just a typedef for an ordinary integer type.  */
4378   value = fold_convert_loc (loc, size_type_node, value);
4379   gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
4380
4381   return value;
4382 }
4383
4384 /* Implement the __alignof keyword: Return the minimum required
4385    alignment of EXPR, measured in bytes.  For VAR_DECLs,
4386    FUNCTION_DECLs and FIELD_DECLs return DECL_ALIGN (which can be set
4387    from an "aligned" __attribute__ specification).  LOC is the
4388    location of the ALIGNOF operator.  */
4389
4390 tree
4391 c_alignof_expr (location_t loc, tree expr)
4392 {
4393   tree t;
4394
4395   if (VAR_OR_FUNCTION_DECL_P (expr))
4396     t = size_int (DECL_ALIGN_UNIT (expr));
4397
4398   else if (TREE_CODE (expr) == COMPONENT_REF
4399            && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
4400     {
4401       error_at (loc, "%<__alignof%> applied to a bit-field");
4402       t = size_one_node;
4403     }
4404   else if (TREE_CODE (expr) == COMPONENT_REF
4405            && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
4406     t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
4407
4408   else if (TREE_CODE (expr) == INDIRECT_REF)
4409     {
4410       tree t = TREE_OPERAND (expr, 0);
4411       tree best = t;
4412       int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
4413
4414       while (CONVERT_EXPR_P (t)
4415              && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
4416         {
4417           int thisalign;
4418
4419           t = TREE_OPERAND (t, 0);
4420           thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
4421           if (thisalign > bestalign)
4422             best = t, bestalign = thisalign;
4423         }
4424       return c_alignof (loc, TREE_TYPE (TREE_TYPE (best)));
4425     }
4426   else
4427     return c_alignof (loc, TREE_TYPE (expr));
4428
4429   return fold_convert_loc (loc, size_type_node, t);
4430 }
4431 \f
4432 /* Handle C and C++ default attributes.  */
4433
4434 enum built_in_attribute
4435 {
4436 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
4437 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
4438 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
4439 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
4440 #include "builtin-attrs.def"
4441 #undef DEF_ATTR_NULL_TREE
4442 #undef DEF_ATTR_INT
4443 #undef DEF_ATTR_IDENT
4444 #undef DEF_ATTR_TREE_LIST
4445   ATTR_LAST
4446 };
4447
4448 static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
4449
4450 static void c_init_attributes (void);
4451
4452 enum c_builtin_type
4453 {
4454 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
4455 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
4456 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
4457 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
4458 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
4459 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
4460 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
4461 #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME,
4462 #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME,
4463 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
4464 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
4465 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
4466 #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
4467 #define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
4468 #define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
4469   NAME,
4470 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
4471 #include "builtin-types.def"
4472 #undef DEF_PRIMITIVE_TYPE
4473 #undef DEF_FUNCTION_TYPE_0
4474 #undef DEF_FUNCTION_TYPE_1
4475 #undef DEF_FUNCTION_TYPE_2
4476 #undef DEF_FUNCTION_TYPE_3
4477 #undef DEF_FUNCTION_TYPE_4
4478 #undef DEF_FUNCTION_TYPE_5
4479 #undef DEF_FUNCTION_TYPE_6
4480 #undef DEF_FUNCTION_TYPE_7
4481 #undef DEF_FUNCTION_TYPE_VAR_0
4482 #undef DEF_FUNCTION_TYPE_VAR_1
4483 #undef DEF_FUNCTION_TYPE_VAR_2
4484 #undef DEF_FUNCTION_TYPE_VAR_3
4485 #undef DEF_FUNCTION_TYPE_VAR_4
4486 #undef DEF_FUNCTION_TYPE_VAR_5
4487 #undef DEF_POINTER_TYPE
4488   BT_LAST
4489 };
4490
4491 typedef enum c_builtin_type builtin_type;
4492
4493 /* A temporary array for c_common_nodes_and_builtins.  Used in
4494    communication with def_fn_type.  */
4495 static tree builtin_types[(int) BT_LAST + 1];
4496
4497 /* A helper function for c_common_nodes_and_builtins.  Build function type
4498    for DEF with return type RET and N arguments.  If VAR is true, then the
4499    function should be variadic after those N arguments.
4500
4501    Takes special care not to ICE if any of the types involved are
4502    error_mark_node, which indicates that said type is not in fact available
4503    (see builtin_type_for_size).  In which case the function type as a whole
4504    should be error_mark_node.  */
4505
4506 static void
4507 def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
4508 {
4509   tree args = NULL, t;
4510   va_list list;
4511   int i;
4512
4513   va_start (list, n);
4514   for (i = 0; i < n; ++i)
4515     {
4516       builtin_type a = (builtin_type) va_arg (list, int);
4517       t = builtin_types[a];
4518       if (t == error_mark_node)
4519         goto egress;
4520       args = tree_cons (NULL_TREE, t, args);
4521     }
4522   va_end (list);
4523
4524   args = nreverse (args);
4525   if (!var)
4526     args = chainon (args, void_list_node);
4527
4528   t = builtin_types[ret];
4529   if (t == error_mark_node)
4530     goto egress;
4531   t = build_function_type (t, args);
4532
4533  egress:
4534   builtin_types[def] = t;
4535 }
4536
4537 /* Build builtin functions common to both C and C++ language
4538    frontends.  */
4539
4540 static void
4541 c_define_builtins (tree va_list_ref_type_node, tree va_list_arg_type_node)
4542 {
4543 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
4544   builtin_types[ENUM] = VALUE;
4545 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
4546   def_fn_type (ENUM, RETURN, 0, 0);
4547 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
4548   def_fn_type (ENUM, RETURN, 0, 1, ARG1);
4549 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
4550   def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
4551 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
4552   def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
4553 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
4554   def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4);
4555 #define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
4556   def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
4557 #define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
4558                             ARG6)                                       \
4559   def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
4560 #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
4561                             ARG6, ARG7)                                 \
4562   def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
4563 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
4564   def_fn_type (ENUM, RETURN, 1, 0);
4565 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
4566   def_fn_type (ENUM, RETURN, 1, 1, ARG1);
4567 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
4568   def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
4569 #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
4570   def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
4571 #define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
4572   def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4);
4573 #define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
4574   def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
4575 #define DEF_POINTER_TYPE(ENUM, TYPE) \
4576   builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]);
4577
4578 #include "builtin-types.def"
4579
4580 #undef DEF_PRIMITIVE_TYPE
4581 #undef DEF_FUNCTION_TYPE_1
4582 #undef DEF_FUNCTION_TYPE_2
4583 #undef DEF_FUNCTION_TYPE_3
4584 #undef DEF_FUNCTION_TYPE_4
4585 #undef DEF_FUNCTION_TYPE_5
4586 #undef DEF_FUNCTION_TYPE_6
4587 #undef DEF_FUNCTION_TYPE_VAR_0
4588 #undef DEF_FUNCTION_TYPE_VAR_1
4589 #undef DEF_FUNCTION_TYPE_VAR_2
4590 #undef DEF_FUNCTION_TYPE_VAR_3
4591 #undef DEF_FUNCTION_TYPE_VAR_4
4592 #undef DEF_FUNCTION_TYPE_VAR_5
4593 #undef DEF_POINTER_TYPE
4594   builtin_types[(int) BT_LAST] = NULL_TREE;
4595
4596   c_init_attributes ();
4597
4598 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
4599                     NONANSI_P, ATTRS, IMPLICIT, COND)                   \
4600   if (NAME && COND)                                                     \
4601     def_builtin_1 (ENUM, NAME, CLASS,                                   \
4602                    builtin_types[(int) TYPE],                           \
4603                    builtin_types[(int) LIBTYPE],                        \
4604                    BOTH_P, FALLBACK_P, NONANSI_P,                       \
4605                    built_in_attributes[(int) ATTRS], IMPLICIT);
4606 #include "builtins.def"
4607 #undef DEF_BUILTIN
4608
4609   targetm.init_builtins ();
4610
4611   build_common_builtin_nodes ();
4612
4613   if (flag_mudflap)
4614     mudflap_init ();
4615 }
4616
4617 /* Like get_identifier, but avoid warnings about null arguments when
4618    the argument may be NULL for targets where GCC lacks stdint.h type
4619    information.  */
4620
4621 static inline tree
4622 c_get_ident (const char *id)
4623 {
4624   return get_identifier (id);
4625 }
4626
4627 /* Build tree nodes and builtin functions common to both C and C++ language
4628    frontends.  */
4629
4630 void
4631 c_common_nodes_and_builtins (void)
4632 {
4633   int char16_type_size;
4634   int char32_type_size;
4635   int wchar_type_size;
4636   tree array_domain_type;
4637   tree va_list_ref_type_node;
4638   tree va_list_arg_type_node;
4639
4640   /* Define `int' and `char' first so that dbx will output them first.  */
4641   record_builtin_type (RID_INT, NULL, integer_type_node);
4642   record_builtin_type (RID_CHAR, "char", char_type_node);
4643
4644   /* `signed' is the same as `int'.  FIXME: the declarations of "signed",
4645      "unsigned long", "long long unsigned" and "unsigned short" were in C++
4646      but not C.  Are the conditionals here needed?  */
4647   if (c_dialect_cxx ())
4648     record_builtin_type (RID_SIGNED, NULL, integer_type_node);
4649   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
4650   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
4651   record_builtin_type (RID_MAX, "long unsigned int",
4652                        long_unsigned_type_node);
4653   if (c_dialect_cxx ())
4654     record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
4655   record_builtin_type (RID_MAX, "long long int",
4656                        long_long_integer_type_node);
4657   record_builtin_type (RID_MAX, "long long unsigned int",
4658                        long_long_unsigned_type_node);
4659   if (c_dialect_cxx ())
4660     record_builtin_type (RID_MAX, "long long unsigned",
4661                          long_long_unsigned_type_node);
4662   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
4663   record_builtin_type (RID_MAX, "short unsigned int",
4664                        short_unsigned_type_node);
4665   if (c_dialect_cxx ())
4666     record_builtin_type (RID_MAX, "unsigned short",
4667                          short_unsigned_type_node);
4668
4669   /* Define both `signed char' and `unsigned char'.  */
4670   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
4671   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
4672
4673   /* These are types that c_common_type_for_size and
4674      c_common_type_for_mode use.  */
4675   lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4676                                          TYPE_DECL, NULL_TREE,
4677                                          intQI_type_node));
4678   lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4679                                          TYPE_DECL, NULL_TREE,
4680                                          intHI_type_node));
4681   lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4682                                          TYPE_DECL, NULL_TREE,
4683                                          intSI_type_node));
4684   lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4685                                          TYPE_DECL, NULL_TREE,
4686                                          intDI_type_node));
4687 #if HOST_BITS_PER_WIDE_INT >= 64
4688   if (targetm.scalar_mode_supported_p (TImode))
4689     lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4690                                            TYPE_DECL,
4691                                            get_identifier ("__int128_t"),
4692                                            intTI_type_node));
4693 #endif
4694   lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4695                                          TYPE_DECL, NULL_TREE,
4696                                          unsigned_intQI_type_node));
4697   lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4698                                          TYPE_DECL, NULL_TREE,
4699                                          unsigned_intHI_type_node));
4700   lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4701                                          TYPE_DECL, NULL_TREE,
4702                                          unsigned_intSI_type_node));
4703   lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4704                                          TYPE_DECL, NULL_TREE,
4705                                          unsigned_intDI_type_node));
4706 #if HOST_BITS_PER_WIDE_INT >= 64
4707   if (targetm.scalar_mode_supported_p (TImode))
4708     lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4709                                            TYPE_DECL,
4710                                            get_identifier ("__uint128_t"),
4711                                            unsigned_intTI_type_node));
4712 #endif
4713
4714   /* Create the widest literal types.  */
4715   widest_integer_literal_type_node
4716     = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
4717   lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4718                                          TYPE_DECL, NULL_TREE,
4719                                          widest_integer_literal_type_node));
4720
4721   widest_unsigned_literal_type_node
4722     = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
4723   lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4724                                          TYPE_DECL, NULL_TREE,
4725                                          widest_unsigned_literal_type_node));
4726
4727   /* `unsigned long' is the standard type for sizeof.
4728      Note that stddef.h uses `unsigned long',
4729      and this must agree, even if long and int are the same size.  */
4730   size_type_node =
4731     TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
4732   signed_size_type_node = c_common_signed_type (size_type_node);
4733   set_sizetype (size_type_node);
4734
4735   pid_type_node =
4736     TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
4737
4738   build_common_tree_nodes_2 (flag_short_double);
4739
4740   record_builtin_type (RID_FLOAT, NULL, float_type_node);
4741   record_builtin_type (RID_DOUBLE, NULL, double_type_node);
4742   record_builtin_type (RID_MAX, "long double", long_double_type_node);
4743
4744   /* Only supported decimal floating point extension if the target
4745      actually supports underlying modes. */
4746   if (targetm.scalar_mode_supported_p (SDmode) 
4747       && targetm.scalar_mode_supported_p (DDmode)
4748       && targetm.scalar_mode_supported_p (TDmode))
4749     {
4750       record_builtin_type (RID_DFLOAT32, NULL, dfloat32_type_node);
4751       record_builtin_type (RID_DFLOAT64, NULL, dfloat64_type_node);
4752       record_builtin_type (RID_DFLOAT128, NULL, dfloat128_type_node);
4753     }
4754
4755   if (targetm.fixed_point_supported_p ())
4756     {
4757       record_builtin_type (RID_MAX, "short _Fract", short_fract_type_node);
4758       record_builtin_type (RID_FRACT, NULL, fract_type_node);
4759       record_builtin_type (RID_MAX, "long _Fract", long_fract_type_node);
4760       record_builtin_type (RID_MAX, "long long _Fract",
4761                            long_long_fract_type_node);
4762       record_builtin_type (RID_MAX, "unsigned short _Fract",
4763                            unsigned_short_fract_type_node);
4764       record_builtin_type (RID_MAX, "unsigned _Fract",
4765                            unsigned_fract_type_node);
4766       record_builtin_type (RID_MAX, "unsigned long _Fract",
4767                            unsigned_long_fract_type_node);
4768       record_builtin_type (RID_MAX, "unsigned long long _Fract",
4769                            unsigned_long_long_fract_type_node);
4770       record_builtin_type (RID_MAX, "_Sat short _Fract",
4771                            sat_short_fract_type_node);
4772       record_builtin_type (RID_MAX, "_Sat _Fract", sat_fract_type_node);
4773       record_builtin_type (RID_MAX, "_Sat long _Fract",
4774                            sat_long_fract_type_node);
4775       record_builtin_type (RID_MAX, "_Sat long long _Fract",
4776                            sat_long_long_fract_type_node);
4777       record_builtin_type (RID_MAX, "_Sat unsigned short _Fract",
4778                            sat_unsigned_short_fract_type_node);
4779       record_builtin_type (RID_MAX, "_Sat unsigned _Fract",
4780                            sat_unsigned_fract_type_node);
4781       record_builtin_type (RID_MAX, "_Sat unsigned long _Fract",
4782                            sat_unsigned_long_fract_type_node);
4783       record_builtin_type (RID_MAX, "_Sat unsigned long long _Fract",
4784                            sat_unsigned_long_long_fract_type_node);
4785       record_builtin_type (RID_MAX, "short _Accum", short_accum_type_node);
4786       record_builtin_type (RID_ACCUM, NULL, accum_type_node);
4787       record_builtin_type (RID_MAX, "long _Accum", long_accum_type_node);
4788       record_builtin_type (RID_MAX, "long long _Accum",
4789                            long_long_accum_type_node);
4790       record_builtin_type (RID_MAX, "unsigned short _Accum",
4791                            unsigned_short_accum_type_node);
4792       record_builtin_type (RID_MAX, "unsigned _Accum",
4793                            unsigned_accum_type_node);
4794       record_builtin_type (RID_MAX, "unsigned long _Accum",
4795                            unsigned_long_accum_type_node);
4796       record_builtin_type (RID_MAX, "unsigned long long _Accum",
4797                            unsigned_long_long_accum_type_node);
4798       record_builtin_type (RID_MAX, "_Sat short _Accum",
4799                            sat_short_accum_type_node);
4800       record_builtin_type (RID_MAX, "_Sat _Accum", sat_accum_type_node);
4801       record_builtin_type (RID_MAX, "_Sat long _Accum",
4802                            sat_long_accum_type_node);
4803       record_builtin_type (RID_MAX, "_Sat long long _Accum",
4804                           sat_long_long_accum_type_node);
4805       record_builtin_type (RID_MAX, "_Sat unsigned short _Accum",
4806                            sat_unsigned_short_accum_type_node);
4807       record_builtin_type (RID_MAX, "_Sat unsigned _Accum",
4808                            sat_unsigned_accum_type_node);
4809       record_builtin_type (RID_MAX, "_Sat unsigned long _Accum",
4810                            sat_unsigned_long_accum_type_node);
4811       record_builtin_type (RID_MAX, "_Sat unsigned long long _Accum",
4812                            sat_unsigned_long_long_accum_type_node);
4813
4814     }
4815
4816   lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4817                                          TYPE_DECL,
4818                                          get_identifier ("complex int"),
4819                                          complex_integer_type_node));
4820   lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4821                                          TYPE_DECL,
4822                                          get_identifier ("complex float"),
4823                                          complex_float_type_node));
4824   lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4825                                          TYPE_DECL,
4826                                          get_identifier ("complex double"),
4827                                          complex_double_type_node));
4828   lang_hooks.decls.pushdecl
4829     (build_decl (UNKNOWN_LOCATION,
4830                  TYPE_DECL, get_identifier ("complex long double"),
4831                  complex_long_double_type_node));
4832
4833   if (c_dialect_cxx ())
4834     /* For C++, make fileptr_type_node a distinct void * type until
4835        FILE type is defined.  */
4836     fileptr_type_node = build_variant_type_copy (ptr_type_node);
4837
4838   record_builtin_type (RID_VOID, NULL, void_type_node);
4839
4840   /* Set the TYPE_NAME for any variants that were built before
4841      record_builtin_type gave names to the built-in types. */
4842   {
4843     tree void_name = TYPE_NAME (void_type_node);
4844     TYPE_NAME (void_type_node) = NULL_TREE;
4845     TYPE_NAME (build_qualified_type (void_type_node, TYPE_QUAL_CONST))
4846       = void_name;
4847     TYPE_NAME (void_type_node) = void_name;
4848   }
4849
4850   /* This node must not be shared.  */
4851   void_zero_node = make_node (INTEGER_CST);
4852   TREE_TYPE (void_zero_node) = void_type_node;
4853
4854   void_list_node = build_void_list_node ();
4855
4856   /* Make a type to be the domain of a few array types
4857      whose domains don't really matter.
4858      200 is small enough that it always fits in size_t
4859      and large enough that it can hold most function names for the
4860      initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
4861   array_domain_type = build_index_type (size_int (200));
4862
4863   /* Make a type for arrays of characters.
4864      With luck nothing will ever really depend on the length of this
4865      array type.  */
4866   char_array_type_node
4867     = build_array_type (char_type_node, array_domain_type);
4868
4869   /* Likewise for arrays of ints.  */
4870   int_array_type_node
4871     = build_array_type (integer_type_node, array_domain_type);
4872
4873   string_type_node = build_pointer_type (char_type_node);
4874   const_string_type_node
4875     = build_pointer_type (build_qualified_type
4876                           (char_type_node, TYPE_QUAL_CONST));
4877
4878   /* This is special for C++ so functions can be overloaded.  */
4879   wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
4880   wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
4881   wchar_type_size = TYPE_PRECISION (wchar_type_node);
4882   underlying_wchar_type_node = wchar_type_node;
4883   if (c_dialect_cxx ())
4884     {
4885       if (TYPE_UNSIGNED (wchar_type_node))
4886         wchar_type_node = make_unsigned_type (wchar_type_size);
4887       else
4888         wchar_type_node = make_signed_type (wchar_type_size);
4889       record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
4890     }
4891
4892   /* This is for wide string constants.  */
4893   wchar_array_type_node
4894     = build_array_type (wchar_type_node, array_domain_type);
4895
4896   /* Define 'char16_t'.  */
4897   char16_type_node = get_identifier (CHAR16_TYPE);
4898   char16_type_node = TREE_TYPE (identifier_global_value (char16_type_node));
4899   char16_type_size = TYPE_PRECISION (char16_type_node);
4900   if (c_dialect_cxx ())
4901     {
4902       char16_type_node = make_unsigned_type (char16_type_size);
4903
4904       if (cxx_dialect == cxx0x)
4905         record_builtin_type (RID_CHAR16, "char16_t", char16_type_node);
4906     }
4907
4908   /* This is for UTF-16 string constants.  */
4909   char16_array_type_node
4910     = build_array_type (char16_type_node, array_domain_type);
4911
4912   /* Define 'char32_t'.  */
4913   char32_type_node = get_identifier (CHAR32_TYPE);
4914   char32_type_node = TREE_TYPE (identifier_global_value (char32_type_node));
4915   char32_type_size = TYPE_PRECISION (char32_type_node);
4916   if (c_dialect_cxx ())
4917     {
4918       char32_type_node = make_unsigned_type (char32_type_size);
4919
4920       if (cxx_dialect == cxx0x)
4921         record_builtin_type (RID_CHAR32, "char32_t", char32_type_node);
4922     }
4923
4924   /* This is for UTF-32 string constants.  */
4925   char32_array_type_node
4926     = build_array_type (char32_type_node, array_domain_type);
4927
4928   wint_type_node =
4929     TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
4930
4931   intmax_type_node =
4932     TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
4933   uintmax_type_node =
4934     TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
4935
4936   if (SIG_ATOMIC_TYPE)
4937     sig_atomic_type_node =
4938       TREE_TYPE (identifier_global_value (c_get_ident (SIG_ATOMIC_TYPE)));
4939   if (INT8_TYPE)
4940     int8_type_node =
4941       TREE_TYPE (identifier_global_value (c_get_ident (INT8_TYPE)));
4942   if (INT16_TYPE)
4943     int16_type_node =
4944       TREE_TYPE (identifier_global_value (c_get_ident (INT16_TYPE)));
4945   if (INT32_TYPE)
4946     int32_type_node =
4947       TREE_TYPE (identifier_global_value (c_get_ident (INT32_TYPE)));
4948   if (INT64_TYPE)
4949     int64_type_node =
4950       TREE_TYPE (identifier_global_value (c_get_ident (INT64_TYPE)));
4951   if (UINT8_TYPE)
4952     uint8_type_node =
4953       TREE_TYPE (identifier_global_value (c_get_ident (UINT8_TYPE)));
4954   if (UINT16_TYPE)
4955     uint16_type_node =
4956       TREE_TYPE (identifier_global_value (c_get_ident (UINT16_TYPE)));
4957   if (UINT32_TYPE)
4958     c_uint32_type_node =
4959       TREE_TYPE (identifier_global_value (c_get_ident (UINT32_TYPE)));
4960   if (UINT64_TYPE)
4961     c_uint64_type_node =
4962       TREE_TYPE (identifier_global_value (c_get_ident (UINT64_TYPE)));
4963   if (INT_LEAST8_TYPE)
4964     int_least8_type_node =
4965       TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST8_TYPE)));
4966   if (INT_LEAST16_TYPE)
4967     int_least16_type_node =
4968       TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST16_TYPE)));
4969   if (INT_LEAST32_TYPE)
4970     int_least32_type_node =
4971       TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST32_TYPE)));
4972   if (INT_LEAST64_TYPE)
4973     int_least64_type_node =
4974       TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST64_TYPE)));
4975   if (UINT_LEAST8_TYPE)
4976     uint_least8_type_node =
4977       TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST8_TYPE)));
4978   if (UINT_LEAST16_TYPE)
4979     uint_least16_type_node =
4980       TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST16_TYPE)));
4981   if (UINT_LEAST32_TYPE)
4982     uint_least32_type_node =
4983       TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST32_TYPE)));
4984   if (UINT_LEAST64_TYPE)
4985     uint_least64_type_node =
4986       TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST64_TYPE)));
4987   if (INT_FAST8_TYPE)
4988     int_fast8_type_node =
4989       TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST8_TYPE)));
4990   if (INT_FAST16_TYPE)
4991     int_fast16_type_node =
4992       TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST16_TYPE)));
4993   if (INT_FAST32_TYPE)
4994     int_fast32_type_node =
4995       TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST32_TYPE)));
4996   if (INT_FAST64_TYPE)
4997     int_fast64_type_node =
4998       TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST64_TYPE)));
4999   if (UINT_FAST8_TYPE)
5000     uint_fast8_type_node =
5001       TREE_TYPE (identifier_global_value (c_get_ident (UINT_FAST8_TYPE)));
5002   if (UINT_FAST16_TYPE)
5003     uint_fast16_type_node =
5004       TREE_TYPE (identifier_global_value (c_get_ident (UINT_FAST16_TYPE)));
5005   if (UINT_FAST32_TYPE)
5006     uint_fast32_type_node =
5007       TREE_TYPE (identifier_global_value (c_get_ident (UINT_FAST32_TYPE)));
5008   if (UINT_FAST64_TYPE)
5009     uint_fast64_type_node =
5010       TREE_TYPE (identifier_global_value (c_get_ident (UINT_FAST64_TYPE)));
5011   if (INTPTR_TYPE)
5012     intptr_type_node =
5013       TREE_TYPE (identifier_global_value (c_get_ident (INTPTR_TYPE)));
5014   if (UINTPTR_TYPE)
5015     uintptr_type_node =
5016       TREE_TYPE (identifier_global_value (c_get_ident (UINTPTR_TYPE)));
5017
5018   default_function_type = build_function_type (integer_type_node, NULL_TREE);
5019   ptrdiff_type_node
5020     = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
5021   unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
5022
5023   lang_hooks.decls.pushdecl
5024     (build_decl (UNKNOWN_LOCATION,
5025                  TYPE_DECL, get_identifier ("__builtin_va_list"),
5026                  va_list_type_node));
5027 #ifdef TARGET_ENUM_VA_LIST
5028   {
5029     int l;
5030     const char *pname;
5031     tree ptype;
5032     for (l = 0; TARGET_ENUM_VA_LIST (l, &pname, &ptype); ++l)
5033       {
5034         lang_hooks.decls.pushdecl
5035           (build_decl (UNKNOWN_LOCATION,
5036                        TYPE_DECL, get_identifier (pname),
5037                        ptype));
5038
5039       }
5040   }
5041 #endif
5042
5043   if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
5044     {
5045       va_list_arg_type_node = va_list_ref_type_node =
5046         build_pointer_type (TREE_TYPE (va_list_type_node));
5047     }
5048   else
5049     {
5050       va_list_arg_type_node = va_list_type_node;
5051       va_list_ref_type_node = build_reference_type (va_list_type_node);
5052     }
5053
5054   if (!flag_preprocess_only)
5055     c_define_builtins (va_list_ref_type_node, va_list_arg_type_node);
5056
5057   main_identifier_node = get_identifier ("main");
5058
5059   /* Create the built-in __null node.  It is important that this is
5060      not shared.  */
5061   null_node = make_node (INTEGER_CST);
5062   TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
5063
5064   /* Since builtin_types isn't gc'ed, don't export these nodes.  */
5065   memset (builtin_types, 0, sizeof (builtin_types));
5066 }
5067
5068 /* The number of named compound-literals generated thus far.  */
5069 static GTY(()) int compound_literal_number;
5070
5071 /* Set DECL_NAME for DECL, a VAR_DECL for a compound-literal.  */
5072
5073 void
5074 set_compound_literal_name (tree decl)
5075 {
5076   char *name;
5077   ASM_FORMAT_PRIVATE_NAME (name, "__compound_literal",
5078                            compound_literal_number);
5079   compound_literal_number++;
5080   DECL_NAME (decl) = get_identifier (name);
5081 }
5082
5083 tree
5084 build_va_arg (location_t loc, tree expr, tree type)
5085 {
5086   expr = build1 (VA_ARG_EXPR, type, expr);
5087   SET_EXPR_LOCATION (expr, loc);
5088   return expr;
5089 }
5090
5091
5092 /* Linked list of disabled built-in functions.  */
5093
5094 typedef struct disabled_builtin
5095 {
5096   const char *name;
5097   struct disabled_builtin *next;
5098 } disabled_builtin;
5099 static disabled_builtin *disabled_builtins = NULL;
5100
5101 static bool builtin_function_disabled_p (const char *);
5102
5103 /* Disable a built-in function specified by -fno-builtin-NAME.  If NAME
5104    begins with "__builtin_", give an error.  */
5105
5106 void
5107 disable_builtin_function (const char *name)
5108 {
5109   if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
5110     error ("cannot disable built-in function %qs", name);
5111   else
5112     {
5113       disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
5114       new_disabled_builtin->name = name;
5115       new_disabled_builtin->next = disabled_builtins;
5116       disabled_builtins = new_disabled_builtin;
5117     }
5118 }
5119
5120
5121 /* Return true if the built-in function NAME has been disabled, false
5122    otherwise.  */
5123
5124 static bool
5125 builtin_function_disabled_p (const char *name)
5126 {
5127   disabled_builtin *p;
5128   for (p = disabled_builtins; p != NULL; p = p->next)
5129     {
5130       if (strcmp (name, p->name) == 0)
5131         return true;
5132     }
5133   return false;
5134 }
5135
5136
5137 /* Worker for DEF_BUILTIN.
5138    Possibly define a builtin function with one or two names.
5139    Does not declare a non-__builtin_ function if flag_no_builtin, or if
5140    nonansi_p and flag_no_nonansi_builtin.  */
5141
5142 static void
5143 def_builtin_1 (enum built_in_function fncode,
5144                const char *name,
5145                enum built_in_class fnclass,
5146                tree fntype, tree libtype,
5147                bool both_p, bool fallback_p, bool nonansi_p,
5148                tree fnattrs, bool implicit_p)
5149 {
5150   tree decl;
5151   const char *libname;
5152
5153   if (fntype == error_mark_node)
5154     return;
5155
5156   gcc_assert ((!both_p && !fallback_p)
5157               || !strncmp (name, "__builtin_",
5158                            strlen ("__builtin_")));
5159
5160   libname = name + strlen ("__builtin_");
5161   decl = add_builtin_function (name, fntype, fncode, fnclass,
5162                                (fallback_p ? libname : NULL),
5163                                fnattrs);
5164   if (both_p
5165       && !flag_no_builtin && !builtin_function_disabled_p (libname)
5166       && !(nonansi_p && flag_no_nonansi_builtin))
5167     add_builtin_function (libname, libtype, fncode, fnclass,
5168                           NULL, fnattrs);
5169
5170   built_in_decls[(int) fncode] = decl;
5171   if (implicit_p)
5172     implicit_built_in_decls[(int) fncode] = decl;
5173 }
5174 \f
5175 /* Nonzero if the type T promotes to int.  This is (nearly) the
5176    integral promotions defined in ISO C99 6.3.1.1/2.  */
5177
5178 bool
5179 c_promoting_integer_type_p (const_tree t)
5180 {
5181   switch (TREE_CODE (t))
5182     {
5183     case INTEGER_TYPE:
5184       return (TYPE_MAIN_VARIANT (t) == char_type_node
5185               || TYPE_MAIN_VARIANT (t) == signed_char_type_node
5186               || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
5187               || TYPE_MAIN_VARIANT (t) == short_integer_type_node
5188               || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
5189               || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
5190
5191     case ENUMERAL_TYPE:
5192       /* ??? Technically all enumerations not larger than an int
5193          promote to an int.  But this is used along code paths
5194          that only want to notice a size change.  */
5195       return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
5196
5197     case BOOLEAN_TYPE:
5198       return 1;
5199
5200     default:
5201       return 0;
5202     }
5203 }
5204
5205 /* Return 1 if PARMS specifies a fixed number of parameters
5206    and none of their types is affected by default promotions.  */
5207
5208 int
5209 self_promoting_args_p (const_tree parms)
5210 {
5211   const_tree t;
5212   for (t = parms; t; t = TREE_CHAIN (t))
5213     {
5214       tree type = TREE_VALUE (t);
5215
5216       if (type == error_mark_node)
5217         continue;
5218
5219       if (TREE_CHAIN (t) == 0 && type != void_type_node)
5220         return 0;
5221
5222       if (type == 0)
5223         return 0;
5224
5225       if (TYPE_MAIN_VARIANT (type) == float_type_node)
5226         return 0;
5227
5228       if (c_promoting_integer_type_p (type))
5229         return 0;
5230     }
5231   return 1;
5232 }
5233
5234 /* Recursively remove any '*' or '&' operator from TYPE.  */
5235 tree
5236 strip_pointer_operator (tree t)
5237 {
5238   while (POINTER_TYPE_P (t))
5239     t = TREE_TYPE (t);
5240   return t;
5241 }
5242
5243 /* Recursively remove pointer or array type from TYPE. */
5244 tree
5245 strip_pointer_or_array_types (tree t)
5246 {
5247   while (TREE_CODE (t) == ARRAY_TYPE || POINTER_TYPE_P (t))
5248     t = TREE_TYPE (t);
5249   return t;
5250 }
5251
5252 /* Used to compare case labels.  K1 and K2 are actually tree nodes
5253    representing case labels, or NULL_TREE for a `default' label.
5254    Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
5255    K2, and 0 if K1 and K2 are equal.  */
5256
5257 int
5258 case_compare (splay_tree_key k1, splay_tree_key k2)
5259 {
5260   /* Consider a NULL key (such as arises with a `default' label) to be
5261      smaller than anything else.  */
5262   if (!k1)
5263     return k2 ? -1 : 0;
5264   else if (!k2)
5265     return k1 ? 1 : 0;
5266
5267   return tree_int_cst_compare ((tree) k1, (tree) k2);
5268 }
5269
5270 /* Process a case label, located at LOC, for the range LOW_VALUE
5271    ... HIGH_VALUE.  If LOW_VALUE and HIGH_VALUE are both NULL_TREE
5272    then this case label is actually a `default' label.  If only
5273    HIGH_VALUE is NULL_TREE, then case label was declared using the
5274    usual C/C++ syntax, rather than the GNU case range extension.
5275    CASES is a tree containing all the case ranges processed so far;
5276    COND is the condition for the switch-statement itself.  Returns the
5277    CASE_LABEL_EXPR created, or ERROR_MARK_NODE if no CASE_LABEL_EXPR
5278    is created.  */
5279
5280 tree
5281 c_add_case_label (location_t loc, splay_tree cases, tree cond, tree orig_type,
5282                   tree low_value, tree high_value)
5283 {
5284   tree type;
5285   tree label;
5286   tree case_label;
5287   splay_tree_node node;
5288
5289   /* Create the LABEL_DECL itself.  */
5290   label = create_artificial_label (loc);
5291
5292   /* If there was an error processing the switch condition, bail now
5293      before we get more confused.  */
5294   if (!cond || cond == error_mark_node)
5295     goto error_out;
5296
5297   if ((low_value && TREE_TYPE (low_value)
5298        && POINTER_TYPE_P (TREE_TYPE (low_value)))
5299       || (high_value && TREE_TYPE (high_value)
5300           && POINTER_TYPE_P (TREE_TYPE (high_value))))
5301     {
5302       error_at (loc, "pointers are not permitted as case values");
5303       goto error_out;
5304     }
5305
5306   /* Case ranges are a GNU extension.  */
5307   if (high_value)
5308     pedwarn (loc, OPT_pedantic, 
5309              "range expressions in switch statements are non-standard");
5310
5311   type = TREE_TYPE (cond);
5312   if (low_value)
5313     {
5314       low_value = check_case_value (low_value);
5315       low_value = convert_and_check (type, low_value);
5316       if (low_value == error_mark_node)
5317         goto error_out;
5318     }
5319   if (high_value)
5320     {
5321       high_value = check_case_value (high_value);
5322       high_value = convert_and_check (type, high_value);
5323       if (high_value == error_mark_node)
5324         goto error_out;
5325     }
5326
5327   if (low_value && high_value)
5328     {
5329       /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
5330          really a case range, even though it was written that way.
5331          Remove the HIGH_VALUE to simplify later processing.  */
5332       if (tree_int_cst_equal (low_value, high_value))
5333         high_value = NULL_TREE;
5334       else if (!tree_int_cst_lt (low_value, high_value))
5335         warning_at (loc, 0, "empty range specified");
5336     }
5337
5338   /* See if the case is in range of the type of the original testing
5339      expression.  If both low_value and high_value are out of range,
5340      don't insert the case label and return NULL_TREE.  */
5341   if (low_value
5342       && !check_case_bounds (type, orig_type,
5343                              &low_value, high_value ? &high_value : NULL))
5344     return NULL_TREE;
5345
5346   /* Look up the LOW_VALUE in the table of case labels we already
5347      have.  */
5348   node = splay_tree_lookup (cases, (splay_tree_key) low_value);
5349   /* If there was not an exact match, check for overlapping ranges.
5350      There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
5351      that's a `default' label and the only overlap is an exact match.  */
5352   if (!node && (low_value || high_value))
5353     {
5354       splay_tree_node low_bound;
5355       splay_tree_node high_bound;
5356
5357       /* Even though there wasn't an exact match, there might be an
5358          overlap between this case range and another case range.
5359          Since we've (inductively) not allowed any overlapping case
5360          ranges, we simply need to find the greatest low case label
5361          that is smaller that LOW_VALUE, and the smallest low case
5362          label that is greater than LOW_VALUE.  If there is an overlap
5363          it will occur in one of these two ranges.  */
5364       low_bound = splay_tree_predecessor (cases,
5365                                           (splay_tree_key) low_value);
5366       high_bound = splay_tree_successor (cases,
5367                                          (splay_tree_key) low_value);
5368
5369       /* Check to see if the LOW_BOUND overlaps.  It is smaller than
5370          the LOW_VALUE, so there is no need to check unless the
5371          LOW_BOUND is in fact itself a case range.  */
5372       if (low_bound
5373           && CASE_HIGH ((tree) low_bound->value)
5374           && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
5375                                     low_value) >= 0)
5376         node = low_bound;
5377       /* Check to see if the HIGH_BOUND overlaps.  The low end of that
5378          range is bigger than the low end of the current range, so we
5379          are only interested if the current range is a real range, and
5380          not an ordinary case label.  */
5381       else if (high_bound
5382                && high_value
5383                && (tree_int_cst_compare ((tree) high_bound->key,
5384                                          high_value)
5385                    <= 0))
5386         node = high_bound;
5387     }
5388   /* If there was an overlap, issue an error.  */
5389   if (node)
5390     {
5391       tree duplicate = CASE_LABEL ((tree) node->value);
5392
5393       if (high_value)
5394         {
5395           error_at (loc, "duplicate (or overlapping) case value");
5396           error_at (DECL_SOURCE_LOCATION (duplicate),
5397                     "this is the first entry overlapping that value");
5398         }
5399       else if (low_value)
5400         {
5401           error_at (loc, "duplicate case value") ;
5402           error_at (DECL_SOURCE_LOCATION (duplicate), "previously used here");
5403         }
5404       else
5405         {
5406           error_at (loc, "multiple default labels in one switch");
5407           error_at (DECL_SOURCE_LOCATION (duplicate),
5408                     "this is the first default label");
5409         }
5410       goto error_out;
5411     }
5412
5413   /* Add a CASE_LABEL to the statement-tree.  */
5414   case_label = add_stmt (build_case_label (loc, low_value, high_value, label));
5415   /* Register this case label in the splay tree.  */
5416   splay_tree_insert (cases,
5417                      (splay_tree_key) low_value,
5418                      (splay_tree_value) case_label);
5419
5420   return case_label;
5421
5422  error_out:
5423   /* Add a label so that the back-end doesn't think that the beginning of
5424      the switch is unreachable.  Note that we do not add a case label, as
5425      that just leads to duplicates and thence to failure later on.  */
5426   if (!cases->root)
5427     {
5428       tree t = create_artificial_label (loc);
5429       add_stmt (build_stmt (loc, LABEL_EXPR, t));
5430     }
5431   return error_mark_node;
5432 }
5433
5434 /* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
5435    Used to verify that case values match up with enumerator values.  */
5436
5437 static void
5438 match_case_to_enum_1 (tree key, tree type, tree label)
5439 {
5440   char buf[2 + 2*HOST_BITS_PER_WIDE_INT/4 + 1];
5441
5442   /* ??? Not working too hard to print the double-word value.
5443      Should perhaps be done with %lwd in the diagnostic routines?  */
5444   if (TREE_INT_CST_HIGH (key) == 0)
5445     snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_UNSIGNED,
5446               TREE_INT_CST_LOW (key));
5447   else if (!TYPE_UNSIGNED (type)
5448            && TREE_INT_CST_HIGH (key) == -1
5449            && TREE_INT_CST_LOW (key) != 0)
5450     snprintf (buf, sizeof (buf), "-" HOST_WIDE_INT_PRINT_UNSIGNED,
5451               -TREE_INT_CST_LOW (key));
5452   else
5453     snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_DOUBLE_HEX,
5454               (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (key),
5455               (unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (key));
5456
5457   if (TYPE_NAME (type) == 0)
5458     warning_at (DECL_SOURCE_LOCATION (CASE_LABEL (label)),
5459                 warn_switch ? OPT_Wswitch : OPT_Wswitch_enum,
5460                 "case value %qs not in enumerated type",
5461                 buf);
5462   else
5463     warning_at (DECL_SOURCE_LOCATION (CASE_LABEL (label)),
5464                 warn_switch ? OPT_Wswitch : OPT_Wswitch_enum,
5465                 "case value %qs not in enumerated type %qT",
5466                 buf, type);
5467 }
5468
5469 /* Subroutine of c_do_switch_warnings, called via splay_tree_foreach.
5470    Used to verify that case values match up with enumerator values.  */
5471
5472 static int
5473 match_case_to_enum (splay_tree_node node, void *data)
5474 {
5475   tree label = (tree) node->value;
5476   tree type = (tree) data;
5477
5478   /* Skip default case.  */
5479   if (!CASE_LOW (label))
5480     return 0;
5481
5482   /* If CASE_LOW_SEEN is not set, that means CASE_LOW did not appear
5483      when we did our enum->case scan.  Reset our scratch bit after.  */
5484   if (!CASE_LOW_SEEN (label))
5485     match_case_to_enum_1 (CASE_LOW (label), type, label);
5486   else
5487     CASE_LOW_SEEN (label) = 0;
5488
5489   /* If CASE_HIGH is non-null, we have a range.  If CASE_HIGH_SEEN is
5490      not set, that means that CASE_HIGH did not appear when we did our
5491      enum->case scan.  Reset our scratch bit after.  */
5492   if (CASE_HIGH (label))
5493     {
5494       if (!CASE_HIGH_SEEN (label))
5495         match_case_to_enum_1 (CASE_HIGH (label), type, label);
5496       else
5497         CASE_HIGH_SEEN (label) = 0;
5498     }
5499
5500   return 0;
5501 }
5502
5503 /* Handle -Wswitch*.  Called from the front end after parsing the
5504    switch construct.  */
5505 /* ??? Should probably be somewhere generic, since other languages
5506    besides C and C++ would want this.  At the moment, however, C/C++
5507    are the only tree-ssa languages that support enumerations at all,
5508    so the point is moot.  */
5509
5510 void
5511 c_do_switch_warnings (splay_tree cases, location_t switch_location,
5512                       tree type, tree cond)
5513 {
5514   splay_tree_node default_node;
5515   splay_tree_node node;
5516   tree chain;
5517
5518   if (!warn_switch && !warn_switch_enum && !warn_switch_default)
5519     return;
5520
5521   default_node = splay_tree_lookup (cases, (splay_tree_key) NULL);
5522   if (!default_node)
5523     warning_at (switch_location, OPT_Wswitch_default,
5524                 "switch missing default case");
5525
5526   /* From here on, we only care about about enumerated types.  */
5527   if (!type || TREE_CODE (type) != ENUMERAL_TYPE)
5528     return;
5529
5530   /* From here on, we only care about -Wswitch and -Wswitch-enum.  */
5531   if (!warn_switch_enum && !warn_switch)
5532     return;
5533
5534   /* Check the cases.  Warn about case values which are not members of
5535      the enumerated type.  For -Wswitch-enum, or for -Wswitch when
5536      there is no default case, check that exactly all enumeration
5537      literals are covered by the cases.  */
5538
5539   /* Clearing COND if it is not an integer constant simplifies
5540      the tests inside the loop below.  */
5541   if (TREE_CODE (cond) != INTEGER_CST)
5542     cond = NULL_TREE;
5543
5544   /* The time complexity here is O(N*lg(N)) worst case, but for the
5545       common case of monotonically increasing enumerators, it is
5546       O(N), since the nature of the splay tree will keep the next
5547       element adjacent to the root at all times.  */
5548
5549   for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain))
5550     {
5551       tree value = TREE_VALUE (chain);
5552       if (TREE_CODE (value) == CONST_DECL)
5553         value = DECL_INITIAL (value);
5554       node = splay_tree_lookup (cases, (splay_tree_key) value);
5555       if (node)
5556         {
5557           /* Mark the CASE_LOW part of the case entry as seen.  */
5558           tree label = (tree) node->value;
5559           CASE_LOW_SEEN (label) = 1;
5560           continue;
5561         }
5562
5563       /* Even though there wasn't an exact match, there might be a
5564          case range which includes the enumerator's value.  */
5565       node = splay_tree_predecessor (cases, (splay_tree_key) value);
5566       if (node && CASE_HIGH ((tree) node->value))
5567         {
5568           tree label = (tree) node->value;
5569           int cmp = tree_int_cst_compare (CASE_HIGH (label), value);
5570           if (cmp >= 0)
5571             {
5572               /* If we match the upper bound exactly, mark the CASE_HIGH
5573                  part of the case entry as seen.  */
5574               if (cmp == 0)
5575                 CASE_HIGH_SEEN (label) = 1;
5576               continue;
5577             }
5578         }
5579
5580       /* We've now determined that this enumerated literal isn't
5581          handled by the case labels of the switch statement.  */
5582
5583       /* If the switch expression is a constant, we only really care
5584          about whether that constant is handled by the switch.  */
5585       if (cond && tree_int_cst_compare (cond, value))
5586         continue;
5587
5588       /* If there is a default_node, the only relevant option is
5589          Wswitch-enum.  Otherwise, if both are enabled then we prefer
5590          to warn using -Wswitch because -Wswitch is enabled by -Wall
5591          while -Wswitch-enum is explicit.  */
5592       warning_at (switch_location,
5593                   (default_node || !warn_switch
5594                    ? OPT_Wswitch_enum
5595                    : OPT_Wswitch),
5596                   "enumeration value %qE not handled in switch",
5597                   TREE_PURPOSE (chain));
5598     }
5599
5600   /* Warn if there are case expressions that don't correspond to
5601      enumerators.  This can occur since C and C++ don't enforce
5602      type-checking of assignments to enumeration variables.
5603
5604      The time complexity here is now always O(N) worst case, since
5605      we should have marked both the lower bound and upper bound of
5606      every disjoint case label, with CASE_LOW_SEEN and CASE_HIGH_SEEN
5607      above.  This scan also resets those fields.  */
5608
5609   splay_tree_foreach (cases, match_case_to_enum, type);
5610 }
5611
5612 /* Finish an expression taking the address of LABEL (an
5613    IDENTIFIER_NODE).  Returns an expression for the address.
5614
5615    LOC is the location for the expression returned.  */
5616
5617 tree
5618 finish_label_address_expr (tree label, location_t loc)
5619 {
5620   tree result;
5621
5622   pedwarn (input_location, OPT_pedantic, "taking the address of a label is non-standard");
5623
5624   if (label == error_mark_node)
5625     return error_mark_node;
5626
5627   label = lookup_label (label);
5628   if (label == NULL_TREE)
5629     result = null_pointer_node;
5630   else
5631     {
5632       TREE_USED (label) = 1;
5633       result = build1 (ADDR_EXPR, ptr_type_node, label);
5634       /* The current function in not necessarily uninlinable.
5635          Computed gotos are incompatible with inlining, but the value
5636          here could be used only in a diagnostic, for example.  */
5637       protected_set_expr_location (result, loc);
5638     }
5639
5640   return result;
5641 }
5642 \f
5643
5644 /* Given a boolean expression ARG, return a tree representing an increment
5645    or decrement (as indicated by CODE) of ARG.  The front end must check for
5646    invalid cases (e.g., decrement in C++).  */
5647 tree
5648 boolean_increment (enum tree_code code, tree arg)
5649 {
5650   tree val;
5651   tree true_res = build_int_cst (TREE_TYPE (arg), 1);
5652
5653   arg = stabilize_reference (arg);
5654   switch (code)
5655     {
5656     case PREINCREMENT_EXPR:
5657       val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
5658       break;
5659     case POSTINCREMENT_EXPR:
5660       val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
5661       arg = save_expr (arg);
5662       val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
5663       val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
5664       break;
5665     case PREDECREMENT_EXPR:
5666       val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
5667                     invert_truthvalue_loc (input_location, arg));
5668       break;
5669     case POSTDECREMENT_EXPR:
5670       val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
5671                     invert_truthvalue_loc (input_location, arg));
5672       arg = save_expr (arg);
5673       val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
5674       val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
5675       break;
5676     default:
5677       gcc_unreachable ();
5678     }
5679   TREE_SIDE_EFFECTS (val) = 1;
5680   return val;
5681 }
5682 \f
5683 /* Built-in macros for stddef.h and stdint.h, that require macros
5684    defined in this file.  */
5685 void
5686 c_stddef_cpp_builtins(void)
5687 {
5688   builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
5689   builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
5690   builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
5691   builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
5692   builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE, 0);
5693   builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE, 0);
5694   builtin_define_with_value ("__CHAR16_TYPE__", CHAR16_TYPE, 0);
5695   builtin_define_with_value ("__CHAR32_TYPE__", CHAR32_TYPE, 0);
5696   if (SIG_ATOMIC_TYPE)
5697     builtin_define_with_value ("__SIG_ATOMIC_TYPE__", SIG_ATOMIC_TYPE, 0);
5698   if (INT8_TYPE)
5699     builtin_define_with_value ("__INT8_TYPE__", INT8_TYPE, 0);
5700   if (INT16_TYPE)
5701     builtin_define_with_value ("__INT16_TYPE__", INT16_TYPE, 0);
5702   if (INT32_TYPE)
5703     builtin_define_with_value ("__INT32_TYPE__", INT32_TYPE, 0);
5704   if (INT64_TYPE)
5705     builtin_define_with_value ("__INT64_TYPE__", INT64_TYPE, 0);
5706   if (UINT8_TYPE)
5707     builtin_define_with_value ("__UINT8_TYPE__", UINT8_TYPE, 0);
5708   if (UINT16_TYPE)
5709     builtin_define_with_value ("__UINT16_TYPE__", UINT16_TYPE, 0);
5710   if (UINT32_TYPE)
5711     builtin_define_with_value ("__UINT32_TYPE__", UINT32_TYPE, 0);
5712   if (UINT64_TYPE)
5713     builtin_define_with_value ("__UINT64_TYPE__", UINT64_TYPE, 0);
5714   if (INT_LEAST8_TYPE)
5715     builtin_define_with_value ("__INT_LEAST8_TYPE__", INT_LEAST8_TYPE, 0);
5716   if (INT_LEAST16_TYPE)
5717     builtin_define_with_value ("__INT_LEAST16_TYPE__", INT_LEAST16_TYPE, 0);
5718   if (INT_LEAST32_TYPE)
5719     builtin_define_with_value ("__INT_LEAST32_TYPE__", INT_LEAST32_TYPE, 0);
5720   if (INT_LEAST64_TYPE)
5721     builtin_define_with_value ("__INT_LEAST64_TYPE__", INT_LEAST64_TYPE, 0);
5722   if (UINT_LEAST8_TYPE)
5723     builtin_define_with_value ("__UINT_LEAST8_TYPE__", UINT_LEAST8_TYPE, 0);
5724   if (UINT_LEAST16_TYPE)
5725     builtin_define_with_value ("__UINT_LEAST16_TYPE__", UINT_LEAST16_TYPE, 0);
5726   if (UINT_LEAST32_TYPE)
5727     builtin_define_with_value ("__UINT_LEAST32_TYPE__", UINT_LEAST32_TYPE, 0);
5728   if (UINT_LEAST64_TYPE)
5729     builtin_define_with_value ("__UINT_LEAST64_TYPE__", UINT_LEAST64_TYPE, 0);
5730   if (INT_FAST8_TYPE)
5731     builtin_define_with_value ("__INT_FAST8_TYPE__", INT_FAST8_TYPE, 0);
5732   if (INT_FAST16_TYPE)
5733     builtin_define_with_value ("__INT_FAST16_TYPE__", INT_FAST16_TYPE, 0);
5734   if (INT_FAST32_TYPE)
5735     builtin_define_with_value ("__INT_FAST32_TYPE__", INT_FAST32_TYPE, 0);
5736   if (INT_FAST64_TYPE)
5737     builtin_define_with_value ("__INT_FAST64_TYPE__", INT_FAST64_TYPE, 0);
5738   if (UINT_FAST8_TYPE)
5739     builtin_define_with_value ("__UINT_FAST8_TYPE__", UINT_FAST8_TYPE, 0);
5740   if (UINT_FAST16_TYPE)
5741     builtin_define_with_value ("__UINT_FAST16_TYPE__", UINT_FAST16_TYPE, 0);
5742   if (UINT_FAST32_TYPE)
5743     builtin_define_with_value ("__UINT_FAST32_TYPE__", UINT_FAST32_TYPE, 0);
5744   if (UINT_FAST64_TYPE)
5745     builtin_define_with_value ("__UINT_FAST64_TYPE__", UINT_FAST64_TYPE, 0);
5746   if (INTPTR_TYPE)
5747     builtin_define_with_value ("__INTPTR_TYPE__", INTPTR_TYPE, 0);
5748   if (UINTPTR_TYPE)
5749     builtin_define_with_value ("__UINTPTR_TYPE__", UINTPTR_TYPE, 0);
5750 }
5751
5752 static void
5753 c_init_attributes (void)
5754 {
5755   /* Fill in the built_in_attributes array.  */
5756 #define DEF_ATTR_NULL_TREE(ENUM)                                \
5757   built_in_attributes[(int) ENUM] = NULL_TREE;
5758 #define DEF_ATTR_INT(ENUM, VALUE)                               \
5759   built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
5760 #define DEF_ATTR_IDENT(ENUM, STRING)                            \
5761   built_in_attributes[(int) ENUM] = get_identifier (STRING);
5762 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
5763   built_in_attributes[(int) ENUM]                       \
5764     = tree_cons (built_in_attributes[(int) PURPOSE],    \
5765                  built_in_attributes[(int) VALUE],      \
5766                  built_in_attributes[(int) CHAIN]);
5767 #include "builtin-attrs.def"
5768 #undef DEF_ATTR_NULL_TREE
5769 #undef DEF_ATTR_INT
5770 #undef DEF_ATTR_IDENT
5771 #undef DEF_ATTR_TREE_LIST
5772 }
5773
5774 /* Attribute handlers common to C front ends.  */
5775
5776 /* Handle a "packed" attribute; arguments as in
5777    struct attribute_spec.handler.  */
5778
5779 static tree
5780 handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5781                          int flags, bool *no_add_attrs)
5782 {
5783   if (TYPE_P (*node))
5784     {
5785       if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5786         *node = build_variant_type_copy (*node);
5787       TYPE_PACKED (*node) = 1;
5788     }
5789   else if (TREE_CODE (*node) == FIELD_DECL)
5790     {
5791       if (TYPE_ALIGN (TREE_TYPE (*node)) <= BITS_PER_UNIT
5792           /* Still pack bitfields.  */
5793           && ! DECL_INITIAL (*node))
5794         warning (OPT_Wattributes,
5795                  "%qE attribute ignored for field of type %qT",
5796                  name, TREE_TYPE (*node));
5797       else
5798         DECL_PACKED (*node) = 1;
5799     }
5800   /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
5801      used for DECL_REGISTER.  It wouldn't mean anything anyway.
5802      We can't set DECL_PACKED on the type of a TYPE_DECL, because
5803      that changes what the typedef is typing.  */
5804   else
5805     {
5806       warning (OPT_Wattributes, "%qE attribute ignored", name);
5807       *no_add_attrs = true;
5808     }
5809
5810   return NULL_TREE;
5811 }
5812
5813 /* Handle a "nocommon" attribute; arguments as in
5814    struct attribute_spec.handler.  */
5815
5816 static tree
5817 handle_nocommon_attribute (tree *node, tree name,
5818                            tree ARG_UNUSED (args),
5819                            int ARG_UNUSED (flags), bool *no_add_attrs)
5820 {
5821   if (TREE_CODE (*node) == VAR_DECL)
5822     DECL_COMMON (*node) = 0;
5823   else
5824     {
5825       warning (OPT_Wattributes, "%qE attribute ignored", name);
5826       *no_add_attrs = true;
5827     }
5828
5829   return NULL_TREE;
5830 }
5831
5832 /* Handle a "common" attribute; arguments as in
5833    struct attribute_spec.handler.  */
5834
5835 static tree
5836 handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5837                          int ARG_UNUSED (flags), bool *no_add_attrs)
5838 {
5839   if (TREE_CODE (*node) == VAR_DECL)
5840     DECL_COMMON (*node) = 1;
5841   else
5842     {
5843       warning (OPT_Wattributes, "%qE attribute ignored", name);
5844       *no_add_attrs = true;
5845     }
5846
5847   return NULL_TREE;
5848 }
5849
5850 /* Handle a "noreturn" attribute; arguments as in
5851    struct attribute_spec.handler.  */
5852
5853 static tree
5854 handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5855                            int ARG_UNUSED (flags), bool *no_add_attrs)
5856 {
5857   tree type = TREE_TYPE (*node);
5858
5859   /* See FIXME comment in c_common_attribute_table.  */
5860   if (TREE_CODE (*node) == FUNCTION_DECL)
5861     TREE_THIS_VOLATILE (*node) = 1;
5862   else if (TREE_CODE (type) == POINTER_TYPE
5863            && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
5864     TREE_TYPE (*node)
5865       = build_pointer_type
5866         (build_type_variant (TREE_TYPE (type),
5867                              TYPE_READONLY (TREE_TYPE (type)), 1));
5868   else
5869     {
5870       warning (OPT_Wattributes, "%qE attribute ignored", name);
5871       *no_add_attrs = true;
5872     }
5873
5874   return NULL_TREE;
5875 }
5876
5877 /* Handle a "hot" and attribute; arguments as in
5878    struct attribute_spec.handler.  */
5879
5880 static tree
5881 handle_hot_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5882                       int ARG_UNUSED (flags), bool *no_add_attrs)
5883 {
5884   if (TREE_CODE (*node) == FUNCTION_DECL)
5885     {
5886       if (lookup_attribute ("cold", DECL_ATTRIBUTES (*node)) != NULL)
5887         {
5888           warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
5889                    name, "cold");
5890           *no_add_attrs = true;
5891         }
5892       /* Most of the rest of the hot processing is done later with
5893          lookup_attribute.  */
5894     }
5895   else
5896     {
5897       warning (OPT_Wattributes, "%qE attribute ignored", name);
5898       *no_add_attrs = true;
5899     }
5900
5901   return NULL_TREE;
5902 }
5903 /* Handle a "cold" and attribute; arguments as in
5904    struct attribute_spec.handler.  */
5905
5906 static tree
5907 handle_cold_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5908                        int ARG_UNUSED (flags), bool *no_add_attrs)
5909 {
5910   if (TREE_CODE (*node) == FUNCTION_DECL)
5911     {
5912       if (lookup_attribute ("hot", DECL_ATTRIBUTES (*node)) != NULL)
5913         {
5914           warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
5915                    name, "hot");
5916           *no_add_attrs = true;
5917         }
5918       /* Most of the rest of the cold processing is done later with
5919          lookup_attribute.  */
5920     }
5921   else
5922     {
5923       warning (OPT_Wattributes, "%qE attribute ignored", name);
5924       *no_add_attrs = true;
5925     }
5926
5927   return NULL_TREE;
5928 }
5929
5930 /* Handle a "noinline" attribute; arguments as in
5931    struct attribute_spec.handler.  */
5932
5933 static tree
5934 handle_noinline_attribute (tree *node, tree name,
5935                            tree ARG_UNUSED (args),
5936                            int ARG_UNUSED (flags), bool *no_add_attrs)
5937 {
5938   if (TREE_CODE (*node) == FUNCTION_DECL)
5939     DECL_UNINLINABLE (*node) = 1;
5940   else
5941     {
5942       warning (OPT_Wattributes, "%qE attribute ignored", name);
5943       *no_add_attrs = true;
5944     }
5945
5946   return NULL_TREE;
5947 }
5948
5949 /* Handle a "noclone" attribute; arguments as in
5950    struct attribute_spec.handler.  */
5951
5952 static tree
5953 handle_noclone_attribute (tree *node, tree name,
5954                           tree ARG_UNUSED (args),
5955                           int ARG_UNUSED (flags), bool *no_add_attrs)
5956 {
5957   if (TREE_CODE (*node) != FUNCTION_DECL)
5958     {
5959       warning (OPT_Wattributes, "%qE attribute ignored", name);
5960       *no_add_attrs = true;
5961     }
5962
5963   return NULL_TREE;
5964 }
5965
5966 /* Handle a "always_inline" attribute; arguments as in
5967    struct attribute_spec.handler.  */
5968
5969 static tree
5970 handle_always_inline_attribute (tree *node, tree name,
5971                                 tree ARG_UNUSED (args),
5972                                 int ARG_UNUSED (flags),
5973                                 bool *no_add_attrs)
5974 {
5975   if (TREE_CODE (*node) == FUNCTION_DECL)
5976     {
5977       /* Set the attribute and mark it for disregarding inline
5978          limits.  */
5979       DECL_DISREGARD_INLINE_LIMITS (*node) = 1;
5980     }
5981   else
5982     {
5983       warning (OPT_Wattributes, "%qE attribute ignored", name);
5984       *no_add_attrs = true;
5985     }
5986
5987   return NULL_TREE;
5988 }
5989
5990 /* Handle a "gnu_inline" attribute; arguments as in
5991    struct attribute_spec.handler.  */
5992
5993 static tree
5994 handle_gnu_inline_attribute (tree *node, tree name,
5995                              tree ARG_UNUSED (args),
5996                              int ARG_UNUSED (flags),
5997                              bool *no_add_attrs)
5998 {
5999   if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
6000     {
6001       /* Do nothing else, just set the attribute.  We'll get at
6002          it later with lookup_attribute.  */
6003     }
6004   else
6005     {
6006       warning (OPT_Wattributes, "%qE attribute ignored", name);
6007       *no_add_attrs = true;
6008     }
6009
6010   return NULL_TREE;
6011 }
6012
6013 /* Handle an "artificial" attribute; arguments as in
6014    struct attribute_spec.handler.  */
6015
6016 static tree
6017 handle_artificial_attribute (tree *node, tree name,
6018                              tree ARG_UNUSED (args),
6019                              int ARG_UNUSED (flags),
6020                              bool *no_add_attrs)
6021 {
6022   if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
6023     {
6024       /* Do nothing else, just set the attribute.  We'll get at
6025          it later with lookup_attribute.  */
6026     }
6027   else
6028     {
6029       warning (OPT_Wattributes, "%qE attribute ignored", name);
6030       *no_add_attrs = true;
6031     }
6032
6033   return NULL_TREE;
6034 }
6035
6036 /* Handle a "flatten" attribute; arguments as in
6037    struct attribute_spec.handler.  */
6038
6039 static tree
6040 handle_flatten_attribute (tree *node, tree name,
6041                           tree args ATTRIBUTE_UNUSED,
6042                           int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
6043 {
6044   if (TREE_CODE (*node) == FUNCTION_DECL)
6045     /* Do nothing else, just set the attribute.  We'll get at
6046        it later with lookup_attribute.  */
6047     ;
6048   else
6049     {
6050       warning (OPT_Wattributes, "%qE attribute ignored", name);
6051       *no_add_attrs = true;
6052     }
6053
6054   return NULL_TREE;
6055 }
6056
6057 /* Handle a "warning" or "error" attribute; arguments as in
6058    struct attribute_spec.handler.  */
6059
6060 static tree
6061 handle_error_attribute (tree *node, tree name, tree args,
6062                         int ARG_UNUSED (flags), bool *no_add_attrs)
6063 {
6064   if (TREE_CODE (*node) == FUNCTION_DECL
6065       || TREE_CODE (TREE_VALUE (args)) == STRING_CST)
6066     /* Do nothing else, just set the attribute.  We'll get at
6067        it later with lookup_attribute.  */
6068     ;
6069   else
6070     {
6071       warning (OPT_Wattributes, "%qE attribute ignored", name);
6072       *no_add_attrs = true;
6073     }
6074
6075   return NULL_TREE;
6076 }
6077
6078 /* Handle a "used" attribute; arguments as in
6079    struct attribute_spec.handler.  */
6080
6081 static tree
6082 handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
6083                        int ARG_UNUSED (flags), bool *no_add_attrs)
6084 {
6085   tree node = *pnode;
6086
6087   if (TREE_CODE (node) == FUNCTION_DECL
6088       || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
6089     {
6090       TREE_USED (node) = 1;
6091       DECL_PRESERVE_P (node) = 1;
6092     }
6093   else
6094     {
6095       warning (OPT_Wattributes, "%qE attribute ignored", name);
6096       *no_add_attrs = true;
6097     }
6098
6099   return NULL_TREE;
6100 }
6101
6102 /* Handle a "unused" attribute; arguments as in
6103    struct attribute_spec.handler.  */
6104
6105 static tree
6106 handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
6107                          int flags, bool *no_add_attrs)
6108 {
6109   if (DECL_P (*node))
6110     {
6111       tree decl = *node;
6112
6113       if (TREE_CODE (decl) == PARM_DECL
6114           || TREE_CODE (decl) == VAR_DECL
6115           || TREE_CODE (decl) == FUNCTION_DECL
6116           || TREE_CODE (decl) == LABEL_DECL
6117           || TREE_CODE (decl) == TYPE_DECL)
6118         TREE_USED (decl) = 1;
6119       else
6120         {
6121           warning (OPT_Wattributes, "%qE attribute ignored", name);
6122           *no_add_attrs = true;
6123         }
6124     }
6125   else
6126     {
6127       if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
6128         *node = build_variant_type_copy (*node);
6129       TREE_USED (*node) = 1;
6130     }
6131
6132   return NULL_TREE;
6133 }
6134
6135 /* Handle a "externally_visible" attribute; arguments as in
6136    struct attribute_spec.handler.  */
6137
6138 static tree
6139 handle_externally_visible_attribute (tree *pnode, tree name,
6140                                      tree ARG_UNUSED (args),
6141                                      int ARG_UNUSED (flags),
6142                                      bool *no_add_attrs)
6143 {
6144   tree node = *pnode;
6145
6146   if (TREE_CODE (node) == FUNCTION_DECL || TREE_CODE (node) == VAR_DECL)
6147     {
6148       if ((!TREE_STATIC (node) && TREE_CODE (node) != FUNCTION_DECL
6149            && !DECL_EXTERNAL (node)) || !TREE_PUBLIC (node))
6150         {
6151           warning (OPT_Wattributes,
6152                    "%qE attribute have effect only on public objects", name);
6153           *no_add_attrs = true;
6154         }
6155     }
6156   else
6157     {
6158       warning (OPT_Wattributes, "%qE attribute ignored", name);
6159       *no_add_attrs = true;
6160     }
6161
6162   return NULL_TREE;
6163 }
6164
6165 /* Handle a "const" attribute; arguments as in
6166    struct attribute_spec.handler.  */
6167
6168 static tree
6169 handle_const_attribute (tree *node, tree name, tree ARG_UNUSED (args),
6170                         int ARG_UNUSED (flags), bool *no_add_attrs)
6171 {
6172   tree type = TREE_TYPE (*node);
6173
6174   /* See FIXME comment on noreturn in c_common_attribute_table.  */
6175   if (TREE_CODE (*node) == FUNCTION_DECL)
6176     TREE_READONLY (*node) = 1;
6177   else if (TREE_CODE (type) == POINTER_TYPE
6178            && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
6179     TREE_TYPE (*node)
6180       = build_pointer_type
6181         (build_type_variant (TREE_TYPE (type), 1,
6182                              TREE_THIS_VOLATILE (TREE_TYPE (type))));
6183   else
6184     {
6185       warning (OPT_Wattributes, "%qE attribute ignored", name);
6186       *no_add_attrs = true;
6187     }
6188
6189   return NULL_TREE;
6190 }
6191
6192 /* Handle a "transparent_union" attribute; arguments as in
6193    struct attribute_spec.handler.  */
6194
6195 static tree
6196 handle_transparent_union_attribute (tree *node, tree name,
6197                                     tree ARG_UNUSED (args), int flags,
6198                                     bool *no_add_attrs)
6199 {
6200   tree type;
6201
6202   *no_add_attrs = true;
6203
6204   if (TREE_CODE (*node) == TYPE_DECL)
6205     node = &TREE_TYPE (*node);
6206   type = *node;
6207
6208   if (TREE_CODE (type) == UNION_TYPE)
6209     {
6210       /* When IN_PLACE is set, leave the check for FIELDS and MODE to
6211          the code in finish_struct.  */
6212       if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
6213         {
6214           if (TYPE_FIELDS (type) == NULL_TREE
6215               || TYPE_MODE (type) != DECL_MODE (TYPE_FIELDS (type)))
6216             goto ignored;
6217
6218           /* A type variant isn't good enough, since we don't a cast
6219              to such a type removed as a no-op.  */
6220           *node = type = build_duplicate_type (type);
6221         }
6222
6223       TYPE_TRANSPARENT_UNION (type) = 1;
6224       return NULL_TREE;
6225     }
6226
6227  ignored:
6228   warning (OPT_Wattributes, "%qE attribute ignored", name);
6229   return NULL_TREE;
6230 }
6231
6232 /* Subroutine of handle_{con,de}structor_attribute.  Evaluate ARGS to
6233    get the requested priority for a constructor or destructor,
6234    possibly issuing diagnostics for invalid or reserved
6235    priorities.  */
6236
6237 static priority_type
6238 get_priority (tree args, bool is_destructor)
6239 {
6240   HOST_WIDE_INT pri;
6241   tree arg;
6242
6243   if (!args)
6244     return DEFAULT_INIT_PRIORITY;
6245   
6246   if (!SUPPORTS_INIT_PRIORITY)
6247     {
6248       if (is_destructor)
6249         error ("destructor priorities are not supported");
6250       else
6251         error ("constructor priorities are not supported");
6252       return DEFAULT_INIT_PRIORITY;
6253     }
6254
6255   arg = TREE_VALUE (args);
6256   if (!host_integerp (arg, /*pos=*/0)
6257       || !INTEGRAL_TYPE_P (TREE_TYPE (arg)))
6258     goto invalid;
6259
6260   pri = tree_low_cst (TREE_VALUE (args), /*pos=*/0);
6261   if (pri < 0 || pri > MAX_INIT_PRIORITY)
6262     goto invalid;
6263
6264   if (pri <= MAX_RESERVED_INIT_PRIORITY)
6265     {
6266       if (is_destructor)
6267         warning (0,
6268                  "destructor priorities from 0 to %d are reserved "
6269                  "for the implementation", 
6270                  MAX_RESERVED_INIT_PRIORITY);
6271       else
6272         warning (0,
6273                  "constructor priorities from 0 to %d are reserved "
6274                  "for the implementation", 
6275                  MAX_RESERVED_INIT_PRIORITY);
6276     }
6277   return pri;
6278
6279  invalid:
6280   if (is_destructor)
6281     error ("destructor priorities must be integers from 0 to %d inclusive",
6282            MAX_INIT_PRIORITY);
6283   else
6284     error ("constructor priorities must be integers from 0 to %d inclusive",
6285            MAX_INIT_PRIORITY);
6286   return DEFAULT_INIT_PRIORITY;
6287 }
6288
6289 /* Handle a "constructor" attribute; arguments as in
6290    struct attribute_spec.handler.  */
6291
6292 static tree
6293 handle_constructor_attribute (tree *node, tree name, tree args,
6294                               int ARG_UNUSED (flags),
6295                               bool *no_add_attrs)
6296 {
6297   tree decl = *node;
6298   tree type = TREE_TYPE (decl);
6299
6300   if (TREE_CODE (decl) == FUNCTION_DECL
6301       && TREE_CODE (type) == FUNCTION_TYPE
6302       && decl_function_context (decl) == 0)
6303     {
6304       priority_type priority;
6305       DECL_STATIC_CONSTRUCTOR (decl) = 1;
6306       priority = get_priority (args, /*is_destructor=*/false);
6307       SET_DECL_INIT_PRIORITY (decl, priority);
6308       TREE_USED (decl) = 1;
6309     }
6310   else
6311     {
6312       warning (OPT_Wattributes, "%qE attribute ignored", name);
6313       *no_add_attrs = true;
6314     }
6315
6316   return NULL_TREE;
6317 }
6318
6319 /* Handle a "destructor" attribute; arguments as in
6320    struct attribute_spec.handler.  */
6321
6322 static tree
6323 handle_destructor_attribute (tree *node, tree name, tree args,
6324                              int ARG_UNUSED (flags),
6325                              bool *no_add_attrs)
6326 {
6327   tree decl = *node;
6328   tree type = TREE_TYPE (decl);
6329
6330   if (TREE_CODE (decl) == FUNCTION_DECL
6331       && TREE_CODE (type) == FUNCTION_TYPE
6332       && decl_function_context (decl) == 0)
6333     {
6334       priority_type priority;
6335       DECL_STATIC_DESTRUCTOR (decl) = 1;
6336       priority = get_priority (args, /*is_destructor=*/true);
6337       SET_DECL_FINI_PRIORITY (decl, priority);
6338       TREE_USED (decl) = 1;
6339     }
6340   else
6341     {
6342       warning (OPT_Wattributes, "%qE attribute ignored", name);
6343       *no_add_attrs = true;
6344     }
6345
6346   return NULL_TREE;
6347 }
6348
6349 /* Handle a "mode" attribute; arguments as in
6350    struct attribute_spec.handler.  */
6351
6352 static tree
6353 handle_mode_attribute (tree *node, tree name, tree args,
6354                        int ARG_UNUSED (flags), bool *no_add_attrs)
6355 {
6356   tree type = *node;
6357   tree ident = TREE_VALUE (args);
6358
6359   *no_add_attrs = true;
6360
6361   if (TREE_CODE (ident) != IDENTIFIER_NODE)
6362     warning (OPT_Wattributes, "%qE attribute ignored", name);
6363   else
6364     {
6365       int j;
6366       const char *p = IDENTIFIER_POINTER (ident);
6367       int len = strlen (p);
6368       enum machine_mode mode = VOIDmode;
6369       tree typefm;
6370       bool valid_mode;
6371
6372       if (len > 4 && p[0] == '_' && p[1] == '_'
6373           && p[len - 1] == '_' && p[len - 2] == '_')
6374         {
6375           char *newp = (char *) alloca (len - 1);
6376
6377           strcpy (newp, &p[2]);
6378           newp[len - 4] = '\0';
6379           p = newp;
6380         }
6381
6382       /* Change this type to have a type with the specified mode.
6383          First check for the special modes.  */
6384       if (!strcmp (p, "byte"))
6385         mode = byte_mode;
6386       else if (!strcmp (p, "word"))
6387         mode = word_mode;
6388       else if (!strcmp (p, "pointer"))
6389         mode = ptr_mode;
6390       else if (!strcmp (p, "libgcc_cmp_return"))
6391         mode = targetm.libgcc_cmp_return_mode ();
6392       else if (!strcmp (p, "libgcc_shift_count"))
6393         mode = targetm.libgcc_shift_count_mode ();
6394       else if (!strcmp (p, "unwind_word"))
6395         mode = targetm.unwind_word_mode ();
6396       else
6397         for (j = 0; j < NUM_MACHINE_MODES; j++)
6398           if (!strcmp (p, GET_MODE_NAME (j)))
6399             {
6400               mode = (enum machine_mode) j;
6401               break;
6402             }
6403
6404       if (mode == VOIDmode)
6405         {
6406           error ("unknown machine mode %qE", ident);
6407           return NULL_TREE;
6408         }
6409
6410       valid_mode = false;
6411       switch (GET_MODE_CLASS (mode))
6412         {
6413         case MODE_INT:
6414         case MODE_PARTIAL_INT:
6415         case MODE_FLOAT:
6416         case MODE_DECIMAL_FLOAT:
6417         case MODE_FRACT:
6418         case MODE_UFRACT:
6419         case MODE_ACCUM:
6420         case MODE_UACCUM:
6421           valid_mode = targetm.scalar_mode_supported_p (mode);
6422           break;
6423
6424         case MODE_COMPLEX_INT:
6425         case MODE_COMPLEX_FLOAT:
6426           valid_mode = targetm.scalar_mode_supported_p (GET_MODE_INNER (mode));
6427           break;
6428
6429         case MODE_VECTOR_INT:
6430         case MODE_VECTOR_FLOAT:
6431         case MODE_VECTOR_FRACT:
6432         case MODE_VECTOR_UFRACT:
6433         case MODE_VECTOR_ACCUM:
6434         case MODE_VECTOR_UACCUM:
6435           warning (OPT_Wattributes, "specifying vector types with "
6436                    "__attribute__ ((mode)) is deprecated");
6437           warning (OPT_Wattributes,
6438                    "use __attribute__ ((vector_size)) instead");
6439           valid_mode = vector_mode_valid_p (mode);
6440           break;
6441
6442         default:
6443           break;
6444         }
6445       if (!valid_mode)
6446         {
6447           error ("unable to emulate %qs", p);
6448           return NULL_TREE;
6449         }
6450
6451       if (POINTER_TYPE_P (type))
6452         {
6453           tree (*fn)(tree, enum machine_mode, bool);
6454
6455           if (!targetm.valid_pointer_mode (mode))
6456             {
6457               error ("invalid pointer mode %qs", p);
6458               return NULL_TREE;
6459             }
6460
6461           if (TREE_CODE (type) == POINTER_TYPE)
6462             fn = build_pointer_type_for_mode;
6463           else
6464             fn = build_reference_type_for_mode;
6465           typefm = fn (TREE_TYPE (type), mode, false);
6466         }
6467       else
6468         {
6469           /* For fixed-point modes, we need to test if the signness of type
6470              and the machine mode are consistent.  */
6471           if (ALL_FIXED_POINT_MODE_P (mode)
6472               && TYPE_UNSIGNED (type) != UNSIGNED_FIXED_POINT_MODE_P (mode))
6473             {
6474               error ("signness of type and machine mode %qs don't match", p);
6475               return NULL_TREE;
6476             }
6477           /* For fixed-point modes, we need to pass saturating info.  */
6478           typefm = lang_hooks.types.type_for_mode (mode,
6479                         ALL_FIXED_POINT_MODE_P (mode) ? TYPE_SATURATING (type)
6480                                                       : TYPE_UNSIGNED (type));
6481         }
6482
6483       if (typefm == NULL_TREE)
6484         {
6485           error ("no data type for mode %qs", p);
6486           return NULL_TREE;
6487         }
6488       else if (TREE_CODE (type) == ENUMERAL_TYPE)
6489         {
6490           /* For enumeral types, copy the precision from the integer
6491              type returned above.  If not an INTEGER_TYPE, we can't use
6492              this mode for this type.  */
6493           if (TREE_CODE (typefm) != INTEGER_TYPE)
6494             {
6495               error ("cannot use mode %qs for enumeral types", p);
6496               return NULL_TREE;
6497             }
6498
6499           if (flags & ATTR_FLAG_TYPE_IN_PLACE)
6500             {
6501               TYPE_PRECISION (type) = TYPE_PRECISION (typefm);
6502               typefm = type;
6503             }
6504           else
6505             {
6506               /* We cannot build a type variant, as there's code that assumes
6507                  that TYPE_MAIN_VARIANT has the same mode.  This includes the
6508                  debug generators.  Instead, create a subrange type.  This
6509                  results in all of the enumeral values being emitted only once
6510                  in the original, and the subtype gets them by reference.  */
6511               if (TYPE_UNSIGNED (type))
6512                 typefm = make_unsigned_type (TYPE_PRECISION (typefm));
6513               else
6514                 typefm = make_signed_type (TYPE_PRECISION (typefm));
6515               TREE_TYPE (typefm) = type;
6516             }
6517         }
6518       else if (VECTOR_MODE_P (mode)
6519                ? TREE_CODE (type) != TREE_CODE (TREE_TYPE (typefm))
6520                : TREE_CODE (type) != TREE_CODE (typefm))
6521         {
6522           error ("mode %qs applied to inappropriate type", p);
6523           return NULL_TREE;
6524         }
6525
6526       *node = typefm;
6527     }
6528
6529   return NULL_TREE;
6530 }
6531
6532 /* Handle a "section" attribute; arguments as in
6533    struct attribute_spec.handler.  */
6534
6535 static tree
6536 handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
6537                           int ARG_UNUSED (flags), bool *no_add_attrs)
6538 {
6539   tree decl = *node;
6540
6541   if (targetm.have_named_sections)
6542     {
6543       user_defined_section_attribute = true;
6544
6545       if ((TREE_CODE (decl) == FUNCTION_DECL
6546            || TREE_CODE (decl) == VAR_DECL)
6547           && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
6548         {
6549           if (TREE_CODE (decl) == VAR_DECL
6550               && current_function_decl != NULL_TREE
6551               && !TREE_STATIC (decl))
6552             {
6553               error_at (DECL_SOURCE_LOCATION (decl), 
6554                         "section attribute cannot be specified for "
6555                         "local variables");
6556               *no_add_attrs = true;
6557             }
6558
6559           /* The decl may have already been given a section attribute
6560              from a previous declaration.  Ensure they match.  */
6561           else if (DECL_SECTION_NAME (decl) != NULL_TREE
6562                    && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
6563                               TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
6564             {
6565               error ("section of %q+D conflicts with previous declaration",
6566                      *node);
6567               *no_add_attrs = true;
6568             }
6569           else if (TREE_CODE (decl) == VAR_DECL
6570                    && !targetm.have_tls && targetm.emutls.tmpl_section
6571                    && DECL_THREAD_LOCAL_P (decl))
6572             {
6573               error ("section of %q+D cannot be overridden", *node);
6574               *no_add_attrs = true;
6575             }
6576           else
6577             DECL_SECTION_NAME (decl) = TREE_VALUE (args);
6578         }
6579       else
6580         {
6581           error ("section attribute not allowed for %q+D", *node);
6582           *no_add_attrs = true;
6583         }
6584     }
6585   else
6586     {
6587       error_at (DECL_SOURCE_LOCATION (*node),
6588                 "section attributes are not supported for this target");
6589       *no_add_attrs = true;
6590     }
6591
6592   return NULL_TREE;
6593 }
6594
6595 /* Handle a "aligned" attribute; arguments as in
6596    struct attribute_spec.handler.  */
6597
6598 static tree
6599 handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
6600                           int flags, bool *no_add_attrs)
6601 {
6602   tree decl = NULL_TREE;
6603   tree *type = NULL;
6604   int is_type = 0;
6605   tree align_expr = (args ? TREE_VALUE (args)
6606                      : size_int (ATTRIBUTE_ALIGNED_VALUE / BITS_PER_UNIT));
6607   int i;
6608
6609   if (DECL_P (*node))
6610     {
6611       decl = *node;
6612       type = &TREE_TYPE (decl);
6613       is_type = TREE_CODE (*node) == TYPE_DECL;
6614     }
6615   else if (TYPE_P (*node))
6616     type = node, is_type = 1;
6617
6618   if (TREE_CODE (align_expr) != INTEGER_CST)
6619     {
6620       error ("requested alignment is not a constant");
6621       *no_add_attrs = true;
6622     }
6623   else if ((i = tree_log2 (align_expr)) == -1)
6624     {
6625       error ("requested alignment is not a power of 2");
6626       *no_add_attrs = true;
6627     }
6628   else if (i >= HOST_BITS_PER_INT - BITS_PER_UNIT_LOG)
6629     {
6630       error ("requested alignment is too large");
6631       *no_add_attrs = true;
6632     }
6633   else if (is_type)
6634     {
6635       /* If we have a TYPE_DECL, then copy the type, so that we
6636          don't accidentally modify a builtin type.  See pushdecl.  */
6637       if (decl && TREE_TYPE (decl) != error_mark_node
6638           && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
6639         {
6640           tree tt = TREE_TYPE (decl);
6641           *type = build_variant_type_copy (*type);
6642           DECL_ORIGINAL_TYPE (decl) = tt;
6643           TYPE_NAME (*type) = decl;
6644           TREE_USED (*type) = TREE_USED (decl);
6645           TREE_TYPE (decl) = *type;
6646         }
6647       else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
6648         *type = build_variant_type_copy (*type);
6649
6650       TYPE_ALIGN (*type) = (1U << i) * BITS_PER_UNIT;
6651       TYPE_USER_ALIGN (*type) = 1;
6652     }
6653   else if (! VAR_OR_FUNCTION_DECL_P (decl)
6654            && TREE_CODE (decl) != FIELD_DECL)
6655     {
6656       error ("alignment may not be specified for %q+D", decl);
6657       *no_add_attrs = true;
6658     }
6659   else if (TREE_CODE (decl) == FUNCTION_DECL
6660            && DECL_ALIGN (decl) > (1U << i) * BITS_PER_UNIT)
6661     {
6662       if (DECL_USER_ALIGN (decl))
6663         error ("alignment for %q+D was previously specified as %d "
6664                "and may not be decreased", decl,
6665                DECL_ALIGN (decl) / BITS_PER_UNIT);
6666       else
6667         error ("alignment for %q+D must be at least %d", decl,
6668                DECL_ALIGN (decl) / BITS_PER_UNIT);
6669       *no_add_attrs = true;
6670     }
6671   else
6672     {
6673       DECL_ALIGN (decl) = (1U << i) * BITS_PER_UNIT;
6674       DECL_USER_ALIGN (decl) = 1;
6675     }
6676
6677   return NULL_TREE;
6678 }
6679
6680 /* Handle a "weak" attribute; arguments as in
6681    struct attribute_spec.handler.  */
6682
6683 static tree
6684 handle_weak_attribute (tree *node, tree name,
6685                        tree ARG_UNUSED (args),
6686                        int ARG_UNUSED (flags),
6687                        bool * ARG_UNUSED (no_add_attrs))
6688 {
6689   if (TREE_CODE (*node) == FUNCTION_DECL
6690       && DECL_DECLARED_INLINE_P (*node))
6691     {
6692       error ("inline function %q+D cannot be declared weak", *node);
6693       *no_add_attrs = true;
6694     }
6695   else if (TREE_CODE (*node) == FUNCTION_DECL
6696            || TREE_CODE (*node) == VAR_DECL)
6697     declare_weak (*node);
6698   else
6699     warning (OPT_Wattributes, "%qE attribute ignored", name);
6700
6701   return NULL_TREE;
6702 }
6703
6704 /* Handle an "alias" attribute; arguments as in
6705    struct attribute_spec.handler.  */
6706
6707 static tree
6708 handle_alias_attribute (tree *node, tree name, tree args,
6709                         int ARG_UNUSED (flags), bool *no_add_attrs)
6710 {
6711   tree decl = *node;
6712
6713   if (TREE_CODE (decl) != FUNCTION_DECL && TREE_CODE (decl) != VAR_DECL)
6714     {
6715       warning (OPT_Wattributes, "%qE attribute ignored", name);
6716       *no_add_attrs = true;
6717     }
6718   else if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
6719       || (TREE_CODE (decl) != FUNCTION_DECL 
6720           && TREE_PUBLIC (decl) && !DECL_EXTERNAL (decl))
6721       /* A static variable declaration is always a tentative definition,
6722          but the alias is a non-tentative definition which overrides.  */
6723       || (TREE_CODE (decl) != FUNCTION_DECL 
6724           && ! TREE_PUBLIC (decl) && DECL_INITIAL (decl)))
6725     {
6726       error ("%q+D defined both normally and as an alias", decl);
6727       *no_add_attrs = true;
6728     }
6729
6730   /* Note that the very first time we process a nested declaration,
6731      decl_function_context will not be set.  Indeed, *would* never
6732      be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
6733      we do below.  After such frobbery, pushdecl would set the context.
6734      In any case, this is never what we want.  */
6735   else if (decl_function_context (decl) == 0 && current_function_decl == NULL)
6736     {
6737       tree id;
6738
6739       id = TREE_VALUE (args);
6740       if (TREE_CODE (id) != STRING_CST)
6741         {
6742           error ("alias argument not a string");
6743           *no_add_attrs = true;
6744           return NULL_TREE;
6745         }
6746       id = get_identifier (TREE_STRING_POINTER (id));
6747       /* This counts as a use of the object pointed to.  */
6748       TREE_USED (id) = 1;
6749
6750       if (TREE_CODE (decl) == FUNCTION_DECL)
6751         DECL_INITIAL (decl) = error_mark_node;
6752       else
6753         {
6754           if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
6755             DECL_EXTERNAL (decl) = 1;
6756           else
6757             DECL_EXTERNAL (decl) = 0;
6758           TREE_STATIC (decl) = 1;
6759         }
6760     }
6761   else
6762     {
6763       warning (OPT_Wattributes, "%qE attribute ignored", name);
6764       *no_add_attrs = true;
6765     }
6766
6767   return NULL_TREE;
6768 }
6769
6770 /* Handle a "weakref" attribute; arguments as in struct
6771    attribute_spec.handler.  */
6772
6773 static tree
6774 handle_weakref_attribute (tree *node, tree ARG_UNUSED (name), tree args,
6775                           int flags, bool *no_add_attrs)
6776 {
6777   tree attr = NULL_TREE;
6778
6779   /* We must ignore the attribute when it is associated with
6780      local-scoped decls, since attribute alias is ignored and many
6781      such symbols do not even have a DECL_WEAK field.  */
6782   if (decl_function_context (*node)
6783       || current_function_decl
6784       || (TREE_CODE (*node) != VAR_DECL && TREE_CODE (*node) != FUNCTION_DECL))
6785     {
6786       warning (OPT_Wattributes, "%qE attribute ignored", name);
6787       *no_add_attrs = true;
6788       return NULL_TREE;
6789     }
6790
6791   /* The idea here is that `weakref("name")' mutates into `weakref,
6792      alias("name")', and weakref without arguments, in turn,
6793      implicitly adds weak. */
6794
6795   if (args)
6796     {
6797       attr = tree_cons (get_identifier ("alias"), args, attr);
6798       attr = tree_cons (get_identifier ("weakref"), NULL_TREE, attr);
6799
6800       *no_add_attrs = true;
6801
6802       decl_attributes (node, attr, flags);
6803     }
6804   else
6805     {
6806       if (lookup_attribute ("alias", DECL_ATTRIBUTES (*node)))
6807         error_at (DECL_SOURCE_LOCATION (*node),
6808                   "weakref attribute must appear before alias attribute");
6809
6810       /* Can't call declare_weak because it wants this to be TREE_PUBLIC,
6811          and that isn't supported; and because it wants to add it to
6812          the list of weak decls, which isn't helpful.  */
6813       DECL_WEAK (*node) = 1;
6814     }
6815
6816   return NULL_TREE;
6817 }
6818
6819 /* Handle an "visibility" attribute; arguments as in
6820    struct attribute_spec.handler.  */
6821
6822 static tree
6823 handle_visibility_attribute (tree *node, tree name, tree args,
6824                              int ARG_UNUSED (flags),
6825                              bool *ARG_UNUSED (no_add_attrs))
6826 {
6827   tree decl = *node;
6828   tree id = TREE_VALUE (args);
6829   enum symbol_visibility vis;
6830
6831   if (TYPE_P (*node))
6832     {
6833       if (TREE_CODE (*node) == ENUMERAL_TYPE)
6834         /* OK */;
6835       else if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE)
6836         {
6837           warning (OPT_Wattributes, "%qE attribute ignored on non-class types",
6838                    name);
6839           return NULL_TREE;
6840         }
6841       else if (TYPE_FIELDS (*node))
6842         {
6843           error ("%qE attribute ignored because %qT is already defined",
6844                  name, *node);
6845           return NULL_TREE;
6846         }
6847     }
6848   else if (decl_function_context (decl) != 0 || !TREE_PUBLIC (decl))
6849     {
6850       warning (OPT_Wattributes, "%qE attribute ignored", name);
6851       return NULL_TREE;
6852     }
6853
6854   if (TREE_CODE (id) != STRING_CST)
6855     {
6856       error ("visibility argument not a string");
6857       return NULL_TREE;
6858     }
6859
6860   /*  If this is a type, set the visibility on the type decl.  */
6861   if (TYPE_P (decl))
6862     {
6863       decl = TYPE_NAME (decl);
6864       if (!decl)
6865         return NULL_TREE;
6866       if (TREE_CODE (decl) == IDENTIFIER_NODE)
6867         {
6868            warning (OPT_Wattributes, "%qE attribute ignored on types",
6869                     name);
6870            return NULL_TREE;
6871         }
6872     }
6873
6874   if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
6875     vis = VISIBILITY_DEFAULT;
6876   else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
6877     vis = VISIBILITY_INTERNAL;
6878   else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
6879     vis = VISIBILITY_HIDDEN;
6880   else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
6881     vis = VISIBILITY_PROTECTED;
6882   else
6883     {
6884       error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
6885       vis = VISIBILITY_DEFAULT;
6886     }
6887
6888   if (DECL_VISIBILITY_SPECIFIED (decl)
6889       && vis != DECL_VISIBILITY (decl))
6890     {
6891       tree attributes = (TYPE_P (*node)
6892                          ? TYPE_ATTRIBUTES (*node)
6893                          : DECL_ATTRIBUTES (decl));
6894       if (lookup_attribute ("visibility", attributes))
6895         error ("%qD redeclared with different visibility", decl);
6896       else if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
6897                && lookup_attribute ("dllimport", attributes))
6898         error ("%qD was declared %qs which implies default visibility",
6899                decl, "dllimport");
6900       else if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
6901                && lookup_attribute ("dllexport", attributes))
6902         error ("%qD was declared %qs which implies default visibility",
6903                decl, "dllexport");
6904     }
6905
6906   DECL_VISIBILITY (decl) = vis;
6907   DECL_VISIBILITY_SPECIFIED (decl) = 1;
6908
6909   /* Go ahead and attach the attribute to the node as well.  This is needed
6910      so we can determine whether we have VISIBILITY_DEFAULT because the
6911      visibility was not specified, or because it was explicitly overridden
6912      from the containing scope.  */
6913
6914   return NULL_TREE;
6915 }
6916
6917 /* Determine the ELF symbol visibility for DECL, which is either a
6918    variable or a function.  It is an error to use this function if a
6919    definition of DECL is not available in this translation unit.
6920    Returns true if the final visibility has been determined by this
6921    function; false if the caller is free to make additional
6922    modifications.  */
6923
6924 bool
6925 c_determine_visibility (tree decl)
6926 {
6927   gcc_assert (TREE_CODE (decl) == VAR_DECL
6928               || TREE_CODE (decl) == FUNCTION_DECL);
6929
6930   /* If the user explicitly specified the visibility with an
6931      attribute, honor that.  DECL_VISIBILITY will have been set during
6932      the processing of the attribute.  We check for an explicit
6933      attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
6934      to distinguish the use of an attribute from the use of a "#pragma
6935      GCC visibility push(...)"; in the latter case we still want other
6936      considerations to be able to overrule the #pragma.  */
6937   if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl))
6938       || (TARGET_DLLIMPORT_DECL_ATTRIBUTES
6939           && (lookup_attribute ("dllimport", DECL_ATTRIBUTES (decl))
6940               || lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))))
6941     return true;
6942
6943   /* Set default visibility to whatever the user supplied with
6944      visibility_specified depending on #pragma GCC visibility.  */
6945   if (!DECL_VISIBILITY_SPECIFIED (decl))
6946     {
6947       if (visibility_options.inpragma
6948           || DECL_VISIBILITY (decl) != default_visibility)
6949         {
6950           DECL_VISIBILITY (decl) = default_visibility;
6951           DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
6952           /* If visibility changed and DECL already has DECL_RTL, ensure
6953              symbol flags are updated.  */
6954           if (((TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
6955                || TREE_CODE (decl) == FUNCTION_DECL)
6956               && DECL_RTL_SET_P (decl))
6957             make_decl_rtl (decl);
6958         }
6959     }
6960   return false;
6961 }
6962
6963 /* Handle an "tls_model" attribute; arguments as in
6964    struct attribute_spec.handler.  */
6965
6966 static tree
6967 handle_tls_model_attribute (tree *node, tree name, tree args,
6968                             int ARG_UNUSED (flags), bool *no_add_attrs)
6969 {
6970   tree id;
6971   tree decl = *node;
6972   enum tls_model kind;
6973
6974   *no_add_attrs = true;
6975
6976   if (TREE_CODE (decl) != VAR_DECL || !DECL_THREAD_LOCAL_P (decl))
6977     {
6978       warning (OPT_Wattributes, "%qE attribute ignored", name);
6979       return NULL_TREE;
6980     }
6981
6982   kind = DECL_TLS_MODEL (decl);
6983   id = TREE_VALUE (args);
6984   if (TREE_CODE (id) != STRING_CST)
6985     {
6986       error ("tls_model argument not a string");
6987       return NULL_TREE;
6988     }
6989
6990   if (!strcmp (TREE_STRING_POINTER (id), "local-exec"))
6991     kind = TLS_MODEL_LOCAL_EXEC;
6992   else if (!strcmp (TREE_STRING_POINTER (id), "initial-exec"))
6993     kind = TLS_MODEL_INITIAL_EXEC;
6994   else if (!strcmp (TREE_STRING_POINTER (id), "local-dynamic"))
6995     kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
6996   else if (!strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
6997     kind = TLS_MODEL_GLOBAL_DYNAMIC;
6998   else
6999     error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
7000
7001   DECL_TLS_MODEL (decl) = kind;
7002   return NULL_TREE;
7003 }
7004
7005 /* Handle a "no_instrument_function" attribute; arguments as in
7006    struct attribute_spec.handler.  */
7007
7008 static tree
7009 handle_no_instrument_function_attribute (tree *node, tree name,
7010                                          tree ARG_UNUSED (args),
7011                                          int ARG_UNUSED (flags),
7012                                          bool *no_add_attrs)
7013 {
7014   tree decl = *node;
7015
7016   if (TREE_CODE (decl) != FUNCTION_DECL)
7017     {
7018       error_at (DECL_SOURCE_LOCATION (decl),
7019                 "%qE attribute applies only to functions", name);
7020       *no_add_attrs = true;
7021     }
7022   else if (DECL_INITIAL (decl))
7023     {
7024       error_at (DECL_SOURCE_LOCATION (decl),
7025                 "can%'t set %qE attribute after definition", name);
7026       *no_add_attrs = true;
7027     }
7028   else
7029     DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
7030
7031   return NULL_TREE;
7032 }
7033
7034 /* Handle a "malloc" attribute; arguments as in
7035    struct attribute_spec.handler.  */
7036
7037 static tree
7038 handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
7039                          int ARG_UNUSED (flags), bool *no_add_attrs)
7040 {
7041   if (TREE_CODE (*node) == FUNCTION_DECL
7042       && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
7043     DECL_IS_MALLOC (*node) = 1;
7044   else
7045     {
7046       warning (OPT_Wattributes, "%qE attribute ignored", name);
7047       *no_add_attrs = true;
7048     }
7049
7050   return NULL_TREE;
7051 }
7052
7053 /* Handle a "alloc_size" attribute; arguments as in
7054    struct attribute_spec.handler.  */
7055
7056 static tree
7057 handle_alloc_size_attribute (tree *node, tree ARG_UNUSED (name), tree args,
7058                              int ARG_UNUSED (flags), bool *no_add_attrs)
7059 {
7060   unsigned arg_count = type_num_arguments (*node);
7061   for (; args; args = TREE_CHAIN (args))
7062     {
7063       tree position = TREE_VALUE (args);
7064
7065       if (TREE_CODE (position) != INTEGER_CST
7066           || TREE_INT_CST_HIGH (position) 
7067           || TREE_INT_CST_LOW (position) < 1
7068           || TREE_INT_CST_LOW (position) > arg_count )
7069         {
7070           warning (OPT_Wattributes, 
7071                    "alloc_size parameter outside range");
7072           *no_add_attrs = true;
7073           return NULL_TREE;
7074         }
7075     }
7076   return NULL_TREE;
7077 }
7078
7079 /* Handle a "returns_twice" attribute; arguments as in
7080    struct attribute_spec.handler.  */
7081
7082 static tree
7083 handle_returns_twice_attribute (tree *node, tree name, tree ARG_UNUSED (args),
7084                          int ARG_UNUSED (flags), bool *no_add_attrs)
7085 {
7086   if (TREE_CODE (*node) == FUNCTION_DECL)
7087     DECL_IS_RETURNS_TWICE (*node) = 1;
7088   else
7089     {
7090       warning (OPT_Wattributes, "%qE attribute ignored", name);
7091       *no_add_attrs = true;
7092     }
7093
7094   return NULL_TREE;
7095 }
7096
7097 /* Handle a "no_limit_stack" attribute; arguments as in
7098    struct attribute_spec.handler.  */
7099
7100 static tree
7101 handle_no_limit_stack_attribute (tree *node, tree name,
7102                                  tree ARG_UNUSED (args),
7103                                  int ARG_UNUSED (flags),
7104                                  bool *no_add_attrs)
7105 {
7106   tree decl = *node;
7107
7108   if (TREE_CODE (decl) != FUNCTION_DECL)
7109     {
7110       error_at (DECL_SOURCE_LOCATION (decl),
7111              "%qE attribute applies only to functions", name);
7112       *no_add_attrs = true;
7113     }
7114   else if (DECL_INITIAL (decl))
7115     {
7116       error_at (DECL_SOURCE_LOCATION (decl),
7117                 "can%'t set %qE attribute after definition", name);
7118       *no_add_attrs = true;
7119     }
7120   else
7121     DECL_NO_LIMIT_STACK (decl) = 1;
7122
7123   return NULL_TREE;
7124 }
7125
7126 /* Handle a "pure" attribute; arguments as in
7127    struct attribute_spec.handler.  */
7128
7129 static tree
7130 handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
7131                        int ARG_UNUSED (flags), bool *no_add_attrs)
7132 {
7133   if (TREE_CODE (*node) == FUNCTION_DECL)
7134     DECL_PURE_P (*node) = 1;
7135   /* ??? TODO: Support types.  */
7136   else
7137     {
7138       warning (OPT_Wattributes, "%qE attribute ignored", name);
7139       *no_add_attrs = true;
7140     }
7141
7142   return NULL_TREE;
7143 }
7144
7145 /* Handle a "no vops" attribute; arguments as in
7146    struct attribute_spec.handler.  */
7147
7148 static tree
7149 handle_novops_attribute (tree *node, tree ARG_UNUSED (name),
7150                          tree ARG_UNUSED (args), int ARG_UNUSED (flags),
7151                          bool *ARG_UNUSED (no_add_attrs))
7152 {
7153   gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
7154   DECL_IS_NOVOPS (*node) = 1;
7155   return NULL_TREE;
7156 }
7157
7158 /* Handle a "deprecated" attribute; arguments as in
7159    struct attribute_spec.handler.  */
7160
7161 static tree
7162 handle_deprecated_attribute (tree *node, tree name,
7163                              tree args, int flags,
7164                              bool *no_add_attrs)
7165 {
7166   tree type = NULL_TREE;
7167   int warn = 0;
7168   tree what = NULL_TREE;
7169
7170   if (!args)
7171     *no_add_attrs = true;
7172   else if (TREE_CODE (TREE_VALUE (args)) != STRING_CST)
7173     {
7174       error ("deprecated message is not a string");
7175       *no_add_attrs = true;
7176     }
7177
7178   if (DECL_P (*node))
7179     {
7180       tree decl = *node;
7181       type = TREE_TYPE (decl);
7182
7183       if (TREE_CODE (decl) == TYPE_DECL
7184           || TREE_CODE (decl) == PARM_DECL
7185           || TREE_CODE (decl) == VAR_DECL
7186           || TREE_CODE (decl) == FUNCTION_DECL
7187           || TREE_CODE (decl) == FIELD_DECL)
7188         TREE_DEPRECATED (decl) = 1;
7189       else
7190         warn = 1;
7191     }
7192   else if (TYPE_P (*node))
7193     {
7194       if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
7195         *node = build_variant_type_copy (*node);
7196       TREE_DEPRECATED (*node) = 1;
7197       type = *node;
7198     }
7199   else
7200     warn = 1;
7201
7202   if (warn)
7203     {
7204       *no_add_attrs = true;
7205       if (type && TYPE_NAME (type))
7206         {
7207           if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
7208             what = TYPE_NAME (*node);
7209           else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
7210                    && DECL_NAME (TYPE_NAME (type)))
7211             what = DECL_NAME (TYPE_NAME (type));
7212         }
7213       if (what)
7214         warning (OPT_Wattributes, "%qE attribute ignored for %qE", name, what);
7215       else
7216         warning (OPT_Wattributes, "%qE attribute ignored", name);
7217     }
7218
7219   return NULL_TREE;
7220 }
7221
7222 /* Handle a "vector_size" attribute; arguments as in
7223    struct attribute_spec.handler.  */
7224
7225 static tree
7226 handle_vector_size_attribute (tree *node, tree name, tree args,
7227                               int ARG_UNUSED (flags),
7228                               bool *no_add_attrs)
7229 {
7230   unsigned HOST_WIDE_INT vecsize, nunits;
7231   enum machine_mode orig_mode;
7232   tree type = *node, new_type, size;
7233
7234   *no_add_attrs = true;
7235
7236   size = TREE_VALUE (args);
7237
7238   if (!host_integerp (size, 1))
7239     {
7240       warning (OPT_Wattributes, "%qE attribute ignored", name);
7241       return NULL_TREE;
7242     }
7243
7244   /* Get the vector size (in bytes).  */
7245   vecsize = tree_low_cst (size, 1);
7246
7247   /* We need to provide for vector pointers, vector arrays, and
7248      functions returning vectors.  For example:
7249
7250        __attribute__((vector_size(16))) short *foo;
7251
7252      In this case, the mode is SI, but the type being modified is
7253      HI, so we need to look further.  */
7254
7255   while (POINTER_TYPE_P (type)
7256          || TREE_CODE (type) == FUNCTION_TYPE
7257          || TREE_CODE (type) == METHOD_TYPE
7258          || TREE_CODE (type) == ARRAY_TYPE
7259          || TREE_CODE (type) == OFFSET_TYPE)
7260     type = TREE_TYPE (type);
7261
7262   /* Get the mode of the type being modified.  */
7263   orig_mode = TYPE_MODE (type);
7264
7265   if ((!INTEGRAL_TYPE_P (type)
7266        && !SCALAR_FLOAT_TYPE_P (type)
7267        && !FIXED_POINT_TYPE_P (type))
7268       || (!SCALAR_FLOAT_MODE_P (orig_mode)
7269           && GET_MODE_CLASS (orig_mode) != MODE_INT
7270           && !ALL_SCALAR_FIXED_POINT_MODE_P (orig_mode))
7271       || !host_integerp (TYPE_SIZE_UNIT (type), 1)
7272       || TREE_CODE (type) == BOOLEAN_TYPE)
7273     {
7274       error ("invalid vector type for attribute %qE", name);
7275       return NULL_TREE;
7276     }
7277
7278   if (vecsize % tree_low_cst (TYPE_SIZE_UNIT (type), 1))
7279     {
7280       error ("vector size not an integral multiple of component size");
7281       return NULL;
7282     }
7283
7284   if (vecsize == 0)
7285     {
7286       error ("zero vector size");
7287       return NULL;
7288     }
7289
7290   /* Calculate how many units fit in the vector.  */
7291   nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
7292   if (nunits & (nunits - 1))
7293     {
7294       error ("number of components of the vector not a power of two");
7295       return NULL_TREE;
7296     }
7297
7298   new_type = build_vector_type (type, nunits);
7299
7300   /* Build back pointers if needed.  */
7301   *node = lang_hooks.types.reconstruct_complex_type (*node, new_type);
7302
7303   return NULL_TREE;
7304 }
7305
7306 /* Handle the "nonnull" attribute.  */
7307 static tree
7308 handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
7309                           tree args, int ARG_UNUSED (flags),
7310                           bool *no_add_attrs)
7311 {
7312   tree type = *node;
7313   unsigned HOST_WIDE_INT attr_arg_num;
7314
7315   /* If no arguments are specified, all pointer arguments should be
7316      non-null.  Verify a full prototype is given so that the arguments
7317      will have the correct types when we actually check them later.  */
7318   if (!args)
7319     {
7320       if (!TYPE_ARG_TYPES (type))
7321         {
7322           error ("nonnull attribute without arguments on a non-prototype");
7323           *no_add_attrs = true;
7324         }
7325       return NULL_TREE;
7326     }
7327
7328   /* Argument list specified.  Verify that each argument number references
7329      a pointer argument.  */
7330   for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
7331     {
7332       tree argument;
7333       unsigned HOST_WIDE_INT arg_num = 0, ck_num;
7334
7335       if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
7336         {
7337           error ("nonnull argument has invalid operand number (argument %lu)",
7338                  (unsigned long) attr_arg_num);
7339           *no_add_attrs = true;
7340           return NULL_TREE;
7341         }
7342
7343       argument = TYPE_ARG_TYPES (type);
7344       if (argument)
7345         {
7346           for (ck_num = 1; ; ck_num++)
7347             {
7348               if (!argument || ck_num == arg_num)
7349                 break;
7350               argument = TREE_CHAIN (argument);
7351             }
7352
7353           if (!argument
7354               || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
7355             {
7356               error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
7357                      (unsigned long) attr_arg_num, (unsigned long) arg_num);
7358               *no_add_attrs = true;
7359               return NULL_TREE;
7360             }
7361
7362           if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
7363             {
7364               error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
7365                    (unsigned long) attr_arg_num, (unsigned long) arg_num);
7366               *no_add_attrs = true;
7367               return NULL_TREE;
7368             }
7369         }
7370     }
7371
7372   return NULL_TREE;
7373 }
7374
7375 /* Check the argument list of a function call for null in argument slots
7376    that are marked as requiring a non-null pointer argument.  The NARGS
7377    arguments are passed in the array ARGARRAY.
7378 */
7379
7380 static void
7381 check_function_nonnull (tree attrs, int nargs, tree *argarray)
7382 {
7383   tree a, args;
7384   int i;
7385
7386   for (a = attrs; a; a = TREE_CHAIN (a))
7387     {
7388       if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
7389         {
7390           args = TREE_VALUE (a);
7391
7392           /* Walk the argument list.  If we encounter an argument number we
7393              should check for non-null, do it.  If the attribute has no args,
7394              then every pointer argument is checked (in which case the check
7395              for pointer type is done in check_nonnull_arg).  */
7396           for (i = 0; i < nargs; i++)
7397             {
7398               if (!args || nonnull_check_p (args, i + 1))
7399                 check_function_arguments_recurse (check_nonnull_arg, NULL,
7400                                                   argarray[i],
7401                                                   i + 1);
7402             }
7403         }
7404     }
7405 }
7406
7407 /* Check that the Nth argument of a function call (counting backwards
7408    from the end) is a (pointer)0.  The NARGS arguments are passed in the
7409    array ARGARRAY.  */
7410
7411 static void
7412 check_function_sentinel (tree attrs, int nargs, tree *argarray, tree typelist)
7413 {
7414   tree attr = lookup_attribute ("sentinel", attrs);
7415
7416   if (attr)
7417     {
7418       int len = 0;
7419       int pos = 0;
7420       tree sentinel;
7421
7422       /* Skip over the named arguments.  */
7423       while (typelist && len < nargs)
7424         {
7425           typelist = TREE_CHAIN (typelist);
7426           len++;
7427         }
7428
7429       if (TREE_VALUE (attr))
7430         {
7431           tree p = TREE_VALUE (TREE_VALUE (attr));
7432           pos = TREE_INT_CST_LOW (p);
7433         }
7434
7435       /* The sentinel must be one of the varargs, i.e.
7436          in position >= the number of fixed arguments.  */
7437       if ((nargs - 1 - pos) < len)
7438         {
7439           warning (OPT_Wformat,
7440                    "not enough variable arguments to fit a sentinel");
7441           return;
7442         }
7443
7444       /* Validate the sentinel.  */
7445       sentinel = argarray[nargs - 1 - pos];
7446       if ((!POINTER_TYPE_P (TREE_TYPE (sentinel))
7447            || !integer_zerop (sentinel))
7448           /* Although __null (in C++) is only an integer we allow it
7449              nevertheless, as we are guaranteed that it's exactly
7450              as wide as a pointer, and we don't want to force
7451              users to cast the NULL they have written there.
7452              We warn with -Wstrict-null-sentinel, though.  */
7453           && (warn_strict_null_sentinel || null_node != sentinel))
7454         warning (OPT_Wformat, "missing sentinel in function call");
7455     }
7456 }
7457
7458 /* Helper for check_function_nonnull; given a list of operands which
7459    must be non-null in ARGS, determine if operand PARAM_NUM should be
7460    checked.  */
7461
7462 static bool
7463 nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
7464 {
7465   unsigned HOST_WIDE_INT arg_num = 0;
7466
7467   for (; args; args = TREE_CHAIN (args))
7468     {
7469       bool found = get_nonnull_operand (TREE_VALUE (args), &arg_num);
7470
7471       gcc_assert (found);
7472
7473       if (arg_num == param_num)
7474         return true;
7475     }
7476   return false;
7477 }
7478
7479 /* Check that the function argument PARAM (which is operand number
7480    PARAM_NUM) is non-null.  This is called by check_function_nonnull
7481    via check_function_arguments_recurse.  */
7482
7483 static void
7484 check_nonnull_arg (void * ARG_UNUSED (ctx), tree param,
7485                    unsigned HOST_WIDE_INT param_num)
7486 {
7487   /* Just skip checking the argument if it's not a pointer.  This can
7488      happen if the "nonnull" attribute was given without an operand
7489      list (which means to check every pointer argument).  */
7490
7491   if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
7492     return;
7493
7494   if (integer_zerop (param))
7495     warning (OPT_Wnonnull, "null argument where non-null required "
7496              "(argument %lu)", (unsigned long) param_num);
7497 }
7498
7499 /* Helper for nonnull attribute handling; fetch the operand number
7500    from the attribute argument list.  */
7501
7502 static bool
7503 get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
7504 {
7505   /* Verify the arg number is a constant.  */
7506   if (TREE_CODE (arg_num_expr) != INTEGER_CST
7507       || TREE_INT_CST_HIGH (arg_num_expr) != 0)
7508     return false;
7509
7510   *valp = TREE_INT_CST_LOW (arg_num_expr);
7511   return true;
7512 }
7513
7514 /* Handle a "nothrow" attribute; arguments as in
7515    struct attribute_spec.handler.  */
7516
7517 static tree
7518 handle_nothrow_attribute (tree *node, tree name, tree ARG_UNUSED (args),
7519                           int ARG_UNUSED (flags), bool *no_add_attrs)
7520 {
7521   if (TREE_CODE (*node) == FUNCTION_DECL)
7522     TREE_NOTHROW (*node) = 1;
7523   /* ??? TODO: Support types.  */
7524   else
7525     {
7526       warning (OPT_Wattributes, "%qE attribute ignored", name);
7527       *no_add_attrs = true;
7528     }
7529
7530   return NULL_TREE;
7531 }
7532
7533 /* Handle a "cleanup" attribute; arguments as in
7534    struct attribute_spec.handler.  */
7535
7536 static tree
7537 handle_cleanup_attribute (tree *node, tree name, tree args,
7538                           int ARG_UNUSED (flags), bool *no_add_attrs)
7539 {
7540   tree decl = *node;
7541   tree cleanup_id, cleanup_decl;
7542
7543   /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
7544      for global destructors in C++.  This requires infrastructure that
7545      we don't have generically at the moment.  It's also not a feature
7546      we'd be missing too much, since we do have attribute constructor.  */
7547   if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
7548     {
7549       warning (OPT_Wattributes, "%qE attribute ignored", name);
7550       *no_add_attrs = true;
7551       return NULL_TREE;
7552     }
7553
7554   /* Verify that the argument is a function in scope.  */
7555   /* ??? We could support pointers to functions here as well, if
7556      that was considered desirable.  */
7557   cleanup_id = TREE_VALUE (args);
7558   if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
7559     {
7560       error ("cleanup argument not an identifier");
7561       *no_add_attrs = true;
7562       return NULL_TREE;
7563     }
7564   cleanup_decl = lookup_name (cleanup_id);
7565   if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
7566     {
7567       error ("cleanup argument not a function");
7568       *no_add_attrs = true;
7569       return NULL_TREE;
7570     }
7571
7572   /* That the function has proper type is checked with the
7573      eventual call to build_function_call.  */
7574
7575   return NULL_TREE;
7576 }
7577
7578 /* Handle a "warn_unused_result" attribute.  No special handling.  */
7579
7580 static tree
7581 handle_warn_unused_result_attribute (tree *node, tree name,
7582                                tree ARG_UNUSED (args),
7583                                int ARG_UNUSED (flags), bool *no_add_attrs)
7584 {
7585   /* Ignore the attribute for functions not returning any value.  */
7586   if (VOID_TYPE_P (TREE_TYPE (*node)))
7587     {
7588       warning (OPT_Wattributes, "%qE attribute ignored", name);
7589       *no_add_attrs = true;
7590     }
7591
7592   return NULL_TREE;
7593 }
7594
7595 /* Handle a "sentinel" attribute.  */
7596
7597 static tree
7598 handle_sentinel_attribute (tree *node, tree name, tree args,
7599                            int ARG_UNUSED (flags), bool *no_add_attrs)
7600 {
7601   tree params = TYPE_ARG_TYPES (*node);
7602
7603   if (!params)
7604     {
7605       warning (OPT_Wattributes,
7606                "%qE attribute requires prototypes with named arguments", name);
7607       *no_add_attrs = true;
7608     }
7609   else
7610     {
7611       while (TREE_CHAIN (params))
7612         params = TREE_CHAIN (params);
7613
7614       if (VOID_TYPE_P (TREE_VALUE (params)))
7615         {
7616           warning (OPT_Wattributes,
7617                    "%qE attribute only applies to variadic functions", name);
7618           *no_add_attrs = true;
7619         }
7620     }
7621
7622   if (args)
7623     {
7624       tree position = TREE_VALUE (args);
7625
7626       if (TREE_CODE (position) != INTEGER_CST)
7627         {
7628           warning (OPT_Wattributes, 
7629                    "requested position is not an integer constant");
7630           *no_add_attrs = true;
7631         }
7632       else
7633         {
7634           if (tree_int_cst_lt (position, integer_zero_node))
7635             {
7636               warning (OPT_Wattributes,
7637                        "requested position is less than zero");
7638               *no_add_attrs = true;
7639             }
7640         }
7641     }
7642
7643   return NULL_TREE;
7644 }
7645
7646 /* Handle a "type_generic" attribute.  */
7647
7648 static tree
7649 handle_type_generic_attribute (tree *node, tree ARG_UNUSED (name),
7650                                tree ARG_UNUSED (args), int ARG_UNUSED (flags),
7651                                bool * ARG_UNUSED (no_add_attrs))
7652 {
7653   tree params;
7654   
7655   /* Ensure we have a function type.  */
7656   gcc_assert (TREE_CODE (*node) == FUNCTION_TYPE);
7657   
7658   params = TYPE_ARG_TYPES (*node);
7659   while (params && ! VOID_TYPE_P (TREE_VALUE (params)))
7660     params = TREE_CHAIN (params);
7661
7662   /* Ensure we have a variadic function.  */
7663   gcc_assert (!params);
7664
7665   return NULL_TREE;
7666 }
7667
7668 /* Handle a "target" attribute.  */
7669
7670 static tree
7671 handle_target_attribute (tree *node, tree name, tree args, int flags,
7672                          bool *no_add_attrs)
7673 {
7674   /* Ensure we have a function type.  */
7675   if (TREE_CODE (*node) != FUNCTION_DECL)
7676     {
7677       warning (OPT_Wattributes, "%qE attribute ignored", name);
7678       *no_add_attrs = true;
7679     }
7680   else if (! targetm.target_option.valid_attribute_p (*node, name, args,
7681                                                       flags))
7682     *no_add_attrs = true;
7683
7684   return NULL_TREE;
7685 }
7686
7687 /* Arguments being collected for optimization.  */
7688 typedef const char *const_char_p;               /* For DEF_VEC_P.  */
7689 DEF_VEC_P(const_char_p);
7690 DEF_VEC_ALLOC_P(const_char_p, gc);
7691 static GTY(()) VEC(const_char_p, gc) *optimize_args;
7692
7693
7694 /* Inner function to convert a TREE_LIST to argv string to parse the optimize
7695    options in ARGS.  ATTR_P is true if this is for attribute(optimize), and
7696    false for #pragma GCC optimize.  */
7697
7698 bool
7699 parse_optimize_options (tree args, bool attr_p)
7700 {
7701   bool ret = true;
7702   unsigned opt_argc;
7703   unsigned i;
7704   int saved_flag_strict_aliasing;
7705   const char **opt_argv;
7706   tree ap;
7707
7708   /* Build up argv vector.  Just in case the string is stored away, use garbage
7709      collected strings.  */
7710   VEC_truncate (const_char_p, optimize_args, 0);
7711   VEC_safe_push (const_char_p, gc, optimize_args, NULL);
7712
7713   for (ap = args; ap != NULL_TREE; ap = TREE_CHAIN (ap))
7714     {
7715       tree value = TREE_VALUE (ap);
7716
7717       if (TREE_CODE (value) == INTEGER_CST)
7718         {
7719           char buffer[20];
7720           sprintf (buffer, "-O%ld", (long) TREE_INT_CST_LOW (value));
7721           VEC_safe_push (const_char_p, gc, optimize_args, ggc_strdup (buffer));
7722         }
7723
7724       else if (TREE_CODE (value) == STRING_CST)
7725         {
7726           /* Split string into multiple substrings.  */
7727           size_t len = TREE_STRING_LENGTH (value);
7728           char *p = ASTRDUP (TREE_STRING_POINTER (value));
7729           char *end = p + len;
7730           char *comma;
7731           char *next_p = p;
7732
7733           while (next_p != NULL)
7734             {
7735               size_t len2;
7736               char *q, *r;
7737
7738               p = next_p;
7739               comma = strchr (p, ',');
7740               if (comma)
7741                 {
7742                   len2 = comma - p;
7743                   *comma = '\0';
7744                   next_p = comma+1;
7745                 }
7746               else
7747                 {
7748                   len2 = end - p;
7749                   next_p = NULL;
7750                 }
7751
7752               r = q = (char *) ggc_alloc (len2 + 3);
7753
7754               /* If the user supplied -Oxxx or -fxxx, only allow -Oxxx or -fxxx
7755                  options.  */
7756               if (*p == '-' && p[1] != 'O' && p[1] != 'f')
7757                 {
7758                   ret = false;
7759                   if (attr_p)
7760                     warning (OPT_Wattributes,
7761                              "Bad option %s to optimize attribute.", p);
7762                   else
7763                     warning (OPT_Wpragmas,
7764                              "Bad option %s to pragma attribute", p);
7765                   continue;
7766                 }
7767
7768               if (*p != '-')
7769                 {
7770                   *r++ = '-';
7771
7772                   /* Assume that Ox is -Ox, a numeric value is -Ox, a s by
7773                      itself is -Os, and any other switch begins with a -f.  */
7774                   if ((*p >= '0' && *p <= '9')
7775                       || (p[0] == 's' && p[1] == '\0'))
7776                     *r++ = 'O';
7777                   else if (*p != 'O')
7778                     *r++ = 'f';
7779                 }
7780
7781               memcpy (r, p, len2);
7782               r[len2] = '\0';
7783               VEC_safe_push (const_char_p, gc, optimize_args, q);
7784             }
7785
7786         }
7787     }
7788
7789   opt_argc = VEC_length (const_char_p, optimize_args);
7790   opt_argv = (const char **) alloca (sizeof (char *) * (opt_argc + 1));
7791
7792   for (i = 1; i < opt_argc; i++)
7793     opt_argv[i] = VEC_index (const_char_p, optimize_args, i);
7794
7795   saved_flag_strict_aliasing = flag_strict_aliasing;
7796
7797   /* Now parse the options.  */
7798   decode_options (opt_argc, opt_argv);
7799
7800   /* Don't allow changing -fstrict-aliasing.  */
7801   flag_strict_aliasing = saved_flag_strict_aliasing;
7802
7803   VEC_truncate (const_char_p, optimize_args, 0);
7804   return ret;
7805 }
7806
7807 /* For handling "optimize" attribute. arguments as in
7808    struct attribute_spec.handler.  */
7809
7810 static tree
7811 handle_optimize_attribute (tree *node, tree name, tree args,
7812                            int ARG_UNUSED (flags), bool *no_add_attrs)
7813 {
7814   /* Ensure we have a function type.  */
7815   if (TREE_CODE (*node) != FUNCTION_DECL)
7816     {
7817       warning (OPT_Wattributes, "%qE attribute ignored", name);
7818       *no_add_attrs = true;
7819     }
7820   else
7821     {
7822       struct cl_optimization cur_opts;
7823       tree old_opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node);
7824
7825       /* Save current options.  */
7826       cl_optimization_save (&cur_opts);
7827
7828       /* If we previously had some optimization options, use them as the
7829          default.  */
7830       if (old_opts)
7831         cl_optimization_restore (TREE_OPTIMIZATION (old_opts));
7832
7833       /* Parse options, and update the vector.  */
7834       parse_optimize_options (args, true);
7835       DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node)
7836         = build_optimization_node ();
7837
7838       /* Restore current options.  */
7839       cl_optimization_restore (&cur_opts);
7840     }
7841
7842   return NULL_TREE;
7843 }
7844 \f
7845 /* Check for valid arguments being passed to a function.
7846    ATTRS is a list of attributes.  There are NARGS arguments in the array
7847    ARGARRAY.  TYPELIST is the list of argument types for the function.
7848  */
7849 void
7850 check_function_arguments (tree attrs, int nargs, tree *argarray, tree typelist)
7851 {
7852   /* Check for null being passed in a pointer argument that must be
7853      non-null.  We also need to do this if format checking is enabled.  */
7854
7855   if (warn_nonnull)
7856     check_function_nonnull (attrs, nargs, argarray);
7857
7858   /* Check for errors in format strings.  */
7859
7860   if (warn_format || warn_missing_format_attribute)
7861     check_function_format (attrs, nargs, argarray);
7862
7863   if (warn_format)
7864     check_function_sentinel (attrs, nargs, argarray, typelist);
7865 }
7866
7867 /* Generic argument checking recursion routine.  PARAM is the argument to
7868    be checked.  PARAM_NUM is the number of the argument.  CALLBACK is invoked
7869    once the argument is resolved.  CTX is context for the callback.  */
7870 void
7871 check_function_arguments_recurse (void (*callback)
7872                                   (void *, tree, unsigned HOST_WIDE_INT),
7873                                   void *ctx, tree param,
7874                                   unsigned HOST_WIDE_INT param_num)
7875 {
7876   if (CONVERT_EXPR_P (param)
7877       && (TYPE_PRECISION (TREE_TYPE (param))
7878           == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (param, 0)))))
7879     {
7880       /* Strip coercion.  */
7881       check_function_arguments_recurse (callback, ctx,
7882                                         TREE_OPERAND (param, 0), param_num);
7883       return;
7884     }
7885
7886   if (TREE_CODE (param) == CALL_EXPR)
7887     {
7888       tree type = TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (param)));
7889       tree attrs;
7890       bool found_format_arg = false;
7891
7892       /* See if this is a call to a known internationalization function
7893          that modifies a format arg.  Such a function may have multiple
7894          format_arg attributes (for example, ngettext).  */
7895
7896       for (attrs = TYPE_ATTRIBUTES (type);
7897            attrs;
7898            attrs = TREE_CHAIN (attrs))
7899         if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
7900           {
7901             tree inner_arg;
7902             tree format_num_expr;
7903             int format_num;
7904             int i;
7905             call_expr_arg_iterator iter;
7906
7907             /* Extract the argument number, which was previously checked
7908                to be valid.  */
7909             format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
7910
7911             gcc_assert (TREE_CODE (format_num_expr) == INTEGER_CST
7912                         && !TREE_INT_CST_HIGH (format_num_expr));
7913
7914             format_num = TREE_INT_CST_LOW (format_num_expr);
7915
7916             for (inner_arg = first_call_expr_arg (param, &iter), i = 1;
7917                  inner_arg != 0;
7918                  inner_arg = next_call_expr_arg (&iter), i++)
7919               if (i == format_num)
7920                 {
7921                   check_function_arguments_recurse (callback, ctx,
7922                                                     inner_arg, param_num);
7923                   found_format_arg = true;
7924                   break;
7925                 }
7926           }
7927
7928       /* If we found a format_arg attribute and did a recursive check,
7929          we are done with checking this argument.  Otherwise, we continue
7930          and this will be considered a non-literal.  */
7931       if (found_format_arg)
7932         return;
7933     }
7934
7935   if (TREE_CODE (param) == COND_EXPR)
7936     {
7937       /* Check both halves of the conditional expression.  */
7938       check_function_arguments_recurse (callback, ctx,
7939                                         TREE_OPERAND (param, 1), param_num);
7940       check_function_arguments_recurse (callback, ctx,
7941                                         TREE_OPERAND (param, 2), param_num);
7942       return;
7943     }
7944
7945   (*callback) (ctx, param, param_num);
7946 }
7947
7948 /* Checks the number of arguments NARGS against the required number
7949    REQUIRED and issues an error if there is a mismatch.  Returns true
7950    if the number of arguments is correct, otherwise false.  */
7951
7952 static bool
7953 validate_nargs (tree fndecl, int nargs, int required)
7954 {
7955   if (nargs < required)
7956     {
7957       error ("not enough arguments to function %qE", fndecl);
7958       return false;
7959     }
7960   else if (nargs > required)
7961     {
7962       error ("too many arguments to function %qE", fndecl);
7963       return false;
7964     }
7965   return true;
7966 }
7967
7968 /* Verifies the NARGS arguments ARGS to the builtin function FNDECL.
7969    Returns false if there was an error, otherwise true.  */
7970
7971 bool
7972 check_builtin_function_arguments (tree fndecl, int nargs, tree *args)
7973 {
7974   if (!DECL_BUILT_IN (fndecl)
7975       || DECL_BUILT_IN_CLASS (fndecl) != BUILT_IN_NORMAL)
7976     return true;
7977
7978   switch (DECL_FUNCTION_CODE (fndecl))
7979     {
7980     case BUILT_IN_CONSTANT_P:
7981       return validate_nargs (fndecl, nargs, 1);
7982
7983     case BUILT_IN_ISFINITE:
7984     case BUILT_IN_ISINF:
7985     case BUILT_IN_ISINF_SIGN:
7986     case BUILT_IN_ISNAN:
7987     case BUILT_IN_ISNORMAL:
7988       if (validate_nargs (fndecl, nargs, 1))
7989         {
7990           if (TREE_CODE (TREE_TYPE (args[0])) != REAL_TYPE)
7991             {
7992               error ("non-floating-point argument in call to "
7993                      "function %qE", fndecl);
7994               return false;
7995             }
7996           return true;
7997         }
7998       return false;
7999
8000     case BUILT_IN_ISGREATER:
8001     case BUILT_IN_ISGREATEREQUAL:
8002     case BUILT_IN_ISLESS:
8003     case BUILT_IN_ISLESSEQUAL:
8004     case BUILT_IN_ISLESSGREATER:
8005     case BUILT_IN_ISUNORDERED:
8006       if (validate_nargs (fndecl, nargs, 2))
8007         {
8008           enum tree_code code0, code1;
8009           code0 = TREE_CODE (TREE_TYPE (args[0]));
8010           code1 = TREE_CODE (TREE_TYPE (args[1]));
8011           if (!((code0 == REAL_TYPE && code1 == REAL_TYPE)
8012                 || (code0 == REAL_TYPE && code1 == INTEGER_TYPE)
8013                 || (code0 == INTEGER_TYPE && code1 == REAL_TYPE)))
8014             {
8015               error ("non-floating-point arguments in call to "
8016                      "function %qE", fndecl);
8017               return false;
8018             }
8019           return true;
8020         }
8021       return false;
8022
8023     case BUILT_IN_FPCLASSIFY:
8024       if (validate_nargs (fndecl, nargs, 6))
8025         {
8026           unsigned i;
8027           
8028           for (i=0; i<5; i++)
8029             if (TREE_CODE (args[i]) != INTEGER_CST)
8030               {
8031                 error ("non-const integer argument %u in call to function %qE",
8032                        i+1, fndecl);
8033                 return false;
8034               }
8035
8036           if (TREE_CODE (TREE_TYPE (args[5])) != REAL_TYPE)
8037             {
8038               error ("non-floating-point argument in call to function %qE",
8039                      fndecl);
8040               return false;
8041             }
8042           return true;
8043         }
8044       return false;
8045
8046     default:
8047       return true;
8048     }
8049 }
8050
8051 /* Function to help qsort sort FIELD_DECLs by name order.  */
8052
8053 int
8054 field_decl_cmp (const void *x_p, const void *y_p)
8055 {
8056   const tree *const x = (const tree *const) x_p;
8057   const tree *const y = (const tree *const) y_p;
8058
8059   if (DECL_NAME (*x) == DECL_NAME (*y))
8060     /* A nontype is "greater" than a type.  */
8061     return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
8062   if (DECL_NAME (*x) == NULL_TREE)
8063     return -1;
8064   if (DECL_NAME (*y) == NULL_TREE)
8065     return 1;
8066   if (DECL_NAME (*x) < DECL_NAME (*y))
8067     return -1;
8068   return 1;
8069 }
8070
8071 static struct {
8072   gt_pointer_operator new_value;
8073   void *cookie;
8074 } resort_data;
8075
8076 /* This routine compares two fields like field_decl_cmp but using the
8077 pointer operator in resort_data.  */
8078
8079 static int
8080 resort_field_decl_cmp (const void *x_p, const void *y_p)
8081 {
8082   const tree *const x = (const tree *const) x_p;
8083   const tree *const y = (const tree *const) y_p;
8084
8085   if (DECL_NAME (*x) == DECL_NAME (*y))
8086     /* A nontype is "greater" than a type.  */
8087     return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
8088   if (DECL_NAME (*x) == NULL_TREE)
8089     return -1;
8090   if (DECL_NAME (*y) == NULL_TREE)
8091     return 1;
8092   {
8093     tree d1 = DECL_NAME (*x);
8094     tree d2 = DECL_NAME (*y);
8095     resort_data.new_value (&d1, resort_data.cookie);
8096     resort_data.new_value (&d2, resort_data.cookie);
8097     if (d1 < d2)
8098       return -1;
8099   }
8100   return 1;
8101 }
8102
8103 /* Resort DECL_SORTED_FIELDS because pointers have been reordered.  */
8104
8105 void
8106 resort_sorted_fields (void *obj,
8107                       void * ARG_UNUSED (orig_obj),
8108                       gt_pointer_operator new_value,
8109                       void *cookie)
8110 {
8111   struct sorted_fields_type *sf = (struct sorted_fields_type *) obj;
8112   resort_data.new_value = new_value;
8113   resort_data.cookie = cookie;
8114   qsort (&sf->elts[0], sf->len, sizeof (tree),
8115          resort_field_decl_cmp);
8116 }
8117
8118 /* Subroutine of c_parse_error.
8119    Return the result of concatenating LHS and RHS. RHS is really
8120    a string literal, its first character is indicated by RHS_START and
8121    RHS_SIZE is its length (including the terminating NUL character).
8122
8123    The caller is responsible for deleting the returned pointer.  */
8124
8125 static char *
8126 catenate_strings (const char *lhs, const char *rhs_start, int rhs_size)
8127 {
8128   const int lhs_size = strlen (lhs);
8129   char *result = XNEWVEC (char, lhs_size + rhs_size);
8130   strncpy (result, lhs, lhs_size);
8131   strncpy (result + lhs_size, rhs_start, rhs_size);
8132   return result;
8133 }
8134
8135 /* Issue the error given by GMSGID, indicating that it occurred before
8136    TOKEN, which had the associated VALUE.  */
8137
8138 void
8139 c_parse_error (const char *gmsgid, enum cpp_ttype token_type, 
8140                tree value, unsigned char token_flags)
8141 {
8142 #define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
8143
8144   char *message = NULL;
8145
8146   if (token_type == CPP_EOF)
8147     message = catenate_messages (gmsgid, " at end of input");
8148   else if (token_type == CPP_CHAR 
8149            || token_type == CPP_WCHAR 
8150            || token_type == CPP_CHAR16
8151            || token_type == CPP_CHAR32)
8152     {
8153       unsigned int val = TREE_INT_CST_LOW (value);
8154       const char *prefix;
8155
8156       switch (token_type)
8157         {
8158         default:
8159           prefix = "";
8160           break;
8161         case CPP_WCHAR:
8162           prefix = "L";
8163           break;
8164         case CPP_CHAR16:
8165           prefix = "u";
8166           break;
8167         case CPP_CHAR32:
8168           prefix = "U";
8169           break;
8170         }
8171
8172       if (val <= UCHAR_MAX && ISGRAPH (val))
8173         message = catenate_messages (gmsgid, " before %s'%c'");
8174       else
8175         message = catenate_messages (gmsgid, " before %s'\\x%x'");
8176
8177       error (message, prefix, val);
8178       free (message);
8179       message = NULL;
8180     }
8181   else if (token_type == CPP_STRING 
8182            || token_type == CPP_WSTRING 
8183            || token_type == CPP_STRING16
8184            || token_type == CPP_STRING32)
8185     message = catenate_messages (gmsgid, " before string constant");
8186   else if (token_type == CPP_NUMBER)
8187     message = catenate_messages (gmsgid, " before numeric constant");
8188   else if (token_type == CPP_NAME)
8189     {
8190       message = catenate_messages (gmsgid, " before %qE");
8191       error (message, value);
8192       free (message);
8193       message = NULL;
8194     }
8195   else if (token_type == CPP_PRAGMA)
8196     message = catenate_messages (gmsgid, " before %<#pragma%>");
8197   else if (token_type == CPP_PRAGMA_EOL)
8198     message = catenate_messages (gmsgid, " before end of line");
8199   else if (token_type < N_TTYPES)
8200     {
8201       message = catenate_messages (gmsgid, " before %qs token");
8202       error (message, cpp_type2name (token_type, token_flags));
8203       free (message);
8204       message = NULL;
8205     }
8206   else
8207     error (gmsgid);
8208
8209   if (message)
8210     {
8211       error (message);
8212       free (message);
8213     }
8214 #undef catenate_messages
8215 }
8216
8217 /* Callback from cpp_error for PFILE to print diagnostics from the
8218    preprocessor.  The diagnostic is of type LEVEL, at location
8219    LOCATION unless this is after lexing and the compiler's location
8220    should be used instead, with column number possibly overridden by
8221    COLUMN_OVERRIDE if not zero; MSG is the translated message and AP
8222    the arguments.  Returns true if a diagnostic was emitted, false
8223    otherwise.  */
8224
8225 bool
8226 c_cpp_error (cpp_reader *pfile ATTRIBUTE_UNUSED, int level,
8227              location_t location, unsigned int column_override,
8228              const char *msg, va_list *ap)
8229 {
8230   diagnostic_info diagnostic;
8231   diagnostic_t dlevel;
8232   int save_warn_system_headers = warn_system_headers;
8233   bool ret;
8234
8235   switch (level)
8236     {
8237     case CPP_DL_WARNING_SYSHDR:
8238       if (flag_no_output)
8239         return false;
8240       warn_system_headers = 1;
8241       /* Fall through.  */
8242     case CPP_DL_WARNING:
8243       if (flag_no_output)
8244         return false;
8245       dlevel = DK_WARNING;
8246       break;
8247     case CPP_DL_PEDWARN:
8248       if (flag_no_output && !flag_pedantic_errors)
8249         return false;
8250       dlevel = DK_PEDWARN;
8251       break;
8252     case CPP_DL_ERROR:
8253       dlevel = DK_ERROR;
8254       break;
8255     case CPP_DL_ICE:
8256       dlevel = DK_ICE;
8257       break;
8258     case CPP_DL_NOTE:
8259       dlevel = DK_NOTE;
8260       break;
8261     case CPP_DL_FATAL:
8262       dlevel = DK_FATAL;
8263       break;
8264     default:
8265       gcc_unreachable ();
8266     }
8267   if (done_lexing)
8268     location = input_location;
8269   diagnostic_set_info_translated (&diagnostic, msg, ap,
8270                                   location, dlevel);
8271   if (column_override)
8272     diagnostic_override_column (&diagnostic, column_override);
8273   ret = report_diagnostic (&diagnostic);
8274   if (level == CPP_DL_WARNING_SYSHDR)
8275     warn_system_headers = save_warn_system_headers;
8276   return ret;
8277 }
8278
8279 /* Convert a character from the host to the target execution character
8280    set.  cpplib handles this, mostly.  */
8281
8282 HOST_WIDE_INT
8283 c_common_to_target_charset (HOST_WIDE_INT c)
8284 {
8285   /* Character constants in GCC proper are sign-extended under -fsigned-char,
8286      zero-extended under -fno-signed-char.  cpplib insists that characters
8287      and character constants are always unsigned.  Hence we must convert
8288      back and forth.  */
8289   cppchar_t uc = ((cppchar_t)c) & ((((cppchar_t)1) << CHAR_BIT)-1);
8290
8291   uc = cpp_host_to_exec_charset (parse_in, uc);
8292
8293   if (flag_signed_char)
8294     return ((HOST_WIDE_INT)uc) << (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE)
8295                                >> (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE);
8296   else
8297     return uc;
8298 }
8299
8300 /* Build the result of __builtin_offsetof.  EXPR is a nested sequence of
8301    component references, with STOP_REF, or alternatively an INDIRECT_REF of
8302    NULL, at the bottom; much like the traditional rendering of offsetof as a
8303    macro.  Returns the folded and properly cast result.  */
8304
8305 static tree
8306 fold_offsetof_1 (tree expr, tree stop_ref)
8307 {
8308   enum tree_code code = PLUS_EXPR;
8309   tree base, off, t;
8310
8311   if (expr == stop_ref && TREE_CODE (expr) != ERROR_MARK)
8312     return size_zero_node;
8313
8314   switch (TREE_CODE (expr))
8315     {
8316     case ERROR_MARK:
8317       return expr;
8318
8319     case VAR_DECL:
8320       error ("cannot apply %<offsetof%> to static data member %qD", expr);
8321       return error_mark_node;
8322
8323     case CALL_EXPR:
8324     case TARGET_EXPR:
8325       error ("cannot apply %<offsetof%> when %<operator[]%> is overloaded");
8326       return error_mark_node;
8327
8328     case INTEGER_CST:
8329       gcc_assert (integer_zerop (expr));
8330       return size_zero_node;
8331
8332     case NOP_EXPR:
8333     case INDIRECT_REF:
8334       base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
8335       gcc_assert (base == error_mark_node || base == size_zero_node);
8336       return base;
8337
8338     case COMPONENT_REF:
8339       base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
8340       if (base == error_mark_node)
8341         return base;
8342
8343       t = TREE_OPERAND (expr, 1);
8344       if (DECL_C_BIT_FIELD (t))
8345         {
8346           error ("attempt to take address of bit-field structure "
8347                  "member %qD", t);
8348           return error_mark_node;
8349         }
8350       off = size_binop_loc (input_location, PLUS_EXPR, DECL_FIELD_OFFSET (t),
8351                             size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t),
8352                                                     1)
8353                                       / BITS_PER_UNIT));
8354       break;
8355
8356     case ARRAY_REF:
8357       base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
8358       if (base == error_mark_node)
8359         return base;
8360
8361       t = TREE_OPERAND (expr, 1);
8362       if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
8363         {
8364           code = MINUS_EXPR;
8365           t = fold_build1_loc (input_location, NEGATE_EXPR, TREE_TYPE (t), t);
8366         }
8367       t = convert (sizetype, t);
8368       off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
8369       break;
8370
8371     case COMPOUND_EXPR:
8372       /* Handle static members of volatile structs.  */
8373       t = TREE_OPERAND (expr, 1);
8374       gcc_assert (TREE_CODE (t) == VAR_DECL);
8375       return fold_offsetof_1 (t, stop_ref);
8376
8377     default:
8378       gcc_unreachable ();
8379     }
8380
8381   return size_binop (code, base, off);
8382 }
8383
8384 tree
8385 fold_offsetof (tree expr, tree stop_ref)
8386 {
8387   /* Convert back from the internal sizetype to size_t.  */
8388   return convert (size_type_node, fold_offsetof_1 (expr, stop_ref));
8389 }
8390
8391 /* Print an error message for an invalid lvalue.  USE says
8392    how the lvalue is being used and so selects the error message.  */
8393
8394 void
8395 lvalue_error (enum lvalue_use use)
8396 {
8397   switch (use)
8398     {
8399     case lv_assign:
8400       error ("lvalue required as left operand of assignment");
8401       break;
8402     case lv_increment:
8403       error ("lvalue required as increment operand");
8404       break;
8405     case lv_decrement:
8406       error ("lvalue required as decrement operand");
8407       break;
8408     case lv_addressof:
8409       error ("lvalue required as unary %<&%> operand");
8410       break;
8411     case lv_asm:
8412       error ("lvalue required in asm statement");
8413       break;
8414     default:
8415       gcc_unreachable ();
8416     }
8417 }
8418 \f
8419 /* *PTYPE is an incomplete array.  Complete it with a domain based on
8420    INITIAL_VALUE.  If INITIAL_VALUE is not present, use 1 if DO_DEFAULT
8421    is true.  Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8422    2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty.  */
8423
8424 int
8425 complete_array_type (tree *ptype, tree initial_value, bool do_default)
8426 {
8427   tree maxindex, type, main_type, elt, unqual_elt;
8428   int failure = 0, quals;
8429   hashval_t hashcode = 0;
8430
8431   maxindex = size_zero_node;
8432   if (initial_value)
8433     {
8434       if (TREE_CODE (initial_value) == STRING_CST)
8435         {
8436           int eltsize
8437             = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8438           maxindex = size_int (TREE_STRING_LENGTH (initial_value)/eltsize - 1);
8439         }
8440       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8441         {
8442           VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
8443
8444           if (VEC_empty (constructor_elt, v))
8445             {
8446               if (pedantic)
8447                 failure = 3;
8448               maxindex = integer_minus_one_node;
8449             }
8450           else
8451             {
8452               tree curindex;
8453               unsigned HOST_WIDE_INT cnt;
8454               constructor_elt *ce;
8455               bool fold_p = false;
8456
8457               if (VEC_index (constructor_elt, v, 0)->index)
8458                 maxindex = fold_convert_loc (input_location, sizetype,
8459                                              VEC_index (constructor_elt,
8460                                                         v, 0)->index);
8461               curindex = maxindex;
8462
8463               for (cnt = 1;
8464                    VEC_iterate (constructor_elt, v, cnt, ce);
8465                    cnt++)
8466                 {
8467                   bool curfold_p = false;
8468                   if (ce->index)
8469                     curindex = ce->index, curfold_p = true;
8470                   else
8471                     {
8472                       if (fold_p)
8473                         curindex = fold_convert (sizetype, curindex);
8474                       curindex = size_binop (PLUS_EXPR, curindex,
8475                                              size_one_node);
8476                     }
8477                   if (tree_int_cst_lt (maxindex, curindex))
8478                     maxindex = curindex, fold_p = curfold_p;
8479                 }
8480                if (fold_p)
8481                  maxindex = fold_convert (sizetype, maxindex);
8482             }
8483         }
8484       else
8485         {
8486           /* Make an error message unless that happened already.  */
8487           if (initial_value != error_mark_node)
8488             failure = 1;
8489         }
8490     }
8491   else
8492     {
8493       failure = 2;
8494       if (!do_default)
8495         return failure;
8496     }
8497
8498   type = *ptype;
8499   elt = TREE_TYPE (type);
8500   quals = TYPE_QUALS (strip_array_types (elt));
8501   if (quals == 0)
8502     unqual_elt = elt;
8503   else
8504     unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
8505
8506   /* Using build_distinct_type_copy and modifying things afterward instead
8507      of using build_array_type to create a new type preserves all of the
8508      TYPE_LANG_FLAG_? bits that the front end may have set.  */
8509   main_type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
8510   TREE_TYPE (main_type) = unqual_elt;
8511   TYPE_DOMAIN (main_type) = build_index_type (maxindex);
8512   layout_type (main_type);
8513
8514   /* Make sure we have the canonical MAIN_TYPE. */
8515   hashcode = iterative_hash_object (TYPE_HASH (unqual_elt), hashcode);
8516   hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (main_type)), 
8517                                     hashcode);
8518   main_type = type_hash_canon (hashcode, main_type);
8519
8520   /* Fix the canonical type.  */
8521   if (TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (main_type))
8522       || TYPE_STRUCTURAL_EQUALITY_P (TYPE_DOMAIN (main_type)))
8523     SET_TYPE_STRUCTURAL_EQUALITY (main_type);
8524   else if (TYPE_CANONICAL (TREE_TYPE (main_type)) != TREE_TYPE (main_type)
8525            || (TYPE_CANONICAL (TYPE_DOMAIN (main_type))
8526                != TYPE_DOMAIN (main_type)))
8527     TYPE_CANONICAL (main_type) 
8528       = build_array_type (TYPE_CANONICAL (TREE_TYPE (main_type)),
8529                           TYPE_CANONICAL (TYPE_DOMAIN (main_type)));
8530   else
8531     TYPE_CANONICAL (main_type) = main_type;
8532
8533   if (quals == 0)
8534     type = main_type;
8535   else
8536     type = c_build_qualified_type (main_type, quals);
8537
8538   if (COMPLETE_TYPE_P (type)
8539       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
8540       && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
8541     {
8542       error ("size of array is too large");
8543       /* If we proceed with the array type as it is, we'll eventually
8544          crash in tree_low_cst().  */
8545       type = error_mark_node;
8546     }
8547
8548   *ptype = type;
8549   return failure;
8550 }
8551
8552 \f
8553 /* Used to help initialize the builtin-types.def table.  When a type of
8554    the correct size doesn't exist, use error_mark_node instead of NULL.
8555    The later results in segfaults even when a decl using the type doesn't
8556    get invoked.  */
8557
8558 tree
8559 builtin_type_for_size (int size, bool unsignedp)
8560 {
8561   tree type = lang_hooks.types.type_for_size (size, unsignedp);
8562   return type ? type : error_mark_node;
8563 }
8564
8565 /* A helper function for resolve_overloaded_builtin in resolving the
8566    overloaded __sync_ builtins.  Returns a positive power of 2 if the
8567    first operand of PARAMS is a pointer to a supported data type.
8568    Returns 0 if an error is encountered.  */
8569
8570 static int
8571 sync_resolve_size (tree function, VEC(tree,gc) *params)
8572 {
8573   tree type;
8574   int size;
8575
8576   if (VEC_empty (tree, params))
8577     {
8578       error ("too few arguments to function %qE", function);
8579       return 0;
8580     }
8581
8582   type = TREE_TYPE (VEC_index (tree, params, 0));
8583   if (TREE_CODE (type) != POINTER_TYPE)
8584     goto incompatible;
8585
8586   type = TREE_TYPE (type);
8587   if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
8588     goto incompatible;
8589
8590   size = tree_low_cst (TYPE_SIZE_UNIT (type), 1);
8591   if (size == 1 || size == 2 || size == 4 || size == 8 || size == 16)
8592     return size;
8593
8594  incompatible:
8595   error ("incompatible type for argument %d of %qE", 1, function);
8596   return 0;
8597 }
8598
8599 /* A helper function for resolve_overloaded_builtin.  Adds casts to
8600    PARAMS to make arguments match up with those of FUNCTION.  Drops
8601    the variadic arguments at the end.  Returns false if some error
8602    was encountered; true on success.  */
8603
8604 static bool
8605 sync_resolve_params (tree orig_function, tree function, VEC(tree, gc) *params)
8606 {
8607   tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (function));
8608   tree ptype;
8609   int number;
8610   unsigned int parmnum;
8611
8612   /* We've declared the implementation functions to use "volatile void *"
8613      as the pointer parameter, so we shouldn't get any complaints from the
8614      call to check_function_arguments what ever type the user used.  */
8615   arg_types = TREE_CHAIN (arg_types);
8616   ptype = TREE_TYPE (TREE_TYPE (VEC_index (tree, params, 0)));
8617   number = 2;
8618
8619   /* For the rest of the values, we need to cast these to FTYPE, so that we
8620      don't get warnings for passing pointer types, etc.  */
8621   parmnum = 0;
8622   while (arg_types != void_list_node)
8623     {
8624       tree val;
8625
8626       ++parmnum;
8627       if (VEC_length (tree, params) <= parmnum)
8628         {
8629           error ("too few arguments to function %qE", orig_function);
8630           return false;
8631         }
8632
8633       /* ??? Ideally for the first conversion we'd use convert_for_assignment
8634          so that we get warnings for anything that doesn't match the pointer
8635          type.  This isn't portable across the C and C++ front ends atm.  */
8636       val = VEC_index (tree, params, parmnum);
8637       val = convert (ptype, val);
8638       val = convert (TREE_VALUE (arg_types), val);
8639       VEC_replace (tree, params, parmnum, val);
8640
8641       arg_types = TREE_CHAIN (arg_types);
8642       number++;
8643     }
8644
8645   /* The definition of these primitives is variadic, with the remaining
8646      being "an optional list of variables protected by the memory barrier".
8647      No clue what that's supposed to mean, precisely, but we consider all
8648      call-clobbered variables to be protected so we're safe.  */
8649   VEC_truncate (tree, params, parmnum + 1);
8650
8651   return true;
8652 }
8653
8654 /* A helper function for resolve_overloaded_builtin.  Adds a cast to
8655    RESULT to make it match the type of the first pointer argument in
8656    PARAMS.  */
8657
8658 static tree
8659 sync_resolve_return (tree first_param, tree result)
8660 {
8661   tree ptype = TREE_TYPE (TREE_TYPE (first_param));
8662   ptype = TYPE_MAIN_VARIANT (ptype);
8663   return convert (ptype, result);
8664 }
8665
8666 /* Some builtin functions are placeholders for other expressions.  This
8667    function should be called immediately after parsing the call expression
8668    before surrounding code has committed to the type of the expression.
8669
8670    LOC is the location of the builtin call.
8671
8672    FUNCTION is the DECL that has been invoked; it is known to be a builtin.
8673    PARAMS is the argument list for the call.  The return value is non-null
8674    when expansion is complete, and null if normal processing should
8675    continue.  */
8676
8677 tree
8678 resolve_overloaded_builtin (location_t loc, tree function, VEC(tree,gc) *params)
8679 {
8680   enum built_in_function orig_code = DECL_FUNCTION_CODE (function);
8681   switch (DECL_BUILT_IN_CLASS (function))
8682     {
8683     case BUILT_IN_NORMAL:
8684       break;
8685     case BUILT_IN_MD:
8686       if (targetm.resolve_overloaded_builtin)
8687         return targetm.resolve_overloaded_builtin (loc, function, params);
8688       else
8689         return NULL_TREE;
8690     default:
8691       return NULL_TREE;
8692     }
8693
8694   /* Handle BUILT_IN_NORMAL here.  */
8695   switch (orig_code)
8696     {
8697     case BUILT_IN_FETCH_AND_ADD_N:
8698     case BUILT_IN_FETCH_AND_SUB_N:
8699     case BUILT_IN_FETCH_AND_OR_N:
8700     case BUILT_IN_FETCH_AND_AND_N:
8701     case BUILT_IN_FETCH_AND_XOR_N:
8702     case BUILT_IN_FETCH_AND_NAND_N:
8703     case BUILT_IN_ADD_AND_FETCH_N:
8704     case BUILT_IN_SUB_AND_FETCH_N:
8705     case BUILT_IN_OR_AND_FETCH_N:
8706     case BUILT_IN_AND_AND_FETCH_N:
8707     case BUILT_IN_XOR_AND_FETCH_N:
8708     case BUILT_IN_NAND_AND_FETCH_N:
8709     case BUILT_IN_BOOL_COMPARE_AND_SWAP_N:
8710     case BUILT_IN_VAL_COMPARE_AND_SWAP_N:
8711     case BUILT_IN_LOCK_TEST_AND_SET_N:
8712     case BUILT_IN_LOCK_RELEASE_N:
8713       {
8714         int n = sync_resolve_size (function, params);
8715         tree new_function, first_param, result;
8716
8717         if (n == 0)
8718           return error_mark_node;
8719
8720         new_function = built_in_decls[orig_code + exact_log2 (n) + 1];
8721         if (!sync_resolve_params (function, new_function, params))
8722           return error_mark_node;
8723
8724         first_param = VEC_index (tree, params, 0);
8725         result = build_function_call_vec (loc, new_function, params, NULL);
8726         if (orig_code != BUILT_IN_BOOL_COMPARE_AND_SWAP_N
8727             && orig_code != BUILT_IN_LOCK_RELEASE_N)
8728           result = sync_resolve_return (first_param, result);
8729
8730         return result;
8731       }
8732
8733     default:
8734       return NULL_TREE;
8735     }
8736 }
8737
8738 /* Ignoring their sign, return true if two scalar types are the same.  */
8739 bool
8740 same_scalar_type_ignoring_signedness (tree t1, tree t2)
8741 {
8742   enum tree_code c1 = TREE_CODE (t1), c2 = TREE_CODE (t2);
8743
8744   gcc_assert ((c1 == INTEGER_TYPE || c1 == REAL_TYPE || c1 == FIXED_POINT_TYPE)
8745               && (c2 == INTEGER_TYPE || c2 == REAL_TYPE
8746                   || c2 == FIXED_POINT_TYPE));
8747
8748   /* Equality works here because c_common_signed_type uses
8749      TYPE_MAIN_VARIANT.  */
8750   return c_common_signed_type (t1)
8751     == c_common_signed_type (t2);
8752 }
8753
8754 /* Check for missing format attributes on function pointers.  LTYPE is
8755    the new type or left-hand side type.  RTYPE is the old type or
8756    right-hand side type.  Returns TRUE if LTYPE is missing the desired
8757    attribute.  */
8758
8759 bool
8760 check_missing_format_attribute (tree ltype, tree rtype)
8761 {
8762   tree const ttr = TREE_TYPE (rtype), ttl = TREE_TYPE (ltype);
8763   tree ra;
8764
8765   for (ra = TYPE_ATTRIBUTES (ttr); ra; ra = TREE_CHAIN (ra))
8766     if (is_attribute_p ("format", TREE_PURPOSE (ra)))
8767       break;
8768   if (ra)
8769     {
8770       tree la;
8771       for (la = TYPE_ATTRIBUTES (ttl); la; la = TREE_CHAIN (la))
8772         if (is_attribute_p ("format", TREE_PURPOSE (la)))
8773           break;
8774       return !la;
8775     }
8776   else
8777     return false;
8778 }
8779
8780 /* Subscripting with type char is likely to lose on a machine where
8781    chars are signed.  So warn on any machine, but optionally.  Don't
8782    warn for unsigned char since that type is safe.  Don't warn for
8783    signed char because anyone who uses that must have done so
8784    deliberately. Furthermore, we reduce the false positive load by
8785    warning only for non-constant value of type char.  */
8786
8787 void
8788 warn_array_subscript_with_type_char (tree index)
8789 {
8790   if (TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node
8791       && TREE_CODE (index) != INTEGER_CST)
8792     warning (OPT_Wchar_subscripts, "array subscript has type %<char%>");
8793 }
8794
8795 /* Implement -Wparentheses for the unexpected C precedence rules, to
8796    cover cases like x + y << z which readers are likely to
8797    misinterpret.  We have seen an expression in which CODE is a binary
8798    operator used to combine expressions ARG_LEFT and ARG_RIGHT, which
8799    before folding had CODE_LEFT and CODE_RIGHT.  CODE_LEFT and
8800    CODE_RIGHT may be ERROR_MARK, which means that that side of the
8801    expression was not formed using a binary or unary operator, or it
8802    was enclosed in parentheses.  */
8803
8804 void
8805 warn_about_parentheses (enum tree_code code,
8806                         enum tree_code code_left, tree arg_left,
8807                         enum tree_code code_right, tree arg_right)
8808 {
8809   if (!warn_parentheses)
8810     return;
8811
8812   /* This macro tests that the expression ARG with original tree code
8813      CODE appears to be a boolean expression. or the result of folding a
8814      boolean expression.  */
8815 #define APPEARS_TO_BE_BOOLEAN_EXPR_P(CODE, ARG)                             \
8816         (truth_value_p (TREE_CODE (ARG))                                    \
8817          || TREE_CODE (TREE_TYPE (ARG)) == BOOLEAN_TYPE                     \
8818          /* Folding may create 0 or 1 integers from other expressions.  */  \
8819          || ((CODE) != INTEGER_CST                                          \
8820              && (integer_onep (ARG) || integer_zerop (ARG))))
8821
8822   switch (code) 
8823     {
8824     case LSHIFT_EXPR:
8825       if (code_left == PLUS_EXPR || code_right == PLUS_EXPR)
8826         warning (OPT_Wparentheses,
8827                  "suggest parentheses around %<+%> inside %<<<%>");
8828       else if (code_left == MINUS_EXPR || code_right == MINUS_EXPR)
8829         warning (OPT_Wparentheses,
8830                  "suggest parentheses around %<-%> inside %<<<%>");
8831       return;
8832
8833     case RSHIFT_EXPR:
8834       if (code_left == PLUS_EXPR || code_right == PLUS_EXPR)
8835         warning (OPT_Wparentheses,
8836                  "suggest parentheses around %<+%> inside %<>>%>");
8837       else if (code_left == MINUS_EXPR || code_right == MINUS_EXPR)
8838         warning (OPT_Wparentheses,
8839                  "suggest parentheses around %<-%> inside %<>>%>");
8840       return;
8841
8842     case TRUTH_ORIF_EXPR:
8843       if (code_left == TRUTH_ANDIF_EXPR || code_right == TRUTH_ANDIF_EXPR)
8844         warning (OPT_Wparentheses,
8845                  "suggest parentheses around %<&&%> within %<||%>");
8846       return;
8847
8848     case BIT_IOR_EXPR:
8849       if (code_left == BIT_AND_EXPR || code_left == BIT_XOR_EXPR
8850           || code_left == PLUS_EXPR || code_left == MINUS_EXPR
8851           || code_right == BIT_AND_EXPR || code_right == BIT_XOR_EXPR
8852           || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
8853         warning (OPT_Wparentheses,
8854                  "suggest parentheses around arithmetic in operand of %<|%>");
8855       /* Check cases like x|y==z */
8856       else if (TREE_CODE_CLASS (code_left) == tcc_comparison
8857                || TREE_CODE_CLASS (code_right) == tcc_comparison)
8858         warning (OPT_Wparentheses,
8859                  "suggest parentheses around comparison in operand of %<|%>");
8860       /* Check cases like !x | y */
8861       else if (code_left == TRUTH_NOT_EXPR
8862                && !APPEARS_TO_BE_BOOLEAN_EXPR_P (code_right, arg_right))
8863         warning (OPT_Wparentheses, "suggest parentheses around operand of "
8864                  "%<!%> or change %<|%> to %<||%> or %<!%> to %<~%>");
8865       return;
8866
8867     case BIT_XOR_EXPR:
8868       if (code_left == BIT_AND_EXPR
8869           || code_left == PLUS_EXPR || code_left == MINUS_EXPR
8870           || code_right == BIT_AND_EXPR
8871           || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
8872         warning (OPT_Wparentheses,
8873                  "suggest parentheses around arithmetic in operand of %<^%>");
8874       /* Check cases like x^y==z */
8875       else if (TREE_CODE_CLASS (code_left) == tcc_comparison
8876                || TREE_CODE_CLASS (code_right) == tcc_comparison)
8877         warning (OPT_Wparentheses,
8878                  "suggest parentheses around comparison in operand of %<^%>");
8879       return;
8880
8881     case BIT_AND_EXPR:
8882       if (code_left == PLUS_EXPR || code_right == PLUS_EXPR)
8883         warning (OPT_Wparentheses,
8884                  "suggest parentheses around %<+%> in operand of %<&%>");
8885       else if (code_left == MINUS_EXPR || code_right == MINUS_EXPR)
8886         warning (OPT_Wparentheses,
8887                  "suggest parentheses around %<-%> in operand of %<&%>");
8888       /* Check cases like x&y==z */
8889       else if (TREE_CODE_CLASS (code_left) == tcc_comparison
8890                || TREE_CODE_CLASS (code_right) == tcc_comparison)
8891         warning (OPT_Wparentheses,
8892                  "suggest parentheses around comparison in operand of %<&%>");
8893       /* Check cases like !x & y */
8894       else if (code_left == TRUTH_NOT_EXPR
8895                && !APPEARS_TO_BE_BOOLEAN_EXPR_P (code_right, arg_right))
8896         warning (OPT_Wparentheses, "suggest parentheses around operand of "
8897                  "%<!%> or change %<&%> to %<&&%> or %<!%> to %<~%>");
8898       return;
8899
8900     case EQ_EXPR:
8901       if (TREE_CODE_CLASS (code_left) == tcc_comparison
8902           || TREE_CODE_CLASS (code_right) == tcc_comparison)
8903         warning (OPT_Wparentheses,
8904                  "suggest parentheses around comparison in operand of %<==%>");
8905       return;
8906     case NE_EXPR:
8907       if (TREE_CODE_CLASS (code_left) == tcc_comparison
8908           || TREE_CODE_CLASS (code_right) == tcc_comparison)
8909         warning (OPT_Wparentheses,
8910                  "suggest parentheses around comparison in operand of %<!=%>");
8911       return;
8912
8913     default:
8914       if (TREE_CODE_CLASS (code) == tcc_comparison
8915            && ((TREE_CODE_CLASS (code_left) == tcc_comparison
8916                 && code_left != NE_EXPR && code_left != EQ_EXPR
8917                 && INTEGRAL_TYPE_P (TREE_TYPE (arg_left)))
8918                || (TREE_CODE_CLASS (code_right) == tcc_comparison
8919                    && code_right != NE_EXPR && code_right != EQ_EXPR
8920                    && INTEGRAL_TYPE_P (TREE_TYPE (arg_right)))))
8921         warning (OPT_Wparentheses, "comparisons like %<X<=Y<=Z%> do not "
8922                  "have their mathematical meaning");
8923       return;
8924     }
8925 #undef NOT_A_BOOLEAN_EXPR_P
8926 }
8927
8928 /* If LABEL (a LABEL_DECL) has not been used, issue a warning.  */
8929
8930 void
8931 warn_for_unused_label (tree label)
8932 {
8933   if (!TREE_USED (label))
8934     {
8935       if (DECL_INITIAL (label))
8936         warning (OPT_Wunused_label, "label %q+D defined but not used", label);
8937       else
8938         warning (OPT_Wunused_label, "label %q+D declared but not defined", label);
8939     }
8940 }
8941
8942 #ifndef TARGET_HAS_TARGETCM
8943 struct gcc_targetcm targetcm = TARGETCM_INITIALIZER;
8944 #endif
8945
8946 /* Warn for division by zero according to the value of DIVISOR.  LOC
8947    is the location of the division operator.  */
8948
8949 void
8950 warn_for_div_by_zero (location_t loc, tree divisor)
8951 {
8952   /* If DIVISOR is zero, and has integral or fixed-point type, issue a warning
8953      about division by zero.  Do not issue a warning if DIVISOR has a
8954      floating-point type, since we consider 0.0/0.0 a valid way of
8955      generating a NaN.  */
8956   if (c_inhibit_evaluation_warnings == 0
8957       && (integer_zerop (divisor) || fixed_zerop (divisor)))
8958     warning_at (loc, OPT_Wdiv_by_zero, "division by zero");
8959 }
8960
8961 /* Subroutine of build_binary_op. Give warnings for comparisons
8962    between signed and unsigned quantities that may fail. Do the
8963    checking based on the original operand trees ORIG_OP0 and ORIG_OP1,
8964    so that casts will be considered, but default promotions won't
8965    be.
8966
8967    LOCATION is the location of the comparison operator.
8968
8969    The arguments of this function map directly to local variables
8970    of build_binary_op.  */
8971
8972 void 
8973 warn_for_sign_compare (location_t location,
8974                        tree orig_op0, tree orig_op1, 
8975                        tree op0, tree op1, 
8976                        tree result_type, enum tree_code resultcode)
8977 {
8978   int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
8979   int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
8980   int unsignedp0, unsignedp1;
8981   
8982   /* In C++, check for comparison of different enum types.  */
8983   if (c_dialect_cxx()
8984       && TREE_CODE (TREE_TYPE (orig_op0)) == ENUMERAL_TYPE
8985       && TREE_CODE (TREE_TYPE (orig_op1)) == ENUMERAL_TYPE
8986       && TYPE_MAIN_VARIANT (TREE_TYPE (orig_op0))
8987          != TYPE_MAIN_VARIANT (TREE_TYPE (orig_op1)))
8988     {
8989       warning_at (location,
8990                   OPT_Wsign_compare, "comparison between types %qT and %qT",
8991                   TREE_TYPE (orig_op0), TREE_TYPE (orig_op1));
8992     }
8993
8994   /* Do not warn if the comparison is being done in a signed type,
8995      since the signed type will only be chosen if it can represent
8996      all the values of the unsigned type.  */
8997   if (!TYPE_UNSIGNED (result_type))
8998     /* OK */;
8999   /* Do not warn if both operands are unsigned.  */
9000   else if (op0_signed == op1_signed)
9001     /* OK */;
9002   else
9003     {
9004       tree sop, uop, base_type;
9005       bool ovf;
9006
9007       if (op0_signed)
9008         sop = orig_op0, uop = orig_op1;
9009       else 
9010         sop = orig_op1, uop = orig_op0;
9011
9012       STRIP_TYPE_NOPS (sop); 
9013       STRIP_TYPE_NOPS (uop);
9014       base_type = (TREE_CODE (result_type) == COMPLEX_TYPE
9015                    ? TREE_TYPE (result_type) : result_type);
9016
9017       /* Do not warn if the signed quantity is an unsuffixed integer
9018          literal (or some static constant expression involving such
9019          literals or a conditional expression involving such literals)
9020          and it is non-negative.  */
9021       if (tree_expr_nonnegative_warnv_p (sop, &ovf))
9022         /* OK */;
9023       /* Do not warn if the comparison is an equality operation, the
9024          unsigned quantity is an integral constant, and it would fit
9025          in the result if the result were signed.  */
9026       else if (TREE_CODE (uop) == INTEGER_CST
9027                && (resultcode == EQ_EXPR || resultcode == NE_EXPR)
9028                && int_fits_type_p (uop, c_common_signed_type (base_type)))
9029         /* OK */;
9030       /* In C, do not warn if the unsigned quantity is an enumeration
9031          constant and its maximum value would fit in the result if the
9032          result were signed.  */
9033       else if (!c_dialect_cxx() && TREE_CODE (uop) == INTEGER_CST
9034                && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
9035                && int_fits_type_p (TYPE_MAX_VALUE (TREE_TYPE (uop)),
9036                                    c_common_signed_type (base_type)))
9037         /* OK */;
9038       else 
9039         warning_at (location,
9040                     OPT_Wsign_compare, 
9041                     "comparison between signed and unsigned integer expressions");
9042     }
9043   
9044   /* Warn if two unsigned values are being compared in a size larger
9045      than their original size, and one (and only one) is the result of
9046      a `~' operator.  This comparison will always fail.
9047      
9048      Also warn if one operand is a constant, and the constant does not
9049      have all bits set that are set in the ~ operand when it is
9050      extended.  */
9051
9052   op0 = get_narrower (op0, &unsignedp0);
9053   op1 = get_narrower (op1, &unsignedp1);
9054   
9055   if ((TREE_CODE (op0) == BIT_NOT_EXPR)
9056       ^ (TREE_CODE (op1) == BIT_NOT_EXPR))
9057     {
9058       if (TREE_CODE (op0) == BIT_NOT_EXPR)
9059         op0 = get_narrower (TREE_OPERAND (op0, 0), &unsignedp0);
9060       if (TREE_CODE (op1) == BIT_NOT_EXPR)
9061         op1 = get_narrower (TREE_OPERAND (op1, 0), &unsignedp1);
9062
9063       if (host_integerp (op0, 0) || host_integerp (op1, 0))
9064         {
9065           tree primop;
9066           HOST_WIDE_INT constant, mask;
9067           int unsignedp;
9068           unsigned int bits;
9069           
9070           if (host_integerp (op0, 0))
9071             {
9072               primop = op1;
9073               unsignedp = unsignedp1;
9074               constant = tree_low_cst (op0, 0);
9075             }
9076           else
9077             {
9078               primop = op0;
9079               unsignedp = unsignedp0;
9080               constant = tree_low_cst (op1, 0);
9081             }
9082           
9083           bits = TYPE_PRECISION (TREE_TYPE (primop));
9084           if (bits < TYPE_PRECISION (result_type)
9085               && bits < HOST_BITS_PER_LONG && unsignedp)
9086             {
9087               mask = (~ (HOST_WIDE_INT) 0) << bits;
9088               if ((mask & constant) != mask)
9089                 {
9090                   if (constant == 0)
9091                     warning (OPT_Wsign_compare, 
9092                              "promoted ~unsigned is always non-zero");
9093                   else
9094                     warning_at (location, OPT_Wsign_compare, 
9095                                 "comparison of promoted ~unsigned with constant");
9096                 }
9097             }
9098         }
9099       else if (unsignedp0 && unsignedp1
9100                && (TYPE_PRECISION (TREE_TYPE (op0))
9101                    < TYPE_PRECISION (result_type))
9102                && (TYPE_PRECISION (TREE_TYPE (op1))
9103                    < TYPE_PRECISION (result_type)))
9104         warning_at (location, OPT_Wsign_compare,
9105                  "comparison of promoted ~unsigned with unsigned");
9106     }
9107 }
9108
9109 /* Setup a TYPE_DECL node as a typedef representation.
9110
9111    X is a TYPE_DECL for a typedef statement.  Create a brand new
9112    ..._TYPE node (which will be just a variant of the existing
9113    ..._TYPE node with identical properties) and then install X
9114    as the TYPE_NAME of this brand new (duplicate) ..._TYPE node.
9115
9116    The whole point here is to end up with a situation where each
9117    and every ..._TYPE node the compiler creates will be uniquely
9118    associated with AT MOST one node representing a typedef name.
9119    This way, even though the compiler substitutes corresponding
9120    ..._TYPE nodes for TYPE_DECL (i.e. "typedef name") nodes very
9121    early on, later parts of the compiler can always do the reverse
9122    translation and get back the corresponding typedef name.  For
9123    example, given:
9124
9125         typedef struct S MY_TYPE;
9126         MY_TYPE object;
9127
9128    Later parts of the compiler might only know that `object' was of
9129    type `struct S' if it were not for code just below.  With this
9130    code however, later parts of the compiler see something like:
9131
9132         struct S' == struct S
9133         typedef struct S' MY_TYPE;
9134         struct S' object;
9135
9136     And they can then deduce (from the node for type struct S') that
9137     the original object declaration was:
9138
9139                 MY_TYPE object;
9140
9141     Being able to do this is important for proper support of protoize,
9142     and also for generating precise symbolic debugging information
9143     which takes full account of the programmer's (typedef) vocabulary.
9144
9145     Obviously, we don't want to generate a duplicate ..._TYPE node if
9146     the TYPE_DECL node that we are now processing really represents a
9147     standard built-in type.  */
9148
9149 void
9150 set_underlying_type (tree x)
9151 {
9152   if (x == error_mark_node)
9153     return;
9154   if (DECL_IS_BUILTIN (x))
9155     {
9156       if (TYPE_NAME (TREE_TYPE (x)) == 0)
9157         TYPE_NAME (TREE_TYPE (x)) = x;
9158     }
9159   else if (TREE_TYPE (x) != error_mark_node
9160            && DECL_ORIGINAL_TYPE (x) == NULL_TREE)
9161     {
9162       tree tt = TREE_TYPE (x);
9163       DECL_ORIGINAL_TYPE (x) = tt;
9164       tt = build_variant_type_copy (tt);
9165       TYPE_STUB_DECL (tt) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
9166       TYPE_NAME (tt) = x;
9167       TREE_USED (tt) = TREE_USED (x);
9168       TREE_TYPE (x) = tt;
9169     }
9170 }
9171
9172 /* Returns true if X is a typedef decl.  */
9173
9174 bool
9175 is_typedef_decl (tree x)
9176 {
9177   return (x && TREE_CODE (x) == TYPE_DECL
9178           && DECL_ORIGINAL_TYPE (x) != NULL_TREE);
9179 }
9180
9181 /* Record the types used by the current global variable declaration
9182    being parsed, so that we can decide later to emit their debug info.
9183    Those types are in types_used_by_cur_var_decl, and we are going to
9184    store them in the types_used_by_vars_hash hash table.
9185    DECL is the declaration of the global variable that has been parsed.  */
9186
9187 void
9188 record_types_used_by_current_var_decl (tree decl)
9189 {
9190   gcc_assert (decl && DECL_P (decl) && TREE_STATIC (decl));
9191
9192   if (types_used_by_cur_var_decl)
9193     {
9194       tree node;
9195       for (node = types_used_by_cur_var_decl;
9196            node;
9197            node = TREE_CHAIN (node))
9198       {
9199         tree type = TREE_PURPOSE (node);
9200         types_used_by_var_decl_insert (type, decl);
9201       }
9202       types_used_by_cur_var_decl = NULL;
9203     }
9204 }
9205
9206 /* The C and C++ parsers both use vectors to hold function arguments.
9207    For efficiency, we keep a cache of unused vectors.  This is the
9208    cache.  */
9209
9210 typedef VEC(tree,gc)* tree_gc_vec;
9211 DEF_VEC_P(tree_gc_vec);
9212 DEF_VEC_ALLOC_P(tree_gc_vec,gc);
9213 static GTY((deletable)) VEC(tree_gc_vec,gc) *tree_vector_cache;
9214
9215 /* Return a new vector from the cache.  If the cache is empty,
9216    allocate a new vector.  These vectors are GC'ed, so it is OK if the
9217    pointer is not released..  */
9218
9219 VEC(tree,gc) *
9220 make_tree_vector (void)
9221 {
9222   if (!VEC_empty (tree_gc_vec, tree_vector_cache))
9223     return VEC_pop (tree_gc_vec, tree_vector_cache);
9224   else
9225     {
9226       /* Passing 0 to VEC_alloc returns NULL, and our callers require
9227          that we always return a non-NULL value.  The vector code uses
9228          4 when growing a NULL vector, so we do too.  */
9229       return VEC_alloc (tree, gc, 4);
9230     }
9231 }
9232
9233 /* Release a vector of trees back to the cache.  */
9234
9235 void
9236 release_tree_vector (VEC(tree,gc) *vec)
9237 {
9238   if (vec != NULL)
9239     {
9240       VEC_truncate (tree, vec, 0);
9241       VEC_safe_push (tree_gc_vec, gc, tree_vector_cache, vec);
9242     }
9243 }
9244
9245 /* Get a new tree vector holding a single tree.  */
9246
9247 VEC(tree,gc) *
9248 make_tree_vector_single (tree t)
9249 {
9250   VEC(tree,gc) *ret = make_tree_vector ();
9251   VEC_quick_push (tree, ret, t);
9252   return ret;
9253 }
9254
9255 /* Get a new tree vector which is a copy of an existing one.  */
9256
9257 VEC(tree,gc) *
9258 make_tree_vector_copy (const VEC(tree,gc) *orig)
9259 {
9260   VEC(tree,gc) *ret;
9261   unsigned int ix;
9262   tree t;
9263
9264   ret = make_tree_vector ();
9265   VEC_reserve (tree, gc, ret, VEC_length (tree, orig));
9266   for (ix = 0; VEC_iterate (tree, orig, ix, t); ++ix)
9267     VEC_quick_push (tree, ret, t);
9268   return ret;
9269 }
9270
9271 #include "gt-c-common.h"