OSDN Git Service

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