OSDN Git Service

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