OSDN Git Service

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