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