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