OSDN Git Service

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