OSDN Git Service

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