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