OSDN Git Service

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