OSDN Git Service

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