OSDN Git Service

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