OSDN Git Service

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