OSDN Git Service

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