OSDN Git Service

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