OSDN Git Service

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