OSDN Git Service

PR debug/29436, c/32326
[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 Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3.  If not see
19 <http://www.gnu.org/licenses/>.  */
20
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "tm.h"
25 #include "intl.h"
26 #include "tree.h"
27 #include "flags.h"
28 #include "output.h"
29 #include "c-pragma.h"
30 #include "rtl.h"
31 #include "ggc.h"
32 #include "varray.h"
33 #include "expr.h"
34 #include "c-common.h"
35 #include "diagnostic.h"
36 #include "tm_p.h"
37 #include "obstack.h"
38 #include "cpplib.h"
39 #include "target.h"
40 #include "langhooks.h"
41 #include "tree-inline.h"
42 #include "c-tree.h"
43 #include "toplev.h"
44 #include "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 "fixed-value.h"
52
53 cpp_reader *parse_in;           /* Declared in c-pragma.h.  */
54
55 /* We let tm.h override the types used here, to handle trivial differences
56    such as the choice of unsigned int or long unsigned int for size_t.
57    When machines start needing nontrivial differences in the size type,
58    it would be best to do something here to figure out automatically
59    from other information what type to use.  */
60
61 #ifndef SIZE_TYPE
62 #define SIZE_TYPE "long unsigned int"
63 #endif
64
65 #ifndef PID_TYPE
66 #define PID_TYPE "int"
67 #endif
68
69 #ifndef WCHAR_TYPE
70 #define WCHAR_TYPE "int"
71 #endif
72
73 /* WCHAR_TYPE gets overridden by -fshort-wchar.  */
74 #define MODIFIED_WCHAR_TYPE \
75         (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
76
77 #ifndef PTRDIFF_TYPE
78 #define PTRDIFF_TYPE "long int"
79 #endif
80
81 #ifndef WINT_TYPE
82 #define WINT_TYPE "unsigned int"
83 #endif
84
85 #ifndef INTMAX_TYPE
86 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE)     \
87                      ? "int"                                    \
88                      : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
89                         ? "long int"                            \
90                         : "long long int"))
91 #endif
92
93 #ifndef UINTMAX_TYPE
94 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE)    \
95                      ? "unsigned int"                           \
96                      : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
97                         ? "long unsigned int"                   \
98                         : "long long unsigned int"))
99 #endif
100
101 /* The following symbols are subsumed in the c_global_trees array, and
102    listed here individually for documentation purposes.
103
104    INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
105
106         tree short_integer_type_node;
107         tree long_integer_type_node;
108         tree long_long_integer_type_node;
109
110         tree short_unsigned_type_node;
111         tree long_unsigned_type_node;
112         tree long_long_unsigned_type_node;
113
114         tree truthvalue_type_node;
115         tree truthvalue_false_node;
116         tree truthvalue_true_node;
117
118         tree ptrdiff_type_node;
119
120         tree unsigned_char_type_node;
121         tree signed_char_type_node;
122         tree wchar_type_node;
123         tree signed_wchar_type_node;
124         tree unsigned_wchar_type_node;
125
126         tree float_type_node;
127         tree double_type_node;
128         tree long_double_type_node;
129
130         tree complex_integer_type_node;
131         tree complex_float_type_node;
132         tree complex_double_type_node;
133         tree complex_long_double_type_node;
134
135         tree dfloat32_type_node;
136         tree dfloat64_type_node;
137         tree_dfloat128_type_node;
138
139         tree intQI_type_node;
140         tree intHI_type_node;
141         tree intSI_type_node;
142         tree intDI_type_node;
143         tree intTI_type_node;
144
145         tree unsigned_intQI_type_node;
146         tree unsigned_intHI_type_node;
147         tree unsigned_intSI_type_node;
148         tree unsigned_intDI_type_node;
149         tree unsigned_intTI_type_node;
150
151         tree widest_integer_literal_type_node;
152         tree widest_unsigned_literal_type_node;
153
154    Nodes for types `void *' and `const void *'.
155
156         tree ptr_type_node, const_ptr_type_node;
157
158    Nodes for types `char *' and `const char *'.
159
160         tree string_type_node, const_string_type_node;
161
162    Type `char[SOMENUMBER]'.
163    Used when an array of char is needed and the size is irrelevant.
164
165         tree char_array_type_node;
166
167    Type `int[SOMENUMBER]' or something like it.
168    Used when an array of int needed and the size is irrelevant.
169
170         tree int_array_type_node;
171
172    Type `wchar_t[SOMENUMBER]' or something like it.
173    Used when a wide string literal is created.
174
175         tree wchar_array_type_node;
176
177    Type `int ()' -- used for implicit declaration of functions.
178
179         tree default_function_type;
180
181    A VOID_TYPE node, packaged in a TREE_LIST.
182
183         tree void_list_node;
184
185   The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
186   and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
187   VAR_DECLS, but C++ does.)
188
189         tree function_name_decl_node;
190         tree pretty_function_name_decl_node;
191         tree c99_function_name_decl_node;
192
193   Stack of nested function name VAR_DECLs.
194
195         tree saved_function_name_decls;
196
197 */
198
199 tree c_global_trees[CTI_MAX];
200 \f
201 /* Switches common to the C front ends.  */
202
203 /* Nonzero if prepreprocessing only.  */
204
205 int flag_preprocess_only;
206
207 /* Nonzero means don't output line number information.  */
208
209 char flag_no_line_commands;
210
211 /* Nonzero causes -E output not to be done, but directives such as
212    #define that have side effects are still obeyed.  */
213
214 char flag_no_output;
215
216 /* Nonzero means dump macros in some fashion.  */
217
218 char flag_dump_macros;
219
220 /* Nonzero means pass #include lines through to the output.  */
221
222 char flag_dump_includes;
223
224 /* Nonzero means process PCH files while preprocessing.  */
225
226 bool flag_pch_preprocess;
227
228 /* The file name to which we should write a precompiled header, or
229    NULL if no header will be written in this compile.  */
230
231 const char *pch_file;
232
233 /* Nonzero if an ISO standard was selected.  It rejects macros in the
234    user's namespace.  */
235 int flag_iso;
236
237 /* Nonzero if -undef was given.  It suppresses target built-in macros
238    and assertions.  */
239 int flag_undef;
240
241 /* Nonzero means don't recognize the non-ANSI builtin functions.  */
242
243 int flag_no_builtin;
244
245 /* Nonzero means don't recognize the non-ANSI builtin functions.
246    -ansi sets this.  */
247
248 int flag_no_nonansi_builtin;
249
250 /* Nonzero means give `double' the same size as `float'.  */
251
252 int flag_short_double;
253
254 /* Nonzero means give `wchar_t' the same size as `short'.  */
255
256 int flag_short_wchar;
257
258 /* Nonzero means allow implicit conversions between vectors with
259    differing numbers of subparts and/or differing element types.  */
260 int flag_lax_vector_conversions;
261
262 /* Nonzero means allow Microsoft extensions without warnings or errors.  */
263 int flag_ms_extensions;
264
265 /* Nonzero means don't recognize the keyword `asm'.  */
266
267 int flag_no_asm;
268
269 /* Nonzero means to treat bitfields as signed unless they say `unsigned'.  */
270
271 int flag_signed_bitfields = 1;
272
273 /* Warn about #pragma directives that are not recognized.  */
274
275 int warn_unknown_pragmas; /* Tri state variable.  */
276
277 /* Warn about format/argument anomalies in calls to formatted I/O functions
278    (*printf, *scanf, strftime, strfmon, etc.).  */
279
280 int warn_format;
281
282 /* Warn about using __null (as NULL in C++) as sentinel.  For code compiled
283    with GCC this doesn't matter as __null is guaranteed to have the right
284    size.  */
285
286 int warn_strict_null_sentinel;
287
288 /* Zero means that faster, ...NonNil variants of objc_msgSend...
289    calls will be used in ObjC; passing nil receivers to such calls
290    will most likely result in crashes.  */
291 int flag_nil_receivers = 1;
292
293 /* Nonzero means that code generation will be altered to support
294    "zero-link" execution.  This currently affects ObjC only, but may
295    affect other languages in the future.  */
296 int flag_zero_link = 0;
297
298 /* Nonzero means emit an '__OBJC, __image_info' for the current translation
299    unit.  It will inform the ObjC runtime that class definition(s) herein
300    contained are to replace one(s) previously loaded.  */
301 int flag_replace_objc_classes = 0;
302
303 /* C/ObjC language option variables.  */
304
305
306 /* Nonzero means allow type mismatches in conditional expressions;
307    just make their values `void'.  */
308
309 int flag_cond_mismatch;
310
311 /* Nonzero means enable C89 Amendment 1 features.  */
312
313 int flag_isoc94;
314
315 /* Nonzero means use the ISO C99 dialect of C.  */
316
317 int flag_isoc99;
318
319 /* Nonzero means that we have builtin functions, and main is an int.  */
320
321 int flag_hosted = 1;
322
323 /* Warn if main is suspicious.  */
324
325 int warn_main;
326
327
328 /* ObjC language option variables.  */
329
330
331 /* Open and close the file for outputting class declarations, if
332    requested (ObjC).  */
333
334 int flag_gen_declaration;
335
336 /* Tells the compiler that this is a special run.  Do not perform any
337    compiling, instead we are to test some platform dependent features
338    and output a C header file with appropriate definitions.  */
339
340 int print_struct_values;
341
342 /* Tells the compiler what is the constant string class for Objc.  */
343
344 const char *constant_string_class_name;
345
346
347 /* C++ language option variables.  */
348
349
350 /* Nonzero means don't recognize any extension keywords.  */
351
352 int flag_no_gnu_keywords;
353
354 /* Nonzero means do emit exported implementations of functions even if
355    they can be inlined.  */
356
357 int flag_implement_inlines = 1;
358
359 /* Nonzero means that implicit instantiations will be emitted if needed.  */
360
361 int flag_implicit_templates = 1;
362
363 /* Nonzero means that implicit instantiations of inline templates will be
364    emitted if needed, even if instantiations of non-inline templates
365    aren't.  */
366
367 int flag_implicit_inline_templates = 1;
368
369 /* Nonzero means generate separate instantiation control files and
370    juggle them at link time.  */
371
372 int flag_use_repository;
373
374 /* Nonzero if we want to issue diagnostics that the standard says are not
375    required.  */
376
377 int flag_optional_diags = 1;
378
379 /* Nonzero means we should attempt to elide constructors when possible.  */
380
381 int flag_elide_constructors = 1;
382
383 /* Nonzero means that member functions defined in class scope are
384    inline by default.  */
385
386 int flag_default_inline = 1;
387
388 /* Controls whether compiler generates 'type descriptor' that give
389    run-time type information.  */
390
391 int flag_rtti = 1;
392
393 /* Nonzero if we want to conserve space in the .o files.  We do this
394    by putting uninitialized data and runtime initialized data into
395    .common instead of .data at the expense of not flagging multiple
396    definitions.  */
397
398 int flag_conserve_space;
399
400 /* Nonzero if we want to obey access control semantics.  */
401
402 int flag_access_control = 1;
403
404 /* Nonzero if we want to check the return value of new and avoid calling
405    constructors if it is a null pointer.  */
406
407 int flag_check_new;
408
409 /* The C++ dialect being used. C++98 is the default.  */
410
411 enum cxx_dialect cxx_dialect = cxx98;
412
413 /* Nonzero if we want the new ISO rules for pushing a new scope for `for'
414    initialization variables.
415    0: Old rules, set by -fno-for-scope.
416    2: New ISO rules, set by -ffor-scope.
417    1: Try to implement new ISO rules, but with backup compatibility
418    (and warnings).  This is the default, for now.  */
419
420 int flag_new_for_scope = 1;
421
422 /* Nonzero if we want to emit defined symbols with common-like linkage as
423    weak symbols where possible, in order to conform to C++ semantics.
424    Otherwise, emit them as local symbols.  */
425
426 int flag_weak = 1;
427
428 /* 0 means we want the preprocessor to not emit line directives for
429    the current working directory.  1 means we want it to do it.  -1
430    means we should decide depending on whether debugging information
431    is being emitted or not.  */
432
433 int flag_working_directory = -1;
434
435 /* Nonzero to use __cxa_atexit, rather than atexit, to register
436    destructors for local statics and global objects.  '2' means it has been
437    set nonzero as a default, not by a command-line flag.  */
438
439 int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
440
441 /* Nonzero to use __cxa_get_exception_ptr in C++ exception-handling
442    code.  '2' means it has not been set explicitly on the command line.  */
443
444 int flag_use_cxa_get_exception_ptr = 2;
445
446 /* Nonzero means make the default pedwarns warnings instead of errors.
447    The value of this flag is ignored if -pedantic is specified.  */
448
449 int flag_permissive;
450
451 /* Nonzero means to implement standard semantics for exception
452    specifications, calling unexpected if an exception is thrown that
453    doesn't match the specification.  Zero means to treat them as
454    assertions and optimize accordingly, but not check them.  */
455
456 int flag_enforce_eh_specs = 1;
457
458 /* Nonzero means to generate thread-safe code for initializing local
459    statics.  */
460
461 int flag_threadsafe_statics = 1;
462
463 /* Nonzero means warn about implicit declarations.  */
464
465 int warn_implicit = 1;
466
467 /* Maximum template instantiation depth.  This limit is rather
468    arbitrary, but it exists to limit the time it takes to notice
469    infinite template instantiations.  */
470
471 int max_tinst_depth = 500;
472
473
474
475 /* The elements of `ridpointers' are identifier nodes for the reserved
476    type names and storage classes.  It is indexed by a RID_... value.  */
477 tree *ridpointers;
478
479 tree (*make_fname_decl) (tree, int);
480
481 /* Nonzero means the expression being parsed will never be evaluated.
482    This is a count, since unevaluated expressions can nest.  */
483 int skip_evaluation;
484
485 /* Information about how a function name is generated.  */
486 struct fname_var_t
487 {
488   tree *const decl;     /* pointer to the VAR_DECL.  */
489   const unsigned rid;   /* RID number for the identifier.  */
490   const int pretty;     /* How pretty is it? */
491 };
492
493 /* The three ways of getting then name of the current function.  */
494
495 const struct fname_var_t fname_vars[] =
496 {
497   /* C99 compliant __func__, must be first.  */
498   {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
499   /* GCC __FUNCTION__ compliant.  */
500   {&function_name_decl_node, RID_FUNCTION_NAME, 0},
501   /* GCC __PRETTY_FUNCTION__ compliant.  */
502   {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
503   {NULL, 0, 0},
504 };
505
506 static tree check_case_value (tree);
507 static bool check_case_bounds (tree, tree, tree *, tree *);
508
509 static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
510 static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
511 static tree handle_common_attribute (tree *, tree, tree, int, bool *);
512 static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
513 static tree handle_hot_attribute (tree *, tree, tree, int, bool *);
514 static tree handle_cold_attribute (tree *, tree, tree, int, bool *);
515 static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
516 static tree handle_always_inline_attribute (tree *, tree, tree, int,
517                                             bool *);
518 static tree handle_gnu_inline_attribute (tree *, tree, tree, int, bool *);
519 static tree handle_artificial_attribute (tree *, tree, tree, int, bool *);
520 static tree handle_flatten_attribute (tree *, tree, tree, int, bool *);
521 static tree handle_error_attribute (tree *, tree, tree, int, bool *);
522 static tree handle_used_attribute (tree *, tree, tree, int, bool *);
523 static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
524 static tree handle_externally_visible_attribute (tree *, tree, tree, int,
525                                                  bool *);
526 static tree handle_const_attribute (tree *, tree, tree, int, bool *);
527 static tree handle_transparent_union_attribute (tree *, tree, tree,
528                                                 int, bool *);
529 static tree handle_constructor_attribute (tree *, tree, tree, int, bool *);
530 static tree handle_destructor_attribute (tree *, tree, tree, int, bool *);
531 static tree handle_mode_attribute (tree *, tree, tree, int, bool *);
532 static tree handle_section_attribute (tree *, tree, tree, int, bool *);
533 static tree handle_aligned_attribute (tree *, tree, tree, int, bool *);
534 static tree handle_weak_attribute (tree *, tree, tree, int, bool *) ;
535 static tree handle_alias_attribute (tree *, tree, tree, int, bool *);
536 static tree handle_weakref_attribute (tree *, tree, tree, int, bool *) ;
537 static tree handle_visibility_attribute (tree *, tree, tree, int,
538                                          bool *);
539 static tree handle_tls_model_attribute (tree *, tree, tree, int,
540                                         bool *);
541 static tree handle_no_instrument_function_attribute (tree *, tree,
542                                                      tree, int, bool *);
543 static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
544 static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
545 static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
546                                              bool *);
547 static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
548 static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
549 static tree handle_deprecated_attribute (tree *, tree, tree, int,
550                                          bool *);
551 static tree handle_vector_size_attribute (tree *, tree, tree, int,
552                                           bool *);
553 static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
554 static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
555 static tree handle_cleanup_attribute (tree *, tree, tree, int, bool *);
556 static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
557                                                  bool *);
558 static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
559 static tree handle_type_generic_attribute (tree *, tree, tree, int, bool *);
560 static tree handle_alloc_size_attribute (tree *, tree, tree, int, bool *);
561
562 static void check_function_nonnull (tree, int, tree *);
563 static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
564 static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
565 static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
566 static int resort_field_decl_cmp (const void *, const void *);
567
568 /* Table of machine-independent attributes common to all C-like languages.  */
569 const struct attribute_spec c_common_attribute_table[] =
570 {
571   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
572   { "packed",                 0, 0, false, false, false,
573                               handle_packed_attribute },
574   { "nocommon",               0, 0, true,  false, false,
575                               handle_nocommon_attribute },
576   { "common",                 0, 0, true,  false, false,
577                               handle_common_attribute },
578   /* FIXME: logically, noreturn attributes should be listed as
579      "false, true, true" and apply to function types.  But implementing this
580      would require all the places in the compiler that use TREE_THIS_VOLATILE
581      on a decl to identify non-returning functions to be located and fixed
582      to check the function type instead.  */
583   { "noreturn",               0, 0, true,  false, false,
584                               handle_noreturn_attribute },
585   { "volatile",               0, 0, true,  false, false,
586                               handle_noreturn_attribute },
587   { "noinline",               0, 0, true,  false, false,
588                               handle_noinline_attribute },
589   { "always_inline",          0, 0, true,  false, false,
590                               handle_always_inline_attribute },
591   { "gnu_inline",             0, 0, true,  false, false,
592                               handle_gnu_inline_attribute },
593   { "artificial",             0, 0, true,  false, false,
594                               handle_artificial_attribute },
595   { "flatten",                0, 0, true,  false, false,
596                               handle_flatten_attribute },
597   { "used",                   0, 0, true,  false, false,
598                               handle_used_attribute },
599   { "unused",                 0, 0, false, false, false,
600                               handle_unused_attribute },
601   { "externally_visible",     0, 0, true,  false, false,
602                               handle_externally_visible_attribute },
603   /* The same comments as for noreturn attributes apply to const ones.  */
604   { "const",                  0, 0, true,  false, false,
605                               handle_const_attribute },
606   { "transparent_union",      0, 0, false, false, false,
607                               handle_transparent_union_attribute },
608   { "constructor",            0, 1, true,  false, false,
609                               handle_constructor_attribute },
610   { "destructor",             0, 1, true,  false, false,
611                               handle_destructor_attribute },
612   { "mode",                   1, 1, false,  true, false,
613                               handle_mode_attribute },
614   { "section",                1, 1, true,  false, false,
615                               handle_section_attribute },
616   { "aligned",                0, 1, false, false, false,
617                               handle_aligned_attribute },
618   { "weak",                   0, 0, true,  false, false,
619                               handle_weak_attribute },
620   { "alias",                  1, 1, true,  false, false,
621                               handle_alias_attribute },
622   { "weakref",                0, 1, true,  false, false,
623                               handle_weakref_attribute },
624   { "no_instrument_function", 0, 0, true,  false, false,
625                               handle_no_instrument_function_attribute },
626   { "malloc",                 0, 0, true,  false, false,
627                               handle_malloc_attribute },
628   { "returns_twice",          0, 0, true,  false, false,
629                               handle_returns_twice_attribute },
630   { "no_stack_limit",         0, 0, true,  false, false,
631                               handle_no_limit_stack_attribute },
632   { "pure",                   0, 0, true,  false, false,
633                               handle_pure_attribute },
634   /* For internal use (marking of builtins) only.  The name contains space
635      to prevent its usage in source code.  */
636   { "no vops",                0, 0, true,  false, false,
637                               handle_novops_attribute },
638   { "deprecated",             0, 0, false, false, false,
639                               handle_deprecated_attribute },
640   { "vector_size",            1, 1, false, true, false,
641                               handle_vector_size_attribute },
642   { "visibility",             1, 1, false, false, false,
643                               handle_visibility_attribute },
644   { "tls_model",              1, 1, true,  false, false,
645                               handle_tls_model_attribute },
646   { "nonnull",                0, -1, false, true, true,
647                               handle_nonnull_attribute },
648   { "nothrow",                0, 0, true,  false, false,
649                               handle_nothrow_attribute },
650   { "may_alias",              0, 0, false, true, false, NULL },
651   { "cleanup",                1, 1, true, false, false,
652                               handle_cleanup_attribute },
653   { "warn_unused_result",     0, 0, false, true, true,
654                               handle_warn_unused_result_attribute },
655   { "sentinel",               0, 1, false, true, true,
656                               handle_sentinel_attribute },
657   /* For internal use (marking of builtins) only.  The name contains space
658      to prevent its usage in source code.  */
659   { "type generic",           0, 0, false, true, true,
660                               handle_type_generic_attribute },
661   { "alloc_size",             1, 2, false, true, true,
662                               handle_alloc_size_attribute },
663   { "cold",                   0, 0, true,  false, false,
664                               handle_cold_attribute },
665   { "hot",                    0, 0, true,  false, false,
666                               handle_hot_attribute },
667   { "warning",                1, 1, true,  false, false,
668                               handle_error_attribute },
669   { "error",                  1, 1, true,  false, false,
670                               handle_error_attribute },
671   { NULL,                     0, 0, false, false, false, NULL }
672 };
673
674 /* Give the specifications for the format attributes, used by C and all
675    descendants.  */
676
677 const struct attribute_spec c_common_format_attribute_table[] =
678 {
679   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
680   { "format",                 3, 3, false, true,  true,
681                               handle_format_attribute },
682   { "format_arg",             1, 1, false, true,  true,
683                               handle_format_arg_attribute },
684   { NULL,                     0, 0, false, false, false, NULL }
685 };
686
687 /* Push current bindings for the function name VAR_DECLS.  */
688
689 void
690 start_fname_decls (void)
691 {
692   unsigned ix;
693   tree saved = NULL_TREE;
694
695   for (ix = 0; fname_vars[ix].decl; ix++)
696     {
697       tree decl = *fname_vars[ix].decl;
698
699       if (decl)
700         {
701           saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
702           *fname_vars[ix].decl = NULL_TREE;
703         }
704     }
705   if (saved || saved_function_name_decls)
706     /* Normally they'll have been NULL, so only push if we've got a
707        stack, or they are non-NULL.  */
708     saved_function_name_decls = tree_cons (saved, NULL_TREE,
709                                            saved_function_name_decls);
710 }
711
712 /* Finish up the current bindings, adding them into the current function's
713    statement tree.  This must be done _before_ finish_stmt_tree is called.
714    If there is no current function, we must be at file scope and no statements
715    are involved. Pop the previous bindings.  */
716
717 void
718 finish_fname_decls (void)
719 {
720   unsigned ix;
721   tree stmts = NULL_TREE;
722   tree stack = saved_function_name_decls;
723
724   for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
725     append_to_statement_list (TREE_VALUE (stack), &stmts);
726
727   if (stmts)
728     {
729       tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
730
731       if (TREE_CODE (*bodyp) == BIND_EXPR)
732         bodyp = &BIND_EXPR_BODY (*bodyp);
733
734       append_to_statement_list_force (*bodyp, &stmts);
735       *bodyp = stmts;
736     }
737
738   for (ix = 0; fname_vars[ix].decl; ix++)
739     *fname_vars[ix].decl = NULL_TREE;
740
741   if (stack)
742     {
743       /* We had saved values, restore them.  */
744       tree saved;
745
746       for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
747         {
748           tree decl = TREE_PURPOSE (saved);
749           unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
750
751           *fname_vars[ix].decl = decl;
752         }
753       stack = TREE_CHAIN (stack);
754     }
755   saved_function_name_decls = stack;
756 }
757
758 /* Return the text name of the current function, suitably prettified
759    by PRETTY_P.  Return string must be freed by caller.  */
760
761 const char *
762 fname_as_string (int pretty_p)
763 {
764   const char *name = "top level";
765   char *namep;
766   int vrb = 2, len;
767   cpp_string cstr = { 0, 0 }, strname;
768
769   if (!pretty_p)
770     {
771       name = "";
772       vrb = 0;
773     }
774
775   if (current_function_decl)
776     name = lang_hooks.decl_printable_name (current_function_decl, vrb);
777
778   len = strlen (name) + 3; /* Two for '"'s.  One for NULL.  */
779
780   namep = XNEWVEC (char, len);
781   snprintf (namep, len, "\"%s\"", name);
782   strname.text = (unsigned char *) namep;
783   strname.len = len - 1;
784
785   if (cpp_interpret_string (parse_in, &strname, 1, &cstr, false))
786     {
787       XDELETEVEC (namep);
788       return (const char *) cstr.text;
789     }
790
791   return namep;
792 }
793
794 /* Expand DECL if it declares an entity not handled by the
795    common code.  */
796
797 int
798 c_expand_decl (tree decl)
799 {
800   if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
801     {
802       /* Let the back-end know about this variable.  */
803       if (!anon_aggr_type_p (TREE_TYPE (decl)))
804         emit_local_var (decl);
805       else
806         expand_anon_union_decl (decl, NULL_TREE,
807                                 DECL_ANON_UNION_ELEMS (decl));
808     }
809   else
810     return 0;
811
812   return 1;
813 }
814
815
816 /* Return the VAR_DECL for a const char array naming the current
817    function. If the VAR_DECL has not yet been created, create it
818    now. RID indicates how it should be formatted and IDENTIFIER_NODE
819    ID is its name (unfortunately C and C++ hold the RID values of
820    keywords in different places, so we can't derive RID from ID in
821    this language independent code.  */
822
823 tree
824 fname_decl (unsigned int rid, tree id)
825 {
826   unsigned ix;
827   tree decl = NULL_TREE;
828
829   for (ix = 0; fname_vars[ix].decl; ix++)
830     if (fname_vars[ix].rid == rid)
831       break;
832
833   decl = *fname_vars[ix].decl;
834   if (!decl)
835     {
836       /* If a tree is built here, it would normally have the lineno of
837          the current statement.  Later this tree will be moved to the
838          beginning of the function and this line number will be wrong.
839          To avoid this problem set the lineno to 0 here; that prevents
840          it from appearing in the RTL.  */
841       tree stmts;
842       location_t saved_location = input_location;
843 #ifdef USE_MAPPED_LOCATION
844       input_location = UNKNOWN_LOCATION;
845 #else
846       input_line = 0;
847 #endif
848
849       stmts = push_stmt_list ();
850       decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
851       stmts = pop_stmt_list (stmts);
852       if (!IS_EMPTY_STMT (stmts))
853         saved_function_name_decls
854           = tree_cons (decl, stmts, saved_function_name_decls);
855       *fname_vars[ix].decl = decl;
856       input_location = saved_location;
857     }
858   if (!ix && !current_function_decl)
859     pedwarn ("%qD is not defined outside of function scope", decl);
860
861   return decl;
862 }
863
864 /* Given a STRING_CST, give it a suitable array-of-chars data type.  */
865
866 tree
867 fix_string_type (tree value)
868 {
869   const int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
870   const int wide_flag = TREE_TYPE (value) == wchar_array_type_node;
871   int length = TREE_STRING_LENGTH (value);
872   int nchars;
873   tree e_type, i_type, a_type;
874
875   /* Compute the number of elements, for the array type.  */
876   nchars = wide_flag ? length / wchar_bytes : length;
877
878   /* C89 2.2.4.1, C99 5.2.4.1 (Translation limits).  The analogous
879      limit in C++98 Annex B is very large (65536) and is not normative,
880      so we do not diagnose it (warn_overlength_strings is forced off
881      in c_common_post_options).  */
882   if (warn_overlength_strings)
883     {
884       const int nchars_max = flag_isoc99 ? 4095 : 509;
885       const int relevant_std = flag_isoc99 ? 99 : 90;
886       if (nchars - 1 > nchars_max)
887         /* Translators: The %d after 'ISO C' will be 90 or 99.  Do not
888            separate the %d from the 'C'.  'ISO' should not be
889            translated, but it may be moved after 'C%d' in languages
890            where modifiers follow nouns.  */
891         pedwarn ("string length %qd is greater than the length %qd "
892                  "ISO C%d compilers are required to support",
893                  nchars - 1, nchars_max, relevant_std);
894     }
895
896   /* Create the array type for the string constant.  The ISO C++
897      standard says that a string literal has type `const char[N]' or
898      `const wchar_t[N]'.  We use the same logic when invoked as a C
899      front-end with -Wwrite-strings.
900      ??? We should change the type of an expression depending on the
901      state of a warning flag.  We should just be warning -- see how
902      this is handled in the C++ front-end for the deprecated implicit
903      conversion from string literals to `char*' or `wchar_t*'.
904
905      The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
906      array type being the unqualified version of that type.
907      Therefore, if we are constructing an array of const char, we must
908      construct the matching unqualified array type first.  The C front
909      end does not require this, but it does no harm, so we do it
910      unconditionally.  */
911   e_type = wide_flag ? wchar_type_node : char_type_node;
912   i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
913   a_type = build_array_type (e_type, i_type);
914   if (c_dialect_cxx() || warn_write_strings)
915     a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
916
917   TREE_TYPE (value) = a_type;
918   TREE_CONSTANT (value) = 1;
919   TREE_INVARIANT (value) = 1;
920   TREE_READONLY (value) = 1;
921   TREE_STATIC (value) = 1;
922   return value;
923 }
924 \f
925 /* Print a warning if a constant expression had overflow in folding.
926    Invoke this function on every expression that the language
927    requires to be a constant expression.
928    Note the ANSI C standard says it is erroneous for a
929    constant expression to overflow.  */
930
931 void
932 constant_expression_warning (tree value)
933 {
934   if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
935        || TREE_CODE (value) == FIXED_CST
936        || TREE_CODE (value) == VECTOR_CST
937        || TREE_CODE (value) == COMPLEX_CST)
938       && TREE_OVERFLOW (value)
939       && warn_overflow
940       && pedantic)
941     pedwarn ("overflow in constant expression");
942 }
943
944 /* Print a warning if an expression had overflow in folding and its
945    operands hadn't.
946
947    Invoke this function on every expression that
948    (1) appears in the source code, and
949    (2) is a constant expression that overflowed, and
950    (3) is not already checked by convert_and_check;
951    however, do not invoke this function on operands of explicit casts
952    or when the expression is the result of an operator and any operand
953    already overflowed.  */
954
955 void
956 overflow_warning (tree value)
957 {
958   if (skip_evaluation) return;
959
960   switch (TREE_CODE (value))
961     {
962     case INTEGER_CST:
963       warning (OPT_Woverflow, "integer overflow in expression");
964       break;
965       
966     case REAL_CST:
967       warning (OPT_Woverflow, "floating point overflow in expression");
968       break;
969       
970     case FIXED_CST:
971       warning (OPT_Woverflow, "fixed-point overflow in expression");
972       break;
973
974     case VECTOR_CST:
975       warning (OPT_Woverflow, "vector overflow in expression");
976       break;
977       
978     case COMPLEX_CST:
979       if (TREE_CODE (TREE_REALPART (value)) == INTEGER_CST)
980         warning (OPT_Woverflow, "complex integer overflow in expression");
981       else if (TREE_CODE (TREE_REALPART (value)) == REAL_CST)
982         warning (OPT_Woverflow, "complex floating point overflow in expression");
983       break;
984
985     default:
986       break;
987     }
988 }
989
990
991 /* Warn about use of a logical || / && operator being used in a
992    context where it is likely that the bitwise equivalent was intended
993    by the programmer. CODE is the TREE_CODE of the operator, ARG1
994    and ARG2 the arguments.  */
995
996 void
997 warn_logical_operator (enum tree_code code, tree arg1, tree
998     arg2)
999 {
1000   switch (code)
1001     {
1002       case TRUTH_ANDIF_EXPR:
1003       case TRUTH_ORIF_EXPR:
1004       case TRUTH_OR_EXPR:
1005       case TRUTH_AND_EXPR:
1006         if (!TREE_NO_WARNING (arg1)
1007             && INTEGRAL_TYPE_P (TREE_TYPE (arg1))
1008             && !CONSTANT_CLASS_P (arg1)
1009             && TREE_CODE (arg2) == INTEGER_CST
1010             && !integer_zerop (arg2))
1011           {
1012             warning (OPT_Wlogical_op,
1013                      "logical %<%s%> with non-zero constant "
1014                      "will always evaluate as true",
1015                      ((code == TRUTH_ANDIF_EXPR)
1016                       || (code == TRUTH_AND_EXPR)) ? "&&" : "||");
1017             TREE_NO_WARNING (arg1) = true;
1018           }
1019         break;
1020       default:
1021         break;
1022     }
1023 }
1024
1025
1026 /* Print a warning about casts that might indicate violation
1027    of strict aliasing rules if -Wstrict-aliasing is used and
1028    strict aliasing mode is in effect. OTYPE is the original
1029    TREE_TYPE of EXPR, and TYPE the type we're casting to. */
1030
1031 bool
1032 strict_aliasing_warning (tree otype, tree type, tree expr)
1033 {
1034   if (!(flag_strict_aliasing && POINTER_TYPE_P (type) 
1035         && POINTER_TYPE_P (otype) && !VOID_TYPE_P (TREE_TYPE (type))))
1036     return false;
1037
1038   if ((warn_strict_aliasing > 1) && TREE_CODE (expr) == ADDR_EXPR
1039       && (DECL_P (TREE_OPERAND (expr, 0))
1040           || handled_component_p (TREE_OPERAND (expr, 0))))
1041     {
1042       /* Casting the address of an object to non void pointer. Warn
1043          if the cast breaks type based aliasing.  */
1044       if (!COMPLETE_TYPE_P (TREE_TYPE (type)) && warn_strict_aliasing == 2)
1045         {
1046           warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
1047                    "might break strict-aliasing rules");
1048           return true;
1049         }
1050       else
1051         {
1052           /* warn_strict_aliasing >= 3.   This includes the default (3).  
1053              Only warn if the cast is dereferenced immediately.  */
1054           alias_set_type set1 =
1055             get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
1056           alias_set_type set2 = get_alias_set (TREE_TYPE (type));
1057
1058           if (!alias_sets_conflict_p (set1, set2))
1059             {
1060               warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1061                        "pointer will break strict-aliasing rules");
1062               return true;
1063             }
1064           else if (warn_strict_aliasing == 2
1065                    && !alias_sets_must_conflict_p (set1, set2))
1066             {
1067               warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1068                        "pointer might break strict-aliasing rules");
1069               return true;
1070             }
1071         }
1072     }
1073   else
1074     if ((warn_strict_aliasing == 1) && !VOID_TYPE_P (TREE_TYPE (otype)))
1075       {
1076         /* At this level, warn for any conversions, even if an address is
1077            not taken in the same statement.  This will likely produce many
1078            false positives, but could be useful to pinpoint problems that
1079            are not revealed at higher levels.  */
1080         alias_set_type set1 = get_alias_set (TREE_TYPE (otype));
1081         alias_set_type set2 = get_alias_set (TREE_TYPE (type));
1082         if (!COMPLETE_TYPE_P (type)
1083             || !alias_sets_must_conflict_p (set1, set2))
1084           {
1085             warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1086                      "pointer might break strict-aliasing rules");
1087             return true;
1088           }
1089       }
1090
1091   return false;
1092 }
1093
1094 /* Print a warning about if (); or if () .. else; constructs
1095    via the special empty statement node that we create.  INNER_THEN
1096    and INNER_ELSE are the statement lists of the if and the else
1097    block.  */
1098
1099 void
1100 empty_if_body_warning (tree inner_then, tree inner_else)
1101 {
1102   if (TREE_CODE (inner_then) == STATEMENT_LIST
1103       && STATEMENT_LIST_TAIL (inner_then))
1104     inner_then = STATEMENT_LIST_TAIL (inner_then)->stmt;
1105
1106   if (inner_else && TREE_CODE (inner_else) == STATEMENT_LIST
1107       && STATEMENT_LIST_TAIL (inner_else))
1108     inner_else = STATEMENT_LIST_TAIL (inner_else)->stmt;
1109
1110   if (IS_EMPTY_STMT (inner_then) && !inner_else)
1111     warning (OPT_Wempty_body, "%Hsuggest braces around empty body "
1112              "in an %<if%> statement", EXPR_LOCUS (inner_then));
1113
1114   else if (inner_else && IS_EMPTY_STMT (inner_else))
1115     warning (OPT_Wempty_body, "%Hsuggest braces around empty body "
1116              "in an %<else%> statement", EXPR_LOCUS (inner_else));
1117 }
1118
1119 /* Warn for unlikely, improbable, or stupid DECL declarations
1120    of `main'.  */
1121
1122 void
1123 check_main_parameter_types (tree decl)
1124 {
1125   tree args;
1126   int argct = 0;
1127
1128   for (args = TYPE_ARG_TYPES (TREE_TYPE (decl)); args;
1129       args = TREE_CHAIN (args))
1130    {
1131      tree type = args ? TREE_VALUE (args) : 0;
1132
1133      if (type == void_type_node || type == error_mark_node )
1134        break;
1135
1136      ++argct;
1137      switch (argct)
1138        {
1139        case 1:
1140          if (TYPE_MAIN_VARIANT (type) != integer_type_node)
1141            pedwarn ("first argument of %q+D should be %<int%>", decl);
1142          break;
1143
1144        case 2:
1145          if (TREE_CODE (type) != POINTER_TYPE
1146              || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1147              || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1148                  != char_type_node))
1149            pedwarn ("second argument of %q+D should be %<char **%>",
1150                     decl);
1151          break;
1152
1153        case 3:
1154          if (TREE_CODE (type) != POINTER_TYPE
1155              || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1156              || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1157                  != char_type_node))
1158            pedwarn ("third argument of %q+D should probably be "
1159                     "%<char **%>", decl);
1160          break;
1161        }
1162    }
1163
1164   /* It is intentional that this message does not mention the third
1165     argument because it's only mentioned in an appendix of the
1166     standard.  */
1167   if (argct > 0 && (argct < 2 || argct > 3))
1168    pedwarn ("%q+D takes only zero or two arguments", decl);
1169 }
1170
1171 /* True if vector types T1 and T2 can be converted to each other
1172    without an explicit cast.  If EMIT_LAX_NOTE is true, and T1 and T2
1173    can only be converted with -flax-vector-conversions yet that is not
1174    in effect, emit a note telling the user about that option if such
1175    a note has not previously been emitted.  */
1176 bool
1177 vector_types_convertible_p (const_tree t1, const_tree t2, bool emit_lax_note)
1178 {
1179   static bool emitted_lax_note = false;
1180   bool convertible_lax;
1181
1182   if ((targetm.vector_opaque_p (t1) || targetm.vector_opaque_p (t2))
1183       && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1184     return true;
1185
1186   convertible_lax =
1187     (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
1188      && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
1189          TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
1190      && (INTEGRAL_TYPE_P (TREE_TYPE (t1))
1191          == INTEGRAL_TYPE_P (TREE_TYPE (t2))));
1192
1193   if (!convertible_lax || flag_lax_vector_conversions)
1194     return convertible_lax;
1195
1196   if (TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
1197       && comptypes (TREE_TYPE (t1), TREE_TYPE (t2)))
1198     return true;
1199
1200   if (emit_lax_note && !emitted_lax_note)
1201     {
1202       emitted_lax_note = true;
1203       inform ("use -flax-vector-conversions to permit "
1204               "conversions between vectors with differing "
1205               "element types or numbers of subparts");
1206     }
1207
1208   return false;
1209 }
1210
1211 /* Warns if the conversion of EXPR to TYPE may alter a value.
1212    This is a helper function for warnings_for_convert_and_check.  */
1213
1214 static void
1215 conversion_warning (tree type, tree expr)
1216 {
1217   bool give_warning = false;
1218
1219   unsigned int formal_prec = TYPE_PRECISION (type);
1220
1221   if (!warn_conversion && !warn_sign_conversion)
1222     return;
1223
1224   if (TREE_CODE (expr) == REAL_CST || TREE_CODE (expr) == INTEGER_CST)
1225     {
1226       /* Warn for real constant that is not an exact integer converted
1227          to integer type.  */
1228       if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1229           && TREE_CODE (type) == INTEGER_TYPE)
1230         {
1231           if (!real_isinteger (TREE_REAL_CST_PTR (expr), TYPE_MODE (TREE_TYPE (expr))))
1232             give_warning = true;
1233         }
1234       /* Warn for an integer constant that does not fit into integer type.  */
1235       else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1236                && TREE_CODE (type) == INTEGER_TYPE
1237                && !int_fits_type_p (expr, type))
1238         {
1239           if (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr)))
1240             warning (OPT_Wsign_conversion,
1241                      "negative integer implicitly converted to unsigned type");
1242           else if (!TYPE_UNSIGNED (type) && TYPE_UNSIGNED (TREE_TYPE (expr)))
1243             warning (OPT_Wsign_conversion,
1244                      "conversion of unsigned constant value to negative integer");
1245           else
1246             give_warning = true;
1247         }
1248       else if (TREE_CODE (type) == REAL_TYPE)
1249         {
1250           /* Warn for an integer constant that does not fit into real type.  */
1251           if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE)
1252             {
1253               REAL_VALUE_TYPE a = real_value_from_int_cst (0, expr);
1254               if (!exact_real_truncate (TYPE_MODE (type), &a))
1255                 give_warning = true;
1256             }
1257           /* Warn for a real constant that does not fit into a smaller
1258              real type.  */
1259           else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1260                    && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1261             {
1262               REAL_VALUE_TYPE a = TREE_REAL_CST (expr);
1263               if (!exact_real_truncate (TYPE_MODE (type), &a))
1264                 give_warning = true;
1265             }
1266         }
1267
1268       if (give_warning)
1269         warning (OPT_Wconversion,
1270                  "conversion to %qT alters %qT constant value",
1271                  type, TREE_TYPE (expr));
1272     }
1273   else /* 'expr' is not a constant.  */
1274     {
1275       /* Warn for real types converted to integer types.  */
1276       if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1277           && TREE_CODE (type) == INTEGER_TYPE)
1278         give_warning = true;
1279
1280       else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1281                && TREE_CODE (type) == INTEGER_TYPE)
1282         {
1283           /* Warn for integer types converted to smaller integer types.  */
1284           if (formal_prec < TYPE_PRECISION (TREE_TYPE (expr))) 
1285             give_warning = true;
1286
1287           /* When they are the same width but different signedness,
1288              then the value may change.  */
1289           else if ((formal_prec == TYPE_PRECISION (TREE_TYPE (expr))
1290                     && TYPE_UNSIGNED (TREE_TYPE (expr)) != TYPE_UNSIGNED (type))
1291                    /* Even when converted to a bigger type, if the type is
1292                       unsigned but expr is signed, then negative values
1293                       will be changed.  */
1294                    || (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr))))
1295             warning (OPT_Wsign_conversion,
1296                      "conversion to %qT from %qT may change the sign of the result",
1297                      type, TREE_TYPE (expr));
1298         }
1299
1300       /* Warn for integer types converted to real types if and only if
1301          all the range of values of the integer type cannot be
1302          represented by the real type.  */
1303       else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1304                && TREE_CODE (type) == REAL_TYPE)
1305         {
1306           tree type_low_bound = TYPE_MIN_VALUE (TREE_TYPE (expr));
1307           tree type_high_bound = TYPE_MAX_VALUE (TREE_TYPE (expr));
1308           REAL_VALUE_TYPE real_low_bound = real_value_from_int_cst (0, type_low_bound);
1309           REAL_VALUE_TYPE real_high_bound = real_value_from_int_cst (0, type_high_bound);
1310
1311           if (!exact_real_truncate (TYPE_MODE (type), &real_low_bound)
1312               || !exact_real_truncate (TYPE_MODE (type), &real_high_bound))
1313             give_warning = true;
1314         }
1315
1316       /* Warn for real types converted to smaller real types.  */
1317       else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1318                && TREE_CODE (type) == REAL_TYPE
1319                && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1320         give_warning = true;
1321
1322
1323       if (give_warning)
1324         warning (OPT_Wconversion,
1325                  "conversion to %qT from %qT may alter its value",
1326                  type, TREE_TYPE (expr));
1327     }
1328 }
1329
1330 /* Produce warnings after a conversion. RESULT is the result of
1331    converting EXPR to TYPE.  This is a helper function for
1332    convert_and_check and cp_convert_and_check.  */
1333
1334 void
1335 warnings_for_convert_and_check (tree type, tree expr, tree result)
1336 {
1337   if (TREE_CODE (expr) == INTEGER_CST
1338       && (TREE_CODE (type) == INTEGER_TYPE
1339           || TREE_CODE (type) == ENUMERAL_TYPE)
1340       && !int_fits_type_p (expr, type))
1341     {
1342       /* Do not diagnose overflow in a constant expression merely
1343          because a conversion overflowed.  */
1344       if (TREE_OVERFLOW (result))
1345         TREE_OVERFLOW (result) = TREE_OVERFLOW (expr);
1346
1347       if (TYPE_UNSIGNED (type))
1348         {
1349           /* This detects cases like converting -129 or 256 to
1350              unsigned char.  */
1351           if (!int_fits_type_p (expr, c_common_signed_type (type)))
1352             warning (OPT_Woverflow,
1353                      "large integer implicitly truncated to unsigned type");
1354           else
1355             conversion_warning (type, expr);
1356         }
1357       else if (!int_fits_type_p (expr, c_common_unsigned_type (type))) 
1358         warning (OPT_Woverflow,
1359                  "overflow in implicit constant conversion");
1360       /* No warning for converting 0x80000000 to int.  */
1361       else if (pedantic
1362                && (TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE
1363                    || TYPE_PRECISION (TREE_TYPE (expr))
1364                    != TYPE_PRECISION (type)))
1365         warning (OPT_Woverflow,
1366                  "overflow in implicit constant conversion");
1367
1368       else
1369         conversion_warning (type, expr);
1370     }
1371   else if ((TREE_CODE (result) == INTEGER_CST
1372             || TREE_CODE (result) == FIXED_CST) && TREE_OVERFLOW (result))
1373     warning (OPT_Woverflow,
1374              "overflow in implicit constant conversion");
1375   else
1376     conversion_warning (type, expr);
1377 }
1378
1379
1380 /* Convert EXPR to TYPE, warning about conversion problems with constants.
1381    Invoke this function on every expression that is converted implicitly,
1382    i.e. because of language rules and not because of an explicit cast.  */
1383
1384 tree
1385 convert_and_check (tree type, tree expr)
1386 {
1387   tree result;
1388
1389   if (TREE_TYPE (expr) == type)
1390     return expr;
1391   
1392   result = convert (type, expr);
1393
1394   if (!skip_evaluation && !TREE_OVERFLOW_P (expr) && result != error_mark_node)
1395     warnings_for_convert_and_check (type, expr, result);
1396
1397   return result;
1398 }
1399 \f
1400 /* A node in a list that describes references to variables (EXPR), which are
1401    either read accesses if WRITER is zero, or write accesses, in which case
1402    WRITER is the parent of EXPR.  */
1403 struct tlist
1404 {
1405   struct tlist *next;
1406   tree expr, writer;
1407 };
1408
1409 /* Used to implement a cache the results of a call to verify_tree.  We only
1410    use this for SAVE_EXPRs.  */
1411 struct tlist_cache
1412 {
1413   struct tlist_cache *next;
1414   struct tlist *cache_before_sp;
1415   struct tlist *cache_after_sp;
1416   tree expr;
1417 };
1418
1419 /* Obstack to use when allocating tlist structures, and corresponding
1420    firstobj.  */
1421 static struct obstack tlist_obstack;
1422 static char *tlist_firstobj = 0;
1423
1424 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
1425    warnings.  */
1426 static struct tlist *warned_ids;
1427 /* SAVE_EXPRs need special treatment.  We process them only once and then
1428    cache the results.  */
1429 static struct tlist_cache *save_expr_cache;
1430
1431 static void add_tlist (struct tlist **, struct tlist *, tree, int);
1432 static void merge_tlist (struct tlist **, struct tlist *, int);
1433 static void verify_tree (tree, struct tlist **, struct tlist **, tree);
1434 static int warning_candidate_p (tree);
1435 static void warn_for_collisions (struct tlist *);
1436 static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
1437 static struct tlist *new_tlist (struct tlist *, tree, tree);
1438
1439 /* Create a new struct tlist and fill in its fields.  */
1440 static struct tlist *
1441 new_tlist (struct tlist *next, tree t, tree writer)
1442 {
1443   struct tlist *l;
1444   l = XOBNEW (&tlist_obstack, struct tlist);
1445   l->next = next;
1446   l->expr = t;
1447   l->writer = writer;
1448   return l;
1449 }
1450
1451 /* Add duplicates of the nodes found in ADD to the list *TO.  If EXCLUDE_WRITER
1452    is nonnull, we ignore any node we find which has a writer equal to it.  */
1453
1454 static void
1455 add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
1456 {
1457   while (add)
1458     {
1459       struct tlist *next = add->next;
1460       if (!copy)
1461         add->next = *to;
1462       if (!exclude_writer || add->writer != exclude_writer)
1463         *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
1464       add = next;
1465     }
1466 }
1467
1468 /* Merge the nodes of ADD into TO.  This merging process is done so that for
1469    each variable that already exists in TO, no new node is added; however if
1470    there is a write access recorded in ADD, and an occurrence on TO is only
1471    a read access, then the occurrence in TO will be modified to record the
1472    write.  */
1473
1474 static void
1475 merge_tlist (struct tlist **to, struct tlist *add, int copy)
1476 {
1477   struct tlist **end = to;
1478
1479   while (*end)
1480     end = &(*end)->next;
1481
1482   while (add)
1483     {
1484       int found = 0;
1485       struct tlist *tmp2;
1486       struct tlist *next = add->next;
1487
1488       for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
1489         if (tmp2->expr == add->expr)
1490           {
1491             found = 1;
1492             if (!tmp2->writer)
1493               tmp2->writer = add->writer;
1494           }
1495       if (!found)
1496         {
1497           *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
1498           end = &(*end)->next;
1499           *end = 0;
1500         }
1501       add = next;
1502     }
1503 }
1504
1505 /* WRITTEN is a variable, WRITER is its parent.  Warn if any of the variable
1506    references in list LIST conflict with it, excluding reads if ONLY writers
1507    is nonzero.  */
1508
1509 static void
1510 warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
1511                        int only_writes)
1512 {
1513   struct tlist *tmp;
1514
1515   /* Avoid duplicate warnings.  */
1516   for (tmp = warned_ids; tmp; tmp = tmp->next)
1517     if (tmp->expr == written)
1518       return;
1519
1520   while (list)
1521     {
1522       if (list->expr == written
1523           && list->writer != writer
1524           && (!only_writes || list->writer)
1525           && DECL_NAME (list->expr))
1526         {
1527           warned_ids = new_tlist (warned_ids, written, NULL_TREE);
1528           warning (0, "operation on %qE may be undefined", list->expr);
1529         }
1530       list = list->next;
1531     }
1532 }
1533
1534 /* Given a list LIST of references to variables, find whether any of these
1535    can cause conflicts due to missing sequence points.  */
1536
1537 static void
1538 warn_for_collisions (struct tlist *list)
1539 {
1540   struct tlist *tmp;
1541
1542   for (tmp = list; tmp; tmp = tmp->next)
1543     {
1544       if (tmp->writer)
1545         warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
1546     }
1547 }
1548
1549 /* Return nonzero if X is a tree that can be verified by the sequence point
1550    warnings.  */
1551 static int
1552 warning_candidate_p (tree x)
1553 {
1554   return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
1555 }
1556
1557 /* Walk the tree X, and record accesses to variables.  If X is written by the
1558    parent tree, WRITER is the parent.
1559    We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP.  If this
1560    expression or its only operand forces a sequence point, then everything up
1561    to the sequence point is stored in PBEFORE_SP.  Everything else gets stored
1562    in PNO_SP.
1563    Once we return, we will have emitted warnings if any subexpression before
1564    such a sequence point could be undefined.  On a higher level, however, the
1565    sequence point may not be relevant, and we'll merge the two lists.
1566
1567    Example: (b++, a) + b;
1568    The call that processes the COMPOUND_EXPR will store the increment of B
1569    in PBEFORE_SP, and the use of A in PNO_SP.  The higher-level call that
1570    processes the PLUS_EXPR will need to merge the two lists so that
1571    eventually, all accesses end up on the same list (and we'll warn about the
1572    unordered subexpressions b++ and b.
1573
1574    A note on merging.  If we modify the former example so that our expression
1575    becomes
1576      (b++, b) + a
1577    care must be taken not simply to add all three expressions into the final
1578    PNO_SP list.  The function merge_tlist takes care of that by merging the
1579    before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1580    way, so that no more than one access to B is recorded.  */
1581
1582 static void
1583 verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
1584              tree writer)
1585 {
1586   struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1587   enum tree_code code;
1588   enum tree_code_class cl;
1589
1590   /* X may be NULL if it is the operand of an empty statement expression
1591      ({ }).  */
1592   if (x == NULL)
1593     return;
1594
1595  restart:
1596   code = TREE_CODE (x);
1597   cl = TREE_CODE_CLASS (code);
1598
1599   if (warning_candidate_p (x))
1600     {
1601       *pno_sp = new_tlist (*pno_sp, x, writer);
1602       return;
1603     }
1604
1605   switch (code)
1606     {
1607     case CONSTRUCTOR:
1608       return;
1609
1610     case COMPOUND_EXPR:
1611     case TRUTH_ANDIF_EXPR:
1612     case TRUTH_ORIF_EXPR:
1613       tmp_before = tmp_nosp = tmp_list3 = 0;
1614       verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1615       warn_for_collisions (tmp_nosp);
1616       merge_tlist (pbefore_sp, tmp_before, 0);
1617       merge_tlist (pbefore_sp, tmp_nosp, 0);
1618       verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
1619       merge_tlist (pbefore_sp, tmp_list3, 0);
1620       return;
1621
1622     case COND_EXPR:
1623       tmp_before = tmp_list2 = 0;
1624       verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
1625       warn_for_collisions (tmp_list2);
1626       merge_tlist (pbefore_sp, tmp_before, 0);
1627       merge_tlist (pbefore_sp, tmp_list2, 1);
1628
1629       tmp_list3 = tmp_nosp = 0;
1630       verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
1631       warn_for_collisions (tmp_nosp);
1632       merge_tlist (pbefore_sp, tmp_list3, 0);
1633
1634       tmp_list3 = tmp_list2 = 0;
1635       verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
1636       warn_for_collisions (tmp_list2);
1637       merge_tlist (pbefore_sp, tmp_list3, 0);
1638       /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1639          two first, to avoid warning for (a ? b++ : b++).  */
1640       merge_tlist (&tmp_nosp, tmp_list2, 0);
1641       add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1642       return;
1643
1644     case PREDECREMENT_EXPR:
1645     case PREINCREMENT_EXPR:
1646     case POSTDECREMENT_EXPR:
1647     case POSTINCREMENT_EXPR:
1648       verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
1649       return;
1650
1651     case MODIFY_EXPR:
1652       tmp_before = tmp_nosp = tmp_list3 = 0;
1653       verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
1654       verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
1655       /* Expressions inside the LHS are not ordered wrt. the sequence points
1656          in the RHS.  Example:
1657            *a = (a++, 2)
1658          Despite the fact that the modification of "a" is in the before_sp
1659          list (tmp_before), it conflicts with the use of "a" in the LHS.
1660          We can handle this by adding the contents of tmp_list3
1661          to those of tmp_before, and redoing the collision warnings for that
1662          list.  */
1663       add_tlist (&tmp_before, tmp_list3, x, 1);
1664       warn_for_collisions (tmp_before);
1665       /* Exclude the LHS itself here; we first have to merge it into the
1666          tmp_nosp list.  This is done to avoid warning for "a = a"; if we
1667          didn't exclude the LHS, we'd get it twice, once as a read and once
1668          as a write.  */
1669       add_tlist (pno_sp, tmp_list3, x, 0);
1670       warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
1671
1672       merge_tlist (pbefore_sp, tmp_before, 0);
1673       if (warning_candidate_p (TREE_OPERAND (x, 0)))
1674         merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
1675       add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
1676       return;
1677
1678     case CALL_EXPR:
1679       /* We need to warn about conflicts among arguments and conflicts between
1680          args and the function address.  Side effects of the function address,
1681          however, are not ordered by the sequence point of the call.  */
1682       {
1683         call_expr_arg_iterator iter;
1684         tree arg;
1685         tmp_before = tmp_nosp = 0; 
1686         verify_tree (CALL_EXPR_FN (x), &tmp_before, &tmp_nosp, NULL_TREE);
1687         FOR_EACH_CALL_EXPR_ARG (arg, iter, x)
1688           {
1689             tmp_list2 = tmp_list3 = 0;
1690             verify_tree (arg, &tmp_list2, &tmp_list3, NULL_TREE);
1691             merge_tlist (&tmp_list3, tmp_list2, 0);
1692             add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
1693           }
1694         add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
1695         warn_for_collisions (tmp_before);
1696         add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
1697         return;
1698       }
1699
1700     case TREE_LIST:
1701       /* Scan all the list, e.g. indices of multi dimensional array.  */
1702       while (x)
1703         {
1704           tmp_before = tmp_nosp = 0;
1705           verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
1706           merge_tlist (&tmp_nosp, tmp_before, 0);
1707           add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1708           x = TREE_CHAIN (x);
1709         }
1710       return;
1711
1712     case SAVE_EXPR:
1713       {
1714         struct tlist_cache *t;
1715         for (t = save_expr_cache; t; t = t->next)
1716           if (t->expr == x)
1717             break;
1718
1719         if (!t)
1720           {
1721             t = XOBNEW (&tlist_obstack, struct tlist_cache);
1722             t->next = save_expr_cache;
1723             t->expr = x;
1724             save_expr_cache = t;
1725
1726             tmp_before = tmp_nosp = 0;
1727             verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1728             warn_for_collisions (tmp_nosp);
1729
1730             tmp_list3 = 0;
1731             while (tmp_nosp)
1732               {
1733                 struct tlist *t = tmp_nosp;
1734                 tmp_nosp = t->next;
1735                 merge_tlist (&tmp_list3, t, 0);
1736               }
1737             t->cache_before_sp = tmp_before;
1738             t->cache_after_sp = tmp_list3;
1739           }
1740         merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1741         add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1742         return;
1743       }
1744
1745     default:
1746       /* For other expressions, simply recurse on their operands.
1747          Manual tail recursion for unary expressions.
1748          Other non-expressions need not be processed.  */
1749       if (cl == tcc_unary)
1750         {
1751           x = TREE_OPERAND (x, 0);
1752           writer = 0;
1753           goto restart;
1754         }
1755       else if (IS_EXPR_CODE_CLASS (cl))
1756         {
1757           int lp;
1758           int max = TREE_OPERAND_LENGTH (x);
1759           for (lp = 0; lp < max; lp++)
1760             {
1761               tmp_before = tmp_nosp = 0;
1762               verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
1763               merge_tlist (&tmp_nosp, tmp_before, 0);
1764               add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1765             }
1766         }
1767       return;
1768     }
1769 }
1770
1771 /* Try to warn for undefined behavior in EXPR due to missing sequence
1772    points.  */
1773
1774 void
1775 verify_sequence_points (tree expr)
1776 {
1777   struct tlist *before_sp = 0, *after_sp = 0;
1778
1779   warned_ids = 0;
1780   save_expr_cache = 0;
1781   if (tlist_firstobj == 0)
1782     {
1783       gcc_obstack_init (&tlist_obstack);
1784       tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
1785     }
1786
1787   verify_tree (expr, &before_sp, &after_sp, 0);
1788   warn_for_collisions (after_sp);
1789   obstack_free (&tlist_obstack, tlist_firstobj);
1790 }
1791 \f
1792 /* Validate the expression after `case' and apply default promotions.  */
1793
1794 static tree
1795 check_case_value (tree value)
1796 {
1797   if (value == NULL_TREE)
1798     return value;
1799
1800   /* ??? Can we ever get nops here for a valid case value?  We
1801      shouldn't for C.  */
1802   STRIP_TYPE_NOPS (value);
1803   /* In C++, the following is allowed:
1804
1805        const int i = 3;
1806        switch (...) { case i: ... }
1807
1808      So, we try to reduce the VALUE to a constant that way.  */
1809   if (c_dialect_cxx ())
1810     {
1811       value = decl_constant_value (value);
1812       STRIP_TYPE_NOPS (value);
1813       value = fold (value);
1814     }
1815
1816   if (TREE_CODE (value) == INTEGER_CST)
1817     /* Promote char or short to int.  */
1818     value = perform_integral_promotions (value);
1819   else if (value != error_mark_node)
1820     {
1821       error ("case label does not reduce to an integer constant");
1822       value = error_mark_node;
1823     }
1824
1825   constant_expression_warning (value);
1826
1827   return value;
1828 }
1829 \f
1830 /* See if the case values LOW and HIGH are in the range of the original
1831    type (i.e. before the default conversion to int) of the switch testing
1832    expression.
1833    TYPE is the promoted type of the testing expression, and ORIG_TYPE is
1834    the type before promoting it.  CASE_LOW_P is a pointer to the lower
1835    bound of the case label, and CASE_HIGH_P is the upper bound or NULL
1836    if the case is not a case range.
1837    The caller has to make sure that we are not called with NULL for
1838    CASE_LOW_P (i.e. the default case).
1839    Returns true if the case label is in range of ORIG_TYPE (saturated or
1840    untouched) or false if the label is out of range.  */
1841
1842 static bool
1843 check_case_bounds (tree type, tree orig_type,
1844                    tree *case_low_p, tree *case_high_p)
1845 {
1846   tree min_value, max_value;
1847   tree case_low = *case_low_p;
1848   tree case_high = case_high_p ? *case_high_p : case_low;
1849
1850   /* If there was a problem with the original type, do nothing.  */
1851   if (orig_type == error_mark_node)
1852     return true;
1853
1854   min_value = TYPE_MIN_VALUE (orig_type);
1855   max_value = TYPE_MAX_VALUE (orig_type);
1856
1857   /* Case label is less than minimum for type.  */
1858   if (tree_int_cst_compare (case_low, min_value) < 0
1859       && tree_int_cst_compare (case_high, min_value) < 0)
1860     {
1861       warning (0, "case label value is less than minimum value for type");
1862       return false;
1863     }
1864
1865   /* Case value is greater than maximum for type.  */
1866   if (tree_int_cst_compare (case_low, max_value) > 0
1867       && tree_int_cst_compare (case_high, max_value) > 0)
1868     {
1869       warning (0, "case label value exceeds maximum value for type");
1870       return false;
1871     }
1872
1873   /* Saturate lower case label value to minimum.  */
1874   if (tree_int_cst_compare (case_high, min_value) >= 0
1875       && tree_int_cst_compare (case_low, min_value) < 0)
1876     {
1877       warning (0, "lower value in case label range"
1878                " less than minimum value for type");
1879       case_low = min_value;
1880     }
1881
1882   /* Saturate upper case label value to maximum.  */
1883   if (tree_int_cst_compare (case_low, max_value) <= 0
1884       && tree_int_cst_compare (case_high, max_value) > 0)
1885     {
1886       warning (0, "upper value in case label range"
1887                " exceeds maximum value for type");
1888       case_high = max_value;
1889     }
1890
1891   if (*case_low_p != case_low)
1892     *case_low_p = convert (type, case_low);
1893   if (case_high_p && *case_high_p != case_high)
1894     *case_high_p = convert (type, case_high);
1895
1896   return true;
1897 }
1898 \f
1899 /* Return an integer type with BITS bits of precision,
1900    that is unsigned if UNSIGNEDP is nonzero, otherwise signed.  */
1901
1902 tree
1903 c_common_type_for_size (unsigned int bits, int unsignedp)
1904 {
1905   if (bits == TYPE_PRECISION (integer_type_node))
1906     return unsignedp ? unsigned_type_node : integer_type_node;
1907
1908   if (bits == TYPE_PRECISION (signed_char_type_node))
1909     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1910
1911   if (bits == TYPE_PRECISION (short_integer_type_node))
1912     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1913
1914   if (bits == TYPE_PRECISION (long_integer_type_node))
1915     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1916
1917   if (bits == TYPE_PRECISION (long_long_integer_type_node))
1918     return (unsignedp ? long_long_unsigned_type_node
1919             : long_long_integer_type_node);
1920
1921   if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
1922     return (unsignedp ? widest_unsigned_literal_type_node
1923             : widest_integer_literal_type_node);
1924
1925   if (bits <= TYPE_PRECISION (intQI_type_node))
1926     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1927
1928   if (bits <= TYPE_PRECISION (intHI_type_node))
1929     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1930
1931   if (bits <= TYPE_PRECISION (intSI_type_node))
1932     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1933
1934   if (bits <= TYPE_PRECISION (intDI_type_node))
1935     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1936
1937   return 0;
1938 }
1939
1940 /* Return a fixed-point type that has at least IBIT ibits and FBIT fbits
1941    that is unsigned if UNSIGNEDP is nonzero, otherwise signed;
1942    and saturating if SATP is nonzero, otherwise not saturating.  */
1943
1944 tree
1945 c_common_fixed_point_type_for_size (unsigned int ibit, unsigned int fbit,
1946                                     int unsignedp, int satp)
1947 {
1948   enum machine_mode mode;
1949   if (ibit == 0)
1950     mode = unsignedp ? UQQmode : QQmode;
1951   else
1952     mode = unsignedp ? UHAmode : HAmode;
1953
1954   for (; mode != VOIDmode; mode = GET_MODE_WIDER_MODE (mode))
1955     if (GET_MODE_IBIT (mode) >= ibit && GET_MODE_FBIT (mode) >= fbit)
1956       break;
1957
1958   if (mode == VOIDmode || !targetm.scalar_mode_supported_p (mode))
1959     {
1960       sorry ("GCC cannot support operators with integer types and "
1961              "fixed-point types that have too many integral and "
1962              "fractional bits together");
1963       return 0;
1964     }
1965
1966   return c_common_type_for_mode (mode, satp);
1967 }
1968
1969 /* Used for communication between c_common_type_for_mode and
1970    c_register_builtin_type.  */
1971 static GTY(()) tree registered_builtin_types;
1972
1973 /* Return a data type that has machine mode MODE.
1974    If the mode is an integer,
1975    then UNSIGNEDP selects between signed and unsigned types.
1976    If the mode is a fixed-point mode,
1977    then UNSIGNEDP selects between saturating and nonsaturating types.  */
1978
1979 tree
1980 c_common_type_for_mode (enum machine_mode mode, int unsignedp)
1981 {
1982   tree t;
1983
1984   if (mode == TYPE_MODE (integer_type_node))
1985     return unsignedp ? unsigned_type_node : integer_type_node;
1986
1987   if (mode == TYPE_MODE (signed_char_type_node))
1988     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1989
1990   if (mode == TYPE_MODE (short_integer_type_node))
1991     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1992
1993   if (mode == TYPE_MODE (long_integer_type_node))
1994     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1995
1996   if (mode == TYPE_MODE (long_long_integer_type_node))
1997     return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
1998
1999   if (mode == TYPE_MODE (widest_integer_literal_type_node))
2000     return unsignedp ? widest_unsigned_literal_type_node
2001                      : widest_integer_literal_type_node;
2002
2003   if (mode == QImode)
2004     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2005
2006   if (mode == HImode)
2007     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2008
2009   if (mode == SImode)
2010     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2011
2012   if (mode == DImode)
2013     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2014
2015 #if HOST_BITS_PER_WIDE_INT >= 64
2016   if (mode == TYPE_MODE (intTI_type_node))
2017     return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2018 #endif
2019
2020   if (mode == TYPE_MODE (float_type_node))
2021     return float_type_node;
2022
2023   if (mode == TYPE_MODE (double_type_node))
2024     return double_type_node;
2025
2026   if (mode == TYPE_MODE (long_double_type_node))
2027     return long_double_type_node;
2028
2029   if (mode == TYPE_MODE (void_type_node))
2030     return void_type_node;
2031
2032   if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
2033     return (unsignedp
2034             ? make_unsigned_type (GET_MODE_PRECISION (mode))
2035             : make_signed_type (GET_MODE_PRECISION (mode)));
2036
2037   if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
2038     return (unsignedp
2039             ? make_unsigned_type (GET_MODE_PRECISION (mode))
2040             : make_signed_type (GET_MODE_PRECISION (mode)));
2041
2042   if (COMPLEX_MODE_P (mode))
2043     {
2044       enum machine_mode inner_mode;
2045       tree inner_type;
2046
2047       if (mode == TYPE_MODE (complex_float_type_node))
2048         return complex_float_type_node;
2049       if (mode == TYPE_MODE (complex_double_type_node))
2050         return complex_double_type_node;
2051       if (mode == TYPE_MODE (complex_long_double_type_node))
2052         return complex_long_double_type_node;
2053
2054       if (mode == TYPE_MODE (complex_integer_type_node) && !unsignedp)
2055         return complex_integer_type_node;
2056
2057       inner_mode = GET_MODE_INNER (mode);
2058       inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2059       if (inner_type != NULL_TREE)
2060         return build_complex_type (inner_type);
2061     }
2062   else if (VECTOR_MODE_P (mode))
2063     {
2064       enum machine_mode inner_mode = GET_MODE_INNER (mode);
2065       tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2066       if (inner_type != NULL_TREE)
2067         return build_vector_type_for_mode (inner_type, mode);
2068     }
2069
2070   if (mode == TYPE_MODE (dfloat32_type_node))
2071     return dfloat32_type_node;
2072   if (mode == TYPE_MODE (dfloat64_type_node))
2073     return dfloat64_type_node;
2074   if (mode == TYPE_MODE (dfloat128_type_node))
2075     return dfloat128_type_node;
2076
2077   if (ALL_SCALAR_FIXED_POINT_MODE_P (mode))
2078     {
2079       if (mode == TYPE_MODE (short_fract_type_node))
2080         return unsignedp ? sat_short_fract_type_node : short_fract_type_node;
2081       if (mode == TYPE_MODE (fract_type_node))
2082         return unsignedp ? sat_fract_type_node : fract_type_node;
2083       if (mode == TYPE_MODE (long_fract_type_node))
2084         return unsignedp ? sat_long_fract_type_node : long_fract_type_node;
2085       if (mode == TYPE_MODE (long_long_fract_type_node))
2086         return unsignedp ? sat_long_long_fract_type_node
2087                          : long_long_fract_type_node;
2088
2089       if (mode == TYPE_MODE (unsigned_short_fract_type_node))
2090         return unsignedp ? sat_unsigned_short_fract_type_node
2091                          : unsigned_short_fract_type_node;
2092       if (mode == TYPE_MODE (unsigned_fract_type_node))
2093         return unsignedp ? sat_unsigned_fract_type_node
2094                          : unsigned_fract_type_node;
2095       if (mode == TYPE_MODE (unsigned_long_fract_type_node))
2096         return unsignedp ? sat_unsigned_long_fract_type_node
2097                          : unsigned_long_fract_type_node;
2098       if (mode == TYPE_MODE (unsigned_long_long_fract_type_node))
2099         return unsignedp ? sat_unsigned_long_long_fract_type_node
2100                          : unsigned_long_long_fract_type_node;
2101
2102       if (mode == TYPE_MODE (short_accum_type_node))
2103         return unsignedp ? sat_short_accum_type_node : short_accum_type_node;
2104       if (mode == TYPE_MODE (accum_type_node))
2105         return unsignedp ? sat_accum_type_node : accum_type_node;
2106       if (mode == TYPE_MODE (long_accum_type_node))
2107         return unsignedp ? sat_long_accum_type_node : long_accum_type_node;
2108       if (mode == TYPE_MODE (long_long_accum_type_node))
2109         return unsignedp ? sat_long_long_accum_type_node
2110                          : long_long_accum_type_node;
2111
2112       if (mode == TYPE_MODE (unsigned_short_accum_type_node))
2113         return unsignedp ? sat_unsigned_short_accum_type_node
2114                          : unsigned_short_accum_type_node;
2115       if (mode == TYPE_MODE (unsigned_accum_type_node))
2116         return unsignedp ? sat_unsigned_accum_type_node
2117                          : unsigned_accum_type_node;
2118       if (mode == TYPE_MODE (unsigned_long_accum_type_node))
2119         return unsignedp ? sat_unsigned_long_accum_type_node
2120                          : unsigned_long_accum_type_node;
2121       if (mode == TYPE_MODE (unsigned_long_long_accum_type_node))
2122         return unsignedp ? sat_unsigned_long_long_accum_type_node
2123                          : unsigned_long_long_accum_type_node;
2124
2125       if (mode == QQmode)
2126         return unsignedp ? sat_qq_type_node : qq_type_node;
2127       if (mode == HQmode)
2128         return unsignedp ? sat_hq_type_node : hq_type_node;
2129       if (mode == SQmode)
2130         return unsignedp ? sat_sq_type_node : sq_type_node;
2131       if (mode == DQmode)
2132         return unsignedp ? sat_dq_type_node : dq_type_node;
2133       if (mode == TQmode)
2134         return unsignedp ? sat_tq_type_node : tq_type_node;
2135
2136       if (mode == UQQmode)
2137         return unsignedp ? sat_uqq_type_node : uqq_type_node;
2138       if (mode == UHQmode)
2139         return unsignedp ? sat_uhq_type_node : uhq_type_node;
2140       if (mode == USQmode)
2141         return unsignedp ? sat_usq_type_node : usq_type_node;
2142       if (mode == UDQmode)
2143         return unsignedp ? sat_udq_type_node : udq_type_node;
2144       if (mode == UTQmode)
2145         return unsignedp ? sat_utq_type_node : utq_type_node;
2146
2147       if (mode == HAmode)
2148         return unsignedp ? sat_ha_type_node : ha_type_node;
2149       if (mode == SAmode)
2150         return unsignedp ? sat_sa_type_node : sa_type_node;
2151       if (mode == DAmode)
2152         return unsignedp ? sat_da_type_node : da_type_node;
2153       if (mode == TAmode)
2154         return unsignedp ? sat_ta_type_node : ta_type_node;
2155
2156       if (mode == UHAmode)
2157         return unsignedp ? sat_uha_type_node : uha_type_node;
2158       if (mode == USAmode)
2159         return unsignedp ? sat_usa_type_node : usa_type_node;
2160       if (mode == UDAmode)
2161         return unsignedp ? sat_uda_type_node : uda_type_node;
2162       if (mode == UTAmode)
2163         return unsignedp ? sat_uta_type_node : uta_type_node;
2164     }
2165
2166   for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
2167     if (TYPE_MODE (TREE_VALUE (t)) == mode)
2168       return TREE_VALUE (t);
2169
2170   return 0;
2171 }
2172
2173 tree
2174 c_common_unsigned_type (tree type)
2175 {
2176   return c_common_signed_or_unsigned_type (1, type);
2177 }
2178
2179 /* Return a signed type the same as TYPE in other respects.  */
2180
2181 tree
2182 c_common_signed_type (tree type)
2183 {
2184   return c_common_signed_or_unsigned_type (0, type);
2185 }
2186
2187 /* Return a type the same as TYPE except unsigned or
2188    signed according to UNSIGNEDP.  */
2189
2190 tree
2191 c_common_signed_or_unsigned_type (int unsignedp, tree type)
2192 {
2193   tree type1;
2194
2195   /* This block of code emulates the behavior of the old
2196      c_common_unsigned_type. In particular, it returns
2197      long_unsigned_type_node if passed a long, even when a int would
2198      have the same size. This is necessary for warnings to work
2199      correctly in archs where sizeof(int) == sizeof(long) */
2200
2201   type1 = TYPE_MAIN_VARIANT (type);
2202   if (type1 == signed_char_type_node || type1 == char_type_node || type1 == unsigned_char_type_node)
2203     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2204   if (type1 == integer_type_node || type1 == unsigned_type_node)
2205     return unsignedp ? unsigned_type_node : integer_type_node;
2206   if (type1 == short_integer_type_node || type1 == short_unsigned_type_node)
2207     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2208   if (type1 == long_integer_type_node || type1 == long_unsigned_type_node)
2209     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2210   if (type1 == long_long_integer_type_node || type1 == long_long_unsigned_type_node)
2211     return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
2212   if (type1 == widest_integer_literal_type_node || type1 == widest_unsigned_literal_type_node)
2213     return unsignedp ? widest_unsigned_literal_type_node : widest_integer_literal_type_node;
2214 #if HOST_BITS_PER_WIDE_INT >= 64
2215   if (type1 == intTI_type_node || type1 == unsigned_intTI_type_node)
2216     return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2217 #endif
2218   if (type1 == intDI_type_node || type1 == unsigned_intDI_type_node)
2219     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2220   if (type1 == intSI_type_node || type1 == unsigned_intSI_type_node)
2221     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2222   if (type1 == intHI_type_node || type1 == unsigned_intHI_type_node)
2223     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2224   if (type1 == intQI_type_node || type1 == unsigned_intQI_type_node)
2225     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2226
2227 #define C_COMMON_FIXED_TYPES(SAT,NAME) \
2228   if (type1 == SAT ## short_ ## NAME ## _type_node \
2229       || type1 == SAT ## unsigned_short_ ## NAME ## _type_node) \
2230     return unsignedp ? SAT ## unsigned_short_ ## NAME ## _type_node \
2231                      : SAT ## short_ ## NAME ## _type_node; \
2232   if (type1 == SAT ## NAME ## _type_node \
2233       || type1 == SAT ## unsigned_ ## NAME ## _type_node) \
2234     return unsignedp ? SAT ## unsigned_ ## NAME ## _type_node \
2235                      : SAT ## NAME ## _type_node; \
2236   if (type1 == SAT ## long_ ## NAME ## _type_node \
2237       || type1 == SAT ## unsigned_long_ ## NAME ## _type_node) \
2238     return unsignedp ? SAT ## unsigned_long_ ## NAME ## _type_node \
2239                      : SAT ## long_ ## NAME ## _type_node; \
2240   if (type1 == SAT ## long_long_ ## NAME ## _type_node \
2241       || type1 == SAT ## unsigned_long_long_ ## NAME ## _type_node) \
2242     return unsignedp ? SAT ## unsigned_long_long_ ## NAME ## _type_node \
2243                      : SAT ## long_long_ ## NAME ## _type_node;
2244
2245 #define C_COMMON_FIXED_MODE_TYPES(SAT,NAME) \
2246   if (type1 == SAT ## NAME ## _type_node \
2247       || type1 == SAT ## u ## NAME ## _type_node) \
2248     return unsignedp ? SAT ## u ## NAME ## _type_node \
2249                      : SAT ## NAME ## _type_node;
2250
2251   C_COMMON_FIXED_TYPES (, fract);
2252   C_COMMON_FIXED_TYPES (sat_, fract);
2253   C_COMMON_FIXED_TYPES (, accum);
2254   C_COMMON_FIXED_TYPES (sat_, accum);
2255
2256   C_COMMON_FIXED_MODE_TYPES (, qq);
2257   C_COMMON_FIXED_MODE_TYPES (, hq);
2258   C_COMMON_FIXED_MODE_TYPES (, sq);
2259   C_COMMON_FIXED_MODE_TYPES (, dq);
2260   C_COMMON_FIXED_MODE_TYPES (, tq);
2261   C_COMMON_FIXED_MODE_TYPES (sat_, qq);
2262   C_COMMON_FIXED_MODE_TYPES (sat_, hq);
2263   C_COMMON_FIXED_MODE_TYPES (sat_, sq);
2264   C_COMMON_FIXED_MODE_TYPES (sat_, dq);
2265   C_COMMON_FIXED_MODE_TYPES (sat_, tq);
2266   C_COMMON_FIXED_MODE_TYPES (, ha);
2267   C_COMMON_FIXED_MODE_TYPES (, sa);
2268   C_COMMON_FIXED_MODE_TYPES (, da);
2269   C_COMMON_FIXED_MODE_TYPES (, ta);
2270   C_COMMON_FIXED_MODE_TYPES (sat_, ha);
2271   C_COMMON_FIXED_MODE_TYPES (sat_, sa);
2272   C_COMMON_FIXED_MODE_TYPES (sat_, da);
2273   C_COMMON_FIXED_MODE_TYPES (sat_, ta);
2274
2275   /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
2276      the precision; they have precision set to match their range, but
2277      may use a wider mode to match an ABI.  If we change modes, we may
2278      wind up with bad conversions.  For INTEGER_TYPEs in C, must check
2279      the precision as well, so as to yield correct results for
2280      bit-field types.  C++ does not have these separate bit-field
2281      types, and producing a signed or unsigned variant of an
2282      ENUMERAL_TYPE may cause other problems as well.  */
2283
2284   if (!INTEGRAL_TYPE_P (type)
2285       || TYPE_UNSIGNED (type) == unsignedp)
2286     return type;
2287
2288 #define TYPE_OK(node)                                                       \
2289   (TYPE_MODE (type) == TYPE_MODE (node)                                     \
2290    && (c_dialect_cxx () || TYPE_PRECISION (type) == TYPE_PRECISION (node)))
2291   if (TYPE_OK (signed_char_type_node))
2292     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2293   if (TYPE_OK (integer_type_node))
2294     return unsignedp ? unsigned_type_node : integer_type_node;
2295   if (TYPE_OK (short_integer_type_node))
2296     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2297   if (TYPE_OK (long_integer_type_node))
2298     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2299   if (TYPE_OK (long_long_integer_type_node))
2300     return (unsignedp ? long_long_unsigned_type_node
2301             : long_long_integer_type_node);
2302   if (TYPE_OK (widest_integer_literal_type_node))
2303     return (unsignedp ? widest_unsigned_literal_type_node
2304             : widest_integer_literal_type_node);
2305
2306 #if HOST_BITS_PER_WIDE_INT >= 64
2307   if (TYPE_OK (intTI_type_node))
2308     return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2309 #endif
2310   if (TYPE_OK (intDI_type_node))
2311     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2312   if (TYPE_OK (intSI_type_node))
2313     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2314   if (TYPE_OK (intHI_type_node))
2315     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2316   if (TYPE_OK (intQI_type_node))
2317     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2318 #undef TYPE_OK
2319
2320   if (c_dialect_cxx ())
2321     return type;
2322   else
2323     return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
2324 }
2325
2326 /* Build a bit-field integer type for the given WIDTH and UNSIGNEDP.  */
2327
2328 tree
2329 c_build_bitfield_integer_type (unsigned HOST_WIDE_INT width, int unsignedp)
2330 {
2331   /* Extended integer types of the same width as a standard type have
2332      lesser rank, so those of the same width as int promote to int or
2333      unsigned int and are valid for printf formats expecting int or
2334      unsigned int.  To avoid such special cases, avoid creating
2335      extended integer types for bit-fields if a standard integer type
2336      is available.  */
2337   if (width == TYPE_PRECISION (integer_type_node))
2338     return unsignedp ? unsigned_type_node : integer_type_node;
2339   if (width == TYPE_PRECISION (signed_char_type_node))
2340     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2341   if (width == TYPE_PRECISION (short_integer_type_node))
2342     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2343   if (width == TYPE_PRECISION (long_integer_type_node))
2344     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2345   if (width == TYPE_PRECISION (long_long_integer_type_node))
2346     return (unsignedp ? long_long_unsigned_type_node
2347             : long_long_integer_type_node);
2348   return build_nonstandard_integer_type (width, unsignedp);
2349 }
2350
2351 /* The C version of the register_builtin_type langhook.  */
2352
2353 void
2354 c_register_builtin_type (tree type, const char* name)
2355 {
2356   tree decl;
2357
2358   decl = build_decl (TYPE_DECL, get_identifier (name), type);
2359   DECL_ARTIFICIAL (decl) = 1;
2360   if (!TYPE_NAME (type))
2361     TYPE_NAME (type) = decl;
2362   pushdecl (decl);
2363
2364   registered_builtin_types = tree_cons (0, type, registered_builtin_types);
2365 }
2366
2367 \f
2368 /* Return the minimum number of bits needed to represent VALUE in a
2369    signed or unsigned type, UNSIGNEDP says which.  */
2370
2371 unsigned int
2372 min_precision (tree value, int unsignedp)
2373 {
2374   int log;
2375
2376   /* If the value is negative, compute its negative minus 1.  The latter
2377      adjustment is because the absolute value of the largest negative value
2378      is one larger than the largest positive value.  This is equivalent to
2379      a bit-wise negation, so use that operation instead.  */
2380
2381   if (tree_int_cst_sgn (value) < 0)
2382     value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
2383
2384   /* Return the number of bits needed, taking into account the fact
2385      that we need one more bit for a signed than unsigned type.  */
2386
2387   if (integer_zerop (value))
2388     log = 0;
2389   else
2390     log = tree_floor_log2 (value);
2391
2392   return log + 1 + !unsignedp;
2393 }
2394 \f
2395 /* Print an error message for invalid operands to arith operation
2396    CODE with TYPE0 for operand 0, and TYPE1 for operand 1.  */
2397
2398 void
2399 binary_op_error (enum tree_code code, tree type0, tree type1)
2400 {
2401   const char *opname;
2402
2403   switch (code)
2404     {
2405     case PLUS_EXPR:
2406       opname = "+"; break;
2407     case MINUS_EXPR:
2408       opname = "-"; break;
2409     case MULT_EXPR:
2410       opname = "*"; break;
2411     case MAX_EXPR:
2412       opname = "max"; break;
2413     case MIN_EXPR:
2414       opname = "min"; break;
2415     case EQ_EXPR:
2416       opname = "=="; break;
2417     case NE_EXPR:
2418       opname = "!="; break;
2419     case LE_EXPR:
2420       opname = "<="; break;
2421     case GE_EXPR:
2422       opname = ">="; break;
2423     case LT_EXPR:
2424       opname = "<"; break;
2425     case GT_EXPR:
2426       opname = ">"; break;
2427     case LSHIFT_EXPR:
2428       opname = "<<"; break;
2429     case RSHIFT_EXPR:
2430       opname = ">>"; break;
2431     case TRUNC_MOD_EXPR:
2432     case FLOOR_MOD_EXPR:
2433       opname = "%"; break;
2434     case TRUNC_DIV_EXPR:
2435     case FLOOR_DIV_EXPR:
2436       opname = "/"; break;
2437     case BIT_AND_EXPR:
2438       opname = "&"; break;
2439     case BIT_IOR_EXPR:
2440       opname = "|"; break;
2441     case TRUTH_ANDIF_EXPR:
2442       opname = "&&"; break;
2443     case TRUTH_ORIF_EXPR:
2444       opname = "||"; break;
2445     case BIT_XOR_EXPR:
2446       opname = "^"; break;
2447     default:
2448       gcc_unreachable ();
2449     }
2450   error ("invalid operands to binary %s (have %qT and %qT)", opname,
2451          type0, type1);
2452 }
2453 \f
2454 /* Subroutine of build_binary_op, used for comparison operations.
2455    See if the operands have both been converted from subword integer types
2456    and, if so, perhaps change them both back to their original type.
2457    This function is also responsible for converting the two operands
2458    to the proper common type for comparison.
2459
2460    The arguments of this function are all pointers to local variables
2461    of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
2462    RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
2463
2464    If this function returns nonzero, it means that the comparison has
2465    a constant value.  What this function returns is an expression for
2466    that value.  */
2467
2468 tree
2469 shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
2470                  enum tree_code *rescode_ptr)
2471 {
2472   tree type;
2473   tree op0 = *op0_ptr;
2474   tree op1 = *op1_ptr;
2475   int unsignedp0, unsignedp1;
2476   int real1, real2;
2477   tree primop0, primop1;
2478   enum tree_code code = *rescode_ptr;
2479
2480   /* Throw away any conversions to wider types
2481      already present in the operands.  */
2482
2483   primop0 = get_narrower (op0, &unsignedp0);
2484   primop1 = get_narrower (op1, &unsignedp1);
2485
2486   /* Handle the case that OP0 does not *contain* a conversion
2487      but it *requires* conversion to FINAL_TYPE.  */
2488
2489   if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
2490     unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
2491   if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
2492     unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
2493
2494   /* If one of the operands must be floated, we cannot optimize.  */
2495   real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
2496   real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
2497
2498   /* If first arg is constant, swap the args (changing operation
2499      so value is preserved), for canonicalization.  Don't do this if
2500      the second arg is 0.  */
2501
2502   if (TREE_CONSTANT (primop0)
2503       && !integer_zerop (primop1) && !real_zerop (primop1)
2504       && !fixed_zerop (primop1))
2505     {
2506       tree tem = primop0;
2507       int temi = unsignedp0;
2508       primop0 = primop1;
2509       primop1 = tem;
2510       tem = op0;
2511       op0 = op1;
2512       op1 = tem;
2513       *op0_ptr = op0;
2514       *op1_ptr = op1;
2515       unsignedp0 = unsignedp1;
2516       unsignedp1 = temi;
2517       temi = real1;
2518       real1 = real2;
2519       real2 = temi;
2520
2521       switch (code)
2522         {
2523         case LT_EXPR:
2524           code = GT_EXPR;
2525           break;
2526         case GT_EXPR:
2527           code = LT_EXPR;
2528           break;
2529         case LE_EXPR:
2530           code = GE_EXPR;
2531           break;
2532         case GE_EXPR:
2533           code = LE_EXPR;
2534           break;
2535         default:
2536           break;
2537         }
2538       *rescode_ptr = code;
2539     }
2540
2541   /* If comparing an integer against a constant more bits wide,
2542      maybe we can deduce a value of 1 or 0 independent of the data.
2543      Or else truncate the constant now
2544      rather than extend the variable at run time.
2545
2546      This is only interesting if the constant is the wider arg.
2547      Also, it is not safe if the constant is unsigned and the
2548      variable arg is signed, since in this case the variable
2549      would be sign-extended and then regarded as unsigned.
2550      Our technique fails in this case because the lowest/highest
2551      possible unsigned results don't follow naturally from the
2552      lowest/highest possible values of the variable operand.
2553      For just EQ_EXPR and NE_EXPR there is another technique that
2554      could be used: see if the constant can be faithfully represented
2555      in the other operand's type, by truncating it and reextending it
2556      and see if that preserves the constant's value.  */
2557
2558   if (!real1 && !real2
2559       && TREE_CODE (TREE_TYPE (primop0)) != FIXED_POINT_TYPE
2560       && TREE_CODE (primop1) == INTEGER_CST
2561       && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
2562     {
2563       int min_gt, max_gt, min_lt, max_lt;
2564       tree maxval, minval;
2565       /* 1 if comparison is nominally unsigned.  */
2566       int unsignedp = TYPE_UNSIGNED (*restype_ptr);
2567       tree val;
2568
2569       type = c_common_signed_or_unsigned_type (unsignedp0,
2570                                                TREE_TYPE (primop0));
2571
2572       maxval = TYPE_MAX_VALUE (type);
2573       minval = TYPE_MIN_VALUE (type);
2574
2575       if (unsignedp && !unsignedp0)
2576         *restype_ptr = c_common_signed_type (*restype_ptr);
2577
2578       if (TREE_TYPE (primop1) != *restype_ptr)
2579         {
2580           /* Convert primop1 to target type, but do not introduce
2581              additional overflow.  We know primop1 is an int_cst.  */
2582           primop1 = force_fit_type_double (*restype_ptr,
2583                                            TREE_INT_CST_LOW (primop1),
2584                                            TREE_INT_CST_HIGH (primop1), 0,
2585                                            TREE_OVERFLOW (primop1));
2586         }
2587       if (type != *restype_ptr)
2588         {
2589           minval = convert (*restype_ptr, minval);
2590           maxval = convert (*restype_ptr, maxval);
2591         }
2592
2593       if (unsignedp && unsignedp0)
2594         {
2595           min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
2596           max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
2597           min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
2598           max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
2599         }
2600       else
2601         {
2602           min_gt = INT_CST_LT (primop1, minval);
2603           max_gt = INT_CST_LT (primop1, maxval);
2604           min_lt = INT_CST_LT (minval, primop1);
2605           max_lt = INT_CST_LT (maxval, primop1);
2606         }
2607
2608       val = 0;
2609       /* This used to be a switch, but Genix compiler can't handle that.  */
2610       if (code == NE_EXPR)
2611         {
2612           if (max_lt || min_gt)
2613             val = truthvalue_true_node;
2614         }
2615       else if (code == EQ_EXPR)
2616         {
2617           if (max_lt || min_gt)
2618             val = truthvalue_false_node;
2619         }
2620       else if (code == LT_EXPR)
2621         {
2622           if (max_lt)
2623             val = truthvalue_true_node;
2624           if (!min_lt)
2625             val = truthvalue_false_node;
2626         }
2627       else if (code == GT_EXPR)
2628         {
2629           if (min_gt)
2630             val = truthvalue_true_node;
2631           if (!max_gt)
2632             val = truthvalue_false_node;
2633         }
2634       else if (code == LE_EXPR)
2635         {
2636           if (!max_gt)
2637             val = truthvalue_true_node;
2638           if (min_gt)
2639             val = truthvalue_false_node;
2640         }
2641       else if (code == GE_EXPR)
2642         {
2643           if (!min_lt)
2644             val = truthvalue_true_node;
2645           if (max_lt)
2646             val = truthvalue_false_node;
2647         }
2648
2649       /* If primop0 was sign-extended and unsigned comparison specd,
2650          we did a signed comparison above using the signed type bounds.
2651          But the comparison we output must be unsigned.
2652
2653          Also, for inequalities, VAL is no good; but if the signed
2654          comparison had *any* fixed result, it follows that the
2655          unsigned comparison just tests the sign in reverse
2656          (positive values are LE, negative ones GE).
2657          So we can generate an unsigned comparison
2658          against an extreme value of the signed type.  */
2659
2660       if (unsignedp && !unsignedp0)
2661         {
2662           if (val != 0)
2663             switch (code)
2664               {
2665               case LT_EXPR:
2666               case GE_EXPR:
2667                 primop1 = TYPE_MIN_VALUE (type);
2668                 val = 0;
2669                 break;
2670
2671               case LE_EXPR:
2672               case GT_EXPR:
2673                 primop1 = TYPE_MAX_VALUE (type);
2674                 val = 0;
2675                 break;
2676
2677               default:
2678                 break;
2679               }
2680           type = c_common_unsigned_type (type);
2681         }
2682
2683       if (TREE_CODE (primop0) != INTEGER_CST)
2684         {
2685           if (val == truthvalue_false_node)
2686             warning (OPT_Wtype_limits, "comparison is always false due to limited range of data type");
2687           if (val == truthvalue_true_node)
2688             warning (OPT_Wtype_limits, "comparison is always true due to limited range of data type");
2689         }
2690
2691       if (val != 0)
2692         {
2693           /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
2694           if (TREE_SIDE_EFFECTS (primop0))
2695             return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
2696           return val;
2697         }
2698
2699       /* Value is not predetermined, but do the comparison
2700          in the type of the operand that is not constant.
2701          TYPE is already properly set.  */
2702     }
2703
2704   /* If either arg is decimal float and the other is float, find the
2705      proper common type to use for comparison.  */
2706   else if (real1 && real2
2707            && (DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0)))
2708                || DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1)))))
2709     type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2710
2711   else if (real1 && real2
2712            && (TYPE_PRECISION (TREE_TYPE (primop0))
2713                == TYPE_PRECISION (TREE_TYPE (primop1))))
2714     type = TREE_TYPE (primop0);
2715
2716   /* If args' natural types are both narrower than nominal type
2717      and both extend in the same manner, compare them
2718      in the type of the wider arg.
2719      Otherwise must actually extend both to the nominal
2720      common type lest different ways of extending
2721      alter the result.
2722      (eg, (short)-1 == (unsigned short)-1  should be 0.)  */
2723
2724   else if (unsignedp0 == unsignedp1 && real1 == real2
2725            && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
2726            && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
2727     {
2728       type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2729       type = c_common_signed_or_unsigned_type (unsignedp0
2730                                                || TYPE_UNSIGNED (*restype_ptr),
2731                                                type);
2732       /* Make sure shorter operand is extended the right way
2733          to match the longer operand.  */
2734       primop0
2735         = convert (c_common_signed_or_unsigned_type (unsignedp0,
2736                                                      TREE_TYPE (primop0)),
2737                    primop0);
2738       primop1
2739         = convert (c_common_signed_or_unsigned_type (unsignedp1,
2740                                                      TREE_TYPE (primop1)),
2741                    primop1);
2742     }
2743   else
2744     {
2745       /* Here we must do the comparison on the nominal type
2746          using the args exactly as we received them.  */
2747       type = *restype_ptr;
2748       primop0 = op0;
2749       primop1 = op1;
2750
2751       if (!real1 && !real2 && integer_zerop (primop1)
2752           && TYPE_UNSIGNED (*restype_ptr))
2753         {
2754           tree value = 0;
2755           switch (code)
2756             {
2757             case GE_EXPR:
2758               /* All unsigned values are >= 0, so we warn.  However,
2759                  if OP0 is a constant that is >= 0, the signedness of
2760                  the comparison isn't an issue, so suppress the
2761                  warning.  */
2762               if (warn_type_limits && !in_system_header
2763                   && !(TREE_CODE (primop0) == INTEGER_CST
2764                        && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2765                                                    primop0))))
2766                 warning (OPT_Wtype_limits, 
2767                          "comparison of unsigned expression >= 0 is always true");
2768               value = truthvalue_true_node;
2769               break;
2770
2771             case LT_EXPR:
2772               if (warn_type_limits && !in_system_header
2773                   && !(TREE_CODE (primop0) == INTEGER_CST
2774                        && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2775                                                    primop0))))
2776                 warning (OPT_Wtype_limits, 
2777                          "comparison of unsigned expression < 0 is always false");
2778               value = truthvalue_false_node;
2779               break;
2780
2781             default:
2782               break;
2783             }
2784
2785           if (value != 0)
2786             {
2787               /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
2788               if (TREE_SIDE_EFFECTS (primop0))
2789                 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
2790                                primop0, value);
2791               return value;
2792             }
2793         }
2794     }
2795
2796   *op0_ptr = convert (type, primop0);
2797   *op1_ptr = convert (type, primop1);
2798
2799   *restype_ptr = truthvalue_type_node;
2800
2801   return 0;
2802 }
2803 \f
2804 /* Return a tree for the sum or difference (RESULTCODE says which)
2805    of pointer PTROP and integer INTOP.  */
2806
2807 tree
2808 pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
2809 {
2810   tree size_exp, ret;
2811
2812   /* The result is a pointer of the same type that is being added.  */
2813   tree result_type = TREE_TYPE (ptrop);
2814
2815   if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2816     {
2817       if (pedantic || warn_pointer_arith)
2818         pedwarn ("pointer of type %<void *%> used in arithmetic");
2819       size_exp = integer_one_node;
2820     }
2821   else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2822     {
2823       if (pedantic || warn_pointer_arith)
2824         pedwarn ("pointer to a function used in arithmetic");
2825       size_exp = integer_one_node;
2826     }
2827   else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
2828     {
2829       if (pedantic || warn_pointer_arith)
2830         pedwarn ("pointer to member function used in arithmetic");
2831       size_exp = integer_one_node;
2832     }
2833   else
2834     size_exp = size_in_bytes (TREE_TYPE (result_type));
2835
2836   /* We are manipulating pointer values, so we don't need to warn
2837      about relying on undefined signed overflow.  We disable the
2838      warning here because we use integer types so fold won't know that
2839      they are really pointers.  */
2840   fold_defer_overflow_warnings ();
2841
2842   /* If what we are about to multiply by the size of the elements
2843      contains a constant term, apply distributive law
2844      and multiply that constant term separately.
2845      This helps produce common subexpressions.  */
2846   if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2847       && !TREE_CONSTANT (intop)
2848       && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2849       && TREE_CONSTANT (size_exp)
2850       /* If the constant comes from pointer subtraction,
2851          skip this optimization--it would cause an error.  */
2852       && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2853       /* If the constant is unsigned, and smaller than the pointer size,
2854          then we must skip this optimization.  This is because it could cause
2855          an overflow error if the constant is negative but INTOP is not.  */
2856       && (!TYPE_UNSIGNED (TREE_TYPE (intop))
2857           || (TYPE_PRECISION (TREE_TYPE (intop))
2858               == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2859     {
2860       enum tree_code subcode = resultcode;
2861       tree int_type = TREE_TYPE (intop);
2862       if (TREE_CODE (intop) == MINUS_EXPR)
2863         subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2864       /* Convert both subexpression types to the type of intop,
2865          because weird cases involving pointer arithmetic
2866          can result in a sum or difference with different type args.  */
2867       ptrop = build_binary_op (subcode, ptrop,
2868                                convert (int_type, TREE_OPERAND (intop, 1)), 1);
2869       intop = convert (int_type, TREE_OPERAND (intop, 0));
2870     }
2871
2872   /* Convert the integer argument to a type the same size as sizetype
2873      so the multiply won't overflow spuriously.  */
2874   if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
2875       || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
2876     intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
2877                                              TYPE_UNSIGNED (sizetype)), intop);
2878
2879   /* Replace the integer argument with a suitable product by the object size.
2880      Do this multiplication as signed, then convert to the appropriate
2881      type for the pointer operation.  */
2882   intop = convert (sizetype,
2883                    build_binary_op (MULT_EXPR, intop,
2884                                     convert (TREE_TYPE (intop), size_exp), 1));
2885
2886   /* Create the sum or difference.  */
2887   if (resultcode == MINUS_EXPR)
2888     intop = fold_build1 (NEGATE_EXPR, sizetype, intop);
2889
2890   ret = fold_build2 (POINTER_PLUS_EXPR, result_type, ptrop, intop);
2891
2892   fold_undefer_and_ignore_overflow_warnings ();
2893
2894   return ret;
2895 }
2896 \f
2897 /* Return whether EXPR is a declaration whose address can never be
2898    NULL.  */
2899
2900 bool
2901 decl_with_nonnull_addr_p (const_tree expr)
2902 {
2903   return (DECL_P (expr)
2904           && (TREE_CODE (expr) == PARM_DECL
2905               || TREE_CODE (expr) == LABEL_DECL
2906               || !DECL_WEAK (expr)));
2907 }
2908
2909 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
2910    or for an `if' or `while' statement or ?..: exp.  It should already
2911    have been validated to be of suitable type; otherwise, a bad
2912    diagnostic may result.
2913
2914    This preparation consists of taking the ordinary
2915    representation of an expression expr and producing a valid tree
2916    boolean expression describing whether expr is nonzero.  We could
2917    simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
2918    but we optimize comparisons, &&, ||, and !.
2919
2920    The resulting type should always be `truthvalue_type_node'.  */
2921
2922 tree
2923 c_common_truthvalue_conversion (tree expr)
2924 {
2925   switch (TREE_CODE (expr))
2926     {
2927     case EQ_EXPR:   case NE_EXPR:   case UNEQ_EXPR: case LTGT_EXPR:
2928     case LE_EXPR:   case GE_EXPR:   case LT_EXPR:   case GT_EXPR:
2929     case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
2930     case ORDERED_EXPR: case UNORDERED_EXPR:
2931       if (TREE_TYPE (expr) == truthvalue_type_node)
2932         return expr;
2933       return build2 (TREE_CODE (expr), truthvalue_type_node,
2934                      TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
2935
2936     case TRUTH_ANDIF_EXPR:
2937     case TRUTH_ORIF_EXPR:
2938     case TRUTH_AND_EXPR:
2939     case TRUTH_OR_EXPR:
2940     case TRUTH_XOR_EXPR:
2941       if (TREE_TYPE (expr) == truthvalue_type_node)
2942         return expr;
2943       return build2 (TREE_CODE (expr), truthvalue_type_node,
2944                  c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2945                  c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)));
2946
2947     case TRUTH_NOT_EXPR:
2948       if (TREE_TYPE (expr) == truthvalue_type_node)
2949         return expr;
2950       return build1 (TREE_CODE (expr), truthvalue_type_node,
2951                  c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2952
2953     case ERROR_MARK:
2954       return expr;
2955
2956     case INTEGER_CST:
2957       return integer_zerop (expr) ? truthvalue_false_node
2958                                   : truthvalue_true_node;
2959
2960     case REAL_CST:
2961       return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
2962              ? truthvalue_true_node
2963              : truthvalue_false_node;
2964
2965     case FIXED_CST:
2966       return fixed_compare (NE_EXPR, &TREE_FIXED_CST (expr),
2967                             &FCONST0 (TYPE_MODE (TREE_TYPE (expr))))
2968              ? truthvalue_true_node
2969              : truthvalue_false_node;
2970
2971     case FUNCTION_DECL:
2972       expr = build_unary_op (ADDR_EXPR, expr, 0);
2973       /* Fall through.  */
2974
2975     case ADDR_EXPR:
2976       {
2977         tree inner = TREE_OPERAND (expr, 0);
2978         if (decl_with_nonnull_addr_p (inner))
2979           {
2980             /* Common Ada/Pascal programmer's mistake.  */
2981             warning (OPT_Waddress,
2982                      "the address of %qD will always evaluate as %<true%>",
2983                      inner);
2984             return truthvalue_true_node;
2985           }
2986
2987         /* If we still have a decl, it is possible for its address to
2988            be NULL, so we cannot optimize.  */
2989         if (DECL_P (inner))
2990           {
2991             gcc_assert (DECL_WEAK (inner));
2992             break;
2993           }
2994
2995         if (TREE_SIDE_EFFECTS (inner))
2996           return build2 (COMPOUND_EXPR, truthvalue_type_node,
2997                          inner, truthvalue_true_node);
2998         else
2999           return truthvalue_true_node;
3000       }
3001
3002     case COMPLEX_EXPR:
3003       return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
3004                                ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
3005                 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
3006                 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
3007                               0);
3008
3009     case NEGATE_EXPR:
3010     case ABS_EXPR:
3011     case FLOAT_EXPR:
3012       /* These don't change whether an object is nonzero or zero.  */
3013       return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
3014
3015     case LROTATE_EXPR:
3016     case RROTATE_EXPR:
3017       /* These don't change whether an object is zero or nonzero, but
3018          we can't ignore them if their second arg has side-effects.  */
3019       if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
3020         return build2 (COMPOUND_EXPR, truthvalue_type_node,
3021                        TREE_OPERAND (expr, 1),
3022                        c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
3023       else
3024         return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
3025
3026     case COND_EXPR:
3027       /* Distribute the conversion into the arms of a COND_EXPR.  */
3028       return fold_build3 (COND_EXPR, truthvalue_type_node,
3029                 TREE_OPERAND (expr, 0),
3030                 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
3031                 c_common_truthvalue_conversion (TREE_OPERAND (expr, 2)));
3032
3033     case CONVERT_EXPR:
3034     case NOP_EXPR:
3035       /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
3036          since that affects how `default_conversion' will behave.  */
3037       if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
3038           || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
3039         break;
3040       /* If this is widening the argument, we can ignore it.  */
3041       if (TYPE_PRECISION (TREE_TYPE (expr))
3042           >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
3043         return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
3044       break;
3045
3046     case MODIFY_EXPR:
3047       if (!TREE_NO_WARNING (expr)
3048           && warn_parentheses)
3049         {
3050           warning (OPT_Wparentheses,
3051                    "suggest parentheses around assignment used as truth value");
3052           TREE_NO_WARNING (expr) = 1;
3053         }
3054       break;
3055
3056     default:
3057       break;
3058     }
3059
3060   if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
3061     {
3062       tree t = save_expr (expr);
3063       return (build_binary_op
3064               ((TREE_SIDE_EFFECTS (expr)
3065                 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
3066         c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
3067         c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
3068                0));
3069     }
3070
3071   if (TREE_CODE (TREE_TYPE (expr)) == FIXED_POINT_TYPE)
3072     {
3073       tree fixed_zero_node = build_fixed (TREE_TYPE (expr),
3074                                           FCONST0 (TYPE_MODE
3075                                                    (TREE_TYPE (expr))));
3076       return build_binary_op (NE_EXPR, expr, fixed_zero_node, 1);
3077     }
3078
3079   return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
3080 }
3081 \f
3082 static void def_builtin_1  (enum built_in_function fncode,
3083                             const char *name,
3084                             enum built_in_class fnclass,
3085                             tree fntype, tree libtype,
3086                             bool both_p, bool fallback_p, bool nonansi_p,
3087                             tree fnattrs, bool implicit_p);
3088
3089
3090 /* Apply the TYPE_QUALS to the new DECL.  */
3091
3092 void
3093 c_apply_type_quals_to_decl (int type_quals, tree decl)
3094 {
3095   tree type = TREE_TYPE (decl);
3096
3097   if (type == error_mark_node)
3098     return;
3099
3100   if (((type_quals & TYPE_QUAL_CONST)
3101        || (type && TREE_CODE (type) == REFERENCE_TYPE))
3102       /* An object declared 'const' is only readonly after it is
3103          initialized.  We don't have any way of expressing this currently,
3104          so we need to be conservative and unset TREE_READONLY for types
3105          with constructors.  Otherwise aliasing code will ignore stores in
3106          an inline constructor.  */
3107       && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
3108     TREE_READONLY (decl) = 1;
3109   if (type_quals & TYPE_QUAL_VOLATILE)
3110     {
3111       TREE_SIDE_EFFECTS (decl) = 1;
3112       TREE_THIS_VOLATILE (decl) = 1;
3113     }
3114   if (type_quals & TYPE_QUAL_RESTRICT)
3115     {
3116       while (type && TREE_CODE (type) == ARRAY_TYPE)
3117         /* Allow 'restrict' on arrays of pointers.
3118            FIXME currently we just ignore it.  */
3119         type = TREE_TYPE (type);
3120       if (!type
3121           || !POINTER_TYPE_P (type)
3122           || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
3123         error ("invalid use of %<restrict%>");
3124       else if (flag_strict_aliasing && type == TREE_TYPE (decl))
3125         /* Indicate we need to make a unique alias set for this pointer.
3126            We can't do it here because it might be pointing to an
3127            incomplete type.  */
3128         DECL_POINTER_ALIAS_SET (decl) = -2;
3129     }
3130 }
3131
3132 /* Hash function for the problem of multiple type definitions in
3133    different files.  This must hash all types that will compare
3134    equal via comptypes to the same value.  In practice it hashes
3135    on some of the simple stuff and leaves the details to comptypes.  */
3136
3137 static hashval_t
3138 c_type_hash (const void *p)
3139 {
3140   int i = 0;
3141   int shift, size;
3142   const_tree const t = (const_tree) p;
3143   tree t2;
3144   switch (TREE_CODE (t))
3145     {
3146     /* For pointers, hash on pointee type plus some swizzling.  */
3147     case POINTER_TYPE:
3148       return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
3149     /* Hash on number of elements and total size.  */
3150     case ENUMERAL_TYPE:
3151       shift = 3;
3152       t2 = TYPE_VALUES (t);
3153       break;
3154     case RECORD_TYPE:
3155       shift = 0;
3156       t2 = TYPE_FIELDS (t);
3157       break;
3158     case QUAL_UNION_TYPE:
3159       shift = 1;
3160       t2 = TYPE_FIELDS (t);
3161       break;
3162     case UNION_TYPE:
3163       shift = 2;
3164       t2 = TYPE_FIELDS (t);
3165       break;
3166     default:
3167       gcc_unreachable ();
3168     }
3169   for (; t2; t2 = TREE_CHAIN (t2))
3170     i++;
3171   size = TREE_INT_CST_LOW (TYPE_SIZE (t));
3172   return ((size << 24) | (i << shift));
3173 }
3174
3175 static GTY((param_is (union tree_node))) htab_t type_hash_table;
3176
3177 /* Return the typed-based alias set for T, which may be an expression
3178    or a type.  Return -1 if we don't do anything special.  */
3179
3180 alias_set_type
3181 c_common_get_alias_set (tree t)
3182 {
3183   tree u;
3184   PTR *slot;
3185
3186   /* Permit type-punning when accessing a union, provided the access
3187      is directly through the union.  For example, this code does not
3188      permit taking the address of a union member and then storing
3189      through it.  Even the type-punning allowed here is a GCC
3190      extension, albeit a common and useful one; the C standard says
3191      that such accesses have implementation-defined behavior.  */
3192   for (u = t;
3193        TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
3194        u = TREE_OPERAND (u, 0))
3195     if (TREE_CODE (u) == COMPONENT_REF
3196         && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
3197       return 0;
3198
3199   /* That's all the expressions we handle specially.  */
3200   if (!TYPE_P (t))
3201     return -1;
3202
3203   /* The C standard guarantees that any object may be accessed via an
3204      lvalue that has character type.  */
3205   if (t == char_type_node
3206       || t == signed_char_type_node
3207       || t == unsigned_char_type_node)
3208     return 0;
3209
3210   /* If it has the may_alias attribute, it can alias anything.  */
3211   if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t)))
3212     return 0;
3213
3214   /* The C standard specifically allows aliasing between signed and
3215      unsigned variants of the same type.  We treat the signed
3216      variant as canonical.  */
3217   if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
3218     {
3219       tree t1 = c_common_signed_type (t);
3220
3221       /* t1 == t can happen for boolean nodes which are always unsigned.  */
3222       if (t1 != t)
3223         return get_alias_set (t1);
3224     }
3225   else if (POINTER_TYPE_P (t))
3226     {
3227       tree t1;
3228
3229       /* Unfortunately, there is no canonical form of a pointer type.
3230          In particular, if we have `typedef int I', then `int *', and
3231          `I *' are different types.  So, we have to pick a canonical
3232          representative.  We do this below.
3233
3234          Technically, this approach is actually more conservative that
3235          it needs to be.  In particular, `const int *' and `int *'
3236          should be in different alias sets, according to the C and C++
3237          standard, since their types are not the same, and so,
3238          technically, an `int **' and `const int **' cannot point at
3239          the same thing.
3240
3241          But, the standard is wrong.  In particular, this code is
3242          legal C++:
3243
3244             int *ip;
3245             int **ipp = &ip;
3246             const int* const* cipp = ipp;
3247
3248          And, it doesn't make sense for that to be legal unless you
3249          can dereference IPP and CIPP.  So, we ignore cv-qualifiers on
3250          the pointed-to types.  This issue has been reported to the
3251          C++ committee.  */
3252       t1 = build_type_no_quals (t);
3253       if (t1 != t)
3254         return get_alias_set (t1);
3255     }
3256
3257   /* Handle the case of multiple type nodes referring to "the same" type,
3258      which occurs with IMA.  These share an alias set.  FIXME:  Currently only
3259      C90 is handled.  (In C99 type compatibility is not transitive, which
3260      complicates things mightily. The alias set splay trees can theoretically
3261      represent this, but insertion is tricky when you consider all the
3262      different orders things might arrive in.) */
3263
3264   if (c_language != clk_c || flag_isoc99)
3265     return -1;
3266
3267   /* Save time if there's only one input file.  */
3268   if (num_in_fnames == 1)
3269     return -1;
3270
3271   /* Pointers need special handling if they point to any type that
3272      needs special handling (below).  */
3273   if (TREE_CODE (t) == POINTER_TYPE)
3274     {
3275       tree t2;
3276       /* Find bottom type under any nested POINTERs.  */
3277       for (t2 = TREE_TYPE (t);
3278            TREE_CODE (t2) == POINTER_TYPE;
3279            t2 = TREE_TYPE (t2))
3280         ;
3281       if (TREE_CODE (t2) != RECORD_TYPE
3282           && TREE_CODE (t2) != ENUMERAL_TYPE
3283           && TREE_CODE (t2) != QUAL_UNION_TYPE
3284           && TREE_CODE (t2) != UNION_TYPE)
3285         return -1;
3286       if (TYPE_SIZE (t2) == 0)
3287         return -1;
3288     }
3289   /* These are the only cases that need special handling.  */
3290   if (TREE_CODE (t) != RECORD_TYPE
3291       && TREE_CODE (t) != ENUMERAL_TYPE
3292       && TREE_CODE (t) != QUAL_UNION_TYPE
3293       && TREE_CODE (t) != UNION_TYPE
3294       && TREE_CODE (t) != POINTER_TYPE)
3295     return -1;
3296   /* Undefined? */
3297   if (TYPE_SIZE (t) == 0)
3298     return -1;
3299
3300   /* Look up t in hash table.  Only one of the compatible types within each
3301      alias set is recorded in the table.  */
3302   if (!type_hash_table)
3303     type_hash_table = htab_create_ggc (1021, c_type_hash,
3304             (htab_eq) lang_hooks.types_compatible_p,
3305             NULL);
3306   slot = htab_find_slot (type_hash_table, t, INSERT);
3307   if (*slot != NULL)
3308     {
3309       TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
3310       return TYPE_ALIAS_SET ((tree)*slot);
3311     }
3312   else
3313     /* Our caller will assign and record (in t) a new alias set; all we need
3314        to do is remember t in the hash table.  */
3315     *slot = t;
3316
3317   return -1;
3318 }
3319 \f
3320 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
3321    second parameter indicates which OPERATOR is being applied.  The COMPLAIN
3322    flag controls whether we should diagnose possibly ill-formed
3323    constructs or not.  */
3324
3325 tree
3326 c_sizeof_or_alignof_type (tree type, bool is_sizeof, int complain)
3327 {
3328   const char *op_name;
3329   tree value = NULL;
3330   enum tree_code type_code = TREE_CODE (type);
3331
3332   op_name = is_sizeof ? "sizeof" : "__alignof__";
3333
3334   if (type_code == FUNCTION_TYPE)
3335     {
3336       if (is_sizeof)
3337         {
3338           if (complain && (pedantic || warn_pointer_arith))
3339             pedwarn ("invalid application of %<sizeof%> to a function type");
3340           value = size_one_node;
3341         }
3342       else
3343         value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
3344     }
3345   else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
3346     {
3347       if (type_code == VOID_TYPE
3348           && complain && (pedantic || warn_pointer_arith))
3349         pedwarn ("invalid application of %qs to a void type", op_name);
3350       value = size_one_node;
3351     }
3352   else if (!COMPLETE_TYPE_P (type))
3353     {
3354       if (complain)
3355         error ("invalid application of %qs to incomplete type %qT ",
3356                op_name, type);
3357       value = size_zero_node;
3358     }
3359   else
3360     {
3361       if (is_sizeof)
3362         /* Convert in case a char is more than one unit.  */
3363         value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
3364                             size_int (TYPE_PRECISION (char_type_node)
3365                                       / BITS_PER_UNIT));
3366       else
3367         value = size_int (TYPE_ALIGN_UNIT (type));
3368     }
3369
3370   /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
3371      TYPE_IS_SIZETYPE means that certain things (like overflow) will
3372      never happen.  However, this node should really have type
3373      `size_t', which is just a typedef for an ordinary integer type.  */
3374   value = fold_convert (size_type_node, value);
3375   gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
3376
3377   return value;
3378 }
3379
3380 /* Implement the __alignof keyword: Return the minimum required
3381    alignment of EXPR, measured in bytes.  For VAR_DECLs,
3382    FUNCTION_DECLs and FIELD_DECLs return DECL_ALIGN (which can be set
3383    from an "aligned" __attribute__ specification).  */
3384
3385 tree
3386 c_alignof_expr (tree expr)
3387 {
3388   tree t;
3389
3390   if (VAR_OR_FUNCTION_DECL_P (expr))
3391     t = size_int (DECL_ALIGN_UNIT (expr));
3392
3393   else if (TREE_CODE (expr) == COMPONENT_REF
3394            && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
3395     {
3396       error ("%<__alignof%> applied to a bit-field");
3397       t = size_one_node;
3398     }
3399   else if (TREE_CODE (expr) == COMPONENT_REF
3400            && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
3401     t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
3402
3403   else if (TREE_CODE (expr) == INDIRECT_REF)
3404     {
3405       tree t = TREE_OPERAND (expr, 0);
3406       tree best = t;
3407       int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3408
3409       while ((TREE_CODE (t) == NOP_EXPR || TREE_CODE (t) == CONVERT_EXPR)
3410              && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
3411         {
3412           int thisalign;
3413
3414           t = TREE_OPERAND (t, 0);
3415           thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3416           if (thisalign > bestalign)
3417             best = t, bestalign = thisalign;
3418         }
3419       return c_alignof (TREE_TYPE (TREE_TYPE (best)));
3420     }
3421   else
3422     return c_alignof (TREE_TYPE (expr));
3423
3424   return fold_convert (size_type_node, t);
3425 }
3426 \f
3427 /* Handle C and C++ default attributes.  */
3428
3429 enum built_in_attribute
3430 {
3431 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
3432 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
3433 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
3434 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
3435 #include "builtin-attrs.def"
3436 #undef DEF_ATTR_NULL_TREE
3437 #undef DEF_ATTR_INT
3438 #undef DEF_ATTR_IDENT
3439 #undef DEF_ATTR_TREE_LIST
3440   ATTR_LAST
3441 };
3442
3443 static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
3444
3445 static void c_init_attributes (void);
3446
3447 enum c_builtin_type
3448 {
3449 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
3450 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
3451 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
3452 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
3453 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3454 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3455 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
3456 #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME,
3457 #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME,
3458 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
3459 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
3460 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
3461 #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3462 #define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3463 #define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
3464   NAME,
3465 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
3466 #include "builtin-types.def"
3467 #undef DEF_PRIMITIVE_TYPE
3468 #undef DEF_FUNCTION_TYPE_0
3469 #undef DEF_FUNCTION_TYPE_1
3470 #undef DEF_FUNCTION_TYPE_2
3471 #undef DEF_FUNCTION_TYPE_3
3472 #undef DEF_FUNCTION_TYPE_4
3473 #undef DEF_FUNCTION_TYPE_5
3474 #undef DEF_FUNCTION_TYPE_6
3475 #undef DEF_FUNCTION_TYPE_7
3476 #undef DEF_FUNCTION_TYPE_VAR_0
3477 #undef DEF_FUNCTION_TYPE_VAR_1
3478 #undef DEF_FUNCTION_TYPE_VAR_2
3479 #undef DEF_FUNCTION_TYPE_VAR_3
3480 #undef DEF_FUNCTION_TYPE_VAR_4
3481 #undef DEF_FUNCTION_TYPE_VAR_5
3482 #undef DEF_POINTER_TYPE
3483   BT_LAST
3484 };
3485
3486 typedef enum c_builtin_type builtin_type;
3487
3488 /* A temporary array for c_common_nodes_and_builtins.  Used in
3489    communication with def_fn_type.  */
3490 static tree builtin_types[(int) BT_LAST + 1];
3491
3492 /* A helper function for c_common_nodes_and_builtins.  Build function type
3493    for DEF with return type RET and N arguments.  If VAR is true, then the
3494    function should be variadic after those N arguments.
3495
3496    Takes special care not to ICE if any of the types involved are
3497    error_mark_node, which indicates that said type is not in fact available
3498    (see builtin_type_for_size).  In which case the function type as a whole
3499    should be error_mark_node.  */
3500
3501 static void
3502 def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
3503 {
3504   tree args = NULL, t;
3505   va_list list;
3506   int i;
3507
3508   va_start (list, n);
3509   for (i = 0; i < n; ++i)
3510     {
3511       builtin_type a = va_arg (list, builtin_type);
3512       t = builtin_types[a];
3513       if (t == error_mark_node)
3514         goto egress;
3515       args = tree_cons (NULL_TREE, t, args);
3516     }
3517   va_end (list);
3518
3519   args = nreverse (args);
3520   if (!var)
3521     args = chainon (args, void_list_node);
3522
3523   t = builtin_types[ret];
3524   if (t == error_mark_node)
3525     goto egress;
3526   t = build_function_type (t, args);
3527
3528  egress:
3529   builtin_types[def] = t;
3530 }
3531
3532 /* Build builtin functions common to both C and C++ language
3533    frontends.  */
3534
3535 static void
3536 c_define_builtins (tree va_list_ref_type_node, tree va_list_arg_type_node)
3537 {
3538 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
3539   builtin_types[ENUM] = VALUE;
3540 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
3541   def_fn_type (ENUM, RETURN, 0, 0);
3542 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
3543   def_fn_type (ENUM, RETURN, 0, 1, ARG1);
3544 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
3545   def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
3546 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3547   def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
3548 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3549   def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4);
3550 #define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3551   def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3552 #define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3553                             ARG6)                                       \
3554   def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
3555 #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3556                             ARG6, ARG7)                                 \
3557   def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
3558 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
3559   def_fn_type (ENUM, RETURN, 1, 0);
3560 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
3561   def_fn_type (ENUM, RETURN, 1, 1, ARG1);
3562 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
3563   def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
3564 #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3565   def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
3566 #define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3567   def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4);
3568 #define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3569   def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3570 #define DEF_POINTER_TYPE(ENUM, TYPE) \
3571   builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]);
3572
3573 #include "builtin-types.def"
3574
3575 #undef DEF_PRIMITIVE_TYPE
3576 #undef DEF_FUNCTION_TYPE_1
3577 #undef DEF_FUNCTION_TYPE_2
3578 #undef DEF_FUNCTION_TYPE_3
3579 #undef DEF_FUNCTION_TYPE_4
3580 #undef DEF_FUNCTION_TYPE_5
3581 #undef DEF_FUNCTION_TYPE_6
3582 #undef DEF_FUNCTION_TYPE_VAR_0
3583 #undef DEF_FUNCTION_TYPE_VAR_1
3584 #undef DEF_FUNCTION_TYPE_VAR_2
3585 #undef DEF_FUNCTION_TYPE_VAR_3
3586 #undef DEF_FUNCTION_TYPE_VAR_4
3587 #undef DEF_FUNCTION_TYPE_VAR_5
3588 #undef DEF_POINTER_TYPE
3589   builtin_types[(int) BT_LAST] = NULL_TREE;
3590
3591   c_init_attributes ();
3592
3593 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
3594                     NONANSI_P, ATTRS, IMPLICIT, COND)                   \
3595   if (NAME && COND)                                                     \
3596     def_builtin_1 (ENUM, NAME, CLASS,                                   \
3597                    builtin_types[(int) TYPE],                           \
3598                    builtin_types[(int) LIBTYPE],                        \
3599                    BOTH_P, FALLBACK_P, NONANSI_P,                       \
3600                    built_in_attributes[(int) ATTRS], IMPLICIT);
3601 #include "builtins.def"
3602 #undef DEF_BUILTIN
3603
3604   targetm.init_builtins ();
3605
3606   build_common_builtin_nodes ();
3607
3608   if (flag_mudflap)
3609     mudflap_init ();
3610 }
3611
3612 /* Build tree nodes and builtin functions common to both C and C++ language
3613    frontends.  */
3614
3615 void
3616 c_common_nodes_and_builtins (void)
3617 {
3618   int wchar_type_size;
3619   tree array_domain_type;
3620   tree va_list_ref_type_node;
3621   tree va_list_arg_type_node;
3622
3623   /* Define `int' and `char' first so that dbx will output them first.  */
3624   record_builtin_type (RID_INT, NULL, integer_type_node);
3625   record_builtin_type (RID_CHAR, "char", char_type_node);
3626
3627   /* `signed' is the same as `int'.  FIXME: the declarations of "signed",
3628      "unsigned long", "long long unsigned" and "unsigned short" were in C++
3629      but not C.  Are the conditionals here needed?  */
3630   if (c_dialect_cxx ())
3631     record_builtin_type (RID_SIGNED, NULL, integer_type_node);
3632   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
3633   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
3634   record_builtin_type (RID_MAX, "long unsigned int",
3635                        long_unsigned_type_node);
3636   if (c_dialect_cxx ())
3637     record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
3638   record_builtin_type (RID_MAX, "long long int",
3639                        long_long_integer_type_node);
3640   record_builtin_type (RID_MAX, "long long unsigned int",
3641                        long_long_unsigned_type_node);
3642   if (c_dialect_cxx ())
3643     record_builtin_type (RID_MAX, "long long unsigned",
3644                          long_long_unsigned_type_node);
3645   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
3646   record_builtin_type (RID_MAX, "short unsigned int",
3647                        short_unsigned_type_node);
3648   if (c_dialect_cxx ())
3649     record_builtin_type (RID_MAX, "unsigned short",
3650                          short_unsigned_type_node);
3651
3652   /* Define both `signed char' and `unsigned char'.  */
3653   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
3654   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
3655
3656   /* These are types that c_common_type_for_size and
3657      c_common_type_for_mode use.  */
3658   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3659                                          intQI_type_node));
3660   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3661                                          intHI_type_node));
3662   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3663                                          intSI_type_node));
3664   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3665                                          intDI_type_node));
3666 #if HOST_BITS_PER_WIDE_INT >= 64
3667   if (targetm.scalar_mode_supported_p (TImode))
3668     lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3669                                            get_identifier ("__int128_t"),
3670                                            intTI_type_node));
3671 #endif
3672   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3673                                          unsigned_intQI_type_node));
3674   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3675                                          unsigned_intHI_type_node));
3676   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3677                                          unsigned_intSI_type_node));
3678   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3679                                          unsigned_intDI_type_node));
3680 #if HOST_BITS_PER_WIDE_INT >= 64
3681   if (targetm.scalar_mode_supported_p (TImode))
3682     lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3683                                            get_identifier ("__uint128_t"),
3684                                            unsigned_intTI_type_node));
3685 #endif
3686
3687   /* Create the widest literal types.  */
3688   widest_integer_literal_type_node
3689     = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
3690   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3691                                          widest_integer_literal_type_node));
3692
3693   widest_unsigned_literal_type_node
3694     = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
3695   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3696                                          widest_unsigned_literal_type_node));
3697
3698   /* `unsigned long' is the standard type for sizeof.
3699      Note that stddef.h uses `unsigned long',
3700      and this must agree, even if long and int are the same size.  */
3701   size_type_node =
3702     TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
3703   signed_size_type_node = c_common_signed_type (size_type_node);
3704   set_sizetype (size_type_node);
3705
3706   pid_type_node =
3707     TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
3708
3709   build_common_tree_nodes_2 (flag_short_double);
3710
3711   record_builtin_type (RID_FLOAT, NULL, float_type_node);
3712   record_builtin_type (RID_DOUBLE, NULL, double_type_node);
3713   record_builtin_type (RID_MAX, "long double", long_double_type_node);
3714
3715   /* Only supported decimal floating point extension if the target
3716      actually supports underlying modes. */
3717   if (targetm.scalar_mode_supported_p (SDmode) 
3718       && targetm.scalar_mode_supported_p (DDmode)
3719       && targetm.scalar_mode_supported_p (TDmode))
3720     {
3721       record_builtin_type (RID_DFLOAT32, NULL, dfloat32_type_node);
3722       record_builtin_type (RID_DFLOAT64, NULL, dfloat64_type_node);
3723       record_builtin_type (RID_DFLOAT128, NULL, dfloat128_type_node);
3724     }
3725
3726   if (targetm.fixed_point_supported_p ())
3727     {
3728       record_builtin_type (RID_MAX, "short _Fract", short_fract_type_node);
3729       record_builtin_type (RID_FRACT, NULL, fract_type_node);
3730       record_builtin_type (RID_MAX, "long _Fract", long_fract_type_node);
3731       record_builtin_type (RID_MAX, "long long _Fract",
3732                            long_long_fract_type_node);
3733       record_builtin_type (RID_MAX, "unsigned short _Fract",
3734                            unsigned_short_fract_type_node);
3735       record_builtin_type (RID_MAX, "unsigned _Fract",
3736                            unsigned_fract_type_node);
3737       record_builtin_type (RID_MAX, "unsigned long _Fract",
3738                            unsigned_long_fract_type_node);
3739       record_builtin_type (RID_MAX, "unsigned long long _Fract",
3740                            unsigned_long_long_fract_type_node);
3741       record_builtin_type (RID_MAX, "_Sat short _Fract",
3742                            sat_short_fract_type_node);
3743       record_builtin_type (RID_MAX, "_Sat _Fract", sat_fract_type_node);
3744       record_builtin_type (RID_MAX, "_Sat long _Fract",
3745                            sat_long_fract_type_node);
3746       record_builtin_type (RID_MAX, "_Sat long long _Fract",
3747                            sat_long_long_fract_type_node);
3748       record_builtin_type (RID_MAX, "_Sat unsigned short _Fract",
3749                            sat_unsigned_short_fract_type_node);
3750       record_builtin_type (RID_MAX, "_Sat unsigned _Fract",
3751                            sat_unsigned_fract_type_node);
3752       record_builtin_type (RID_MAX, "_Sat unsigned long _Fract",
3753                            sat_unsigned_long_fract_type_node);
3754       record_builtin_type (RID_MAX, "_Sat unsigned long long _Fract",
3755                            sat_unsigned_long_long_fract_type_node);
3756       record_builtin_type (RID_MAX, "short _Accum", short_accum_type_node);
3757       record_builtin_type (RID_ACCUM, NULL, accum_type_node);
3758       record_builtin_type (RID_MAX, "long _Accum", long_accum_type_node);
3759       record_builtin_type (RID_MAX, "long long _Accum",
3760                            long_long_accum_type_node);
3761       record_builtin_type (RID_MAX, "unsigned short _Accum",
3762                            unsigned_short_accum_type_node);
3763       record_builtin_type (RID_MAX, "unsigned _Accum",
3764                            unsigned_accum_type_node);
3765       record_builtin_type (RID_MAX, "unsigned long _Accum",
3766                            unsigned_long_accum_type_node);
3767       record_builtin_type (RID_MAX, "unsigned long long _Accum",
3768                            unsigned_long_long_accum_type_node);
3769       record_builtin_type (RID_MAX, "_Sat short _Accum",
3770                            sat_short_accum_type_node);
3771       record_builtin_type (RID_MAX, "_Sat _Accum", sat_accum_type_node);
3772       record_builtin_type (RID_MAX, "_Sat long _Accum",
3773                            sat_long_accum_type_node);
3774       record_builtin_type (RID_MAX, "_Sat long long _Accum",
3775                           sat_long_long_accum_type_node);
3776       record_builtin_type (RID_MAX, "_Sat unsigned short _Accum",
3777                            sat_unsigned_short_accum_type_node);
3778       record_builtin_type (RID_MAX, "_Sat unsigned _Accum",
3779                            sat_unsigned_accum_type_node);
3780       record_builtin_type (RID_MAX, "_Sat unsigned long _Accum",
3781                            sat_unsigned_long_accum_type_node);
3782       record_builtin_type (RID_MAX, "_Sat unsigned long long _Accum",
3783                            sat_unsigned_long_long_accum_type_node);
3784
3785     }
3786
3787   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3788                                          get_identifier ("complex int"),
3789                                          complex_integer_type_node));
3790   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3791                                          get_identifier ("complex float"),
3792                                          complex_float_type_node));
3793   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3794                                          get_identifier ("complex double"),
3795                                          complex_double_type_node));
3796   lang_hooks.decls.pushdecl
3797     (build_decl (TYPE_DECL, get_identifier ("complex long double"),
3798                  complex_long_double_type_node));
3799
3800   if (c_dialect_cxx ())
3801     /* For C++, make fileptr_type_node a distinct void * type until
3802        FILE type is defined.  */
3803     fileptr_type_node = build_variant_type_copy (ptr_type_node);
3804
3805   record_builtin_type (RID_VOID, NULL, void_type_node);
3806
3807   /* Set the TYPE_NAME for any variants that were built before
3808      record_builtin_type gave names to the built-in types. */
3809   {
3810     tree void_name = TYPE_NAME (void_type_node);
3811     TYPE_NAME (void_type_node) = NULL_TREE;
3812     TYPE_NAME (build_qualified_type (void_type_node, TYPE_QUAL_CONST))
3813       = void_name;
3814     TYPE_NAME (void_type_node) = void_name;
3815   }
3816
3817   /* This node must not be shared.  */
3818   void_zero_node = make_node (INTEGER_CST);
3819   TREE_TYPE (void_zero_node) = void_type_node;
3820
3821   void_list_node = build_void_list_node ();
3822
3823   /* Make a type to be the domain of a few array types
3824      whose domains don't really matter.
3825      200 is small enough that it always fits in size_t
3826      and large enough that it can hold most function names for the
3827      initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
3828   array_domain_type = build_index_type (size_int (200));
3829
3830   /* Make a type for arrays of characters.
3831      With luck nothing will ever really depend on the length of this
3832      array type.  */
3833   char_array_type_node
3834     = build_array_type (char_type_node, array_domain_type);
3835
3836   /* Likewise for arrays of ints.  */
3837   int_array_type_node
3838     = build_array_type (integer_type_node, array_domain_type);
3839
3840   string_type_node = build_pointer_type (char_type_node);
3841   const_string_type_node
3842     = build_pointer_type (build_qualified_type
3843                           (char_type_node, TYPE_QUAL_CONST));
3844
3845   /* This is special for C++ so functions can be overloaded.  */
3846   wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
3847   wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
3848   wchar_type_size = TYPE_PRECISION (wchar_type_node);
3849   if (c_dialect_cxx ())
3850     {
3851       if (TYPE_UNSIGNED (wchar_type_node))
3852         wchar_type_node = make_unsigned_type (wchar_type_size);
3853       else
3854         wchar_type_node = make_signed_type (wchar_type_size);
3855       record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
3856     }
3857   else
3858     {
3859       signed_wchar_type_node = c_common_signed_type (wchar_type_node);
3860       unsigned_wchar_type_node = c_common_unsigned_type (wchar_type_node);
3861     }
3862
3863   /* This is for wide string constants.  */
3864   wchar_array_type_node
3865     = build_array_type (wchar_type_node, array_domain_type);
3866
3867   wint_type_node =
3868     TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
3869
3870   intmax_type_node =
3871     TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
3872   uintmax_type_node =
3873     TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
3874
3875   default_function_type = build_function_type (integer_type_node, NULL_TREE);
3876   ptrdiff_type_node
3877     = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
3878   unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
3879
3880   lang_hooks.decls.pushdecl
3881     (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
3882                  va_list_type_node));
3883
3884   if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
3885     {
3886       va_list_arg_type_node = va_list_ref_type_node =
3887         build_pointer_type (TREE_TYPE (va_list_type_node));
3888     }
3889   else
3890     {
3891       va_list_arg_type_node = va_list_type_node;
3892       va_list_ref_type_node = build_reference_type (va_list_type_node);
3893     }
3894
3895   if (!flag_preprocess_only)
3896     c_define_builtins (va_list_ref_type_node, va_list_arg_type_node);
3897
3898   main_identifier_node = get_identifier ("main");
3899
3900   /* Create the built-in __null node.  It is important that this is
3901      not shared.  */
3902   null_node = make_node (INTEGER_CST);
3903   TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
3904
3905   /* Since builtin_types isn't gc'ed, don't export these nodes.  */
3906   memset (builtin_types, 0, sizeof (builtin_types));
3907 }
3908
3909 /* Look up the function in built_in_decls that corresponds to DECL
3910    and set ASMSPEC as its user assembler name.  DECL must be a
3911    function decl that declares a builtin.  */
3912
3913 void
3914 set_builtin_user_assembler_name (tree decl, const char *asmspec)
3915 {
3916   tree builtin;
3917   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
3918               && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
3919               && asmspec != 0);
3920
3921   builtin = built_in_decls [DECL_FUNCTION_CODE (decl)];
3922   set_user_assembler_name (builtin, asmspec);
3923   if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMCPY)
3924     init_block_move_fn (asmspec);
3925   else if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMSET)
3926     init_block_clear_fn (asmspec);
3927 }
3928
3929 /* The number of named compound-literals generated thus far.  */
3930 static GTY(()) int compound_literal_number;
3931
3932 /* Set DECL_NAME for DECL, a VAR_DECL for a compound-literal.  */
3933
3934 void
3935 set_compound_literal_name (tree decl)
3936 {
3937   char *name;
3938   ASM_FORMAT_PRIVATE_NAME (name, "__compound_literal",
3939                            compound_literal_number);
3940   compound_literal_number++;
3941   DECL_NAME (decl) = get_identifier (name);
3942 }
3943
3944 tree
3945 build_va_arg (tree expr, tree type)
3946 {
3947   return build1 (VA_ARG_EXPR, type, expr);
3948 }
3949
3950
3951 /* Linked list of disabled built-in functions.  */
3952
3953 typedef struct disabled_builtin
3954 {
3955   const char *name;
3956   struct disabled_builtin *next;
3957 } disabled_builtin;
3958 static disabled_builtin *disabled_builtins = NULL;
3959
3960 static bool builtin_function_disabled_p (const char *);
3961
3962 /* Disable a built-in function specified by -fno-builtin-NAME.  If NAME
3963    begins with "__builtin_", give an error.  */
3964
3965 void
3966 disable_builtin_function (const char *name)
3967 {
3968   if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
3969     error ("cannot disable built-in function %qs", name);
3970   else
3971     {
3972       disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
3973       new_disabled_builtin->name = name;
3974       new_disabled_builtin->next = disabled_builtins;
3975       disabled_builtins = new_disabled_builtin;
3976     }
3977 }
3978
3979
3980 /* Return true if the built-in function NAME has been disabled, false
3981    otherwise.  */
3982
3983 static bool
3984 builtin_function_disabled_p (const char *name)
3985 {
3986   disabled_builtin *p;
3987   for (p = disabled_builtins; p != NULL; p = p->next)
3988     {
3989       if (strcmp (name, p->name) == 0)
3990         return true;
3991     }
3992   return false;
3993 }
3994
3995
3996 /* Worker for DEF_BUILTIN.
3997    Possibly define a builtin function with one or two names.
3998    Does not declare a non-__builtin_ function if flag_no_builtin, or if
3999    nonansi_p and flag_no_nonansi_builtin.  */
4000
4001 static void
4002 def_builtin_1 (enum built_in_function fncode,
4003                const char *name,
4004                enum built_in_class fnclass,
4005                tree fntype, tree libtype,
4006                bool both_p, bool fallback_p, bool nonansi_p,
4007                tree fnattrs, bool implicit_p)
4008 {
4009   tree decl;
4010   const char *libname;
4011
4012   if (fntype == error_mark_node)
4013     return;
4014
4015   gcc_assert ((!both_p && !fallback_p)
4016               || !strncmp (name, "__builtin_",
4017                            strlen ("__builtin_")));
4018
4019   libname = name + strlen ("__builtin_");
4020   decl = add_builtin_function (name, fntype, fncode, fnclass,
4021                                (fallback_p ? libname : NULL),
4022                                fnattrs);
4023   if (both_p
4024       && !flag_no_builtin && !builtin_function_disabled_p (libname)
4025       && !(nonansi_p && flag_no_nonansi_builtin))
4026     add_builtin_function (libname, libtype, fncode, fnclass,
4027                           NULL, fnattrs);
4028
4029   built_in_decls[(int) fncode] = decl;
4030   if (implicit_p)
4031     implicit_built_in_decls[(int) fncode] = decl;
4032 }
4033 \f
4034 /* Nonzero if the type T promotes to int.  This is (nearly) the
4035    integral promotions defined in ISO C99 6.3.1.1/2.  */
4036
4037 bool
4038 c_promoting_integer_type_p (const_tree t)
4039 {
4040   switch (TREE_CODE (t))
4041     {
4042     case INTEGER_TYPE:
4043       return (TYPE_MAIN_VARIANT (t) == char_type_node
4044               || TYPE_MAIN_VARIANT (t) == signed_char_type_node
4045               || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
4046               || TYPE_MAIN_VARIANT (t) == short_integer_type_node
4047               || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
4048               || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
4049
4050     case ENUMERAL_TYPE:
4051       /* ??? Technically all enumerations not larger than an int
4052          promote to an int.  But this is used along code paths
4053          that only want to notice a size change.  */
4054       return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
4055
4056     case BOOLEAN_TYPE:
4057       return 1;
4058
4059     default:
4060       return 0;
4061     }
4062 }
4063
4064 /* Return 1 if PARMS specifies a fixed number of parameters
4065    and none of their types is affected by default promotions.  */
4066
4067 int
4068 self_promoting_args_p (const_tree parms)
4069 {
4070   const_tree t;
4071   for (t = parms; t; t = TREE_CHAIN (t))
4072     {
4073       tree type = TREE_VALUE (t);
4074
4075       if (type == error_mark_node)
4076         continue;
4077
4078       if (TREE_CHAIN (t) == 0 && type != void_type_node)
4079         return 0;
4080
4081       if (type == 0)
4082         return 0;
4083
4084       if (TYPE_MAIN_VARIANT (type) == float_type_node)
4085         return 0;
4086
4087       if (c_promoting_integer_type_p (type))
4088         return 0;
4089     }
4090   return 1;
4091 }
4092
4093 /* Recursively examines the array elements of TYPE, until a non-array
4094    element type is found.  */
4095
4096 tree
4097 strip_array_types (tree type)
4098 {
4099   while (TREE_CODE (type) == ARRAY_TYPE)
4100     type = TREE_TYPE (type);
4101
4102   return type;
4103 }
4104
4105 /* Recursively remove any '*' or '&' operator from TYPE.  */
4106 tree
4107 strip_pointer_operator (tree t)
4108 {
4109   while (POINTER_TYPE_P (t))
4110     t = TREE_TYPE (t);
4111   return t;
4112 }
4113
4114 /* Recursively remove pointer or array type from TYPE. */
4115 tree
4116 strip_pointer_or_array_types (tree t)
4117 {
4118   while (TREE_CODE (t) == ARRAY_TYPE || POINTER_TYPE_P (t))
4119     t = TREE_TYPE (t);
4120   return t;
4121 }
4122
4123 /* Used to compare case labels.  K1 and K2 are actually tree nodes
4124    representing case labels, or NULL_TREE for a `default' label.
4125    Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
4126    K2, and 0 if K1 and K2 are equal.  */
4127
4128 int
4129 case_compare (splay_tree_key k1, splay_tree_key k2)
4130 {
4131   /* Consider a NULL key (such as arises with a `default' label) to be
4132      smaller than anything else.  */
4133   if (!k1)
4134     return k2 ? -1 : 0;
4135   else if (!k2)
4136     return k1 ? 1 : 0;
4137
4138   return tree_int_cst_compare ((tree) k1, (tree) k2);
4139 }
4140
4141 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE.  If
4142    LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
4143    actually a `default' label.  If only HIGH_VALUE is NULL_TREE, then
4144    case label was declared using the usual C/C++ syntax, rather than
4145    the GNU case range extension.  CASES is a tree containing all the
4146    case ranges processed so far; COND is the condition for the
4147    switch-statement itself.  Returns the CASE_LABEL_EXPR created, or
4148    ERROR_MARK_NODE if no CASE_LABEL_EXPR is created.  */
4149
4150 tree
4151 c_add_case_label (splay_tree cases, tree cond, tree orig_type,
4152                   tree low_value, tree high_value)
4153 {
4154   tree type;
4155   tree label;
4156   tree case_label;
4157   splay_tree_node node;
4158
4159   /* Create the LABEL_DECL itself.  */
4160   label = create_artificial_label ();
4161
4162   /* If there was an error processing the switch condition, bail now
4163      before we get more confused.  */
4164   if (!cond || cond == error_mark_node)
4165     goto error_out;
4166
4167   if ((low_value && TREE_TYPE (low_value)
4168        && POINTER_TYPE_P (TREE_TYPE (low_value)))
4169       || (high_value && TREE_TYPE (high_value)
4170           && POINTER_TYPE_P (TREE_TYPE (high_value))))
4171     {
4172       error ("pointers are not permitted as case values");
4173       goto error_out;
4174     }
4175
4176   /* Case ranges are a GNU extension.  */
4177   if (high_value && pedantic)
4178     pedwarn ("range expressions in switch statements are non-standard");
4179
4180   type = TREE_TYPE (cond);
4181   if (low_value)
4182     {
4183       low_value = check_case_value (low_value);
4184       low_value = convert_and_check (type, low_value);
4185       if (low_value == error_mark_node)
4186         goto error_out;
4187     }
4188   if (high_value)
4189     {
4190       high_value = check_case_value (high_value);
4191       high_value = convert_and_check (type, high_value);
4192       if (high_value == error_mark_node)
4193         goto error_out;
4194     }
4195
4196   if (low_value && high_value)
4197     {
4198       /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
4199          really a case range, even though it was written that way.
4200          Remove the HIGH_VALUE to simplify later processing.  */
4201       if (tree_int_cst_equal (low_value, high_value))
4202         high_value = NULL_TREE;
4203       else if (!tree_int_cst_lt (low_value, high_value))
4204         warning (0, "empty range specified");
4205     }
4206
4207   /* See if the case is in range of the type of the original testing
4208      expression.  If both low_value and high_value are out of range,
4209      don't insert the case label and return NULL_TREE.  */
4210   if (low_value
4211       && !check_case_bounds (type, orig_type,
4212                              &low_value, high_value ? &high_value : NULL))
4213     return NULL_TREE;
4214
4215   /* Look up the LOW_VALUE in the table of case labels we already
4216      have.  */
4217   node = splay_tree_lookup (cases, (splay_tree_key) low_value);
4218   /* If there was not an exact match, check for overlapping ranges.
4219      There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
4220      that's a `default' label and the only overlap is an exact match.  */
4221   if (!node && (low_value || high_value))
4222     {
4223       splay_tree_node low_bound;
4224       splay_tree_node high_bound;
4225
4226       /* Even though there wasn't an exact match, there might be an
4227          overlap between this case range and another case range.
4228          Since we've (inductively) not allowed any overlapping case
4229          ranges, we simply need to find the greatest low case label
4230          that is smaller that LOW_VALUE, and the smallest low case
4231          label that is greater than LOW_VALUE.  If there is an overlap
4232          it will occur in one of these two ranges.  */
4233       low_bound = splay_tree_predecessor (cases,
4234                                           (splay_tree_key) low_value);
4235       high_bound = splay_tree_successor (cases,
4236                                          (splay_tree_key) low_value);
4237
4238       /* Check to see if the LOW_BOUND overlaps.  It is smaller than
4239          the LOW_VALUE, so there is no need to check unless the
4240          LOW_BOUND is in fact itself a case range.  */
4241       if (low_bound
4242           && CASE_HIGH ((tree) low_bound->value)
4243           && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
4244                                     low_value) >= 0)
4245         node = low_bound;
4246       /* Check to see if the HIGH_BOUND overlaps.  The low end of that
4247          range is bigger than the low end of the current range, so we
4248          are only interested if the current range is a real range, and
4249          not an ordinary case label.  */
4250       else if (high_bound
4251                && high_value
4252                && (tree_int_cst_compare ((tree) high_bound->key,
4253                                          high_value)
4254                    <= 0))
4255         node = high_bound;
4256     }
4257   /* If there was an overlap, issue an error.  */
4258   if (node)
4259     {
4260       tree duplicate = CASE_LABEL ((tree) node->value);
4261
4262       if (high_value)
4263         {
4264           error ("duplicate (or overlapping) case value");
4265           error ("%Jthis is the first entry overlapping that value", duplicate);
4266         }
4267       else if (low_value)
4268         {
4269           error ("duplicate case value") ;
4270           error ("%Jpreviously used here", duplicate);
4271         }
4272       else
4273         {
4274           error ("multiple default labels in one switch");
4275           error ("%Jthis is the first default label", duplicate);
4276         }
4277       goto error_out;
4278     }
4279
4280   /* Add a CASE_LABEL to the statement-tree.  */
4281   case_label = add_stmt (build_case_label (low_value, high_value, label));
4282   /* Register this case label in the splay tree.  */
4283   splay_tree_insert (cases,
4284                      (splay_tree_key) low_value,
4285                      (splay_tree_value) case_label);
4286
4287   return case_label;
4288
4289  error_out:
4290   /* Add a label so that the back-end doesn't think that the beginning of
4291      the switch is unreachable.  Note that we do not add a case label, as
4292      that just leads to duplicates and thence to failure later on.  */
4293   if (!cases->root)
4294     {
4295       tree t = create_artificial_label ();
4296       add_stmt (build_stmt (LABEL_EXPR, t));
4297     }
4298   return error_mark_node;
4299 }
4300
4301 /* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
4302    Used to verify that case values match up with enumerator values.  */
4303
4304 static void
4305 match_case_to_enum_1 (tree key, tree type, tree label)
4306 {
4307   char buf[2 + 2*HOST_BITS_PER_WIDE_INT/4 + 1];
4308
4309   /* ??? Not working too hard to print the double-word value.
4310      Should perhaps be done with %lwd in the diagnostic routines?  */
4311   if (TREE_INT_CST_HIGH (key) == 0)
4312     snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_UNSIGNED,
4313               TREE_INT_CST_LOW (key));
4314   else if (!TYPE_UNSIGNED (type)
4315            && TREE_INT_CST_HIGH (key) == -1
4316            && TREE_INT_CST_LOW (key) != 0)
4317     snprintf (buf, sizeof (buf), "-" HOST_WIDE_INT_PRINT_UNSIGNED,
4318               -TREE_INT_CST_LOW (key));
4319   else
4320     snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_DOUBLE_HEX,
4321               TREE_INT_CST_HIGH (key), TREE_INT_CST_LOW (key));
4322
4323   if (TYPE_NAME (type) == 0)
4324     warning (0, "%Jcase value %qs not in enumerated type",
4325              CASE_LABEL (label), buf);
4326   else
4327     warning (0, "%Jcase value %qs not in enumerated type %qT",
4328              CASE_LABEL (label), buf, type);
4329 }
4330
4331 /* Subroutine of c_do_switch_warnings, called via splay_tree_foreach.
4332    Used to verify that case values match up with enumerator values.  */
4333
4334 static int
4335 match_case_to_enum (splay_tree_node node, void *data)
4336 {
4337   tree label = (tree) node->value;
4338   tree type = (tree) data;
4339
4340   /* Skip default case.  */
4341   if (!CASE_LOW (label))
4342     return 0;
4343
4344   /* If CASE_LOW_SEEN is not set, that means CASE_LOW did not appear
4345      when we did our enum->case scan.  Reset our scratch bit after.  */
4346   if (!CASE_LOW_SEEN (label))
4347     match_case_to_enum_1 (CASE_LOW (label), type, label);
4348   else
4349     CASE_LOW_SEEN (label) = 0;
4350
4351   /* If CASE_HIGH is non-null, we have a range.  If CASE_HIGH_SEEN is
4352      not set, that means that CASE_HIGH did not appear when we did our
4353      enum->case scan.  Reset our scratch bit after.  */
4354   if (CASE_HIGH (label))
4355     {
4356       if (!CASE_HIGH_SEEN (label))
4357         match_case_to_enum_1 (CASE_HIGH (label), type, label);
4358       else
4359         CASE_HIGH_SEEN (label) = 0;
4360     }
4361
4362   return 0;
4363 }
4364
4365 /* Handle -Wswitch*.  Called from the front end after parsing the
4366    switch construct.  */
4367 /* ??? Should probably be somewhere generic, since other languages
4368    besides C and C++ would want this.  At the moment, however, C/C++
4369    are the only tree-ssa languages that support enumerations at all,
4370    so the point is moot.  */
4371
4372 void
4373 c_do_switch_warnings (splay_tree cases, location_t switch_location,
4374                       tree type, tree cond)
4375 {
4376   splay_tree_node default_node;
4377   splay_tree_node node;
4378   tree chain;
4379
4380   if (!warn_switch && !warn_switch_enum && !warn_switch_default)
4381     return;
4382
4383   default_node = splay_tree_lookup (cases, (splay_tree_key) NULL);
4384   if (!default_node)
4385     warning (OPT_Wswitch_default, "%Hswitch missing default case",
4386              &switch_location);
4387
4388   /* From here on, we only care about about enumerated types.  */
4389   if (!type || TREE_CODE (type) != ENUMERAL_TYPE)
4390     return;
4391
4392   /* If the switch expression was an enumerated type, check that
4393      exactly all enumeration literals are covered by the cases.
4394      The check is made when -Wswitch was specified and there is no
4395      default case, or when -Wswitch-enum was specified.  */
4396
4397   if (!warn_switch_enum
4398       && !(warn_switch && !default_node))
4399     return;
4400
4401   /* Clearing COND if it is not an integer constant simplifies
4402      the tests inside the loop below.  */
4403   if (TREE_CODE (cond) != INTEGER_CST)
4404     cond = NULL_TREE;
4405
4406   /* The time complexity here is O(N*lg(N)) worst case, but for the
4407       common case of monotonically increasing enumerators, it is
4408       O(N), since the nature of the splay tree will keep the next
4409       element adjacent to the root at all times.  */
4410
4411   for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain))
4412     {
4413       tree value = TREE_VALUE (chain);
4414       node = splay_tree_lookup (cases, (splay_tree_key) value);
4415       if (node)
4416         {
4417           /* Mark the CASE_LOW part of the case entry as seen.  */
4418           tree label = (tree) node->value;
4419           CASE_LOW_SEEN (label) = 1;
4420           continue;
4421         }
4422
4423       /* Even though there wasn't an exact match, there might be a
4424          case range which includes the enumator's value.  */
4425       node = splay_tree_predecessor (cases, (splay_tree_key) value);
4426       if (node && CASE_HIGH ((tree) node->value))
4427         {
4428           tree label = (tree) node->value;
4429           int cmp = tree_int_cst_compare (CASE_HIGH (label), value);
4430           if (cmp >= 0)
4431             {
4432               /* If we match the upper bound exactly, mark the CASE_HIGH
4433                  part of the case entry as seen.  */
4434               if (cmp == 0)
4435                 CASE_HIGH_SEEN (label) = 1;
4436               continue;
4437             }
4438         }
4439
4440       /* We've now determined that this enumerated literal isn't
4441          handled by the case labels of the switch statement.  */
4442
4443       /* If the switch expression is a constant, we only really care
4444          about whether that constant is handled by the switch.  */
4445       if (cond && tree_int_cst_compare (cond, value))
4446         continue;
4447
4448       warning (0, "%Henumeration value %qE not handled in switch",
4449                &switch_location, TREE_PURPOSE (chain));
4450     }
4451
4452   /* Warn if there are case expressions that don't correspond to
4453      enumerators.  This can occur since C and C++ don't enforce
4454      type-checking of assignments to enumeration variables.
4455
4456      The time complexity here is now always O(N) worst case, since
4457      we should have marked both the lower bound and upper bound of
4458      every disjoint case label, with CASE_LOW_SEEN and CASE_HIGH_SEEN
4459      above.  This scan also resets those fields.  */
4460   splay_tree_foreach (cases, match_case_to_enum, type);
4461 }
4462
4463 /* Finish an expression taking the address of LABEL (an
4464    IDENTIFIER_NODE).  Returns an expression for the address.  */
4465
4466 tree
4467 finish_label_address_expr (tree label)
4468 {
4469   tree result;
4470
4471   if (pedantic)
4472     pedwarn ("taking the address of a label is non-standard");
4473
4474   if (label == error_mark_node)
4475     return error_mark_node;
4476
4477   label = lookup_label (label);
4478   if (label == NULL_TREE)
4479     result = null_pointer_node;
4480   else
4481     {
4482       TREE_USED (label) = 1;
4483       result = build1 (ADDR_EXPR, ptr_type_node, label);
4484       /* The current function in not necessarily uninlinable.
4485          Computed gotos are incompatible with inlining, but the value
4486          here could be used only in a diagnostic, for example.  */
4487     }
4488
4489   return result;
4490 }
4491
4492 /* Hook used by expand_expr to expand language-specific tree codes.  */
4493 /* The only things that should go here are bits needed to expand
4494    constant initializers.  Everything else should be handled by the
4495    gimplification routines.  */
4496
4497 rtx
4498 c_expand_expr (tree exp, rtx target, enum machine_mode tmode,
4499                int modifier /* Actually enum_modifier.  */,
4500                rtx *alt_rtl)
4501 {
4502   switch (TREE_CODE (exp))
4503     {
4504     case COMPOUND_LITERAL_EXPR:
4505       {
4506         /* Initialize the anonymous variable declared in the compound
4507            literal, then return the variable.  */
4508         tree decl = COMPOUND_LITERAL_EXPR_DECL (exp);
4509         emit_local_var (decl);
4510         return expand_expr_real (decl, target, tmode, modifier, alt_rtl);
4511       }
4512
4513     default:
4514       gcc_unreachable ();
4515     }
4516 }
4517
4518 /* Hook used by staticp to handle language-specific tree codes.  */
4519
4520 tree
4521 c_staticp (tree exp)
4522 {
4523   return (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
4524           && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp))
4525           ? exp : NULL);
4526 }
4527 \f
4528
4529 /* Given a boolean expression ARG, return a tree representing an increment
4530    or decrement (as indicated by CODE) of ARG.  The front end must check for
4531    invalid cases (e.g., decrement in C++).  */
4532 tree
4533 boolean_increment (enum tree_code code, tree arg)
4534 {
4535   tree val;
4536   tree true_res = build_int_cst (TREE_TYPE (arg), 1);
4537
4538   arg = stabilize_reference (arg);
4539   switch (code)
4540     {
4541     case PREINCREMENT_EXPR:
4542       val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4543       break;
4544     case POSTINCREMENT_EXPR:
4545       val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4546       arg = save_expr (arg);
4547       val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4548       val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4549       break;
4550     case PREDECREMENT_EXPR:
4551       val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
4552                     invert_truthvalue (arg));
4553       break;
4554     case POSTDECREMENT_EXPR:
4555       val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
4556                     invert_truthvalue (arg));
4557       arg = save_expr (arg);
4558       val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4559       val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4560       break;
4561     default:
4562       gcc_unreachable ();
4563     }
4564   TREE_SIDE_EFFECTS (val) = 1;
4565   return val;
4566 }
4567 \f
4568 /* Built-in macros for stddef.h, that require macros defined in this
4569    file.  */
4570 void
4571 c_stddef_cpp_builtins(void)
4572 {
4573   builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
4574   builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
4575   builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
4576   builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
4577   builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE, 0);
4578   builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE, 0);
4579 }
4580
4581 static void
4582 c_init_attributes (void)
4583 {
4584   /* Fill in the built_in_attributes array.  */
4585 #define DEF_ATTR_NULL_TREE(ENUM)                                \
4586   built_in_attributes[(int) ENUM] = NULL_TREE;
4587 #define DEF_ATTR_INT(ENUM, VALUE)                               \
4588   built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
4589 #define DEF_ATTR_IDENT(ENUM, STRING)                            \
4590   built_in_attributes[(int) ENUM] = get_identifier (STRING);
4591 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
4592   built_in_attributes[(int) ENUM]                       \
4593     = tree_cons (built_in_attributes[(int) PURPOSE],    \
4594                  built_in_attributes[(int) VALUE],      \
4595                  built_in_attributes[(int) CHAIN]);
4596 #include "builtin-attrs.def"
4597 #undef DEF_ATTR_NULL_TREE
4598 #undef DEF_ATTR_INT
4599 #undef DEF_ATTR_IDENT
4600 #undef DEF_ATTR_TREE_LIST
4601 }
4602
4603 /* Attribute handlers common to C front ends.  */
4604
4605 /* Handle a "packed" attribute; arguments as in
4606    struct attribute_spec.handler.  */
4607
4608 static tree
4609 handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4610                          int flags, bool *no_add_attrs)
4611 {
4612   if (TYPE_P (*node))
4613     {
4614       if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4615         *node = build_variant_type_copy (*node);
4616       TYPE_PACKED (*node) = 1;
4617     }
4618   else if (TREE_CODE (*node) == FIELD_DECL)
4619     {
4620       if (TYPE_ALIGN (TREE_TYPE (*node)) <= BITS_PER_UNIT)
4621         warning (OPT_Wattributes,
4622                  "%qE attribute ignored for field of type %qT",
4623                  name, TREE_TYPE (*node));
4624       else
4625         DECL_PACKED (*node) = 1;
4626     }
4627   /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
4628      used for DECL_REGISTER.  It wouldn't mean anything anyway.
4629      We can't set DECL_PACKED on the type of a TYPE_DECL, because
4630      that changes what the typedef is typing.  */
4631   else
4632     {
4633       warning (OPT_Wattributes, "%qE attribute ignored", name);
4634       *no_add_attrs = true;
4635     }
4636
4637   return NULL_TREE;
4638 }
4639
4640 /* Handle a "nocommon" attribute; arguments as in
4641    struct attribute_spec.handler.  */
4642
4643 static tree
4644 handle_nocommon_attribute (tree *node, tree name,
4645                            tree ARG_UNUSED (args),
4646                            int ARG_UNUSED (flags), bool *no_add_attrs)
4647 {
4648   if (TREE_CODE (*node) == VAR_DECL)
4649     DECL_COMMON (*node) = 0;
4650   else
4651     {
4652       warning (OPT_Wattributes, "%qE attribute ignored", name);
4653       *no_add_attrs = true;
4654     }
4655
4656   return NULL_TREE;
4657 }
4658
4659 /* Handle a "common" attribute; arguments as in
4660    struct attribute_spec.handler.  */
4661
4662 static tree
4663 handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4664                          int ARG_UNUSED (flags), bool *no_add_attrs)
4665 {
4666   if (TREE_CODE (*node) == VAR_DECL)
4667     DECL_COMMON (*node) = 1;
4668   else
4669     {
4670       warning (OPT_Wattributes, "%qE attribute ignored", name);
4671       *no_add_attrs = true;
4672     }
4673
4674   return NULL_TREE;
4675 }
4676
4677 /* Handle a "noreturn" attribute; arguments as in
4678    struct attribute_spec.handler.  */
4679
4680 static tree
4681 handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4682                            int ARG_UNUSED (flags), bool *no_add_attrs)
4683 {
4684   tree type = TREE_TYPE (*node);
4685
4686   /* See FIXME comment in c_common_attribute_table.  */
4687   if (TREE_CODE (*node) == FUNCTION_DECL)
4688     TREE_THIS_VOLATILE (*node) = 1;
4689   else if (TREE_CODE (type) == POINTER_TYPE
4690            && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4691     TREE_TYPE (*node)
4692       = build_pointer_type
4693         (build_type_variant (TREE_TYPE (type),
4694                              TYPE_READONLY (TREE_TYPE (type)), 1));
4695   else
4696     {
4697       warning (OPT_Wattributes, "%qE attribute ignored", name);
4698       *no_add_attrs = true;
4699     }
4700
4701   return NULL_TREE;
4702 }
4703
4704 /* Handle a "hot" and attribute; arguments as in
4705    struct attribute_spec.handler.  */
4706
4707 static tree
4708 handle_hot_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4709                           int ARG_UNUSED (flags), bool *no_add_attrs)
4710 {
4711   if (TREE_CODE (*node) == FUNCTION_DECL)
4712     {
4713       if (lookup_attribute ("cold", DECL_ATTRIBUTES (*node)) != NULL)
4714         {
4715           warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
4716                    name, "cold");
4717           *no_add_attrs = true;
4718         }
4719       /* Do nothing else, just set the attribute.  We'll get at
4720          it later with lookup_attribute.  */
4721     }
4722   else
4723     {
4724       warning (OPT_Wattributes, "%qE attribute ignored", name);
4725       *no_add_attrs = true;
4726     }
4727
4728   return NULL_TREE;
4729 }
4730 /* Handle a "cold" and attribute; arguments as in
4731    struct attribute_spec.handler.  */
4732
4733 static tree
4734 handle_cold_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4735                        int ARG_UNUSED (flags), bool *no_add_attrs)
4736 {
4737   if (TREE_CODE (*node) == FUNCTION_DECL)
4738     {
4739       if (lookup_attribute ("hot", DECL_ATTRIBUTES (*node)) != NULL)
4740         {
4741           warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
4742                    name, "hot");
4743           *no_add_attrs = true;
4744         }
4745       /* Do nothing else, just set the attribute.  We'll get at
4746          it later with lookup_attribute.  */
4747     }
4748   else
4749     {
4750       warning (OPT_Wattributes, "%qE attribute ignored", name);
4751       *no_add_attrs = true;
4752     }
4753
4754   return NULL_TREE;
4755 }
4756
4757 /* Handle a "noinline" attribute; arguments as in
4758    struct attribute_spec.handler.  */
4759
4760 static tree
4761 handle_noinline_attribute (tree *node, tree name,
4762                            tree ARG_UNUSED (args),
4763                            int ARG_UNUSED (flags), bool *no_add_attrs)
4764 {
4765   if (TREE_CODE (*node) == FUNCTION_DECL)
4766     DECL_UNINLINABLE (*node) = 1;
4767   else
4768     {
4769       warning (OPT_Wattributes, "%qE attribute ignored", name);
4770       *no_add_attrs = true;
4771     }
4772
4773   return NULL_TREE;
4774 }
4775
4776 /* Handle a "always_inline" attribute; arguments as in
4777    struct attribute_spec.handler.  */
4778
4779 static tree
4780 handle_always_inline_attribute (tree *node, tree name,
4781                                 tree ARG_UNUSED (args),
4782                                 int ARG_UNUSED (flags),
4783                                 bool *no_add_attrs)
4784 {
4785   if (TREE_CODE (*node) == FUNCTION_DECL)
4786     {
4787       /* Set the attribute and mark it for disregarding inline
4788          limits.  */
4789       DECL_DISREGARD_INLINE_LIMITS (*node) = 1;
4790     }
4791   else
4792     {
4793       warning (OPT_Wattributes, "%qE attribute ignored", name);
4794       *no_add_attrs = true;
4795     }
4796
4797   return NULL_TREE;
4798 }
4799
4800 /* Handle a "gnu_inline" attribute; arguments as in
4801    struct attribute_spec.handler.  */
4802
4803 static tree
4804 handle_gnu_inline_attribute (tree *node, tree name,
4805                              tree ARG_UNUSED (args),
4806                              int ARG_UNUSED (flags),
4807                              bool *no_add_attrs)
4808 {
4809   if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
4810     {
4811       /* Do nothing else, just set the attribute.  We'll get at
4812          it later with lookup_attribute.  */
4813     }
4814   else
4815     {
4816       warning (OPT_Wattributes, "%qE attribute ignored", name);
4817       *no_add_attrs = true;
4818     }
4819
4820   return NULL_TREE;
4821 }
4822
4823 /* Handle an "artificial" attribute; arguments as in
4824    struct attribute_spec.handler.  */
4825
4826 static tree
4827 handle_artificial_attribute (tree *node, tree name,
4828                              tree ARG_UNUSED (args),
4829                              int ARG_UNUSED (flags),
4830                              bool *no_add_attrs)
4831 {
4832   if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
4833     {
4834       /* Do nothing else, just set the attribute.  We'll get at
4835          it later with lookup_attribute.  */
4836     }
4837   else
4838     {
4839       warning (OPT_Wattributes, "%qE attribute ignored", name);
4840       *no_add_attrs = true;
4841     }
4842
4843   return NULL_TREE;
4844 }
4845
4846 /* Handle a "flatten" attribute; arguments as in
4847    struct attribute_spec.handler.  */
4848
4849 static tree
4850 handle_flatten_attribute (tree *node, tree name,
4851                           tree args ATTRIBUTE_UNUSED,
4852                           int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4853 {
4854   if (TREE_CODE (*node) == FUNCTION_DECL)
4855     /* Do nothing else, just set the attribute.  We'll get at
4856        it later with lookup_attribute.  */
4857     ;
4858   else
4859     {
4860       warning (OPT_Wattributes, "%qE attribute ignored", name);
4861       *no_add_attrs = true;
4862     }
4863
4864   return NULL_TREE;
4865 }
4866
4867 /* Handle a "warning" or "error" attribute; arguments as in
4868    struct attribute_spec.handler.  */
4869
4870 static tree
4871 handle_error_attribute (tree *node, tree name, tree args,
4872                         int ARG_UNUSED (flags), bool *no_add_attrs)
4873 {
4874   if (TREE_CODE (*node) == FUNCTION_DECL
4875       || TREE_CODE (TREE_VALUE (args)) == STRING_CST)
4876     /* Do nothing else, just set the attribute.  We'll get at
4877        it later with lookup_attribute.  */
4878     ;
4879   else
4880     {
4881       warning (OPT_Wattributes, "%qE attribute ignored", name);
4882       *no_add_attrs = true;
4883     }
4884
4885   return NULL_TREE;
4886 }
4887
4888 /* Handle a "used" attribute; arguments as in
4889    struct attribute_spec.handler.  */
4890
4891 static tree
4892 handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
4893                        int ARG_UNUSED (flags), bool *no_add_attrs)
4894 {
4895   tree node = *pnode;
4896
4897   if (TREE_CODE (node) == FUNCTION_DECL
4898       || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
4899     {
4900       TREE_USED (node) = 1;
4901       DECL_PRESERVE_P (node) = 1;
4902     }
4903   else
4904     {
4905       warning (OPT_Wattributes, "%qE attribute ignored", name);
4906       *no_add_attrs = true;
4907     }
4908
4909   return NULL_TREE;
4910 }
4911
4912 /* Handle a "unused" attribute; arguments as in
4913    struct attribute_spec.handler.  */
4914
4915 static tree
4916 handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4917                          int flags, bool *no_add_attrs)
4918 {
4919   if (DECL_P (*node))
4920     {
4921       tree decl = *node;
4922
4923       if (TREE_CODE (decl) == PARM_DECL
4924           || TREE_CODE (decl) == VAR_DECL
4925           || TREE_CODE (decl) == FUNCTION_DECL
4926           || TREE_CODE (decl) == LABEL_DECL
4927           || TREE_CODE (decl) == TYPE_DECL)
4928         TREE_USED (decl) = 1;
4929       else
4930         {
4931           warning (OPT_Wattributes, "%qE attribute ignored", name);
4932           *no_add_attrs = true;
4933         }
4934     }
4935   else
4936     {
4937       if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4938         *node = build_variant_type_copy (*node);
4939       TREE_USED (*node) = 1;
4940     }
4941
4942   return NULL_TREE;
4943 }
4944
4945 /* Handle a "externally_visible" attribute; arguments as in
4946    struct attribute_spec.handler.  */
4947
4948 static tree
4949 handle_externally_visible_attribute (tree *pnode, tree name,
4950                                      tree ARG_UNUSED (args),
4951                                      int ARG_UNUSED (flags),
4952                                      bool *no_add_attrs)
4953 {
4954   tree node = *pnode;
4955
4956   if (TREE_CODE (node) == FUNCTION_DECL || TREE_CODE (node) == VAR_DECL)
4957     {
4958       if ((!TREE_STATIC (node) && TREE_CODE (node) != FUNCTION_DECL
4959            && !DECL_EXTERNAL (node)) || !TREE_PUBLIC (node))
4960         {
4961           warning (OPT_Wattributes,
4962                    "%qE attribute have effect only on public objects", name);
4963           *no_add_attrs = true;
4964         }
4965     }
4966   else
4967     {
4968       warning (OPT_Wattributes, "%qE attribute ignored", name);
4969       *no_add_attrs = true;
4970     }
4971
4972   return NULL_TREE;
4973 }
4974
4975 /* Handle a "const" attribute; arguments as in
4976    struct attribute_spec.handler.  */
4977
4978 static tree
4979 handle_const_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4980                         int ARG_UNUSED (flags), bool *no_add_attrs)
4981 {
4982   tree type = TREE_TYPE (*node);
4983
4984   /* See FIXME comment on noreturn in c_common_attribute_table.  */
4985   if (TREE_CODE (*node) == FUNCTION_DECL)
4986     TREE_READONLY (*node) = 1;
4987   else if (TREE_CODE (type) == POINTER_TYPE
4988            && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4989     TREE_TYPE (*node)
4990       = build_pointer_type
4991         (build_type_variant (TREE_TYPE (type), 1,
4992                              TREE_THIS_VOLATILE (TREE_TYPE (type))));
4993   else
4994     {
4995       warning (OPT_Wattributes, "%qE attribute ignored", name);
4996       *no_add_attrs = true;
4997     }
4998
4999   return NULL_TREE;
5000 }
5001
5002 /* Handle a "transparent_union" attribute; arguments as in
5003    struct attribute_spec.handler.  */
5004
5005 static tree
5006 handle_transparent_union_attribute (tree *node, tree name,
5007                                     tree ARG_UNUSED (args), int flags,
5008                                     bool *no_add_attrs)
5009 {
5010   tree type;
5011
5012   *no_add_attrs = true;
5013
5014   if (TREE_CODE (*node) == TYPE_DECL)
5015     node = &TREE_TYPE (*node);
5016   type = *node;
5017
5018   if (TREE_CODE (type) == UNION_TYPE)
5019     {
5020       /* When IN_PLACE is set, leave the check for FIELDS and MODE to
5021          the code in finish_struct.  */
5022       if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5023         {
5024           if (TYPE_FIELDS (type) == NULL_TREE
5025               || TYPE_MODE (type) != DECL_MODE (TYPE_FIELDS (type)))
5026             goto ignored;
5027
5028           /* A type variant isn't good enough, since we don't a cast
5029              to such a type removed as a no-op.  */
5030           *node = type = build_duplicate_type (type);
5031         }
5032
5033       TYPE_TRANSPARENT_UNION (type) = 1;
5034       return NULL_TREE;
5035     }
5036
5037  ignored:
5038   warning (OPT_Wattributes, "%qE attribute ignored", name);
5039   return NULL_TREE;
5040 }
5041
5042 /* Subroutine of handle_{con,de}structor_attribute.  Evaluate ARGS to
5043    get the requested priority for a constructor or destructor,
5044    possibly issuing diagnostics for invalid or reserved
5045    priorities.  */
5046
5047 static priority_type
5048 get_priority (tree args, bool is_destructor)
5049 {
5050   HOST_WIDE_INT pri;
5051   tree arg;
5052
5053   if (!args)
5054     return DEFAULT_INIT_PRIORITY;
5055   
5056   if (!SUPPORTS_INIT_PRIORITY)
5057     {
5058       if (is_destructor)
5059         error ("destructor priorities are not supported");
5060       else
5061         error ("constructor priorities are not supported");
5062       return DEFAULT_INIT_PRIORITY;
5063     }
5064
5065   arg = TREE_VALUE (args);
5066   if (!host_integerp (arg, /*pos=*/0)
5067       || !INTEGRAL_TYPE_P (TREE_TYPE (arg)))
5068     goto invalid;
5069
5070   pri = tree_low_cst (TREE_VALUE (args), /*pos=*/0);
5071   if (pri < 0 || pri > MAX_INIT_PRIORITY)
5072     goto invalid;
5073
5074   if (pri <= MAX_RESERVED_INIT_PRIORITY)
5075     {
5076       if (is_destructor)
5077         warning (0,
5078                  "destructor priorities from 0 to %d are reserved "
5079                  "for the implementation", 
5080                  MAX_RESERVED_INIT_PRIORITY);
5081       else
5082         warning (0,
5083                  "constructor priorities from 0 to %d are reserved "
5084                  "for the implementation", 
5085                  MAX_RESERVED_INIT_PRIORITY);
5086     }
5087   return pri;
5088
5089  invalid:
5090   if (is_destructor)
5091     error ("destructor priorities must be integers from 0 to %d inclusive",
5092            MAX_INIT_PRIORITY);
5093   else
5094     error ("constructor priorities must be integers from 0 to %d inclusive",
5095            MAX_INIT_PRIORITY);
5096   return DEFAULT_INIT_PRIORITY;
5097 }
5098
5099 /* Handle a "constructor" attribute; arguments as in
5100    struct attribute_spec.handler.  */
5101
5102 static tree
5103 handle_constructor_attribute (tree *node, tree name, tree args,
5104                               int ARG_UNUSED (flags),
5105                               bool *no_add_attrs)
5106 {
5107   tree decl = *node;
5108   tree type = TREE_TYPE (decl);
5109
5110   if (TREE_CODE (decl) == FUNCTION_DECL
5111       && TREE_CODE (type) == FUNCTION_TYPE
5112       && decl_function_context (decl) == 0)
5113     {
5114       priority_type priority;
5115       DECL_STATIC_CONSTRUCTOR (decl) = 1;
5116       priority = get_priority (args, /*is_destructor=*/false);
5117       SET_DECL_INIT_PRIORITY (decl, priority);
5118       TREE_USED (decl) = 1;
5119     }
5120   else
5121     {
5122       warning (OPT_Wattributes, "%qE attribute ignored", name);
5123       *no_add_attrs = true;
5124     }
5125
5126   return NULL_TREE;
5127 }
5128
5129 /* Handle a "destructor" attribute; arguments as in
5130    struct attribute_spec.handler.  */
5131
5132 static tree
5133 handle_destructor_attribute (tree *node, tree name, tree args,
5134                              int ARG_UNUSED (flags),
5135                              bool *no_add_attrs)
5136 {
5137   tree decl = *node;
5138   tree type = TREE_TYPE (decl);
5139
5140   if (TREE_CODE (decl) == FUNCTION_DECL
5141       && TREE_CODE (type) == FUNCTION_TYPE
5142       && decl_function_context (decl) == 0)
5143     {
5144       priority_type priority;
5145       DECL_STATIC_DESTRUCTOR (decl) = 1;
5146       priority = get_priority (args, /*is_destructor=*/true);
5147       SET_DECL_FINI_PRIORITY (decl, priority);
5148       TREE_USED (decl) = 1;
5149     }
5150   else
5151     {
5152       warning (OPT_Wattributes, "%qE attribute ignored", name);
5153       *no_add_attrs = true;
5154     }
5155
5156   return NULL_TREE;
5157 }
5158
5159 /* Handle a "mode" attribute; arguments as in
5160    struct attribute_spec.handler.  */
5161
5162 static tree
5163 handle_mode_attribute (tree *node, tree name, tree args,
5164                        int ARG_UNUSED (flags), bool *no_add_attrs)
5165 {
5166   tree type = *node;
5167
5168   *no_add_attrs = true;
5169
5170   if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
5171     warning (OPT_Wattributes, "%qE attribute ignored", name);
5172   else
5173     {
5174       int j;
5175       const char *p = IDENTIFIER_POINTER (TREE_VALUE (args));
5176       int len = strlen (p);
5177       enum machine_mode mode = VOIDmode;
5178       tree typefm;
5179       bool valid_mode;
5180
5181       if (len > 4 && p[0] == '_' && p[1] == '_'
5182           && p[len - 1] == '_' && p[len - 2] == '_')
5183         {
5184           char *newp = (char *) alloca (len - 1);
5185
5186           strcpy (newp, &p[2]);
5187           newp[len - 4] = '\0';
5188           p = newp;
5189         }
5190
5191       /* Change this type to have a type with the specified mode.
5192          First check for the special modes.  */
5193       if (!strcmp (p, "byte"))
5194         mode = byte_mode;
5195       else if (!strcmp (p, "word"))
5196         mode = word_mode;
5197       else if (!strcmp (p, "pointer"))
5198         mode = ptr_mode;
5199       else if (!strcmp (p, "libgcc_cmp_return"))
5200         mode = targetm.libgcc_cmp_return_mode ();
5201       else if (!strcmp (p, "libgcc_shift_count"))
5202         mode = targetm.libgcc_shift_count_mode ();
5203       else
5204         for (j = 0; j < NUM_MACHINE_MODES; j++)
5205           if (!strcmp (p, GET_MODE_NAME (j)))
5206             {
5207               mode = (enum machine_mode) j;
5208               break;
5209             }
5210
5211       if (mode == VOIDmode)
5212         {
5213           error ("unknown machine mode %qs", p);
5214           return NULL_TREE;
5215         }
5216
5217       valid_mode = false;
5218       switch (GET_MODE_CLASS (mode))
5219         {
5220         case MODE_INT:
5221         case MODE_PARTIAL_INT:
5222         case MODE_FLOAT:
5223         case MODE_DECIMAL_FLOAT:
5224         case MODE_FRACT:
5225         case MODE_UFRACT:
5226         case MODE_ACCUM:
5227         case MODE_UACCUM:
5228           valid_mode = targetm.scalar_mode_supported_p (mode);
5229           break;
5230
5231         case MODE_COMPLEX_INT:
5232         case MODE_COMPLEX_FLOAT:
5233           valid_mode = targetm.scalar_mode_supported_p (GET_MODE_INNER (mode));
5234           break;
5235
5236         case MODE_VECTOR_INT:
5237         case MODE_VECTOR_FLOAT:
5238         case MODE_VECTOR_FRACT:
5239         case MODE_VECTOR_UFRACT:
5240         case MODE_VECTOR_ACCUM:
5241         case MODE_VECTOR_UACCUM:
5242           warning (OPT_Wattributes, "specifying vector types with "
5243                    "__attribute__ ((mode)) is deprecated");
5244           warning (OPT_Wattributes,
5245                    "use __attribute__ ((vector_size)) instead");
5246           valid_mode = vector_mode_valid_p (mode);
5247           break;
5248
5249         default:
5250           break;
5251         }
5252       if (!valid_mode)
5253         {
5254           error ("unable to emulate %qs", p);
5255           return NULL_TREE;
5256         }
5257
5258       if (POINTER_TYPE_P (type))
5259         {
5260           tree (*fn)(tree, enum machine_mode, bool);
5261
5262           if (!targetm.valid_pointer_mode (mode))
5263             {
5264               error ("invalid pointer mode %qs", p);
5265               return NULL_TREE;
5266             }
5267
5268           if (TREE_CODE (type) == POINTER_TYPE)
5269             fn = build_pointer_type_for_mode;
5270           else
5271             fn = build_reference_type_for_mode;
5272           typefm = fn (TREE_TYPE (type), mode, false);
5273         }
5274       else
5275         {
5276           /* For fixed-point modes, we need to test if the signness of type
5277              and the machine mode are consistent.  */
5278           if (ALL_FIXED_POINT_MODE_P (mode)
5279               && TYPE_UNSIGNED (type) != UNSIGNED_FIXED_POINT_MODE_P (mode))
5280             {
5281               error ("signness of type and machine mode %qs don't match", p);
5282               return NULL_TREE;
5283             }
5284           /* For fixed-point modes, we need to pass saturating info.  */
5285           typefm = lang_hooks.types.type_for_mode (mode,
5286                         ALL_FIXED_POINT_MODE_P (mode) ? TYPE_SATURATING (type)
5287                                                       : TYPE_UNSIGNED (type));
5288         }
5289
5290       if (typefm == NULL_TREE)
5291         {
5292           error ("no data type for mode %qs", p);
5293           return NULL_TREE;
5294         }
5295       else if (TREE_CODE (type) == ENUMERAL_TYPE)
5296         {
5297           /* For enumeral types, copy the precision from the integer
5298              type returned above.  If not an INTEGER_TYPE, we can't use
5299              this mode for this type.  */
5300           if (TREE_CODE (typefm) != INTEGER_TYPE)
5301             {
5302               error ("cannot use mode %qs for enumeral types", p);
5303               return NULL_TREE;
5304             }
5305
5306           if (flags & ATTR_FLAG_TYPE_IN_PLACE)
5307             {
5308               TYPE_PRECISION (type) = TYPE_PRECISION (typefm);
5309               typefm = type;
5310             }
5311           else
5312             {
5313               /* We cannot build a type variant, as there's code that assumes
5314                  that TYPE_MAIN_VARIANT has the same mode.  This includes the
5315                  debug generators.  Instead, create a subrange type.  This
5316                  results in all of the enumeral values being emitted only once
5317                  in the original, and the subtype gets them by reference.  */
5318               if (TYPE_UNSIGNED (type))
5319                 typefm = make_unsigned_type (TYPE_PRECISION (typefm));
5320               else
5321                 typefm = make_signed_type (TYPE_PRECISION (typefm));
5322               TREE_TYPE (typefm) = type;
5323             }
5324         }
5325       else if (VECTOR_MODE_P (mode)
5326                ? TREE_CODE (type) != TREE_CODE (TREE_TYPE (typefm))
5327                : TREE_CODE (type) != TREE_CODE (typefm))
5328         {
5329           error ("mode %qs applied to inappropriate type", p);
5330           return NULL_TREE;
5331         }
5332
5333       *node = typefm;
5334     }
5335
5336   return NULL_TREE;
5337 }
5338
5339 /* Handle a "section" attribute; arguments as in
5340    struct attribute_spec.handler.  */
5341
5342 static tree
5343 handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5344                           int ARG_UNUSED (flags), bool *no_add_attrs)
5345 {
5346   tree decl = *node;
5347
5348   if (targetm.have_named_sections)
5349     {
5350       user_defined_section_attribute = true;
5351
5352       if ((TREE_CODE (decl) == FUNCTION_DECL
5353            || TREE_CODE (decl) == VAR_DECL)
5354           && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
5355         {
5356           if (TREE_CODE (decl) == VAR_DECL
5357               && current_function_decl != NULL_TREE
5358               && !TREE_STATIC (decl))
5359             {
5360               error ("%Jsection attribute cannot be specified for "
5361                      "local variables", decl);
5362               *no_add_attrs = true;
5363             }
5364
5365           /* The decl may have already been given a section attribute
5366              from a previous declaration.  Ensure they match.  */
5367           else if (DECL_SECTION_NAME (decl) != NULL_TREE
5368                    && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
5369                               TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
5370             {
5371               error ("section of %q+D conflicts with previous declaration",
5372                      *node);
5373               *no_add_attrs = true;
5374             }
5375           else
5376             DECL_SECTION_NAME (decl) = TREE_VALUE (args);
5377         }
5378       else
5379         {
5380           error ("section attribute not allowed for %q+D", *node);
5381           *no_add_attrs = true;
5382         }
5383     }
5384   else
5385     {
5386       error ("%Jsection attributes are not supported for this target", *node);
5387       *no_add_attrs = true;
5388     }
5389
5390   return NULL_TREE;
5391 }
5392
5393 /* Handle a "aligned" attribute; arguments as in
5394    struct attribute_spec.handler.  */
5395
5396 static tree
5397 handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5398                           int flags, bool *no_add_attrs)
5399 {
5400   tree decl = NULL_TREE;
5401   tree *type = NULL;
5402   int is_type = 0;
5403   tree align_expr = (args ? TREE_VALUE (args)
5404                      : size_int (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
5405   int i;
5406
5407   if (DECL_P (*node))
5408     {
5409       decl = *node;
5410       type = &TREE_TYPE (decl);
5411       is_type = TREE_CODE (*node) == TYPE_DECL;
5412     }
5413   else if (TYPE_P (*node))
5414     type = node, is_type = 1;
5415
5416   if (TREE_CODE (align_expr) != INTEGER_CST)
5417     {
5418       error ("requested alignment is not a constant");
5419       *no_add_attrs = true;
5420     }
5421   else if ((i = tree_log2 (align_expr)) == -1)
5422     {
5423       error ("requested alignment is not a power of 2");
5424       *no_add_attrs = true;
5425     }
5426   else if (i > HOST_BITS_PER_INT - 2)
5427     {
5428       error ("requested alignment is too large");
5429       *no_add_attrs = true;
5430     }
5431   else if (is_type)
5432     {
5433       /* If we have a TYPE_DECL, then copy the type, so that we
5434          don't accidentally modify a builtin type.  See pushdecl.  */
5435       if (decl && TREE_TYPE (decl) != error_mark_node
5436           && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
5437         {
5438           tree tt = TREE_TYPE (decl);
5439           *type = build_variant_type_copy (*type);
5440           DECL_ORIGINAL_TYPE (decl) = tt;
5441           TYPE_NAME (*type) = decl;
5442           TREE_USED (*type) = TREE_USED (decl);
5443           TREE_TYPE (decl) = *type;
5444         }
5445       else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5446         *type = build_variant_type_copy (*type);
5447
5448       TYPE_ALIGN (*type) = (1 << i) * BITS_PER_UNIT;
5449       TYPE_USER_ALIGN (*type) = 1;
5450     }
5451   else if (! VAR_OR_FUNCTION_DECL_P (decl)
5452            && TREE_CODE (decl) != FIELD_DECL)
5453     {
5454       error ("alignment may not be specified for %q+D", decl);
5455       *no_add_attrs = true;
5456     }
5457   else if (TREE_CODE (decl) == FUNCTION_DECL
5458            && DECL_ALIGN (decl) > (1 << i) * BITS_PER_UNIT)
5459     {
5460       if (DECL_USER_ALIGN (decl))
5461         error ("alignment for %q+D was previously specified as %d "
5462                "and may not be decreased", decl,
5463                DECL_ALIGN (decl) / BITS_PER_UNIT);
5464       else
5465         error ("alignment for %q+D must be at least %d", decl,
5466                DECL_ALIGN (decl) / BITS_PER_UNIT);
5467       *no_add_attrs = true;
5468     }
5469   else
5470     {
5471       DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT;
5472       DECL_USER_ALIGN (decl) = 1;
5473     }
5474
5475   return NULL_TREE;
5476 }
5477
5478 /* Handle a "weak" attribute; arguments as in
5479    struct attribute_spec.handler.  */
5480
5481 static tree
5482 handle_weak_attribute (tree *node, tree name,
5483                        tree ARG_UNUSED (args),
5484                        int ARG_UNUSED (flags),
5485                        bool * ARG_UNUSED (no_add_attrs))
5486 {
5487   if (TREE_CODE (*node) == FUNCTION_DECL
5488       || TREE_CODE (*node) == VAR_DECL)
5489     declare_weak (*node);
5490   else
5491     warning (OPT_Wattributes, "%qE attribute ignored", name);
5492         
5493
5494   return NULL_TREE;
5495 }
5496
5497 /* Handle an "alias" attribute; arguments as in
5498    struct attribute_spec.handler.  */
5499
5500 static tree
5501 handle_alias_attribute (tree *node, tree name, tree args,
5502                         int ARG_UNUSED (flags), bool *no_add_attrs)
5503 {
5504   tree decl = *node;
5505
5506   if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
5507       || (TREE_CODE (decl) != FUNCTION_DECL 
5508           && TREE_PUBLIC (decl) && !DECL_EXTERNAL (decl))
5509       /* A static variable declaration is always a tentative definition,
5510          but the alias is a non-tentative definition which overrides.  */
5511       || (TREE_CODE (decl) != FUNCTION_DECL 
5512           && ! TREE_PUBLIC (decl) && DECL_INITIAL (decl)))
5513     {
5514       error ("%q+D defined both normally and as an alias", decl);
5515       *no_add_attrs = true;
5516     }
5517
5518   /* Note that the very first time we process a nested declaration,
5519      decl_function_context will not be set.  Indeed, *would* never
5520      be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
5521      we do below.  After such frobbery, pushdecl would set the context.
5522      In any case, this is never what we want.  */
5523   else if (decl_function_context (decl) == 0 && current_function_decl == NULL)
5524     {
5525       tree id;
5526
5527       id = TREE_VALUE (args);
5528       if (TREE_CODE (id) != STRING_CST)
5529         {
5530           error ("alias argument not a string");
5531           *no_add_attrs = true;
5532           return NULL_TREE;
5533         }
5534       id = get_identifier (TREE_STRING_POINTER (id));
5535       /* This counts as a use of the object pointed to.  */
5536       TREE_USED (id) = 1;
5537
5538       if (TREE_CODE (decl) == FUNCTION_DECL)
5539         DECL_INITIAL (decl) = error_mark_node;
5540       else
5541         {
5542           if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
5543             DECL_EXTERNAL (decl) = 1;
5544           else
5545             DECL_EXTERNAL (decl) = 0;
5546           TREE_STATIC (decl) = 1;
5547         }
5548     }
5549   else
5550     {
5551       warning (OPT_Wattributes, "%qE attribute ignored", name);
5552       *no_add_attrs = true;
5553     }
5554
5555   return NULL_TREE;
5556 }
5557
5558 /* Handle a "weakref" attribute; arguments as in struct
5559    attribute_spec.handler.  */
5560
5561 static tree
5562 handle_weakref_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5563                           int flags, bool *no_add_attrs)
5564 {
5565   tree attr = NULL_TREE;
5566
5567   /* We must ignore the attribute when it is associated with
5568      local-scoped decls, since attribute alias is ignored and many
5569      such symbols do not even have a DECL_WEAK field.  */
5570   if (decl_function_context (*node) || current_function_decl)
5571     {
5572       warning (OPT_Wattributes, "%qE attribute ignored", name);
5573       *no_add_attrs = true;
5574       return NULL_TREE;
5575     }
5576
5577   /* The idea here is that `weakref("name")' mutates into `weakref,
5578      alias("name")', and weakref without arguments, in turn,
5579      implicitly adds weak. */
5580
5581   if (args)
5582     {
5583       attr = tree_cons (get_identifier ("alias"), args, attr);
5584       attr = tree_cons (get_identifier ("weakref"), NULL_TREE, attr);
5585
5586       *no_add_attrs = true;
5587
5588       decl_attributes (node, attr, flags);
5589     }
5590   else
5591     {
5592       if (lookup_attribute ("alias", DECL_ATTRIBUTES (*node)))
5593         error ("%Jweakref attribute must appear before alias attribute",
5594                *node);
5595
5596       /* Can't call declare_weak because it wants this to be TREE_PUBLIC,
5597          and that isn't supported; and because it wants to add it to
5598          the list of weak decls, which isn't helpful.  */
5599       DECL_WEAK (*node) = 1;
5600     }
5601
5602   return NULL_TREE;
5603 }
5604
5605 /* Handle an "visibility" attribute; arguments as in
5606    struct attribute_spec.handler.  */
5607
5608 static tree
5609 handle_visibility_attribute (tree *node, tree name, tree args,
5610                              int ARG_UNUSED (flags),
5611                              bool *ARG_UNUSED (no_add_attrs))
5612 {
5613   tree decl = *node;
5614   tree id = TREE_VALUE (args);
5615   enum symbol_visibility vis;
5616
5617   if (TYPE_P (*node))
5618     {
5619       if (TREE_CODE (*node) == ENUMERAL_TYPE)
5620         /* OK */;
5621       else if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE)
5622         {
5623           warning (OPT_Wattributes, "%qE attribute ignored on non-class types",
5624                    name);
5625           return NULL_TREE;
5626         }
5627       else if (TYPE_FIELDS (*node))
5628         {
5629           error ("%qE attribute ignored because %qT is already defined",
5630                  name, *node);
5631           return NULL_TREE;
5632         }
5633     }
5634   else if (decl_function_context (decl) != 0 || !TREE_PUBLIC (decl))
5635     {
5636       warning (OPT_Wattributes, "%qE attribute ignored", name);
5637       return NULL_TREE;
5638     }
5639
5640   if (TREE_CODE (id) != STRING_CST)
5641     {
5642       error ("visibility argument not a string");
5643       return NULL_TREE;
5644     }
5645
5646   /*  If this is a type, set the visibility on the type decl.  */
5647   if (TYPE_P (decl))
5648     {
5649       decl = TYPE_NAME (decl);
5650       if (!decl)
5651         return NULL_TREE;
5652       if (TREE_CODE (decl) == IDENTIFIER_NODE)
5653         {
5654            warning (OPT_Wattributes, "%qE attribute ignored on types",
5655                     name);
5656            return NULL_TREE;
5657         }
5658     }
5659
5660   if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
5661     vis = VISIBILITY_DEFAULT;
5662   else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
5663     vis = VISIBILITY_INTERNAL;
5664   else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
5665     vis = VISIBILITY_HIDDEN;
5666   else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
5667     vis = VISIBILITY_PROTECTED;
5668   else
5669     {
5670       error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
5671       vis = VISIBILITY_DEFAULT;
5672     }
5673
5674   if (DECL_VISIBILITY_SPECIFIED (decl)
5675       && vis != DECL_VISIBILITY (decl))
5676     {
5677       tree attributes = (TYPE_P (*node)
5678                          ? TYPE_ATTRIBUTES (*node)
5679                          : DECL_ATTRIBUTES (decl));
5680       if (lookup_attribute ("visibility", attributes))
5681         error ("%qD redeclared with different visibility", decl);
5682       else if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
5683                && lookup_attribute ("dllimport", attributes))
5684         error ("%qD was declared %qs which implies default visibility",
5685                decl, "dllimport");
5686       else if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
5687                && lookup_attribute ("dllexport", attributes))
5688         error ("%qD was declared %qs which implies default visibility",
5689                decl, "dllexport");
5690     }
5691
5692   DECL_VISIBILITY (decl) = vis;
5693   DECL_VISIBILITY_SPECIFIED (decl) = 1;
5694
5695   /* Go ahead and attach the attribute to the node as well.  This is needed
5696      so we can determine whether we have VISIBILITY_DEFAULT because the
5697      visibility was not specified, or because it was explicitly overridden
5698      from the containing scope.  */
5699
5700   return NULL_TREE;
5701 }
5702
5703 /* Determine the ELF symbol visibility for DECL, which is either a
5704    variable or a function.  It is an error to use this function if a
5705    definition of DECL is not available in this translation unit.
5706    Returns true if the final visibility has been determined by this
5707    function; false if the caller is free to make additional
5708    modifications.  */
5709
5710 bool
5711 c_determine_visibility (tree decl)
5712 {
5713   gcc_assert (TREE_CODE (decl) == VAR_DECL
5714               || TREE_CODE (decl) == FUNCTION_DECL);
5715
5716   /* If the user explicitly specified the visibility with an
5717      attribute, honor that.  DECL_VISIBILITY will have been set during
5718      the processing of the attribute.  We check for an explicit
5719      attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
5720      to distinguish the use of an attribute from the use of a "#pragma
5721      GCC visibility push(...)"; in the latter case we still want other
5722      considerations to be able to overrule the #pragma.  */
5723   if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl))
5724       || (TARGET_DLLIMPORT_DECL_ATTRIBUTES
5725           && (lookup_attribute ("dllimport", DECL_ATTRIBUTES (decl))
5726               || lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))))
5727     return true;
5728
5729   /* Set default visibility to whatever the user supplied with
5730      visibility_specified depending on #pragma GCC visibility.  */
5731   if (!DECL_VISIBILITY_SPECIFIED (decl))
5732     {
5733       DECL_VISIBILITY (decl) = default_visibility;
5734       DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
5735     }
5736   return false;
5737 }
5738
5739 /* Handle an "tls_model" attribute; arguments as in
5740    struct attribute_spec.handler.  */
5741
5742 static tree
5743 handle_tls_model_attribute (tree *node, tree name, tree args,
5744                             int ARG_UNUSED (flags), bool *no_add_attrs)
5745 {
5746   tree id;
5747   tree decl = *node;
5748   enum tls_model kind;
5749
5750   *no_add_attrs = true;
5751
5752   if (!DECL_THREAD_LOCAL_P (decl))
5753     {
5754       warning (OPT_Wattributes, "%qE attribute ignored", name);
5755       return NULL_TREE;
5756     }
5757
5758   kind = DECL_TLS_MODEL (decl);
5759   id = TREE_VALUE (args);
5760   if (TREE_CODE (id) != STRING_CST)
5761     {
5762       error ("tls_model argument not a string");
5763       return NULL_TREE;
5764     }
5765
5766   if (!strcmp (TREE_STRING_POINTER (id), "local-exec"))
5767     kind = TLS_MODEL_LOCAL_EXEC;
5768   else if (!strcmp (TREE_STRING_POINTER (id), "initial-exec"))
5769     kind = TLS_MODEL_INITIAL_EXEC;
5770   else if (!strcmp (TREE_STRING_POINTER (id), "local-dynamic"))
5771     kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
5772   else if (!strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
5773     kind = TLS_MODEL_GLOBAL_DYNAMIC;
5774   else
5775     error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
5776
5777   DECL_TLS_MODEL (decl) = kind;
5778   return NULL_TREE;
5779 }
5780
5781 /* Handle a "no_instrument_function" attribute; arguments as in
5782    struct attribute_spec.handler.  */
5783
5784 static tree
5785 handle_no_instrument_function_attribute (tree *node, tree name,
5786                                          tree ARG_UNUSED (args),
5787                                          int ARG_UNUSED (flags),
5788                                          bool *no_add_attrs)
5789 {
5790   tree decl = *node;
5791
5792   if (TREE_CODE (decl) != FUNCTION_DECL)
5793     {
5794       error ("%J%qE attribute applies only to functions", decl, name);
5795       *no_add_attrs = true;
5796     }
5797   else if (DECL_INITIAL (decl))
5798     {
5799       error ("%Jcan%'t set %qE attribute after definition", decl, name);
5800       *no_add_attrs = true;
5801     }
5802   else
5803     DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
5804
5805   return NULL_TREE;
5806 }
5807
5808 /* Handle a "malloc" attribute; arguments as in
5809    struct attribute_spec.handler.  */
5810
5811 static tree
5812 handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5813                          int ARG_UNUSED (flags), bool *no_add_attrs)
5814 {
5815   if (TREE_CODE (*node) == FUNCTION_DECL
5816       && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
5817     DECL_IS_MALLOC (*node) = 1;
5818   else
5819     {
5820       warning (OPT_Wattributes, "%qE attribute ignored", name);
5821       *no_add_attrs = true;
5822     }
5823
5824   return NULL_TREE;
5825 }
5826
5827 /* Handle a "alloc_size" attribute; arguments as in
5828    struct attribute_spec.handler.  */
5829
5830 static tree
5831 handle_alloc_size_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5832                              int ARG_UNUSED (flags), bool *no_add_attrs)
5833 {
5834   tree params = TYPE_ARG_TYPES (*node);
5835   unsigned arg_count = 0;
5836
5837   for (; TREE_CHAIN (params); params = TREE_CHAIN (params))
5838     arg_count ++;
5839
5840   for (; args; args = TREE_CHAIN (args))
5841     {
5842       tree position = TREE_VALUE (args);
5843
5844       if (TREE_CODE (position) != INTEGER_CST
5845           || TREE_INT_CST_HIGH (position) 
5846           || TREE_INT_CST_LOW (position) < 1
5847           || TREE_INT_CST_LOW (position) > arg_count )
5848         {
5849           warning (OPT_Wattributes, 
5850                    "alloc_size parameter outside range");
5851           *no_add_attrs = true;
5852           return NULL_TREE;
5853         }
5854     }
5855   return NULL_TREE;
5856 }
5857
5858 /* Handle a "returns_twice" attribute; arguments as in
5859    struct attribute_spec.handler.  */
5860
5861 static tree
5862 handle_returns_twice_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5863                          int ARG_UNUSED (flags), bool *no_add_attrs)
5864 {
5865   if (TREE_CODE (*node) == FUNCTION_DECL)
5866     DECL_IS_RETURNS_TWICE (*node) = 1;
5867   else
5868     {
5869       warning (OPT_Wattributes, "%qE attribute ignored", name);
5870       *no_add_attrs = true;
5871     }
5872
5873   return NULL_TREE;
5874 }
5875
5876 /* Handle a "no_limit_stack" attribute; arguments as in
5877    struct attribute_spec.handler.  */
5878
5879 static tree
5880 handle_no_limit_stack_attribute (tree *node, tree name,
5881                                  tree ARG_UNUSED (args),
5882                                  int ARG_UNUSED (flags),
5883                                  bool *no_add_attrs)
5884 {
5885   tree decl = *node;
5886
5887   if (TREE_CODE (decl) != FUNCTION_DECL)
5888     {
5889       error ("%J%qE attribute applies only to functions", decl, name);
5890       *no_add_attrs = true;
5891     }
5892   else if (DECL_INITIAL (decl))
5893     {
5894       error ("%Jcan%'t set %qE attribute after definition", decl, name);
5895       *no_add_attrs = true;
5896     }
5897   else
5898     DECL_NO_LIMIT_STACK (decl) = 1;
5899
5900   return NULL_TREE;
5901 }
5902
5903 /* Handle a "pure" attribute; arguments as in
5904    struct attribute_spec.handler.  */
5905
5906 static tree
5907 handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5908                        int ARG_UNUSED (flags), bool *no_add_attrs)
5909 {
5910   if (TREE_CODE (*node) == FUNCTION_DECL)
5911     DECL_IS_PURE (*node) = 1;
5912   /* ??? TODO: Support types.  */
5913   else
5914     {
5915       warning (OPT_Wattributes, "%qE attribute ignored", name);
5916       *no_add_attrs = true;
5917     }
5918
5919   return NULL_TREE;
5920 }
5921
5922 /* Handle a "no vops" attribute; arguments as in
5923    struct attribute_spec.handler.  */
5924
5925 static tree
5926 handle_novops_attribute (tree *node, tree ARG_UNUSED (name),
5927                          tree ARG_UNUSED (args), int ARG_UNUSED (flags),
5928                          bool *ARG_UNUSED (no_add_attrs))
5929 {
5930   gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
5931   DECL_IS_NOVOPS (*node) = 1;
5932   return NULL_TREE;
5933 }
5934
5935 /* Handle a "deprecated" attribute; arguments as in
5936    struct attribute_spec.handler.  */
5937
5938 static tree
5939 handle_deprecated_attribute (tree *node, tree name,
5940                              tree ARG_UNUSED (args), int flags,
5941                              bool *no_add_attrs)
5942 {
5943   tree type = NULL_TREE;
5944   int warn = 0;
5945   tree what = NULL_TREE;
5946
5947   if (DECL_P (*node))
5948     {
5949       tree decl = *node;
5950       type = TREE_TYPE (decl);
5951
5952       if (TREE_CODE (decl) == TYPE_DECL
5953           || TREE_CODE (decl) == PARM_DECL
5954           || TREE_CODE (decl) == VAR_DECL
5955           || TREE_CODE (decl) == FUNCTION_DECL
5956           || TREE_CODE (decl) == FIELD_DECL)
5957         TREE_DEPRECATED (decl) = 1;
5958       else
5959         warn = 1;
5960     }
5961   else if (TYPE_P (*node))
5962     {
5963       if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5964         *node = build_variant_type_copy (*node);
5965       TREE_DEPRECATED (*node) = 1;
5966       type = *node;
5967     }
5968   else
5969     warn = 1;
5970
5971   if (warn)
5972     {
5973       *no_add_attrs = true;
5974       if (type && TYPE_NAME (type))
5975         {
5976           if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
5977             what = TYPE_NAME (*node);
5978           else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
5979                    && DECL_NAME (TYPE_NAME (type)))
5980             what = DECL_NAME (TYPE_NAME (type));
5981         }
5982       if (what)
5983         warning (OPT_Wattributes, "%qE attribute ignored for %qE", name, what);
5984       else
5985         warning (OPT_Wattributes, "%qE attribute ignored", name);
5986     }
5987
5988   return NULL_TREE;
5989 }
5990
5991 /* Handle a "vector_size" attribute; arguments as in
5992    struct attribute_spec.handler.  */
5993
5994 static tree
5995 handle_vector_size_attribute (tree *node, tree name, tree args,
5996                               int ARG_UNUSED (flags),
5997                               bool *no_add_attrs)
5998 {
5999   unsigned HOST_WIDE_INT vecsize, nunits;
6000   enum machine_mode orig_mode;
6001   tree type = *node, new_type, size;
6002
6003   *no_add_attrs = true;
6004
6005   size = TREE_VALUE (args);
6006
6007   if (!host_integerp (size, 1))
6008     {
6009       warning (OPT_Wattributes, "%qE attribute ignored", name);
6010       return NULL_TREE;
6011     }
6012
6013   /* Get the vector size (in bytes).  */
6014   vecsize = tree_low_cst (size, 1);
6015
6016   /* We need to provide for vector pointers, vector arrays, and
6017      functions returning vectors.  For example:
6018
6019        __attribute__((vector_size(16))) short *foo;
6020
6021      In this case, the mode is SI, but the type being modified is
6022      HI, so we need to look further.  */
6023
6024   while (POINTER_TYPE_P (type)
6025          || TREE_CODE (type) == FUNCTION_TYPE
6026          || TREE_CODE (type) == METHOD_TYPE
6027          || TREE_CODE (type) == ARRAY_TYPE)
6028     type = TREE_TYPE (type);
6029
6030   /* Get the mode of the type being modified.  */
6031   orig_mode = TYPE_MODE (type);
6032
6033   if (TREE_CODE (type) == RECORD_TYPE
6034       || TREE_CODE (type) == UNION_TYPE
6035       || TREE_CODE (type) == VECTOR_TYPE
6036       || (!SCALAR_FLOAT_MODE_P (orig_mode)
6037           && GET_MODE_CLASS (orig_mode) != MODE_INT
6038           && !ALL_SCALAR_FIXED_POINT_MODE_P (orig_mode))
6039       || !host_integerp (TYPE_SIZE_UNIT (type), 1))
6040     {
6041       error ("invalid vector type for attribute %qE", name);
6042       return NULL_TREE;
6043     }
6044
6045   if (vecsize % tree_low_cst (TYPE_SIZE_UNIT (type), 1))
6046     {
6047       error ("vector size not an integral multiple of component size");
6048       return NULL;
6049     }
6050
6051   if (vecsize == 0)
6052     {
6053       error ("zero vector size");
6054       return NULL;
6055     }
6056
6057   /* Calculate how many units fit in the vector.  */
6058   nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
6059   if (nunits & (nunits - 1))
6060     {
6061       error ("number of components of the vector not a power of two");
6062       return NULL_TREE;
6063     }
6064
6065   new_type = build_vector_type (type, nunits);
6066
6067   /* Build back pointers if needed.  */
6068   *node = reconstruct_complex_type (*node, new_type);
6069
6070   return NULL_TREE;
6071 }
6072
6073 /* Handle the "nonnull" attribute.  */
6074 static tree
6075 handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
6076                           tree args, int ARG_UNUSED (flags),
6077                           bool *no_add_attrs)
6078 {
6079   tree type = *node;
6080   unsigned HOST_WIDE_INT attr_arg_num;
6081
6082   /* If no arguments are specified, all pointer arguments should be
6083      non-null.  Verify a full prototype is given so that the arguments
6084      will have the correct types when we actually check them later.  */
6085   if (!args)
6086     {
6087       if (!TYPE_ARG_TYPES (type))
6088         {
6089           error ("nonnull attribute without arguments on a non-prototype");
6090           *no_add_attrs = true;
6091         }
6092       return NULL_TREE;
6093     }
6094
6095   /* Argument list specified.  Verify that each argument number references
6096      a pointer argument.  */
6097   for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
6098     {
6099       tree argument;
6100       unsigned HOST_WIDE_INT arg_num = 0, ck_num;
6101
6102       if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
6103         {
6104           error ("nonnull argument has invalid operand number (argument %lu)",
6105                  (unsigned long) attr_arg_num);
6106           *no_add_attrs = true;
6107           return NULL_TREE;
6108         }
6109
6110       argument = TYPE_ARG_TYPES (type);
6111       if (argument)
6112         {
6113           for (ck_num = 1; ; ck_num++)
6114             {
6115               if (!argument || ck_num == arg_num)
6116                 break;
6117               argument = TREE_CHAIN (argument);
6118             }
6119
6120           if (!argument
6121               || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
6122             {
6123               error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
6124                      (unsigned long) attr_arg_num, (unsigned long) arg_num);
6125               *no_add_attrs = true;
6126               return NULL_TREE;
6127             }
6128
6129           if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
6130             {
6131               error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
6132                    (unsigned long) attr_arg_num, (unsigned long) arg_num);
6133               *no_add_attrs = true;
6134               return NULL_TREE;
6135             }
6136         }
6137     }
6138
6139   return NULL_TREE;
6140 }
6141
6142 /* Check the argument list of a function call for null in argument slots
6143    that are marked as requiring a non-null pointer argument.  The NARGS
6144    arguments are passed in the array ARGARRAY.
6145 */
6146
6147 static void
6148 check_function_nonnull (tree attrs, int nargs, tree *argarray)
6149 {
6150   tree a, args;
6151   int i;
6152
6153   for (a = attrs; a; a = TREE_CHAIN (a))
6154     {
6155       if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
6156         {
6157           args = TREE_VALUE (a);
6158
6159           /* Walk the argument list.  If we encounter an argument number we
6160              should check for non-null, do it.  If the attribute has no args,
6161              then every pointer argument is checked (in which case the check
6162              for pointer type is done in check_nonnull_arg).  */
6163           for (i = 0; i < nargs; i++)
6164             {
6165               if (!args || nonnull_check_p (args, i + 1))
6166                 check_function_arguments_recurse (check_nonnull_arg, NULL,
6167                                                   argarray[i],
6168                                                   i + 1);
6169             }
6170         }
6171     }
6172 }
6173
6174 /* Check that the Nth argument of a function call (counting backwards
6175    from the end) is a (pointer)0.  The NARGS arguments are passed in the
6176    array ARGARRAY.  */
6177
6178 static void
6179 check_function_sentinel (tree attrs, int nargs, tree *argarray, tree typelist)
6180 {
6181   tree attr = lookup_attribute ("sentinel", attrs);
6182
6183   if (attr)
6184     {
6185       int len = 0;
6186       int pos = 0;
6187       tree sentinel;
6188
6189       /* Skip over the named arguments.  */
6190       while (typelist && len < nargs)
6191         {
6192           typelist = TREE_CHAIN (typelist);
6193           len++;
6194         }
6195
6196       if (TREE_VALUE (attr))
6197         {
6198           tree p = TREE_VALUE (TREE_VALUE (attr));
6199           pos = TREE_INT_CST_LOW (p);
6200         }
6201
6202       /* The sentinel must be one of the varargs, i.e.
6203          in position >= the number of fixed arguments.  */
6204       if ((nargs - 1 - pos) < len)
6205         {
6206           warning (OPT_Wformat,
6207                    "not enough variable arguments to fit a sentinel");
6208           return;
6209         }
6210
6211       /* Validate the sentinel.  */
6212       sentinel = argarray[nargs - 1 - pos];
6213       if ((!POINTER_TYPE_P (TREE_TYPE (sentinel))
6214            || !integer_zerop (sentinel))
6215           /* Although __null (in C++) is only an integer we allow it
6216              nevertheless, as we are guaranteed that it's exactly
6217              as wide as a pointer, and we don't want to force
6218              users to cast the NULL they have written there.
6219              We warn with -Wstrict-null-sentinel, though.  */
6220           && (warn_strict_null_sentinel || null_node != sentinel))
6221         warning (OPT_Wformat, "missing sentinel in function call");
6222     }
6223 }
6224
6225 /* Helper for check_function_nonnull; given a list of operands which
6226    must be non-null in ARGS, determine if operand PARAM_NUM should be
6227    checked.  */
6228
6229 static bool
6230 nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
6231 {
6232   unsigned HOST_WIDE_INT arg_num = 0;
6233
6234   for (; args; args = TREE_CHAIN (args))
6235     {
6236       bool found = get_nonnull_operand (TREE_VALUE (args), &arg_num);
6237
6238       gcc_assert (found);
6239
6240       if (arg_num == param_num)
6241         return true;
6242     }
6243   return false;
6244 }
6245
6246 /* Check that the function argument PARAM (which is operand number
6247    PARAM_NUM) is non-null.  This is called by check_function_nonnull
6248    via check_function_arguments_recurse.  */
6249
6250 static void
6251 check_nonnull_arg (void * ARG_UNUSED (ctx), tree param,
6252                    unsigned HOST_WIDE_INT param_num)
6253 {
6254   /* Just skip checking the argument if it's not a pointer.  This can
6255      happen if the "nonnull" attribute was given without an operand
6256      list (which means to check every pointer argument).  */
6257
6258   if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
6259     return;
6260
6261   if (integer_zerop (param))
6262     warning (OPT_Wnonnull, "null argument where non-null required "
6263              "(argument %lu)", (unsigned long) param_num);
6264 }
6265
6266 /* Helper for nonnull attribute handling; fetch the operand number
6267    from the attribute argument list.  */
6268
6269 static bool
6270 get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
6271 {
6272   /* Verify the arg number is a constant.  */
6273   if (TREE_CODE (arg_num_expr) != INTEGER_CST
6274       || TREE_INT_CST_HIGH (arg_num_expr) != 0)
6275     return false;
6276
6277   *valp = TREE_INT_CST_LOW (arg_num_expr);
6278   return true;
6279 }
6280
6281 /* Handle a "nothrow" attribute; arguments as in
6282    struct attribute_spec.handler.  */
6283
6284 static tree
6285 handle_nothrow_attribute (tree *node, tree name, tree ARG_UNUSED (args),
6286                           int ARG_UNUSED (flags), bool *no_add_attrs)
6287 {
6288   if (TREE_CODE (*node) == FUNCTION_DECL)
6289     TREE_NOTHROW (*node) = 1;
6290   /* ??? TODO: Support types.  */
6291   else
6292     {
6293       warning (OPT_Wattributes, "%qE attribute ignored", name);
6294       *no_add_attrs = true;
6295     }
6296
6297   return NULL_TREE;
6298 }
6299
6300 /* Handle a "cleanup" attribute; arguments as in
6301    struct attribute_spec.handler.  */
6302
6303 static tree
6304 handle_cleanup_attribute (tree *node, tree name, tree args,
6305                           int ARG_UNUSED (flags), bool *no_add_attrs)
6306 {
6307   tree decl = *node;
6308   tree cleanup_id, cleanup_decl;
6309
6310   /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
6311      for global destructors in C++.  This requires infrastructure that
6312      we don't have generically at the moment.  It's also not a feature
6313      we'd be missing too much, since we do have attribute constructor.  */
6314   if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
6315     {
6316       warning (OPT_Wattributes, "%qE attribute ignored", name);
6317       *no_add_attrs = true;
6318       return NULL_TREE;
6319     }
6320
6321   /* Verify that the argument is a function in scope.  */
6322   /* ??? We could support pointers to functions here as well, if
6323      that was considered desirable.  */
6324   cleanup_id = TREE_VALUE (args);
6325   if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
6326     {
6327       error ("cleanup argument not an identifier");
6328       *no_add_attrs = true;
6329       return NULL_TREE;
6330     }
6331   cleanup_decl = lookup_name (cleanup_id);
6332   if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
6333     {
6334       error ("cleanup argument not a function");
6335       *no_add_attrs = true;
6336       return NULL_TREE;
6337     }
6338
6339   /* That the function has proper type is checked with the
6340      eventual call to build_function_call.  */
6341
6342   return NULL_TREE;
6343 }
6344
6345 /* Handle a "warn_unused_result" attribute.  No special handling.  */
6346
6347 static tree
6348 handle_warn_unused_result_attribute (tree *node, tree name,
6349                                tree ARG_UNUSED (args),
6350                                int ARG_UNUSED (flags), bool *no_add_attrs)
6351 {
6352   /* Ignore the attribute for functions not returning any value.  */
6353   if (VOID_TYPE_P (TREE_TYPE (*node)))
6354     {
6355       warning (OPT_Wattributes, "%qE attribute ignored", name);
6356       *no_add_attrs = true;
6357     }
6358
6359   return NULL_TREE;
6360 }
6361
6362 /* Handle a "sentinel" attribute.  */
6363
6364 static tree
6365 handle_sentinel_attribute (tree *node, tree name, tree args,
6366                            int ARG_UNUSED (flags), bool *no_add_attrs)
6367 {
6368   tree params = TYPE_ARG_TYPES (*node);
6369
6370   if (!params)
6371     {
6372       warning (OPT_Wattributes,
6373                "%qE attribute requires prototypes with named arguments", name);
6374       *no_add_attrs = true;
6375     }
6376   else
6377     {
6378       while (TREE_CHAIN (params))
6379         params = TREE_CHAIN (params);
6380
6381       if (VOID_TYPE_P (TREE_VALUE (params)))
6382         {
6383           warning (OPT_Wattributes,
6384                    "%qE attribute only applies to variadic functions", name);
6385           *no_add_attrs = true;
6386         }
6387     }
6388
6389   if (args)
6390     {
6391       tree position = TREE_VALUE (args);
6392
6393       if (TREE_CODE (position) != INTEGER_CST)
6394         {
6395           warning (OPT_Wattributes, 
6396                    "requested position is not an integer constant");
6397           *no_add_attrs = true;
6398         }
6399       else
6400         {
6401           if (tree_int_cst_lt (position, integer_zero_node))
6402             {
6403               warning (OPT_Wattributes,
6404                        "requested position is less than zero");
6405               *no_add_attrs = true;
6406             }
6407         }
6408     }
6409
6410   return NULL_TREE;
6411 }
6412
6413 /* Handle a "type_generic" attribute.  */
6414
6415 static tree
6416 handle_type_generic_attribute (tree *node, tree ARG_UNUSED (name),
6417                                tree ARG_UNUSED (args), int ARG_UNUSED (flags),
6418                                bool * ARG_UNUSED (no_add_attrs))
6419 {
6420   /* Ensure we have a function type, with no arguments.  */
6421   gcc_assert (TREE_CODE (*node) == FUNCTION_TYPE && ! TYPE_ARG_TYPES (*node));
6422
6423   return NULL_TREE;
6424 }
6425 \f
6426 /* Check for valid arguments being passed to a function.
6427    ATTRS is a list of attributes.  There are NARGS arguments in the array
6428    ARGARRAY.  TYPELIST is the list of argument types for the function.
6429  */
6430 void
6431 check_function_arguments (tree attrs, int nargs, tree *argarray, tree typelist)
6432 {
6433   /* Check for null being passed in a pointer argument that must be
6434      non-null.  We also need to do this if format checking is enabled.  */
6435
6436   if (warn_nonnull)
6437     check_function_nonnull (attrs, nargs, argarray);
6438
6439   /* Check for errors in format strings.  */
6440
6441   if (warn_format || warn_missing_format_attribute)
6442     check_function_format (attrs, nargs, argarray);
6443
6444   if (warn_format)
6445     check_function_sentinel (attrs, nargs, argarray, typelist);
6446 }
6447
6448 /* Generic argument checking recursion routine.  PARAM is the argument to
6449    be checked.  PARAM_NUM is the number of the argument.  CALLBACK is invoked
6450    once the argument is resolved.  CTX is context for the callback.  */
6451 void
6452 check_function_arguments_recurse (void (*callback)
6453                                   (void *, tree, unsigned HOST_WIDE_INT),
6454                                   void *ctx, tree param,
6455                                   unsigned HOST_WIDE_INT param_num)
6456 {
6457   if ((TREE_CODE (param) == NOP_EXPR || TREE_CODE (param) == CONVERT_EXPR)
6458       && (TYPE_PRECISION (TREE_TYPE (param))
6459           == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (param, 0)))))
6460     {
6461       /* Strip coercion.  */
6462       check_function_arguments_recurse (callback, ctx,
6463                                         TREE_OPERAND (param, 0), param_num);
6464       return;
6465     }
6466
6467   if (TREE_CODE (param) == CALL_EXPR)
6468     {
6469       tree type = TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (param)));
6470       tree attrs;
6471       bool found_format_arg = false;
6472
6473       /* See if this is a call to a known internationalization function
6474          that modifies a format arg.  Such a function may have multiple
6475          format_arg attributes (for example, ngettext).  */
6476
6477       for (attrs = TYPE_ATTRIBUTES (type);
6478            attrs;
6479            attrs = TREE_CHAIN (attrs))
6480         if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
6481           {
6482             tree inner_arg;
6483             tree format_num_expr;
6484             int format_num;
6485             int i;
6486             call_expr_arg_iterator iter;
6487
6488             /* Extract the argument number, which was previously checked
6489                to be valid.  */
6490             format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
6491
6492             gcc_assert (TREE_CODE (format_num_expr) == INTEGER_CST
6493                         && !TREE_INT_CST_HIGH (format_num_expr));
6494
6495             format_num = TREE_INT_CST_LOW (format_num_expr);
6496
6497             for (inner_arg = first_call_expr_arg (param, &iter), i = 1;
6498                  inner_arg != 0;
6499                  inner_arg = next_call_expr_arg (&iter), i++)
6500               if (i == format_num)
6501                 {
6502                   check_function_arguments_recurse (callback, ctx,
6503                                                     inner_arg, param_num);
6504                   found_format_arg = true;
6505                   break;
6506                 }
6507           }
6508
6509       /* If we found a format_arg attribute and did a recursive check,
6510          we are done with checking this argument.  Otherwise, we continue
6511          and this will be considered a non-literal.  */
6512       if (found_format_arg)
6513         return;
6514     }
6515
6516   if (TREE_CODE (param) == COND_EXPR)
6517     {
6518       /* Check both halves of the conditional expression.  */
6519       check_function_arguments_recurse (callback, ctx,
6520                                         TREE_OPERAND (param, 1), param_num);
6521       check_function_arguments_recurse (callback, ctx,
6522                                         TREE_OPERAND (param, 2), param_num);
6523       return;
6524     }
6525
6526   (*callback) (ctx, param, param_num);
6527 }
6528
6529 /* Function to help qsort sort FIELD_DECLs by name order.  */
6530
6531 int
6532 field_decl_cmp (const void *x_p, const void *y_p)
6533 {
6534   const tree *const x = (const tree *const) x_p;
6535   const tree *const y = (const tree *const) y_p;
6536
6537   if (DECL_NAME (*x) == DECL_NAME (*y))
6538     /* A nontype is "greater" than a type.  */
6539     return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
6540   if (DECL_NAME (*x) == NULL_TREE)
6541     return -1;
6542   if (DECL_NAME (*y) == NULL_TREE)
6543     return 1;
6544   if (DECL_NAME (*x) < DECL_NAME (*y))
6545     return -1;
6546   return 1;
6547 }
6548
6549 static struct {
6550   gt_pointer_operator new_value;
6551   void *cookie;
6552 } resort_data;
6553
6554 /* This routine compares two fields like field_decl_cmp but using the
6555 pointer operator in resort_data.  */
6556
6557 static int
6558 resort_field_decl_cmp (const void *x_p, const void *y_p)
6559 {
6560   const tree *const x = (const tree *const) x_p;
6561   const tree *const y = (const tree *const) y_p;
6562
6563   if (DECL_NAME (*x) == DECL_NAME (*y))
6564     /* A nontype is "greater" than a type.  */
6565     return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
6566   if (DECL_NAME (*x) == NULL_TREE)
6567     return -1;
6568   if (DECL_NAME (*y) == NULL_TREE)
6569     return 1;
6570   {
6571     tree d1 = DECL_NAME (*x);
6572     tree d2 = DECL_NAME (*y);
6573     resort_data.new_value (&d1, resort_data.cookie);
6574     resort_data.new_value (&d2, resort_data.cookie);
6575     if (d1 < d2)
6576       return -1;
6577   }
6578   return 1;
6579 }
6580
6581 /* Resort DECL_SORTED_FIELDS because pointers have been reordered.  */
6582
6583 void
6584 resort_sorted_fields (void *obj,
6585                       void * ARG_UNUSED (orig_obj),
6586                       gt_pointer_operator new_value,
6587                       void *cookie)
6588 {
6589   struct sorted_fields_type *sf = (struct sorted_fields_type *) obj;
6590   resort_data.new_value = new_value;
6591   resort_data.cookie = cookie;
6592   qsort (&sf->elts[0], sf->len, sizeof (tree),
6593          resort_field_decl_cmp);
6594 }
6595
6596 /* Subroutine of c_parse_error.
6597    Return the result of concatenating LHS and RHS. RHS is really
6598    a string literal, its first character is indicated by RHS_START and
6599    RHS_SIZE is its length (including the terminating NUL character).
6600
6601    The caller is responsible for deleting the returned pointer.  */
6602
6603 static char *
6604 catenate_strings (const char *lhs, const char *rhs_start, int rhs_size)
6605 {
6606   const int lhs_size = strlen (lhs);
6607   char *result = XNEWVEC (char, lhs_size + rhs_size);
6608   strncpy (result, lhs, lhs_size);
6609   strncpy (result + lhs_size, rhs_start, rhs_size);
6610   return result;
6611 }
6612
6613 /* Issue the error given by GMSGID, indicating that it occurred before
6614    TOKEN, which had the associated VALUE.  */
6615
6616 void
6617 c_parse_error (const char *gmsgid, enum cpp_ttype token, tree value)
6618 {
6619 #define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
6620
6621   char *message = NULL;
6622
6623   if (token == CPP_EOF)
6624     message = catenate_messages (gmsgid, " at end of input");
6625   else if (token == CPP_CHAR || token == CPP_WCHAR)
6626     {
6627       unsigned int val = TREE_INT_CST_LOW (value);
6628       const char *const ell = (token == CPP_CHAR) ? "" : "L";
6629       if (val <= UCHAR_MAX && ISGRAPH (val))
6630         message = catenate_messages (gmsgid, " before %s'%c'");
6631       else
6632         message = catenate_messages (gmsgid, " before %s'\\x%x'");
6633
6634       error (message, ell, val);
6635       free (message);
6636       message = NULL;
6637     }
6638   else if (token == CPP_STRING || token == CPP_WSTRING)
6639     message = catenate_messages (gmsgid, " before string constant");
6640   else if (token == CPP_NUMBER)
6641     message = catenate_messages (gmsgid, " before numeric constant");
6642   else if (token == CPP_NAME)
6643     {
6644       message = catenate_messages (gmsgid, " before %qE");
6645       error (message, value);
6646       free (message);
6647       message = NULL;
6648     }
6649   else if (token == CPP_PRAGMA)
6650     message = catenate_messages (gmsgid, " before %<#pragma%>");
6651   else if (token == CPP_PRAGMA_EOL)
6652     message = catenate_messages (gmsgid, " before end of line");
6653   else if (token < N_TTYPES)
6654     {
6655       message = catenate_messages (gmsgid, " before %qs token");
6656       error (message, cpp_type2name (token));
6657       free (message);
6658       message = NULL;
6659     }
6660   else
6661     error (gmsgid);
6662
6663   if (message)
6664     {
6665       error (message);
6666       free (message);
6667     }
6668 #undef catenate_messages
6669 }
6670
6671 /* Walk a gimplified function and warn for functions whose return value is
6672    ignored and attribute((warn_unused_result)) is set.  This is done before
6673    inlining, so we don't have to worry about that.  */
6674
6675 void
6676 c_warn_unused_result (tree *top_p)
6677 {
6678   tree t = *top_p;
6679   tree_stmt_iterator i;
6680   tree fdecl, ftype;
6681
6682   switch (TREE_CODE (t))
6683     {
6684     case STATEMENT_LIST:
6685       for (i = tsi_start (*top_p); !tsi_end_p (i); tsi_next (&i))
6686         c_warn_unused_result (tsi_stmt_ptr (i));
6687       break;
6688
6689     case COND_EXPR:
6690       c_warn_unused_result (&COND_EXPR_THEN (t));
6691       c_warn_unused_result (&COND_EXPR_ELSE (t));
6692       break;
6693     case BIND_EXPR:
6694       c_warn_unused_result (&BIND_EXPR_BODY (t));
6695       break;
6696     case TRY_FINALLY_EXPR:
6697     case TRY_CATCH_EXPR:
6698       c_warn_unused_result (&TREE_OPERAND (t, 0));
6699       c_warn_unused_result (&TREE_OPERAND (t, 1));
6700       break;
6701     case CATCH_EXPR:
6702       c_warn_unused_result (&CATCH_BODY (t));
6703       break;
6704     case EH_FILTER_EXPR:
6705       c_warn_unused_result (&EH_FILTER_FAILURE (t));
6706       break;
6707
6708     case CALL_EXPR:
6709       if (TREE_USED (t))
6710         break;
6711
6712       /* This is a naked call, as opposed to a CALL_EXPR nested inside
6713          a MODIFY_EXPR.  All calls whose value is ignored should be
6714          represented like this.  Look for the attribute.  */
6715       fdecl = get_callee_fndecl (t);
6716       if (fdecl)
6717         ftype = TREE_TYPE (fdecl);
6718       else
6719         {
6720           ftype = TREE_TYPE (CALL_EXPR_FN (t));
6721           /* Look past pointer-to-function to the function type itself.  */
6722           ftype = TREE_TYPE (ftype);
6723         }
6724
6725       if (lookup_attribute ("warn_unused_result", TYPE_ATTRIBUTES (ftype)))
6726         {
6727           if (fdecl)
6728             warning (0, "%Hignoring return value of %qD, "
6729                      "declared with attribute warn_unused_result",
6730                      EXPR_LOCUS (t), fdecl);
6731           else
6732             warning (0, "%Hignoring return value of function "
6733                      "declared with attribute warn_unused_result",
6734                      EXPR_LOCUS (t));
6735         }
6736       break;
6737
6738     default:
6739       /* Not a container, not a call, or a call whose value is used.  */
6740       break;
6741     }
6742 }
6743
6744 /* Convert a character from the host to the target execution character
6745    set.  cpplib handles this, mostly.  */
6746
6747 HOST_WIDE_INT
6748 c_common_to_target_charset (HOST_WIDE_INT c)
6749 {
6750   /* Character constants in GCC proper are sign-extended under -fsigned-char,
6751      zero-extended under -fno-signed-char.  cpplib insists that characters
6752      and character constants are always unsigned.  Hence we must convert
6753      back and forth.  */
6754   cppchar_t uc = ((cppchar_t)c) & ((((cppchar_t)1) << CHAR_BIT)-1);
6755
6756   uc = cpp_host_to_exec_charset (parse_in, uc);
6757
6758   if (flag_signed_char)
6759     return ((HOST_WIDE_INT)uc) << (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE)
6760                                >> (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE);
6761   else
6762     return uc;
6763 }
6764
6765 /* Build the result of __builtin_offsetof.  EXPR is a nested sequence of
6766    component references, with STOP_REF, or alternatively an INDIRECT_REF of
6767    NULL, at the bottom; much like the traditional rendering of offsetof as a
6768    macro.  Returns the folded and properly cast result.  */
6769
6770 static tree
6771 fold_offsetof_1 (tree expr, tree stop_ref)
6772 {
6773   enum tree_code code = PLUS_EXPR;
6774   tree base, off, t;
6775
6776   if (expr == stop_ref && TREE_CODE (expr) != ERROR_MARK)
6777     return size_zero_node;
6778
6779   switch (TREE_CODE (expr))
6780     {
6781     case ERROR_MARK:
6782       return expr;
6783
6784     case VAR_DECL:
6785       error ("cannot apply %<offsetof%> to static data member %qD", expr);
6786       return error_mark_node;
6787
6788     case CALL_EXPR:
6789       error ("cannot apply %<offsetof%> when %<operator[]%> is overloaded");
6790       return error_mark_node;
6791
6792     case INTEGER_CST:
6793       gcc_assert (integer_zerop (expr));
6794       return size_zero_node;
6795
6796     case NOP_EXPR:
6797     case INDIRECT_REF:
6798       base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6799       gcc_assert (base == error_mark_node || base == size_zero_node);
6800       return base;
6801
6802     case COMPONENT_REF:
6803       base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6804       if (base == error_mark_node)
6805         return base;
6806
6807       t = TREE_OPERAND (expr, 1);
6808       if (DECL_C_BIT_FIELD (t))
6809         {
6810           error ("attempt to take address of bit-field structure "
6811                  "member %qD", t);
6812           return error_mark_node;
6813         }
6814       off = size_binop (PLUS_EXPR, DECL_FIELD_OFFSET (t),
6815                         size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t), 1)
6816                                   / BITS_PER_UNIT));
6817       break;
6818
6819     case ARRAY_REF:
6820       base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6821       if (base == error_mark_node)
6822         return base;
6823
6824       t = TREE_OPERAND (expr, 1);
6825       if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
6826         {
6827           code = MINUS_EXPR;
6828           t = fold_build1 (NEGATE_EXPR, TREE_TYPE (t), t);
6829         }
6830       t = convert (sizetype, t);
6831       off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
6832       break;
6833
6834     case COMPOUND_EXPR:
6835       /* Handle static members of volatile structs.  */
6836       t = TREE_OPERAND (expr, 1);
6837       gcc_assert (TREE_CODE (t) == VAR_DECL);
6838       return fold_offsetof_1 (t, stop_ref);
6839
6840     default:
6841       gcc_unreachable ();
6842     }
6843
6844   return size_binop (code, base, off);
6845 }
6846
6847 tree
6848 fold_offsetof (tree expr, tree stop_ref)
6849 {
6850   /* Convert back from the internal sizetype to size_t.  */
6851   return convert (size_type_node, fold_offsetof_1 (expr, stop_ref));
6852 }
6853
6854 /* Print an error message for an invalid lvalue.  USE says
6855    how the lvalue is being used and so selects the error message.  */
6856
6857 void
6858 lvalue_error (enum lvalue_use use)
6859 {
6860   switch (use)
6861     {
6862     case lv_assign:
6863       error ("lvalue required as left operand of assignment");
6864       break;
6865     case lv_increment:
6866       error ("lvalue required as increment operand");
6867       break;
6868     case lv_decrement:
6869       error ("lvalue required as decrement operand");
6870       break;
6871     case lv_addressof:
6872       error ("lvalue required as unary %<&%> operand");
6873       break;
6874     case lv_asm:
6875       error ("lvalue required in asm statement");
6876       break;
6877     default:
6878       gcc_unreachable ();
6879     }
6880 }
6881 \f
6882 /* *PTYPE is an incomplete array.  Complete it with a domain based on
6883    INITIAL_VALUE.  If INITIAL_VALUE is not present, use 1 if DO_DEFAULT
6884    is true.  Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6885    2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty.  */
6886
6887 int
6888 complete_array_type (tree *ptype, tree initial_value, bool do_default)
6889 {
6890   tree maxindex, type, main_type, elt, unqual_elt;
6891   int failure = 0, quals;
6892   hashval_t hashcode = 0;
6893
6894   maxindex = size_zero_node;
6895   if (initial_value)
6896     {
6897       if (TREE_CODE (initial_value) == STRING_CST)
6898         {
6899           int eltsize
6900             = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
6901           maxindex = size_int (TREE_STRING_LENGTH (initial_value)/eltsize - 1);
6902         }
6903       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
6904         {
6905           VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6906
6907           if (VEC_empty (constructor_elt, v))
6908             {
6909               if (pedantic)
6910                 failure = 3;
6911               maxindex = integer_minus_one_node;
6912             }
6913           else
6914             {
6915               tree curindex;
6916               unsigned HOST_WIDE_INT cnt;
6917               constructor_elt *ce;
6918
6919               if (VEC_index (constructor_elt, v, 0)->index)
6920                 maxindex = fold_convert (sizetype,
6921                                          VEC_index (constructor_elt,
6922                                                     v, 0)->index);
6923               curindex = maxindex;
6924
6925               for (cnt = 1;
6926                    VEC_iterate (constructor_elt, v, cnt, ce);
6927                    cnt++)
6928                 {
6929                   if (ce->index)
6930                     curindex = fold_convert (sizetype, ce->index);
6931                   else
6932                     curindex = size_binop (PLUS_EXPR, curindex, size_one_node);
6933
6934                   if (tree_int_cst_lt (maxindex, curindex))
6935                     maxindex = curindex;
6936                 }
6937             }
6938         }
6939       else
6940         {
6941           /* Make an error message unless that happened already.  */
6942           if (initial_value != error_mark_node)
6943             failure = 1;
6944         }
6945     }
6946   else
6947     {
6948       failure = 2;
6949       if (!do_default)
6950         return failure;
6951     }
6952
6953   type = *ptype;
6954   elt = TREE_TYPE (type);
6955   quals = TYPE_QUALS (strip_array_types (elt));
6956   if (quals == 0)
6957     unqual_elt = elt;
6958   else
6959     unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
6960
6961   /* Using build_distinct_type_copy and modifying things afterward instead
6962      of using build_array_type to create a new type preserves all of the
6963      TYPE_LANG_FLAG_? bits that the front end may have set.  */
6964   main_type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
6965   TREE_TYPE (main_type) = unqual_elt;
6966   TYPE_DOMAIN (main_type) = build_index_type (maxindex);
6967   layout_type (main_type);
6968
6969   /* Make sure we have the canonical MAIN_TYPE. */
6970   hashcode = iterative_hash_object (TYPE_HASH (unqual_elt), hashcode);
6971   hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (main_type)), 
6972                                     hashcode);
6973   main_type = type_hash_canon (hashcode, main_type);
6974
6975   /* Fix the canonical type.  */
6976   if (TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (main_type))
6977       || TYPE_STRUCTURAL_EQUALITY_P (TYPE_DOMAIN (main_type)))
6978     SET_TYPE_STRUCTURAL_EQUALITY (main_type);
6979   else if (TYPE_CANONICAL (TREE_TYPE (main_type)) != TREE_TYPE (main_type)
6980            || (TYPE_CANONICAL (TYPE_DOMAIN (main_type))
6981                != TYPE_DOMAIN (main_type)))
6982     TYPE_CANONICAL (main_type) 
6983       = build_array_type (TYPE_CANONICAL (TREE_TYPE (main_type)),
6984                           TYPE_CANONICAL (TYPE_DOMAIN (main_type)));
6985   else
6986     TYPE_CANONICAL (main_type) = main_type;
6987
6988   if (quals == 0)
6989     type = main_type;
6990   else
6991     type = c_build_qualified_type (main_type, quals);
6992
6993   if (COMPLETE_TYPE_P (type)
6994       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
6995       && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
6996     {
6997       error ("size of array is too large");
6998       /* If we proceed with the array type as it is, we'll eventually
6999          crash in tree_low_cst().  */
7000       type = error_mark_node;
7001     }
7002
7003   *ptype = type;
7004   return failure;
7005 }
7006
7007 \f
7008 /* Used to help initialize the builtin-types.def table.  When a type of
7009    the correct size doesn't exist, use error_mark_node instead of NULL.
7010    The later results in segfaults even when a decl using the type doesn't
7011    get invoked.  */
7012
7013 tree
7014 builtin_type_for_size (int size, bool unsignedp)
7015 {
7016   tree type = lang_hooks.types.type_for_size (size, unsignedp);
7017   return type ? type : error_mark_node;
7018 }
7019
7020 /* A helper function for resolve_overloaded_builtin in resolving the
7021    overloaded __sync_ builtins.  Returns a positive power of 2 if the
7022    first operand of PARAMS is a pointer to a supported data type.
7023    Returns 0 if an error is encountered.  */
7024
7025 static int
7026 sync_resolve_size (tree function, tree params)
7027 {
7028   tree type;
7029   int size;
7030
7031   if (params == NULL)
7032     {
7033       error ("too few arguments to function %qE", function);
7034       return 0;
7035     }
7036
7037   type = TREE_TYPE (TREE_VALUE (params));
7038   if (TREE_CODE (type) != POINTER_TYPE)
7039     goto incompatible;
7040
7041   type = TREE_TYPE (type);
7042   if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
7043     goto incompatible;
7044
7045   size = tree_low_cst (TYPE_SIZE_UNIT (type), 1);
7046   if (size == 1 || size == 2 || size == 4 || size == 8 || size == 16)
7047     return size;
7048
7049  incompatible:
7050   error ("incompatible type for argument %d of %qE", 1, function);
7051   return 0;
7052 }
7053
7054 /* A helper function for resolve_overloaded_builtin.  Adds casts to
7055    PARAMS to make arguments match up with those of FUNCTION.  Drops
7056    the variadic arguments at the end.  Returns false if some error
7057    was encountered; true on success.  */
7058
7059 static bool
7060 sync_resolve_params (tree orig_function, tree function, tree params)
7061 {
7062   tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (function));
7063   tree ptype;
7064   int number;
7065
7066   /* We've declared the implementation functions to use "volatile void *"
7067      as the pointer parameter, so we shouldn't get any complaints from the
7068      call to check_function_arguments what ever type the user used.  */
7069   arg_types = TREE_CHAIN (arg_types);
7070   ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
7071   number = 2;
7072
7073   /* For the rest of the values, we need to cast these to FTYPE, so that we
7074      don't get warnings for passing pointer types, etc.  */
7075   while (arg_types != void_list_node)
7076     {
7077       tree val;
7078
7079       params = TREE_CHAIN (params);
7080       if (params == NULL)
7081         {
7082           error ("too few arguments to function %qE", orig_function);
7083           return false;
7084         }
7085
7086       /* ??? Ideally for the first conversion we'd use convert_for_assignment
7087          so that we get warnings for anything that doesn't match the pointer
7088          type.  This isn't portable across the C and C++ front ends atm.  */
7089       val = TREE_VALUE (params);
7090       val = convert (ptype, val);
7091       val = convert (TREE_VALUE (arg_types), val);
7092       TREE_VALUE (params) = val;
7093
7094       arg_types = TREE_CHAIN (arg_types);
7095       number++;
7096     }
7097
7098   /* The definition of these primitives is variadic, with the remaining
7099      being "an optional list of variables protected by the memory barrier".
7100      No clue what that's supposed to mean, precisely, but we consider all
7101      call-clobbered variables to be protected so we're safe.  */
7102   TREE_CHAIN (params) = NULL;
7103
7104   return true;
7105 }
7106
7107 /* A helper function for resolve_overloaded_builtin.  Adds a cast to
7108    RESULT to make it match the type of the first pointer argument in
7109    PARAMS.  */
7110
7111 static tree
7112 sync_resolve_return (tree params, tree result)
7113 {
7114   tree ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
7115   ptype = TYPE_MAIN_VARIANT (ptype);
7116   return convert (ptype, result);
7117 }
7118
7119 /* Some builtin functions are placeholders for other expressions.  This
7120    function should be called immediately after parsing the call expression
7121    before surrounding code has committed to the type of the expression.
7122
7123    FUNCTION is the DECL that has been invoked; it is known to be a builtin.
7124    PARAMS is the argument list for the call.  The return value is non-null
7125    when expansion is complete, and null if normal processing should
7126    continue.  */
7127
7128 tree
7129 resolve_overloaded_builtin (tree function, tree params)
7130 {
7131   enum built_in_function orig_code = DECL_FUNCTION_CODE (function);
7132   switch (DECL_BUILT_IN_CLASS (function))
7133     {
7134     case BUILT_IN_NORMAL:
7135       break;
7136     case BUILT_IN_MD:
7137       if (targetm.resolve_overloaded_builtin)
7138         return targetm.resolve_overloaded_builtin (function, params);
7139       else
7140         return NULL_TREE;
7141     default:
7142       return NULL_TREE;
7143     }
7144
7145   /* Handle BUILT_IN_NORMAL here.  */
7146   switch (orig_code)
7147     {
7148     case BUILT_IN_FETCH_AND_ADD_N:
7149     case BUILT_IN_FETCH_AND_SUB_N:
7150     case BUILT_IN_FETCH_AND_OR_N:
7151     case BUILT_IN_FETCH_AND_AND_N:
7152     case BUILT_IN_FETCH_AND_XOR_N:
7153     case BUILT_IN_FETCH_AND_NAND_N:
7154     case BUILT_IN_ADD_AND_FETCH_N:
7155     case BUILT_IN_SUB_AND_FETCH_N:
7156     case BUILT_IN_OR_AND_FETCH_N:
7157     case BUILT_IN_AND_AND_FETCH_N:
7158     case BUILT_IN_XOR_AND_FETCH_N:
7159     case BUILT_IN_NAND_AND_FETCH_N:
7160     case BUILT_IN_BOOL_COMPARE_AND_SWAP_N:
7161     case BUILT_IN_VAL_COMPARE_AND_SWAP_N:
7162     case BUILT_IN_LOCK_TEST_AND_SET_N:
7163     case BUILT_IN_LOCK_RELEASE_N:
7164       {
7165         int n = sync_resolve_size (function, params);
7166         tree new_function, result;
7167
7168         if (n == 0)
7169           return error_mark_node;
7170
7171         new_function = built_in_decls[orig_code + exact_log2 (n) + 1];
7172         if (!sync_resolve_params (function, new_function, params))
7173           return error_mark_node;
7174
7175         result = build_function_call (new_function, params);
7176         if (orig_code != BUILT_IN_BOOL_COMPARE_AND_SWAP_N
7177             && orig_code != BUILT_IN_LOCK_RELEASE_N)
7178           result = sync_resolve_return (params, result);
7179
7180         return result;
7181       }
7182
7183     default:
7184       return NULL_TREE;
7185     }
7186 }
7187
7188 /* Ignoring their sign, return true if two scalar types are the same.  */
7189 bool
7190 same_scalar_type_ignoring_signedness (tree t1, tree t2)
7191 {
7192   enum tree_code c1 = TREE_CODE (t1), c2 = TREE_CODE (t2);
7193
7194   gcc_assert ((c1 == INTEGER_TYPE || c1 == REAL_TYPE || c1 == FIXED_POINT_TYPE)
7195               && (c2 == INTEGER_TYPE || c2 == REAL_TYPE
7196                   || c2 == FIXED_POINT_TYPE));
7197
7198   /* Equality works here because c_common_signed_type uses
7199      TYPE_MAIN_VARIANT.  */
7200   return c_common_signed_type (t1)
7201     == c_common_signed_type (t2);
7202 }
7203
7204 /* Check for missing format attributes on function pointers.  LTYPE is
7205    the new type or left-hand side type.  RTYPE is the old type or
7206    right-hand side type.  Returns TRUE if LTYPE is missing the desired
7207    attribute.  */
7208
7209 bool
7210 check_missing_format_attribute (tree ltype, tree rtype)
7211 {
7212   tree const ttr = TREE_TYPE (rtype), ttl = TREE_TYPE (ltype);
7213   tree ra;
7214
7215   for (ra = TYPE_ATTRIBUTES (ttr); ra; ra = TREE_CHAIN (ra))
7216     if (is_attribute_p ("format", TREE_PURPOSE (ra)))
7217       break;
7218   if (ra)
7219     {
7220       tree la;
7221       for (la = TYPE_ATTRIBUTES (ttl); la; la = TREE_CHAIN (la))
7222         if (is_attribute_p ("format", TREE_PURPOSE (la)))
7223           break;
7224       return !la;
7225     }
7226   else
7227     return false;
7228 }
7229
7230 /* Subscripting with type char is likely to lose on a machine where
7231    chars are signed.  So warn on any machine, but optionally.  Don't
7232    warn for unsigned char since that type is safe.  Don't warn for
7233    signed char because anyone who uses that must have done so
7234    deliberately. Furthermore, we reduce the false positive load by
7235    warning only for non-constant value of type char.  */
7236
7237 void
7238 warn_array_subscript_with_type_char (tree index)
7239 {
7240   if (TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node
7241       && TREE_CODE (index) != INTEGER_CST)
7242     warning (OPT_Wchar_subscripts, "array subscript has type %<char%>");
7243 }
7244
7245 /* Implement -Wparentheses for the unexpected C precedence rules, to
7246    cover cases like x + y << z which readers are likely to
7247    misinterpret.  We have seen an expression in which CODE is a binary
7248    operator used to combine expressions headed by CODE_LEFT and
7249    CODE_RIGHT.  CODE_LEFT and CODE_RIGHT may be ERROR_MARK, which
7250    means that that side of the expression was not formed using a
7251    binary operator, or it was enclosed in parentheses.  */
7252
7253 void
7254 warn_about_parentheses (enum tree_code code, enum tree_code code_left,
7255                         enum tree_code code_right)
7256 {
7257   if (!warn_parentheses)
7258     return;
7259
7260   if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
7261     {
7262       if (code_left == PLUS_EXPR || code_left == MINUS_EXPR
7263           || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
7264         warning (OPT_Wparentheses,
7265                  "suggest parentheses around + or - inside shift");
7266     }
7267
7268   if (code == TRUTH_ORIF_EXPR)
7269     {
7270       if (code_left == TRUTH_ANDIF_EXPR
7271           || code_right == TRUTH_ANDIF_EXPR)
7272         warning (OPT_Wparentheses,
7273                  "suggest parentheses around && within ||");
7274     }
7275
7276   if (code == BIT_IOR_EXPR)
7277     {
7278       if (code_left == BIT_AND_EXPR || code_left == BIT_XOR_EXPR
7279           || code_left == PLUS_EXPR || code_left == MINUS_EXPR
7280           || code_right == BIT_AND_EXPR || code_right == BIT_XOR_EXPR
7281           || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
7282         warning (OPT_Wparentheses,
7283                  "suggest parentheses around arithmetic in operand of |");
7284       /* Check cases like x|y==z */
7285       if (TREE_CODE_CLASS (code_left) == tcc_comparison
7286           || TREE_CODE_CLASS (code_right) == tcc_comparison)
7287         warning (OPT_Wparentheses,
7288                  "suggest parentheses around comparison in operand of |");
7289     }
7290
7291   if (code == BIT_XOR_EXPR)
7292     {
7293       if (code_left == BIT_AND_EXPR
7294           || code_left == PLUS_EXPR || code_left == MINUS_EXPR
7295           || code_right == BIT_AND_EXPR
7296           || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
7297         warning (OPT_Wparentheses,
7298                  "suggest parentheses around arithmetic in operand of ^");
7299       /* Check cases like x^y==z */
7300       if (TREE_CODE_CLASS (code_left) == tcc_comparison
7301           || TREE_CODE_CLASS (code_right) == tcc_comparison)
7302         warning (OPT_Wparentheses,
7303                  "suggest parentheses around comparison in operand of ^");
7304     }
7305
7306   if (code == BIT_AND_EXPR)
7307     {
7308       if (code_left == PLUS_EXPR || code_left == MINUS_EXPR
7309           || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
7310         warning (OPT_Wparentheses,
7311                  "suggest parentheses around + or - in operand of &");
7312       /* Check cases like x&y==z */
7313       if (TREE_CODE_CLASS (code_left) == tcc_comparison
7314           || TREE_CODE_CLASS (code_right) == tcc_comparison)
7315         warning (OPT_Wparentheses,
7316                  "suggest parentheses around comparison in operand of &");
7317     }
7318
7319   if (code == EQ_EXPR || code == NE_EXPR)
7320     {
7321       if (TREE_CODE_CLASS (code_left) == tcc_comparison
7322           || TREE_CODE_CLASS (code_right) == tcc_comparison)
7323         warning (OPT_Wparentheses,
7324                  "suggest parentheses around comparison in operand of %s",
7325                  code == EQ_EXPR ? "==" : "!=");
7326     }
7327   else if (TREE_CODE_CLASS (code) == tcc_comparison)
7328     {
7329       if ((TREE_CODE_CLASS (code_left) == tcc_comparison
7330            && code_left != NE_EXPR && code_left != EQ_EXPR)
7331           || (TREE_CODE_CLASS (code_right) == tcc_comparison
7332               && code_right != NE_EXPR && code_right != EQ_EXPR))
7333         warning (OPT_Wparentheses, "comparisons like X<=Y<=Z do not "
7334                  "have their mathematical meaning");
7335     }
7336 }
7337
7338 /* If LABEL (a LABEL_DECL) has not been used, issue a warning.  */
7339
7340 void
7341 warn_for_unused_label (tree label)
7342 {
7343   if (!TREE_USED (label))
7344     {
7345       if (DECL_INITIAL (label))
7346         warning (OPT_Wunused_label, "label %q+D defined but not used", label);
7347       else
7348         warning (OPT_Wunused_label, "label %q+D declared but not defined", label);
7349     }
7350 }
7351
7352 #ifndef TARGET_HAS_TARGETCM
7353 struct gcc_targetcm targetcm = TARGETCM_INITIALIZER;
7354 #endif
7355
7356 /* Warn for division by zero according to the value of DIVISOR.  */
7357
7358 void
7359 warn_for_div_by_zero (tree divisor)
7360 {
7361   /* If DIVISOR is zero, and has integral or fixed-point type, issue a warning
7362      about division by zero.  Do not issue a warning if DIVISOR has a
7363      floating-point type, since we consider 0.0/0.0 a valid way of
7364      generating a NaN.  */
7365   if (skip_evaluation == 0
7366       && (integer_zerop (divisor) || fixed_zerop (divisor)))
7367     warning (OPT_Wdiv_by_zero, "division by zero");
7368 }
7369
7370 #include "gt-c-common.h"