OSDN Git Service

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