OSDN Git Service

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