OSDN Git Service

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