OSDN Git Service

Correct formatting errors commited in rev 147516
[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, 2005, 2006, 2007, 2008, 2009
4    Free Software Foundation, Inc.
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
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 "tm_p.h"
37 #include "obstack.h"
38 #include "cpplib.h"
39 #include "target.h"
40 #include "langhooks.h"
41 #include "tree-inline.h"
42 #include "c-tree.h"
43 #include "toplev.h"
44 #include "diagnostic.h"
45 #include "tree-iterator.h"
46 #include "hashtab.h"
47 #include "tree-mudflap.h"
48 #include "opts.h"
49 #include "real.h"
50 #include "cgraph.h"
51 #include "target-def.h"
52 #include "gimple.h"
53 #include "fixed-value.h"
54 #include "libfuncs.h"
55
56 cpp_reader *parse_in;           /* Declared in c-pragma.h.  */
57
58 /* We let tm.h override the types used here, to handle trivial differences
59    such as the choice of unsigned int or long unsigned int for size_t.
60    When machines start needing nontrivial differences in the size type,
61    it would be best to do something here to figure out automatically
62    from other information what type to use.  */
63
64 #ifndef SIZE_TYPE
65 #define SIZE_TYPE "long unsigned int"
66 #endif
67
68 #ifndef PID_TYPE
69 #define PID_TYPE "int"
70 #endif
71
72 /* If GCC knows the exact uint_least16_t and uint_least32_t types from
73    <stdint.h>, use them for char16_t and char32_t.  Otherwise, use
74    these guesses; getting the wrong type of a given width will not
75    affect C++ name mangling because in C++ these are distinct types
76    not typedefs.  */
77
78 #ifdef UINT_LEAST16_TYPE
79 #define CHAR16_TYPE UINT_LEAST16_TYPE
80 #else
81 #define CHAR16_TYPE "short unsigned int"
82 #endif
83
84 #ifdef UINT_LEAST32_TYPE
85 #define CHAR32_TYPE UINT_LEAST32_TYPE
86 #else
87 #define CHAR32_TYPE "unsigned int"
88 #endif
89
90 #ifndef WCHAR_TYPE
91 #define WCHAR_TYPE "int"
92 #endif
93
94 /* WCHAR_TYPE gets overridden by -fshort-wchar.  */
95 #define MODIFIED_WCHAR_TYPE \
96         (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
97
98 #ifndef PTRDIFF_TYPE
99 #define PTRDIFF_TYPE "long int"
100 #endif
101
102 #ifndef WINT_TYPE
103 #define WINT_TYPE "unsigned int"
104 #endif
105
106 #ifndef INTMAX_TYPE
107 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE)     \
108                      ? "int"                                    \
109                      : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
110                         ? "long int"                            \
111                         : "long long int"))
112 #endif
113
114 #ifndef UINTMAX_TYPE
115 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE)    \
116                      ? "unsigned int"                           \
117                      : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
118                         ? "long unsigned int"                   \
119                         : "long long unsigned int"))
120 #endif
121
122 /* There are no default definitions of these <stdint.h> types.  */
123
124 #ifndef SIG_ATOMIC_TYPE
125 #define SIG_ATOMIC_TYPE ((const char *) NULL)
126 #endif
127
128 #ifndef INT8_TYPE
129 #define INT8_TYPE ((const char *) NULL)
130 #endif
131
132 #ifndef INT16_TYPE
133 #define INT16_TYPE ((const char *) NULL)
134 #endif
135
136 #ifndef INT32_TYPE
137 #define INT32_TYPE ((const char *) NULL)
138 #endif
139
140 #ifndef INT64_TYPE
141 #define INT64_TYPE ((const char *) NULL)
142 #endif
143
144 #ifndef UINT8_TYPE
145 #define UINT8_TYPE ((const char *) NULL)
146 #endif
147
148 #ifndef UINT16_TYPE
149 #define UINT16_TYPE ((const char *) NULL)
150 #endif
151
152 #ifndef UINT32_TYPE
153 #define UINT32_TYPE ((const char *) NULL)
154 #endif
155
156 #ifndef UINT64_TYPE
157 #define UINT64_TYPE ((const char *) NULL)
158 #endif
159
160 #ifndef INT_LEAST8_TYPE
161 #define INT_LEAST8_TYPE ((const char *) NULL)
162 #endif
163
164 #ifndef INT_LEAST16_TYPE
165 #define INT_LEAST16_TYPE ((const char *) NULL)
166 #endif
167
168 #ifndef INT_LEAST32_TYPE
169 #define INT_LEAST32_TYPE ((const char *) NULL)
170 #endif
171
172 #ifndef INT_LEAST64_TYPE
173 #define INT_LEAST64_TYPE ((const char *) NULL)
174 #endif
175
176 #ifndef UINT_LEAST8_TYPE
177 #define UINT_LEAST8_TYPE ((const char *) NULL)
178 #endif
179
180 #ifndef UINT_LEAST16_TYPE
181 #define UINT_LEAST16_TYPE ((const char *) NULL)
182 #endif
183
184 #ifndef UINT_LEAST32_TYPE
185 #define UINT_LEAST32_TYPE ((const char *) NULL)
186 #endif
187
188 #ifndef UINT_LEAST64_TYPE
189 #define UINT_LEAST64_TYPE ((const char *) NULL)
190 #endif
191
192 #ifndef INT_FAST8_TYPE
193 #define INT_FAST8_TYPE ((const char *) NULL)
194 #endif
195
196 #ifndef INT_FAST16_TYPE
197 #define INT_FAST16_TYPE ((const char *) NULL)
198 #endif
199
200 #ifndef INT_FAST32_TYPE
201 #define INT_FAST32_TYPE ((const char *) NULL)
202 #endif
203
204 #ifndef INT_FAST64_TYPE
205 #define INT_FAST64_TYPE ((const char *) NULL)
206 #endif
207
208 #ifndef UINT_FAST8_TYPE
209 #define UINT_FAST8_TYPE ((const char *) NULL)
210 #endif
211
212 #ifndef UINT_FAST16_TYPE
213 #define UINT_FAST16_TYPE ((const char *) NULL)
214 #endif
215
216 #ifndef UINT_FAST32_TYPE
217 #define UINT_FAST32_TYPE ((const char *) NULL)
218 #endif
219
220 #ifndef UINT_FAST64_TYPE
221 #define UINT_FAST64_TYPE ((const char *) NULL)
222 #endif
223
224 #ifndef INTPTR_TYPE
225 #define INTPTR_TYPE ((const char *) NULL)
226 #endif
227
228 #ifndef UINTPTR_TYPE
229 #define UINTPTR_TYPE ((const char *) NULL)
230 #endif
231
232 /* The following symbols are subsumed in the c_global_trees array, and
233    listed here individually for documentation purposes.
234
235    INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
236
237         tree short_integer_type_node;
238         tree long_integer_type_node;
239         tree long_long_integer_type_node;
240
241         tree short_unsigned_type_node;
242         tree long_unsigned_type_node;
243         tree long_long_unsigned_type_node;
244
245         tree truthvalue_type_node;
246         tree truthvalue_false_node;
247         tree truthvalue_true_node;
248
249         tree ptrdiff_type_node;
250
251         tree unsigned_char_type_node;
252         tree signed_char_type_node;
253         tree wchar_type_node;
254
255         tree char16_type_node;
256         tree char32_type_node;
257
258         tree float_type_node;
259         tree double_type_node;
260         tree long_double_type_node;
261
262         tree complex_integer_type_node;
263         tree complex_float_type_node;
264         tree complex_double_type_node;
265         tree complex_long_double_type_node;
266
267         tree dfloat32_type_node;
268         tree dfloat64_type_node;
269         tree_dfloat128_type_node;
270
271         tree intQI_type_node;
272         tree intHI_type_node;
273         tree intSI_type_node;
274         tree intDI_type_node;
275         tree intTI_type_node;
276
277         tree unsigned_intQI_type_node;
278         tree unsigned_intHI_type_node;
279         tree unsigned_intSI_type_node;
280         tree unsigned_intDI_type_node;
281         tree unsigned_intTI_type_node;
282
283         tree widest_integer_literal_type_node;
284         tree widest_unsigned_literal_type_node;
285
286    Nodes for types `void *' and `const void *'.
287
288         tree ptr_type_node, const_ptr_type_node;
289
290    Nodes for types `char *' and `const char *'.
291
292         tree string_type_node, const_string_type_node;
293
294    Type `char[SOMENUMBER]'.
295    Used when an array of char is needed and the size is irrelevant.
296
297         tree char_array_type_node;
298
299    Type `int[SOMENUMBER]' or something like it.
300    Used when an array of int needed and the size is irrelevant.
301
302         tree int_array_type_node;
303
304    Type `wchar_t[SOMENUMBER]' or something like it.
305    Used when a wide string literal is created.
306
307         tree wchar_array_type_node;
308
309    Type `char16_t[SOMENUMBER]' or something like it.
310    Used when a UTF-16 string literal is created.
311
312         tree char16_array_type_node;
313
314    Type `char32_t[SOMENUMBER]' or something like it.
315    Used when a UTF-32 string literal is created.
316
317         tree char32_array_type_node;
318
319    Type `int ()' -- used for implicit declaration of functions.
320
321         tree default_function_type;
322
323    A VOID_TYPE node, packaged in a TREE_LIST.
324
325         tree void_list_node;
326
327   The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
328   and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
329   VAR_DECLS, but C++ does.)
330
331         tree function_name_decl_node;
332         tree pretty_function_name_decl_node;
333         tree c99_function_name_decl_node;
334
335   Stack of nested function name VAR_DECLs.
336
337         tree saved_function_name_decls;
338
339 */
340
341 tree c_global_trees[CTI_MAX];
342 \f
343 /* Switches common to the C front ends.  */
344
345 /* Nonzero if preprocessing only.  */
346
347 int flag_preprocess_only;
348
349 /* Nonzero means don't output line number information.  */
350
351 char flag_no_line_commands;
352
353 /* Nonzero causes -E output not to be done, but directives such as
354    #define that have side effects are still obeyed.  */
355
356 char flag_no_output;
357
358 /* Nonzero means dump macros in some fashion.  */
359
360 char flag_dump_macros;
361
362 /* Nonzero means pass #include lines through to the output.  */
363
364 char flag_dump_includes;
365
366 /* Nonzero means process PCH files while preprocessing.  */
367
368 bool flag_pch_preprocess;
369
370 /* The file name to which we should write a precompiled header, or
371    NULL if no header will be written in this compile.  */
372
373 const char *pch_file;
374
375 /* Nonzero if an ISO standard was selected.  It rejects macros in the
376    user's namespace.  */
377 int flag_iso;
378
379 /* Nonzero if -undef was given.  It suppresses target built-in macros
380    and assertions.  */
381 int flag_undef;
382
383 /* Nonzero means don't recognize the non-ANSI builtin functions.  */
384
385 int flag_no_builtin;
386
387 /* Nonzero means don't recognize the non-ANSI builtin functions.
388    -ansi sets this.  */
389
390 int flag_no_nonansi_builtin;
391
392 /* Nonzero means give `double' the same size as `float'.  */
393
394 int flag_short_double;
395
396 /* Nonzero means give `wchar_t' the same size as `short'.  */
397
398 int flag_short_wchar;
399
400 /* Nonzero means allow implicit conversions between vectors with
401    differing numbers of subparts and/or differing element types.  */
402 int flag_lax_vector_conversions;
403
404 /* Nonzero means allow Microsoft extensions without warnings or errors.  */
405 int flag_ms_extensions;
406
407 /* Nonzero means don't recognize the keyword `asm'.  */
408
409 int flag_no_asm;
410
411 /* Nonzero means to treat bitfields as signed unless they say `unsigned'.  */
412
413 int flag_signed_bitfields = 1;
414
415 /* Warn about #pragma directives that are not recognized.  */
416
417 int warn_unknown_pragmas; /* Tri state variable.  */
418
419 /* Warn about format/argument anomalies in calls to formatted I/O functions
420    (*printf, *scanf, strftime, strfmon, etc.).  */
421
422 int warn_format;
423
424 /* Warn about using __null (as NULL in C++) as sentinel.  For code compiled
425    with GCC this doesn't matter as __null is guaranteed to have the right
426    size.  */
427
428 int warn_strict_null_sentinel;
429
430 /* Zero means that faster, ...NonNil variants of objc_msgSend...
431    calls will be used in ObjC; passing nil receivers to such calls
432    will most likely result in crashes.  */
433 int flag_nil_receivers = 1;
434
435 /* Nonzero means that code generation will be altered to support
436    "zero-link" execution.  This currently affects ObjC only, but may
437    affect other languages in the future.  */
438 int flag_zero_link = 0;
439
440 /* Nonzero means emit an '__OBJC, __image_info' for the current translation
441    unit.  It will inform the ObjC runtime that class definition(s) herein
442    contained are to replace one(s) previously loaded.  */
443 int flag_replace_objc_classes = 0;
444
445 /* C/ObjC language option variables.  */
446
447
448 /* Nonzero means allow type mismatches in conditional expressions;
449    just make their values `void'.  */
450
451 int flag_cond_mismatch;
452
453 /* Nonzero means enable C89 Amendment 1 features.  */
454
455 int flag_isoc94;
456
457 /* Nonzero means use the ISO C99 dialect of C.  */
458
459 int flag_isoc99;
460
461 /* Nonzero means that we have builtin functions, and main is an int.  */
462
463 int flag_hosted = 1;
464
465
466 /* ObjC language option variables.  */
467
468
469 /* Open and close the file for outputting class declarations, if
470    requested (ObjC).  */
471
472 int flag_gen_declaration;
473
474 /* Tells the compiler that this is a special run.  Do not perform any
475    compiling, instead we are to test some platform dependent features
476    and output a C header file with appropriate definitions.  */
477
478 int print_struct_values;
479
480 /* Tells the compiler what is the constant string class for ObjC.  */
481
482 const char *constant_string_class_name;
483
484
485 /* C++ language option variables.  */
486
487
488 /* Nonzero means don't recognize any extension keywords.  */
489
490 int flag_no_gnu_keywords;
491
492 /* Nonzero means do emit exported implementations of functions even if
493    they can be inlined.  */
494
495 int flag_implement_inlines = 1;
496
497 /* Nonzero means that implicit instantiations will be emitted if needed.  */
498
499 int flag_implicit_templates = 1;
500
501 /* Nonzero means that implicit instantiations of inline templates will be
502    emitted if needed, even if instantiations of non-inline templates
503    aren't.  */
504
505 int flag_implicit_inline_templates = 1;
506
507 /* Nonzero means generate separate instantiation control files and
508    juggle them at link time.  */
509
510 int flag_use_repository;
511
512 /* Nonzero if we want to issue diagnostics that the standard says are not
513    required.  */
514
515 int flag_optional_diags = 1;
516
517 /* Nonzero means we should attempt to elide constructors when possible.  */
518
519 int flag_elide_constructors = 1;
520
521 /* Nonzero means that member functions defined in class scope are
522    inline by default.  */
523
524 int flag_default_inline = 1;
525
526 /* Controls whether compiler generates 'type descriptor' that give
527    run-time type information.  */
528
529 int flag_rtti = 1;
530
531 /* Nonzero if we want to conserve space in the .o files.  We do this
532    by putting uninitialized data and runtime initialized data into
533    .common instead of .data at the expense of not flagging multiple
534    definitions.  */
535
536 int flag_conserve_space;
537
538 /* Nonzero if we want to obey access control semantics.  */
539
540 int flag_access_control = 1;
541
542 /* Nonzero if we want to check the return value of new and avoid calling
543    constructors if it is a null pointer.  */
544
545 int flag_check_new;
546
547 /* The C++ dialect being used. C++98 is the default.  */
548
549 enum cxx_dialect cxx_dialect = cxx98;
550
551 /* Nonzero if we want the new ISO rules for pushing a new scope for `for'
552    initialization variables.
553    0: Old rules, set by -fno-for-scope.
554    2: New ISO rules, set by -ffor-scope.
555    1: Try to implement new ISO rules, but with backup compatibility
556    (and warnings).  This is the default, for now.  */
557
558 int flag_new_for_scope = 1;
559
560 /* Nonzero if we want to emit defined symbols with common-like linkage as
561    weak symbols where possible, in order to conform to C++ semantics.
562    Otherwise, emit them as local symbols.  */
563
564 int flag_weak = 1;
565
566 /* 0 means we want the preprocessor to not emit line directives for
567    the current working directory.  1 means we want it to do it.  -1
568    means we should decide depending on whether debugging information
569    is being emitted or not.  */
570
571 int flag_working_directory = -1;
572
573 /* Nonzero to use __cxa_atexit, rather than atexit, to register
574    destructors for local statics and global objects.  '2' means it has been
575    set nonzero as a default, not by a command-line flag.  */
576
577 int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
578
579 /* Nonzero to use __cxa_get_exception_ptr in C++ exception-handling
580    code.  '2' means it has not been set explicitly on the command line.  */
581
582 int flag_use_cxa_get_exception_ptr = 2;
583
584 /* Nonzero means to implement standard semantics for exception
585    specifications, calling unexpected if an exception is thrown that
586    doesn't match the specification.  Zero means to treat them as
587    assertions and optimize accordingly, but not check them.  */
588
589 int flag_enforce_eh_specs = 1;
590
591 /* Nonzero means to generate thread-safe code for initializing local
592    statics.  */
593
594 int flag_threadsafe_statics = 1;
595
596 /* Nonzero if we want to pretty-print template specializations as the
597    template signature followed by the arguments.  */
598
599 int flag_pretty_templates = 1;
600
601 /* Nonzero means warn about implicit declarations.  */
602
603 int warn_implicit = 1;
604
605 /* Maximum template instantiation depth.  This limit is rather
606    arbitrary, but it exists to limit the time it takes to notice
607    infinite template instantiations.  */
608
609 int max_tinst_depth = 500;
610
611
612
613 /* The elements of `ridpointers' are identifier nodes for the reserved
614    type names and storage classes.  It is indexed by a RID_... value.  */
615 tree *ridpointers;
616
617 tree (*make_fname_decl) (tree, int);
618
619 /* Nonzero means the expression being parsed will never be evaluated.
620    This is a count, since unevaluated expressions can nest.  */
621 int skip_evaluation;
622
623 /* Whether lexing has been completed, so subsequent preprocessor
624    errors should use the compiler's input_location.  */
625 bool done_lexing = false;
626
627 /* Information about how a function name is generated.  */
628 struct fname_var_t
629 {
630   tree *const decl;     /* pointer to the VAR_DECL.  */
631   const unsigned rid;   /* RID number for the identifier.  */
632   const int pretty;     /* How pretty is it? */
633 };
634
635 /* The three ways of getting then name of the current function.  */
636
637 const struct fname_var_t fname_vars[] =
638 {
639   /* C99 compliant __func__, must be first.  */
640   {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
641   /* GCC __FUNCTION__ compliant.  */
642   {&function_name_decl_node, RID_FUNCTION_NAME, 0},
643   /* GCC __PRETTY_FUNCTION__ compliant.  */
644   {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
645   {NULL, 0, 0},
646 };
647
648 static tree c_fully_fold_internal (tree expr, bool, bool *, bool *);
649 static tree check_case_value (tree);
650 static bool check_case_bounds (tree, tree, tree *, tree *);
651
652 static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
653 static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
654 static tree handle_common_attribute (tree *, tree, tree, int, bool *);
655 static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
656 static tree handle_hot_attribute (tree *, tree, tree, int, bool *);
657 static tree handle_cold_attribute (tree *, tree, tree, int, bool *);
658 static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
659 static tree handle_always_inline_attribute (tree *, tree, tree, int,
660                                             bool *);
661 static tree handle_gnu_inline_attribute (tree *, tree, tree, int, bool *);
662 static tree handle_artificial_attribute (tree *, tree, tree, int, bool *);
663 static tree handle_flatten_attribute (tree *, tree, tree, int, bool *);
664 static tree handle_error_attribute (tree *, tree, tree, int, bool *);
665 static tree handle_used_attribute (tree *, tree, tree, int, bool *);
666 static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
667 static tree handle_externally_visible_attribute (tree *, tree, tree, int,
668                                                  bool *);
669 static tree handle_const_attribute (tree *, tree, tree, int, bool *);
670 static tree handle_transparent_union_attribute (tree *, tree, tree,
671                                                 int, bool *);
672 static tree handle_constructor_attribute (tree *, tree, tree, int, bool *);
673 static tree handle_destructor_attribute (tree *, tree, tree, int, bool *);
674 static tree handle_mode_attribute (tree *, tree, tree, int, bool *);
675 static tree handle_section_attribute (tree *, tree, tree, int, bool *);
676 static tree handle_aligned_attribute (tree *, tree, tree, int, bool *);
677 static tree handle_weak_attribute (tree *, tree, tree, int, bool *) ;
678 static tree handle_alias_attribute (tree *, tree, tree, int, bool *);
679 static tree handle_weakref_attribute (tree *, tree, tree, int, bool *) ;
680 static tree handle_visibility_attribute (tree *, tree, tree, int,
681                                          bool *);
682 static tree handle_tls_model_attribute (tree *, tree, tree, int,
683                                         bool *);
684 static tree handle_no_instrument_function_attribute (tree *, tree,
685                                                      tree, int, bool *);
686 static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
687 static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
688 static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
689                                              bool *);
690 static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
691 static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
692 static tree handle_deprecated_attribute (tree *, tree, tree, int,
693                                          bool *);
694 static tree handle_vector_size_attribute (tree *, tree, tree, int,
695                                           bool *);
696 static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
697 static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
698 static tree handle_cleanup_attribute (tree *, tree, tree, int, bool *);
699 static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
700                                                  bool *);
701 static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
702 static tree handle_type_generic_attribute (tree *, tree, tree, int, bool *);
703 static tree handle_alloc_size_attribute (tree *, tree, tree, int, bool *);
704 static tree handle_target_attribute (tree *, tree, tree, int, bool *);
705 static tree handle_optimize_attribute (tree *, tree, tree, int, bool *);
706
707 static void check_function_nonnull (tree, int, tree *);
708 static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
709 static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
710 static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
711 static int resort_field_decl_cmp (const void *, const void *);
712
713 /* Reserved words.  The third field is a mask: keywords are disabled
714    if they match the mask.
715
716    Masks for languages:
717    C --std=c89: D_C99 | D_CXXONLY | D_OBJC | D_CXX_OBJC
718    C --std=c99: D_CXXONLY | D_OBJC
719    ObjC is like C except that D_OBJC and D_CXX_OBJC are not set
720    C++ --std=c98: D_CONLY | D_CXXOX | D_OBJC
721    C++ --std=c0x: D_CONLY | D_OBJC
722    ObjC++ is like C++ except that D_OBJC is not set
723
724    If -fno-asm is used, D_ASM is added to the mask.  If
725    -fno-gnu-keywords is used, D_EXT is added.  If -fno-asm and C in
726    C89 mode, D_EXT89 is added for both -fno-asm and -fno-gnu-keywords.
727    In C with -Wc++-compat, we warn if D_CXXWARN is set.  */
728
729 const struct c_common_resword c_common_reswords[] =
730 {
731   { "_Bool",            RID_BOOL,      D_CONLY },
732   { "_Complex",         RID_COMPLEX,    0 },
733   { "_Imaginary",       RID_IMAGINARY, D_CONLY },
734   { "_Decimal32",       RID_DFLOAT32,  D_CONLY | D_EXT },
735   { "_Decimal64",       RID_DFLOAT64,  D_CONLY | D_EXT },
736   { "_Decimal128",      RID_DFLOAT128, D_CONLY | D_EXT },
737   { "_Fract",           RID_FRACT,     D_CONLY | D_EXT },
738   { "_Accum",           RID_ACCUM,     D_CONLY | D_EXT },
739   { "_Sat",             RID_SAT,       D_CONLY | D_EXT },
740   { "__FUNCTION__",     RID_FUNCTION_NAME, 0 },
741   { "__PRETTY_FUNCTION__", RID_PRETTY_FUNCTION_NAME, 0 },
742   { "__alignof",        RID_ALIGNOF,    0 },
743   { "__alignof__",      RID_ALIGNOF,    0 },
744   { "__asm",            RID_ASM,        0 },
745   { "__asm__",          RID_ASM,        0 },
746   { "__attribute",      RID_ATTRIBUTE,  0 },
747   { "__attribute__",    RID_ATTRIBUTE,  0 },
748   { "__builtin_choose_expr", RID_CHOOSE_EXPR, D_CONLY },
749   { "__builtin_offsetof", RID_OFFSETOF, 0 },
750   { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, D_CONLY },
751   { "__builtin_va_arg", RID_VA_ARG,     0 },
752   { "__complex",        RID_COMPLEX,    0 },
753   { "__complex__",      RID_COMPLEX,    0 },
754   { "__const",          RID_CONST,      0 },
755   { "__const__",        RID_CONST,      0 },
756   { "__decltype",       RID_DECLTYPE,   D_CXXONLY },
757   { "__extension__",    RID_EXTENSION,  0 },
758   { "__func__",         RID_C99_FUNCTION_NAME, 0 },
759   { "__has_nothrow_assign", RID_HAS_NOTHROW_ASSIGN, D_CXXONLY },
760   { "__has_nothrow_constructor", RID_HAS_NOTHROW_CONSTRUCTOR, D_CXXONLY },
761   { "__has_nothrow_copy", RID_HAS_NOTHROW_COPY, D_CXXONLY },
762   { "__has_trivial_assign", RID_HAS_TRIVIAL_ASSIGN, D_CXXONLY },
763   { "__has_trivial_constructor", RID_HAS_TRIVIAL_CONSTRUCTOR, D_CXXONLY },
764   { "__has_trivial_copy", RID_HAS_TRIVIAL_COPY, D_CXXONLY },
765   { "__has_trivial_destructor", RID_HAS_TRIVIAL_DESTRUCTOR, D_CXXONLY },
766   { "__has_virtual_destructor", RID_HAS_VIRTUAL_DESTRUCTOR, D_CXXONLY },
767   { "__is_abstract",    RID_IS_ABSTRACT, D_CXXONLY },
768   { "__is_base_of",     RID_IS_BASE_OF, D_CXXONLY },
769   { "__is_class",       RID_IS_CLASS,   D_CXXONLY },
770   { "__is_convertible_to", RID_IS_CONVERTIBLE_TO, D_CXXONLY },
771   { "__is_empty",       RID_IS_EMPTY,   D_CXXONLY },
772   { "__is_enum",        RID_IS_ENUM,    D_CXXONLY },
773   { "__is_pod",         RID_IS_POD,     D_CXXONLY },
774   { "__is_polymorphic", RID_IS_POLYMORPHIC, D_CXXONLY },
775   { "__is_union",       RID_IS_UNION,   D_CXXONLY },
776   { "__imag",           RID_IMAGPART,   0 },
777   { "__imag__",         RID_IMAGPART,   0 },
778   { "__inline",         RID_INLINE,     0 },
779   { "__inline__",       RID_INLINE,     0 },
780   { "__label__",        RID_LABEL,      0 },
781   { "__null",           RID_NULL,       0 },
782   { "__real",           RID_REALPART,   0 },
783   { "__real__",         RID_REALPART,   0 },
784   { "__restrict",       RID_RESTRICT,   0 },
785   { "__restrict__",     RID_RESTRICT,   0 },
786   { "__signed",         RID_SIGNED,     0 },
787   { "__signed__",       RID_SIGNED,     0 },
788   { "__thread",         RID_THREAD,     0 },
789   { "__typeof",         RID_TYPEOF,     0 },
790   { "__typeof__",       RID_TYPEOF,     0 },
791   { "__volatile",       RID_VOLATILE,   0 },
792   { "__volatile__",     RID_VOLATILE,   0 },
793   { "asm",              RID_ASM,        D_ASM },
794   { "auto",             RID_AUTO,       0 },
795   { "bool",             RID_BOOL,       D_CXXONLY | D_CXXWARN },
796   { "break",            RID_BREAK,      0 },
797   { "case",             RID_CASE,       0 },
798   { "catch",            RID_CATCH,      D_CXX_OBJC | D_CXXWARN },
799   { "char",             RID_CHAR,       0 },
800   { "char16_t",         RID_CHAR16,     D_CXXONLY | D_CXX0X | D_CXXWARN },
801   { "char32_t",         RID_CHAR32,     D_CXXONLY | D_CXX0X | D_CXXWARN },
802   { "class",            RID_CLASS,      D_CXX_OBJC | D_CXXWARN },
803   { "const",            RID_CONST,      0 },
804   { "const_cast",       RID_CONSTCAST,  D_CXXONLY | D_CXXWARN },
805   { "continue",         RID_CONTINUE,   0 },
806   { "decltype",         RID_DECLTYPE,   D_CXXONLY | D_CXX0X | D_CXXWARN },
807   { "default",          RID_DEFAULT,    0 },
808   { "delete",           RID_DELETE,     D_CXXONLY | D_CXXWARN },
809   { "do",               RID_DO,         0 },
810   { "double",           RID_DOUBLE,     0 },
811   { "dynamic_cast",     RID_DYNCAST,    D_CXXONLY | D_CXXWARN },
812   { "else",             RID_ELSE,       0 },
813   { "enum",             RID_ENUM,       0 },
814   { "explicit",         RID_EXPLICIT,   D_CXXONLY | D_CXXWARN },
815   { "export",           RID_EXPORT,     D_CXXONLY | D_CXXWARN },
816   { "extern",           RID_EXTERN,     0 },
817   { "false",            RID_FALSE,      D_CXXONLY | D_CXXWARN },
818   { "float",            RID_FLOAT,      0 },
819   { "for",              RID_FOR,        0 },
820   { "friend",           RID_FRIEND,     D_CXXONLY | D_CXXWARN },
821   { "goto",             RID_GOTO,       0 },
822   { "if",               RID_IF,         0 },
823   { "inline",           RID_INLINE,     D_EXT89 },
824   { "int",              RID_INT,        0 },
825   { "long",             RID_LONG,       0 },
826   { "mutable",          RID_MUTABLE,    D_CXXONLY | D_CXXWARN },
827   { "namespace",        RID_NAMESPACE,  D_CXXONLY | D_CXXWARN },
828   { "new",              RID_NEW,        D_CXXONLY | D_CXXWARN },
829   { "operator",         RID_OPERATOR,   D_CXXONLY | D_CXXWARN },
830   { "private",          RID_PRIVATE,    D_CXX_OBJC | D_CXXWARN },
831   { "protected",        RID_PROTECTED,  D_CXX_OBJC | D_CXXWARN },
832   { "public",           RID_PUBLIC,     D_CXX_OBJC | D_CXXWARN },
833   { "register",         RID_REGISTER,   0 },
834   { "reinterpret_cast", RID_REINTCAST,  D_CXXONLY | D_CXXWARN },
835   { "restrict",         RID_RESTRICT,   D_CONLY | D_C99 },
836   { "return",           RID_RETURN,     0 },
837   { "short",            RID_SHORT,      0 },
838   { "signed",           RID_SIGNED,     0 },
839   { "sizeof",           RID_SIZEOF,     0 },
840   { "static",           RID_STATIC,     0 },
841   { "static_assert",    RID_STATIC_ASSERT, D_CXXONLY | D_CXX0X | D_CXXWARN },
842   { "static_cast",      RID_STATCAST,   D_CXXONLY | D_CXXWARN },
843   { "struct",           RID_STRUCT,     0 },
844   { "switch",           RID_SWITCH,     0 },
845   { "template",         RID_TEMPLATE,   D_CXXONLY | D_CXXWARN },
846   { "this",             RID_THIS,       D_CXXONLY | D_CXXWARN },
847   { "throw",            RID_THROW,      D_CXX_OBJC | D_CXXWARN },
848   { "true",             RID_TRUE,       D_CXXONLY | D_CXXWARN },
849   { "try",              RID_TRY,        D_CXX_OBJC | D_CXXWARN },
850   { "typedef",          RID_TYPEDEF,    0 },
851   { "typename",         RID_TYPENAME,   D_CXXONLY | D_CXXWARN },
852   { "typeid",           RID_TYPEID,     D_CXXONLY | D_CXXWARN },
853   { "typeof",           RID_TYPEOF,     D_ASM | D_EXT },
854   { "union",            RID_UNION,      0 },
855   { "unsigned",         RID_UNSIGNED,   0 },
856   { "using",            RID_USING,      D_CXXONLY | D_CXXWARN },
857   { "virtual",          RID_VIRTUAL,    D_CXXONLY | D_CXXWARN },
858   { "void",             RID_VOID,       0 },
859   { "volatile",         RID_VOLATILE,   0 },
860   { "wchar_t",          RID_WCHAR,      D_CXXONLY },
861   { "while",            RID_WHILE,      0 },
862   /* These Objective-C keywords are recognized only immediately after
863      an '@'.  */
864   { "compatibility_alias", RID_AT_ALIAS,        D_OBJC },
865   { "defs",             RID_AT_DEFS,            D_OBJC },
866   { "encode",           RID_AT_ENCODE,          D_OBJC },
867   { "end",              RID_AT_END,             D_OBJC },
868   { "implementation",   RID_AT_IMPLEMENTATION,  D_OBJC },
869   { "interface",        RID_AT_INTERFACE,       D_OBJC },
870   { "protocol",         RID_AT_PROTOCOL,        D_OBJC },
871   { "selector",         RID_AT_SELECTOR,        D_OBJC },
872   { "finally",          RID_AT_FINALLY,         D_OBJC },
873   { "synchronized",     RID_AT_SYNCHRONIZED,    D_OBJC },
874   /* These are recognized only in protocol-qualifier context
875      (see above) */
876   { "bycopy",           RID_BYCOPY,             D_OBJC },
877   { "byref",            RID_BYREF,              D_OBJC },
878   { "in",               RID_IN,                 D_OBJC },
879   { "inout",            RID_INOUT,              D_OBJC },
880   { "oneway",           RID_ONEWAY,             D_OBJC },
881   { "out",              RID_OUT,                D_OBJC },
882 };
883
884 const unsigned int num_c_common_reswords =
885   sizeof c_common_reswords / sizeof (struct c_common_resword);
886
887 /* Table of machine-independent attributes common to all C-like languages.  */
888 const struct attribute_spec c_common_attribute_table[] =
889 {
890   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
891   { "packed",                 0, 0, false, false, false,
892                               handle_packed_attribute },
893   { "nocommon",               0, 0, true,  false, false,
894                               handle_nocommon_attribute },
895   { "common",                 0, 0, true,  false, false,
896                               handle_common_attribute },
897   /* FIXME: logically, noreturn attributes should be listed as
898      "false, true, true" and apply to function types.  But implementing this
899      would require all the places in the compiler that use TREE_THIS_VOLATILE
900      on a decl to identify non-returning functions to be located and fixed
901      to check the function type instead.  */
902   { "noreturn",               0, 0, true,  false, false,
903                               handle_noreturn_attribute },
904   { "volatile",               0, 0, true,  false, false,
905                               handle_noreturn_attribute },
906   { "noinline",               0, 0, true,  false, false,
907                               handle_noinline_attribute },
908   { "always_inline",          0, 0, true,  false, false,
909                               handle_always_inline_attribute },
910   { "gnu_inline",             0, 0, true,  false, false,
911                               handle_gnu_inline_attribute },
912   { "artificial",             0, 0, true,  false, false,
913                               handle_artificial_attribute },
914   { "flatten",                0, 0, true,  false, false,
915                               handle_flatten_attribute },
916   { "used",                   0, 0, true,  false, false,
917                               handle_used_attribute },
918   { "unused",                 0, 0, false, false, false,
919                               handle_unused_attribute },
920   { "externally_visible",     0, 0, true,  false, false,
921                               handle_externally_visible_attribute },
922   /* The same comments as for noreturn attributes apply to const ones.  */
923   { "const",                  0, 0, true,  false, false,
924                               handle_const_attribute },
925   { "transparent_union",      0, 0, false, false, false,
926                               handle_transparent_union_attribute },
927   { "constructor",            0, 1, true,  false, false,
928                               handle_constructor_attribute },
929   { "destructor",             0, 1, true,  false, false,
930                               handle_destructor_attribute },
931   { "mode",                   1, 1, false,  true, false,
932                               handle_mode_attribute },
933   { "section",                1, 1, true,  false, false,
934                               handle_section_attribute },
935   { "aligned",                0, 1, false, false, false,
936                               handle_aligned_attribute },
937   { "weak",                   0, 0, true,  false, false,
938                               handle_weak_attribute },
939   { "alias",                  1, 1, true,  false, false,
940                               handle_alias_attribute },
941   { "weakref",                0, 1, true,  false, false,
942                               handle_weakref_attribute },
943   { "no_instrument_function", 0, 0, true,  false, false,
944                               handle_no_instrument_function_attribute },
945   { "malloc",                 0, 0, true,  false, false,
946                               handle_malloc_attribute },
947   { "returns_twice",          0, 0, true,  false, false,
948                               handle_returns_twice_attribute },
949   { "no_stack_limit",         0, 0, true,  false, false,
950                               handle_no_limit_stack_attribute },
951   { "pure",                   0, 0, true,  false, false,
952                               handle_pure_attribute },
953   /* For internal use (marking of builtins) only.  The name contains space
954      to prevent its usage in source code.  */
955   { "no vops",                0, 0, true,  false, false,
956                               handle_novops_attribute },
957   { "deprecated",             0, 1, false, false, false,
958                               handle_deprecated_attribute },
959   { "vector_size",            1, 1, false, true, false,
960                               handle_vector_size_attribute },
961   { "visibility",             1, 1, false, false, false,
962                               handle_visibility_attribute },
963   { "tls_model",              1, 1, true,  false, false,
964                               handle_tls_model_attribute },
965   { "nonnull",                0, -1, false, true, true,
966                               handle_nonnull_attribute },
967   { "nothrow",                0, 0, true,  false, false,
968                               handle_nothrow_attribute },
969   { "may_alias",              0, 0, false, true, false, NULL },
970   { "cleanup",                1, 1, true, false, false,
971                               handle_cleanup_attribute },
972   { "warn_unused_result",     0, 0, false, true, true,
973                               handle_warn_unused_result_attribute },
974   { "sentinel",               0, 1, false, true, true,
975                               handle_sentinel_attribute },
976   /* For internal use (marking of builtins) only.  The name contains space
977      to prevent its usage in source code.  */
978   { "type generic",           0, 0, false, true, true,
979                               handle_type_generic_attribute },
980   { "alloc_size",             1, 2, false, true, true,
981                               handle_alloc_size_attribute },
982   { "cold",                   0, 0, true,  false, false,
983                               handle_cold_attribute },
984   { "hot",                    0, 0, true,  false, false,
985                               handle_hot_attribute },
986   { "warning",                1, 1, true,  false, false,
987                               handle_error_attribute },
988   { "error",                  1, 1, true,  false, false,
989                               handle_error_attribute },
990   { "target",                 1, -1, true, false, false,
991                               handle_target_attribute },
992   { "optimize",               1, -1, true, false, false,
993                               handle_optimize_attribute },
994   { NULL,                     0, 0, false, false, false, NULL }
995 };
996
997 /* Give the specifications for the format attributes, used by C and all
998    descendants.  */
999
1000 const struct attribute_spec c_common_format_attribute_table[] =
1001 {
1002   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
1003   { "format",                 3, 3, false, true,  true,
1004                               handle_format_attribute },
1005   { "format_arg",             1, 1, false, true,  true,
1006                               handle_format_arg_attribute },
1007   { NULL,                     0, 0, false, false, false, NULL }
1008 };
1009
1010 /* Push current bindings for the function name VAR_DECLS.  */
1011
1012 void
1013 start_fname_decls (void)
1014 {
1015   unsigned ix;
1016   tree saved = NULL_TREE;
1017
1018   for (ix = 0; fname_vars[ix].decl; ix++)
1019     {
1020       tree decl = *fname_vars[ix].decl;
1021
1022       if (decl)
1023         {
1024           saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
1025           *fname_vars[ix].decl = NULL_TREE;
1026         }
1027     }
1028   if (saved || saved_function_name_decls)
1029     /* Normally they'll have been NULL, so only push if we've got a
1030        stack, or they are non-NULL.  */
1031     saved_function_name_decls = tree_cons (saved, NULL_TREE,
1032                                            saved_function_name_decls);
1033 }
1034
1035 /* Finish up the current bindings, adding them into the current function's
1036    statement tree.  This must be done _before_ finish_stmt_tree is called.
1037    If there is no current function, we must be at file scope and no statements
1038    are involved. Pop the previous bindings.  */
1039
1040 void
1041 finish_fname_decls (void)
1042 {
1043   unsigned ix;
1044   tree stmts = NULL_TREE;
1045   tree stack = saved_function_name_decls;
1046
1047   for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
1048     append_to_statement_list (TREE_VALUE (stack), &stmts);
1049
1050   if (stmts)
1051     {
1052       tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
1053
1054       if (TREE_CODE (*bodyp) == BIND_EXPR)
1055         bodyp = &BIND_EXPR_BODY (*bodyp);
1056
1057       append_to_statement_list_force (*bodyp, &stmts);
1058       *bodyp = stmts;
1059     }
1060
1061   for (ix = 0; fname_vars[ix].decl; ix++)
1062     *fname_vars[ix].decl = NULL_TREE;
1063
1064   if (stack)
1065     {
1066       /* We had saved values, restore them.  */
1067       tree saved;
1068
1069       for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
1070         {
1071           tree decl = TREE_PURPOSE (saved);
1072           unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
1073
1074           *fname_vars[ix].decl = decl;
1075         }
1076       stack = TREE_CHAIN (stack);
1077     }
1078   saved_function_name_decls = stack;
1079 }
1080
1081 /* Return the text name of the current function, suitably prettified
1082    by PRETTY_P.  Return string must be freed by caller.  */
1083
1084 const char *
1085 fname_as_string (int pretty_p)
1086 {
1087   const char *name = "top level";
1088   char *namep;
1089   int vrb = 2, len;
1090   cpp_string cstr = { 0, 0 }, strname;
1091
1092   if (!pretty_p)
1093     {
1094       name = "";
1095       vrb = 0;
1096     }
1097
1098   if (current_function_decl)
1099     name = lang_hooks.decl_printable_name (current_function_decl, vrb);
1100
1101   len = strlen (name) + 3; /* Two for '"'s.  One for NULL.  */
1102
1103   namep = XNEWVEC (char, len);
1104   snprintf (namep, len, "\"%s\"", name);
1105   strname.text = (unsigned char *) namep;
1106   strname.len = len - 1;
1107
1108   if (cpp_interpret_string (parse_in, &strname, 1, &cstr, CPP_STRING))
1109     {
1110       XDELETEVEC (namep);
1111       return (const char *) cstr.text;
1112     }
1113
1114   return namep;
1115 }
1116
1117 /* Return the VAR_DECL for a const char array naming the current
1118    function. If the VAR_DECL has not yet been created, create it
1119    now. RID indicates how it should be formatted and IDENTIFIER_NODE
1120    ID is its name (unfortunately C and C++ hold the RID values of
1121    keywords in different places, so we can't derive RID from ID in
1122    this language independent code. LOC is the location of the
1123    function.  */
1124
1125 tree
1126 fname_decl (location_t loc, unsigned int rid, tree id)
1127 {
1128   unsigned ix;
1129   tree decl = NULL_TREE;
1130
1131   for (ix = 0; fname_vars[ix].decl; ix++)
1132     if (fname_vars[ix].rid == rid)
1133       break;
1134
1135   decl = *fname_vars[ix].decl;
1136   if (!decl)
1137     {
1138       /* If a tree is built here, it would normally have the lineno of
1139          the current statement.  Later this tree will be moved to the
1140          beginning of the function and this line number will be wrong.
1141          To avoid this problem set the lineno to 0 here; that prevents
1142          it from appearing in the RTL.  */
1143       tree stmts;
1144       location_t saved_location = input_location;
1145       input_location = UNKNOWN_LOCATION;
1146
1147       stmts = push_stmt_list ();
1148       decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
1149       stmts = pop_stmt_list (stmts);
1150       if (!IS_EMPTY_STMT (stmts))
1151         saved_function_name_decls
1152           = tree_cons (decl, stmts, saved_function_name_decls);
1153       *fname_vars[ix].decl = decl;
1154       input_location = saved_location;
1155     }
1156   if (!ix && !current_function_decl)
1157     pedwarn (loc, 0, "%qD is not defined outside of function scope", decl);
1158
1159   return decl;
1160 }
1161
1162 /* Given a STRING_CST, give it a suitable array-of-chars data type.  */
1163
1164 tree
1165 fix_string_type (tree value)
1166 {
1167   int length = TREE_STRING_LENGTH (value);
1168   int nchars;
1169   tree e_type, i_type, a_type;
1170
1171   /* Compute the number of elements, for the array type.  */
1172   if (TREE_TYPE (value) == char_array_type_node || !TREE_TYPE (value))
1173     {
1174       nchars = length;
1175       e_type = char_type_node;
1176     }
1177   else if (TREE_TYPE (value) == char16_array_type_node)
1178     {
1179       nchars = length / (TYPE_PRECISION (char16_type_node) / BITS_PER_UNIT);
1180       e_type = char16_type_node;
1181     }
1182   else if (TREE_TYPE (value) == char32_array_type_node)
1183     {
1184       nchars = length / (TYPE_PRECISION (char32_type_node) / BITS_PER_UNIT);
1185       e_type = char32_type_node;
1186     }
1187   else
1188     {
1189       nchars = length / (TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT);
1190       e_type = wchar_type_node;
1191     }
1192
1193   /* C89 2.2.4.1, C99 5.2.4.1 (Translation limits).  The analogous
1194      limit in C++98 Annex B is very large (65536) and is not normative,
1195      so we do not diagnose it (warn_overlength_strings is forced off
1196      in c_common_post_options).  */
1197   if (warn_overlength_strings)
1198     {
1199       const int nchars_max = flag_isoc99 ? 4095 : 509;
1200       const int relevant_std = flag_isoc99 ? 99 : 90;
1201       if (nchars - 1 > nchars_max)
1202         /* Translators: The %d after 'ISO C' will be 90 or 99.  Do not
1203            separate the %d from the 'C'.  'ISO' should not be
1204            translated, but it may be moved after 'C%d' in languages
1205            where modifiers follow nouns.  */
1206         pedwarn (input_location, OPT_Woverlength_strings,
1207                  "string length %qd is greater than the length %qd "
1208                  "ISO C%d compilers are required to support",
1209                  nchars - 1, nchars_max, relevant_std);
1210     }
1211
1212   /* Create the array type for the string constant.  The ISO C++
1213      standard says that a string literal has type `const char[N]' or
1214      `const wchar_t[N]'.  We use the same logic when invoked as a C
1215      front-end with -Wwrite-strings.
1216      ??? We should change the type of an expression depending on the
1217      state of a warning flag.  We should just be warning -- see how
1218      this is handled in the C++ front-end for the deprecated implicit
1219      conversion from string literals to `char*' or `wchar_t*'.
1220
1221      The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
1222      array type being the unqualified version of that type.
1223      Therefore, if we are constructing an array of const char, we must
1224      construct the matching unqualified array type first.  The C front
1225      end does not require this, but it does no harm, so we do it
1226      unconditionally.  */
1227   i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
1228   a_type = build_array_type (e_type, i_type);
1229   if (c_dialect_cxx() || warn_write_strings)
1230     a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
1231
1232   TREE_TYPE (value) = a_type;
1233   TREE_CONSTANT (value) = 1;
1234   TREE_READONLY (value) = 1;
1235   TREE_STATIC (value) = 1;
1236   return value;
1237 }
1238 \f
1239 /* Fully fold EXPR, an expression that was not folded (beyond integer
1240    constant expressions and null pointer constants) when being built
1241    up.  If IN_INIT, this is in a static initializer and certain
1242    changes are made to the folding done.  Clear *MAYBE_CONST if
1243    MAYBE_CONST is not NULL and EXPR is definitely not a constant
1244    expression because it contains an evaluated operator (in C99) or an
1245    operator outside of sizeof returning an integer constant (in C90)
1246    not permitted in constant expressions, or because it contains an
1247    evaluated arithmetic overflow.  (*MAYBE_CONST should typically be
1248    set to true by callers before calling this function.)  Return the
1249    folded expression.  Function arguments have already been folded
1250    before calling this function, as have the contents of SAVE_EXPR,
1251    TARGET_EXPR, BIND_EXPR, VA_ARG_EXPR, OBJ_TYPE_REF and
1252    C_MAYBE_CONST_EXPR.  */
1253
1254 tree
1255 c_fully_fold (tree expr, bool in_init, bool *maybe_const)
1256 {
1257   tree ret;
1258   tree eptype = NULL_TREE;
1259   bool dummy = true;
1260   bool maybe_const_itself = true;
1261
1262   /* This function is not relevant to C++ because C++ folds while
1263      parsing, and may need changes to be correct for C++ when C++
1264      stops folding while parsing.  */
1265   if (c_dialect_cxx ())
1266     gcc_unreachable ();
1267
1268   if (!maybe_const)
1269     maybe_const = &dummy;
1270   if (TREE_CODE (expr) == EXCESS_PRECISION_EXPR)
1271     {
1272       eptype = TREE_TYPE (expr);
1273       expr = TREE_OPERAND (expr, 0);
1274     }
1275   ret = c_fully_fold_internal (expr, in_init, maybe_const,
1276                                &maybe_const_itself);
1277   if (eptype)
1278     ret = fold_convert (eptype, ret);
1279   *maybe_const &= maybe_const_itself;
1280   return ret;
1281 }
1282
1283 /* Internal helper for c_fully_fold.  EXPR and IN_INIT are as for
1284    c_fully_fold.  *MAYBE_CONST_OPERANDS is cleared because of operands
1285    not permitted, while *MAYBE_CONST_ITSELF is cleared because of
1286    arithmetic overflow (for C90, *MAYBE_CONST_OPERANDS is carried from
1287    both evaluated and unevaluated subexpressions while
1288    *MAYBE_CONST_ITSELF is carried from only evaluated
1289    subexpressions).  */
1290
1291 static tree
1292 c_fully_fold_internal (tree expr, bool in_init, bool *maybe_const_operands,
1293                        bool *maybe_const_itself)
1294 {
1295   tree ret = expr;
1296   enum tree_code code = TREE_CODE (expr);
1297   enum tree_code_class kind = TREE_CODE_CLASS (code);
1298   location_t loc = EXPR_LOCATION (expr);
1299   tree op0, op1, op2, op3;
1300   tree orig_op0, orig_op1, orig_op2;
1301   bool op0_const = true, op1_const = true, op2_const = true;
1302   bool op0_const_self = true, op1_const_self = true, op2_const_self = true;
1303   bool nowarning = TREE_NO_WARNING (expr);
1304
1305   /* This function is not relevant to C++ because C++ folds while
1306      parsing, and may need changes to be correct for C++ when C++
1307      stops folding while parsing.  */
1308   if (c_dialect_cxx ())
1309     gcc_unreachable ();
1310
1311   /* Constants, declarations, statements, errors, SAVE_EXPRs and
1312      anything else not counted as an expression cannot usefully be
1313      folded further at this point.  */
1314   if (!IS_EXPR_CODE_CLASS (kind)
1315       || kind == tcc_statement
1316       || code == SAVE_EXPR)
1317     return expr;
1318
1319   /* Operands of variable-length expressions (function calls) have
1320      already been folded, as have __builtin_* function calls, and such
1321      expressions cannot occur in constant expressions.  */
1322   if (kind == tcc_vl_exp)
1323     {
1324       *maybe_const_operands = false;
1325       ret = fold (expr);
1326       goto out;
1327     }
1328
1329   if (code == C_MAYBE_CONST_EXPR)
1330     {
1331       tree pre = C_MAYBE_CONST_EXPR_PRE (expr);
1332       tree inner = C_MAYBE_CONST_EXPR_EXPR (expr);
1333       if (C_MAYBE_CONST_EXPR_NON_CONST (expr))
1334         *maybe_const_operands = false;
1335       if (C_MAYBE_CONST_EXPR_INT_OPERANDS (expr))
1336         *maybe_const_itself = false;
1337       if (pre && !in_init)
1338         ret = build2 (COMPOUND_EXPR, TREE_TYPE (expr), pre, inner);
1339       else
1340         ret = inner;
1341       goto out;
1342     }
1343
1344   /* Assignment, increment, decrement, function call and comma
1345      operators, and statement expressions, cannot occur in constant
1346      expressions if evaluated / outside of sizeof.  (Function calls
1347      were handled above, though VA_ARG_EXPR is treated like a function
1348      call here, and statement expressions are handled through
1349      C_MAYBE_CONST_EXPR to avoid folding inside them.)  */
1350   switch (code)
1351     {
1352     case MODIFY_EXPR:
1353     case PREDECREMENT_EXPR:
1354     case PREINCREMENT_EXPR:
1355     case POSTDECREMENT_EXPR:
1356     case POSTINCREMENT_EXPR:
1357     case COMPOUND_EXPR:
1358       *maybe_const_operands = false;
1359       break;
1360
1361     case VA_ARG_EXPR:
1362     case TARGET_EXPR:
1363     case BIND_EXPR:
1364     case OBJ_TYPE_REF:
1365       *maybe_const_operands = false;
1366       ret = fold (expr);
1367       goto out;
1368
1369     default:
1370       break;
1371     }
1372
1373   /* Fold individual tree codes as appropriate.  */
1374   switch (code)
1375     {
1376     case COMPOUND_LITERAL_EXPR:
1377       /* Any non-constancy will have been marked in a containing
1378          C_MAYBE_CONST_EXPR; there is no more folding to do here.  */
1379       goto out;
1380
1381     case COMPONENT_REF:
1382       orig_op0 = op0 = TREE_OPERAND (expr, 0);
1383       op1 = TREE_OPERAND (expr, 1);
1384       op2 = TREE_OPERAND (expr, 2);
1385       op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1386                                    maybe_const_itself);
1387       if (op0 != orig_op0)
1388         ret = build3 (COMPONENT_REF, TREE_TYPE (expr), op0, op1, op2);
1389       if (ret != expr)
1390         {
1391           TREE_READONLY (ret) = TREE_READONLY (expr);
1392           TREE_THIS_VOLATILE (ret) = TREE_THIS_VOLATILE (expr);
1393         }
1394       goto out;
1395
1396     case ARRAY_REF:
1397       orig_op0 = op0 = TREE_OPERAND (expr, 0);
1398       orig_op1 = op1 = TREE_OPERAND (expr, 1);
1399       op2 = TREE_OPERAND (expr, 2);
1400       op3 = TREE_OPERAND (expr, 3);
1401       op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1402                                    maybe_const_itself);
1403       op1 = c_fully_fold_internal (op1, in_init, maybe_const_operands,
1404                                    maybe_const_itself);
1405       op1 = decl_constant_value_for_optimization (op1);
1406       if (op0 != orig_op0 || op1 != orig_op1)
1407         ret = build4 (ARRAY_REF, TREE_TYPE (expr), op0, op1, op2, op3);
1408       if (ret != expr)
1409         {
1410           TREE_READONLY (ret) = TREE_READONLY (expr);
1411           TREE_SIDE_EFFECTS (ret) = TREE_SIDE_EFFECTS (expr);
1412           TREE_THIS_VOLATILE (ret) = TREE_THIS_VOLATILE (expr);
1413         }
1414       ret = fold (ret);
1415       goto out;
1416
1417     case COMPOUND_EXPR:
1418     case MODIFY_EXPR:
1419     case PREDECREMENT_EXPR:
1420     case PREINCREMENT_EXPR:
1421     case POSTDECREMENT_EXPR:
1422     case POSTINCREMENT_EXPR:
1423     case PLUS_EXPR:
1424     case MINUS_EXPR:
1425     case MULT_EXPR:
1426     case POINTER_PLUS_EXPR:
1427     case TRUNC_DIV_EXPR:
1428     case CEIL_DIV_EXPR:
1429     case FLOOR_DIV_EXPR:
1430     case TRUNC_MOD_EXPR:
1431     case RDIV_EXPR:
1432     case EXACT_DIV_EXPR:
1433     case LSHIFT_EXPR:
1434     case RSHIFT_EXPR:
1435     case BIT_IOR_EXPR:
1436     case BIT_XOR_EXPR:
1437     case BIT_AND_EXPR:
1438     case LT_EXPR:
1439     case LE_EXPR:
1440     case GT_EXPR:
1441     case GE_EXPR:
1442     case EQ_EXPR:
1443     case NE_EXPR:
1444     case COMPLEX_EXPR:
1445     case TRUTH_AND_EXPR:
1446     case TRUTH_OR_EXPR:
1447     case TRUTH_XOR_EXPR:
1448     case UNORDERED_EXPR:
1449     case ORDERED_EXPR:
1450     case UNLT_EXPR:
1451     case UNLE_EXPR:
1452     case UNGT_EXPR:
1453     case UNGE_EXPR:
1454     case UNEQ_EXPR:
1455       /* Binary operations evaluating both arguments (increment and
1456          decrement are binary internally in GCC).  */
1457       orig_op0 = op0 = TREE_OPERAND (expr, 0);
1458       orig_op1 = op1 = TREE_OPERAND (expr, 1);
1459       op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1460                                    maybe_const_itself);
1461       if (code != MODIFY_EXPR
1462           && code != PREDECREMENT_EXPR
1463           && code != PREINCREMENT_EXPR
1464           && code != POSTDECREMENT_EXPR
1465           && code != POSTINCREMENT_EXPR)
1466         op0 = decl_constant_value_for_optimization (op0);
1467       /* The RHS of a MODIFY_EXPR was fully folded when building that
1468          expression for the sake of conversion warnings.  */
1469       if (code != MODIFY_EXPR)
1470         op1 = c_fully_fold_internal (op1, in_init, maybe_const_operands,
1471                                      maybe_const_itself);
1472       op1 = decl_constant_value_for_optimization (op1);
1473       if (op0 != orig_op0 || op1 != orig_op1 || in_init)
1474         ret = in_init
1475           ? fold_build2_initializer (code, TREE_TYPE (expr), op0, op1)
1476           : fold_build2 (code, TREE_TYPE (expr), op0, op1);
1477       else
1478         ret = fold (expr);
1479       goto out;
1480
1481     case INDIRECT_REF:
1482     case FIX_TRUNC_EXPR:
1483     case FLOAT_EXPR:
1484     CASE_CONVERT:
1485     case NON_LVALUE_EXPR:
1486     case NEGATE_EXPR:
1487     case BIT_NOT_EXPR:
1488     case TRUTH_NOT_EXPR:
1489     case ADDR_EXPR:
1490     case CONJ_EXPR:
1491     case REALPART_EXPR:
1492     case IMAGPART_EXPR:
1493       /* Unary operations.  */
1494       orig_op0 = op0 = TREE_OPERAND (expr, 0);
1495       op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1496                                    maybe_const_itself);
1497       if (code != ADDR_EXPR && code != REALPART_EXPR && code != IMAGPART_EXPR)
1498         op0 = decl_constant_value_for_optimization (op0);
1499       if (op0 != orig_op0 || in_init)
1500         ret = in_init
1501           ? fold_build1_initializer (code, TREE_TYPE (expr), op0)
1502           : fold_build1 (code, TREE_TYPE (expr), op0);
1503       else
1504         ret = fold (expr);
1505       if (code == INDIRECT_REF
1506           && ret != expr
1507           && TREE_CODE (ret) == INDIRECT_REF)
1508         {
1509           TREE_READONLY (ret) = TREE_READONLY (expr);
1510           TREE_SIDE_EFFECTS (ret) = TREE_SIDE_EFFECTS (expr);
1511           TREE_THIS_VOLATILE (ret) = TREE_THIS_VOLATILE (expr);
1512         }
1513       goto out;
1514
1515     case TRUTH_ANDIF_EXPR:
1516     case TRUTH_ORIF_EXPR:
1517       /* Binary operations not necessarily evaluating both
1518          arguments.  */
1519       orig_op0 = op0 = TREE_OPERAND (expr, 0);
1520       orig_op1 = op1 = TREE_OPERAND (expr, 1);
1521       op0 = c_fully_fold_internal (op0, in_init, &op0_const, &op0_const_self);
1522       op1 = c_fully_fold_internal (op1, in_init, &op1_const, &op1_const_self);
1523       if (op0 != orig_op0 || op1 != orig_op1 || in_init)
1524         ret = in_init
1525           ? fold_build2_initializer (code, TREE_TYPE (expr), op0, op1)
1526           : fold_build2 (code, TREE_TYPE (expr), op0, op1);
1527       else
1528         ret = fold (expr);
1529       *maybe_const_operands &= op0_const;
1530       *maybe_const_itself &= op0_const_self;
1531       if (!(flag_isoc99
1532             && op0_const
1533             && op0_const_self
1534             && (code == TRUTH_ANDIF_EXPR
1535                 ? op0 == truthvalue_false_node
1536                 : op0 == truthvalue_true_node)))
1537         *maybe_const_operands &= op1_const;
1538       if (!(op0_const
1539             && op0_const_self
1540             && (code == TRUTH_ANDIF_EXPR
1541                 ? op0 == truthvalue_false_node
1542                 : op0 == truthvalue_true_node)))
1543         *maybe_const_itself &= op1_const_self;
1544       goto out;
1545
1546     case COND_EXPR:
1547       orig_op0 = op0 = TREE_OPERAND (expr, 0);
1548       orig_op1 = op1 = TREE_OPERAND (expr, 1);
1549       orig_op2 = op2 = TREE_OPERAND (expr, 2);
1550       op0 = c_fully_fold_internal (op0, in_init, &op0_const, &op0_const_self);
1551       op1 = c_fully_fold_internal (op1, in_init, &op1_const, &op1_const_self);
1552       op2 = c_fully_fold_internal (op2, in_init, &op2_const, &op2_const_self);
1553       if (op0 != orig_op0 || op1 != orig_op1 || op2 != orig_op2)
1554         ret = fold_build3 (code, TREE_TYPE (expr), op0, op1, op2);
1555       else
1556         ret = fold (expr);
1557       *maybe_const_operands &= op0_const;
1558       *maybe_const_itself &= op0_const_self;
1559       if (!(flag_isoc99
1560             && op0_const
1561             && op0_const_self
1562             && op0 == truthvalue_false_node))
1563         *maybe_const_operands &= op1_const;
1564       if (!(op0_const
1565             && op0_const_self
1566             && op0 == truthvalue_false_node))
1567         *maybe_const_itself &= op1_const_self;
1568       if (!(flag_isoc99
1569             && op0_const
1570             && op0_const_self
1571             && op0 == truthvalue_true_node))
1572         *maybe_const_operands &= op2_const;
1573       if (!(op0_const
1574             && op0_const_self
1575             && op0 == truthvalue_true_node))
1576         *maybe_const_itself &= op2_const_self;
1577       goto out;
1578
1579     case EXCESS_PRECISION_EXPR:
1580       /* Each case where an operand with excess precision may be
1581          encountered must remove the EXCESS_PRECISION_EXPR around
1582          inner operands and possibly put one around the whole
1583          expression or possibly convert to the semantic type (which
1584          c_fully_fold does); we cannot tell at this stage which is
1585          appropriate in any particular case.  */
1586       gcc_unreachable ();
1587
1588     default:
1589       /* Various codes may appear through folding built-in functions
1590          and their arguments.  */
1591       goto out;
1592     }
1593
1594  out:
1595   /* Some folding may introduce NON_LVALUE_EXPRs; all lvalue checks
1596      have been done by this point, so remove them again.  */
1597   nowarning |= TREE_NO_WARNING (ret);
1598   STRIP_TYPE_NOPS (ret);
1599   if (nowarning && !TREE_NO_WARNING (ret))
1600     {
1601       if (!CAN_HAVE_LOCATION_P (ret))
1602         ret = build1 (NOP_EXPR, TREE_TYPE (ret), ret);
1603       TREE_NO_WARNING (ret) = 1;
1604     }
1605   if (ret != expr)
1606     protected_set_expr_location (ret, loc);
1607   return ret;
1608 }
1609
1610 /* If not optimizing, EXP is not a VAR_DECL, or EXP has array type,
1611    return EXP.  Otherwise, return either EXP or its known constant
1612    value (if it has one), but return EXP if EXP has mode BLKmode.  ???
1613    Is the BLKmode test appropriate?  */
1614
1615 tree
1616 decl_constant_value_for_optimization (tree exp)
1617 {
1618   tree ret;
1619
1620   /* This function is only used by C, for c_fully_fold and other
1621      optimization, and may not be correct for C++.  */
1622   if (c_dialect_cxx ())
1623     gcc_unreachable ();
1624
1625   if (!optimize
1626       || TREE_CODE (exp) != VAR_DECL
1627       || TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE
1628       || DECL_MODE (exp) == BLKmode)
1629     return exp;
1630
1631   ret = decl_constant_value (exp);
1632   /* Avoid unwanted tree sharing between the initializer and current
1633      function's body where the tree can be modified e.g. by the
1634      gimplifier.  */
1635   if (ret != exp && TREE_STATIC (exp))
1636     ret = unshare_expr (ret);
1637   return ret;
1638 }
1639
1640 /* Print a warning if a constant expression had overflow in folding.
1641    Invoke this function on every expression that the language
1642    requires to be a constant expression.
1643    Note the ANSI C standard says it is erroneous for a
1644    constant expression to overflow.  */
1645
1646 void
1647 constant_expression_warning (tree value)
1648 {
1649   if (warn_overflow && pedantic 
1650       && (TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
1651           || TREE_CODE (value) == FIXED_CST
1652           || TREE_CODE (value) == VECTOR_CST
1653           || TREE_CODE (value) == COMPLEX_CST)
1654       && TREE_OVERFLOW (value))
1655     pedwarn (input_location, OPT_Woverflow, "overflow in constant expression");
1656 }
1657
1658 /* The same as above but print an unconditional error.  */
1659 void
1660 constant_expression_error (tree value)
1661 {
1662   if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
1663        || TREE_CODE (value) == FIXED_CST
1664        || TREE_CODE (value) == VECTOR_CST
1665        || TREE_CODE (value) == COMPLEX_CST)
1666       && TREE_OVERFLOW (value))
1667     error ("overflow in constant expression");
1668 }
1669
1670 /* Print a warning if an expression had overflow in folding and its
1671    operands hadn't.
1672
1673    Invoke this function on every expression that
1674    (1) appears in the source code, and
1675    (2) is a constant expression that overflowed, and
1676    (3) is not already checked by convert_and_check;
1677    however, do not invoke this function on operands of explicit casts
1678    or when the expression is the result of an operator and any operand
1679    already overflowed.  */
1680
1681 void
1682 overflow_warning (tree value)
1683 {
1684   if (skip_evaluation) return;
1685
1686   switch (TREE_CODE (value))
1687     {
1688     case INTEGER_CST:
1689       warning (OPT_Woverflow, "integer overflow in expression");
1690       break;
1691       
1692     case REAL_CST:
1693       warning (OPT_Woverflow, "floating point overflow in expression");
1694       break;
1695       
1696     case FIXED_CST:
1697       warning (OPT_Woverflow, "fixed-point overflow in expression");
1698       break;
1699
1700     case VECTOR_CST:
1701       warning (OPT_Woverflow, "vector overflow in expression");
1702       break;
1703       
1704     case COMPLEX_CST:
1705       if (TREE_CODE (TREE_REALPART (value)) == INTEGER_CST)
1706         warning (OPT_Woverflow, "complex integer overflow in expression");
1707       else if (TREE_CODE (TREE_REALPART (value)) == REAL_CST)
1708         warning (OPT_Woverflow, "complex floating point overflow in expression");
1709       break;
1710
1711     default:
1712       break;
1713     }
1714 }
1715
1716 /* Warn about uses of logical || / && operator in a context where it
1717    is likely that the bitwise equivalent was intended by the
1718    programmer.  We have seen an expression in which CODE is a binary
1719    operator used to combine expressions OP_LEFT and OP_RIGHT, which
1720    before folding had CODE_LEFT and CODE_RIGHT.  */
1721
1722 void
1723 warn_logical_operator (location_t location, enum tree_code code,
1724                        enum tree_code code_left, tree op_left, 
1725                        enum tree_code ARG_UNUSED (code_right), tree op_right)
1726 {
1727   if (code != TRUTH_ANDIF_EXPR
1728       && code != TRUTH_AND_EXPR
1729       && code != TRUTH_ORIF_EXPR
1730       && code != TRUTH_OR_EXPR)
1731     return;
1732
1733   /* Warn if &&/|| are being used in a context where it is
1734      likely that the bitwise equivalent was intended by the
1735      programmer. That is, an expression such as op && MASK
1736      where op should not be any boolean expression, nor a
1737      constant, and mask seems to be a non-boolean integer constant.  */
1738   if (!truth_value_p (code_left)
1739       && INTEGRAL_TYPE_P (TREE_TYPE (op_left))
1740       && !CONSTANT_CLASS_P (op_left)
1741       && !TREE_NO_WARNING (op_left)
1742       && TREE_CODE (op_right) == INTEGER_CST
1743       && !integer_zerop (op_right)
1744       && !integer_onep (op_right))
1745     {
1746       if (code == TRUTH_ORIF_EXPR || code == TRUTH_OR_EXPR)
1747         warning_at (location, OPT_Wlogical_op, "logical %<or%>"
1748                     " applied to non-boolean constant");
1749       else
1750         warning_at (location, OPT_Wlogical_op, "logical %<and%>"
1751                     " applied to non-boolean constant");
1752       TREE_NO_WARNING (op_left) = true;
1753     }
1754 }
1755
1756
1757 /* Print a warning about casts that might indicate violation
1758    of strict aliasing rules if -Wstrict-aliasing is used and
1759    strict aliasing mode is in effect. OTYPE is the original
1760    TREE_TYPE of EXPR, and TYPE the type we're casting to. */
1761
1762 bool
1763 strict_aliasing_warning (tree otype, tree type, tree expr)
1764 {
1765   /* Strip pointer conversion chains and get to the correct original type.  */
1766   STRIP_NOPS (expr);
1767   otype = TREE_TYPE (expr);
1768
1769   if (!(flag_strict_aliasing
1770         && POINTER_TYPE_P (type)
1771         && POINTER_TYPE_P (otype)
1772         && !VOID_TYPE_P (TREE_TYPE (type)))
1773       /* If the type we are casting to is a ref-all pointer
1774          dereferencing it is always valid.  */
1775       || TYPE_REF_CAN_ALIAS_ALL (type))
1776     return false;
1777
1778   if ((warn_strict_aliasing > 1) && TREE_CODE (expr) == ADDR_EXPR
1779       && (DECL_P (TREE_OPERAND (expr, 0))
1780           || handled_component_p (TREE_OPERAND (expr, 0))))
1781     {
1782       /* Casting the address of an object to non void pointer. Warn
1783          if the cast breaks type based aliasing.  */
1784       if (!COMPLETE_TYPE_P (TREE_TYPE (type)) && warn_strict_aliasing == 2)
1785         {
1786           warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
1787                    "might break strict-aliasing rules");
1788           return true;
1789         }
1790       else
1791         {
1792           /* warn_strict_aliasing >= 3.   This includes the default (3).  
1793              Only warn if the cast is dereferenced immediately.  */
1794           alias_set_type set1 =
1795             get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
1796           alias_set_type set2 = get_alias_set (TREE_TYPE (type));
1797
1798           if (set1 != set2 && set2 != 0
1799               && (set1 == 0 || !alias_sets_conflict_p (set1, set2)))
1800             {
1801               warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1802                        "pointer will break strict-aliasing rules");
1803               return true;
1804             }
1805           else if (warn_strict_aliasing == 2
1806                    && !alias_sets_must_conflict_p (set1, set2))
1807             {
1808               warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1809                        "pointer might break strict-aliasing rules");
1810               return true;
1811             }
1812         }
1813     }
1814   else
1815     if ((warn_strict_aliasing == 1) && !VOID_TYPE_P (TREE_TYPE (otype)))
1816       {
1817         /* At this level, warn for any conversions, even if an address is
1818            not taken in the same statement.  This will likely produce many
1819            false positives, but could be useful to pinpoint problems that
1820            are not revealed at higher levels.  */
1821         alias_set_type set1 = get_alias_set (TREE_TYPE (otype));
1822         alias_set_type set2 = get_alias_set (TREE_TYPE (type));
1823         if (!COMPLETE_TYPE_P (type)
1824             || !alias_sets_must_conflict_p (set1, set2))
1825           {
1826             warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1827                      "pointer might break strict-aliasing rules");
1828             return true;
1829           }
1830       }
1831
1832   return false;
1833 }
1834
1835 /* Warn for unlikely, improbable, or stupid DECL declarations
1836    of `main'.  */
1837
1838 void
1839 check_main_parameter_types (tree decl)
1840 {
1841   tree args;
1842   int argct = 0;
1843
1844   for (args = TYPE_ARG_TYPES (TREE_TYPE (decl)); args;
1845       args = TREE_CHAIN (args))
1846    {
1847      tree type = args ? TREE_VALUE (args) : 0;
1848
1849      if (type == void_type_node || type == error_mark_node )
1850        break;
1851
1852      ++argct;
1853      switch (argct)
1854        {
1855        case 1:
1856          if (TYPE_MAIN_VARIANT (type) != integer_type_node)
1857            pedwarn (input_location, OPT_Wmain, "first argument of %q+D should be %<int%>", 
1858                     decl);
1859          break;
1860
1861        case 2:
1862          if (TREE_CODE (type) != POINTER_TYPE
1863              || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1864              || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1865                  != char_type_node))
1866            pedwarn (input_location, OPT_Wmain, "second argument of %q+D should be %<char **%>",
1867                     decl);
1868          break;
1869
1870        case 3:
1871          if (TREE_CODE (type) != POINTER_TYPE
1872              || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1873              || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1874                  != char_type_node))
1875            pedwarn (input_location, OPT_Wmain, "third argument of %q+D should probably be "
1876                     "%<char **%>", decl);
1877          break;
1878        }
1879    }
1880
1881   /* It is intentional that this message does not mention the third
1882     argument because it's only mentioned in an appendix of the
1883     standard.  */
1884   if (argct > 0 && (argct < 2 || argct > 3))
1885     pedwarn (input_location, OPT_Wmain, "%q+D takes only zero or two arguments", decl);
1886 }
1887
1888 /* True if pointers to distinct types T1 and T2 can be converted to
1889    each other without an explicit cast.  Only returns true for opaque
1890    vector types.  */
1891 bool
1892 vector_targets_convertible_p (const_tree t1, const_tree t2)
1893 {
1894   if (TREE_CODE (t1) == VECTOR_TYPE && TREE_CODE (t2) == VECTOR_TYPE
1895       && (TYPE_VECTOR_OPAQUE (t1) || TYPE_VECTOR_OPAQUE (t2))
1896       && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1897     return true;
1898
1899   return false;
1900 }
1901
1902 /* True if vector types T1 and T2 can be converted to each other
1903    without an explicit cast.  If EMIT_LAX_NOTE is true, and T1 and T2
1904    can only be converted with -flax-vector-conversions yet that is not
1905    in effect, emit a note telling the user about that option if such
1906    a note has not previously been emitted.  */
1907 bool
1908 vector_types_convertible_p (const_tree t1, const_tree t2, bool emit_lax_note)
1909 {
1910   static bool emitted_lax_note = false;
1911   bool convertible_lax;
1912
1913   if ((TYPE_VECTOR_OPAQUE (t1) || TYPE_VECTOR_OPAQUE (t2))
1914       && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1915     return true;
1916
1917   convertible_lax =
1918     (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
1919      && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
1920          TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
1921      && (INTEGRAL_TYPE_P (TREE_TYPE (t1))
1922          == INTEGRAL_TYPE_P (TREE_TYPE (t2))));
1923
1924   if (!convertible_lax || flag_lax_vector_conversions)
1925     return convertible_lax;
1926
1927   if (TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
1928       && lang_hooks.types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1929     return true;
1930
1931   if (emit_lax_note && !emitted_lax_note)
1932     {
1933       emitted_lax_note = true;
1934       inform (input_location, "use -flax-vector-conversions to permit "
1935               "conversions between vectors with differing "
1936               "element types or numbers of subparts");
1937     }
1938
1939   return false;
1940 }
1941
1942 /* This is a helper function of build_binary_op.
1943
1944    For certain operations if both args were extended from the same
1945    smaller type, do the arithmetic in that type and then extend.
1946
1947    BITWISE indicates a bitwise operation.
1948    For them, this optimization is safe only if
1949    both args are zero-extended or both are sign-extended.
1950    Otherwise, we might change the result.
1951    Eg, (short)-1 | (unsigned short)-1 is (int)-1
1952    but calculated in (unsigned short) it would be (unsigned short)-1.  
1953 */
1954 tree shorten_binary_op (tree result_type, tree op0, tree op1, bool bitwise)
1955 {
1956   int unsigned0, unsigned1;
1957   tree arg0, arg1;
1958   int uns;
1959   tree type;
1960
1961   /* Cast OP0 and OP1 to RESULT_TYPE.  Doing so prevents
1962      excessive narrowing when we call get_narrower below.  For
1963      example, suppose that OP0 is of unsigned int extended
1964      from signed char and that RESULT_TYPE is long long int.
1965      If we explicitly cast OP0 to RESULT_TYPE, OP0 would look
1966      like
1967      
1968      (long long int) (unsigned int) signed_char
1969
1970      which get_narrower would narrow down to
1971      
1972      (unsigned int) signed char
1973      
1974      If we do not cast OP0 first, get_narrower would return
1975      signed_char, which is inconsistent with the case of the
1976      explicit cast.  */
1977   op0 = convert (result_type, op0);
1978   op1 = convert (result_type, op1);
1979
1980   arg0 = get_narrower (op0, &unsigned0);
1981   arg1 = get_narrower (op1, &unsigned1);
1982
1983   /* UNS is 1 if the operation to be done is an unsigned one.  */
1984   uns = TYPE_UNSIGNED (result_type);
1985
1986   /* Handle the case that OP0 (or OP1) does not *contain* a conversion
1987      but it *requires* conversion to FINAL_TYPE.  */
1988   
1989   if ((TYPE_PRECISION (TREE_TYPE (op0))
1990        == TYPE_PRECISION (TREE_TYPE (arg0)))
1991       && TREE_TYPE (op0) != result_type)
1992     unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
1993   if ((TYPE_PRECISION (TREE_TYPE (op1))
1994        == TYPE_PRECISION (TREE_TYPE (arg1)))
1995       && TREE_TYPE (op1) != result_type)
1996     unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
1997   
1998   /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE.  */
1999   
2000   /* For bitwise operations, signedness of nominal type
2001      does not matter.  Consider only how operands were extended.  */
2002   if (bitwise)
2003     uns = unsigned0;
2004   
2005   /* Note that in all three cases below we refrain from optimizing
2006      an unsigned operation on sign-extended args.
2007      That would not be valid.  */
2008   
2009   /* Both args variable: if both extended in same way
2010      from same width, do it in that width.
2011      Do it unsigned if args were zero-extended.  */
2012   if ((TYPE_PRECISION (TREE_TYPE (arg0))
2013        < TYPE_PRECISION (result_type))
2014       && (TYPE_PRECISION (TREE_TYPE (arg1))
2015           == TYPE_PRECISION (TREE_TYPE (arg0)))
2016       && unsigned0 == unsigned1
2017       && (unsigned0 || !uns))
2018     return c_common_signed_or_unsigned_type
2019       (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
2020
2021   else if (TREE_CODE (arg0) == INTEGER_CST
2022            && (unsigned1 || !uns)
2023            && (TYPE_PRECISION (TREE_TYPE (arg1))
2024                < TYPE_PRECISION (result_type))
2025            && (type
2026                = c_common_signed_or_unsigned_type (unsigned1,
2027                                                    TREE_TYPE (arg1)))
2028            && !POINTER_TYPE_P (type)
2029            && int_fits_type_p (arg0, type))
2030     return type;
2031
2032   else if (TREE_CODE (arg1) == INTEGER_CST
2033            && (unsigned0 || !uns)
2034            && (TYPE_PRECISION (TREE_TYPE (arg0))
2035                < TYPE_PRECISION (result_type))
2036            && (type
2037                = c_common_signed_or_unsigned_type (unsigned0,
2038                                                    TREE_TYPE (arg0)))
2039            && !POINTER_TYPE_P (type)
2040            && int_fits_type_p (arg1, type))
2041     return type;
2042
2043   return result_type;
2044 }
2045
2046 /* Warns if the conversion of EXPR to TYPE may alter a value.
2047    This is a helper function for warnings_for_convert_and_check.  */
2048
2049 static void
2050 conversion_warning (tree type, tree expr)
2051 {
2052   bool give_warning = false;
2053
2054   int i;
2055   const int expr_num_operands = TREE_OPERAND_LENGTH (expr);
2056   tree expr_type = TREE_TYPE (expr);
2057
2058   if (!warn_conversion && !warn_sign_conversion)
2059     return;
2060
2061   /* If any operand is artificial, then this expression was generated
2062      by the compiler and we do not warn.  */
2063   for (i = 0; i < expr_num_operands; i++)
2064     {
2065       tree op = TREE_OPERAND (expr, i);
2066       if (op && DECL_P (op) && DECL_ARTIFICIAL (op))
2067         return;
2068     }
2069
2070   switch (TREE_CODE (expr))
2071     {
2072     case EQ_EXPR:
2073     case NE_EXPR:
2074     case LE_EXPR:
2075     case GE_EXPR:
2076     case LT_EXPR:
2077     case GT_EXPR:
2078     case TRUTH_ANDIF_EXPR:
2079     case TRUTH_ORIF_EXPR:
2080     case TRUTH_AND_EXPR:
2081     case TRUTH_OR_EXPR:
2082     case TRUTH_XOR_EXPR:
2083     case TRUTH_NOT_EXPR:
2084       /* Conversion from boolean to a signed:1 bit-field (which only
2085          can hold the values 0 and -1) doesn't lose information - but
2086          it does change the value.  */
2087       if (TYPE_PRECISION (type) == 1 && !TYPE_UNSIGNED (type)) 
2088         warning (OPT_Wconversion,
2089                  "conversion to %qT from boolean expression", type);
2090       return;
2091
2092     case REAL_CST:
2093     case INTEGER_CST:
2094
2095       /* Warn for real constant that is not an exact integer converted
2096          to integer type.  */
2097       if (TREE_CODE (expr_type) == REAL_TYPE
2098           && TREE_CODE (type) == INTEGER_TYPE)
2099         {
2100           if (!real_isinteger (TREE_REAL_CST_PTR (expr), TYPE_MODE (expr_type)))
2101             give_warning = true;
2102         }
2103       /* Warn for an integer constant that does not fit into integer type.  */
2104       else if (TREE_CODE (expr_type) == INTEGER_TYPE
2105                && TREE_CODE (type) == INTEGER_TYPE
2106                && !int_fits_type_p (expr, type))
2107         {
2108           if (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (expr_type) 
2109               && tree_int_cst_sgn (expr) < 0)
2110             warning (OPT_Wsign_conversion,
2111                      "negative integer implicitly converted to unsigned type");
2112           else if (!TYPE_UNSIGNED (type) && TYPE_UNSIGNED (expr_type))
2113             warning (OPT_Wsign_conversion,  "conversion of unsigned constant "
2114                      "value to negative integer");
2115           else
2116             give_warning = true;
2117         }
2118       else if (TREE_CODE (type) == REAL_TYPE)
2119         {
2120           /* Warn for an integer constant that does not fit into real type.  */
2121           if (TREE_CODE (expr_type) == INTEGER_TYPE)
2122             {
2123               REAL_VALUE_TYPE a = real_value_from_int_cst (0, expr);
2124               if (!exact_real_truncate (TYPE_MODE (type), &a))
2125                 give_warning = true;
2126             }
2127           /* Warn for a real constant that does not fit into a smaller
2128              real type.  */
2129           else if (TREE_CODE (expr_type) == REAL_TYPE
2130                    && TYPE_PRECISION (type) < TYPE_PRECISION (expr_type))
2131             {
2132               REAL_VALUE_TYPE a = TREE_REAL_CST (expr);
2133               if (!exact_real_truncate (TYPE_MODE (type), &a))
2134                 give_warning = true;
2135             }
2136         }
2137
2138       if (give_warning)
2139         warning (OPT_Wconversion,
2140                  "conversion to %qT alters %qT constant value",
2141                  type, expr_type);
2142
2143       return;
2144
2145     case COND_EXPR:
2146       {
2147         /* In case of COND_EXPR, if both operands are constants or
2148            COND_EXPR, then we do not care about the type of COND_EXPR,
2149            only about the conversion of each operand.  */
2150         tree op1 = TREE_OPERAND (expr, 1);
2151         tree op2 = TREE_OPERAND (expr, 2);
2152
2153         if ((TREE_CODE (op1) == REAL_CST || TREE_CODE (op1) == INTEGER_CST 
2154              || TREE_CODE (op1) == COND_EXPR)
2155             && (TREE_CODE (op2) == REAL_CST || TREE_CODE (op2) == INTEGER_CST
2156                 || TREE_CODE (op2) == COND_EXPR))
2157           {
2158             conversion_warning (type, op1);
2159             conversion_warning (type, op2);
2160             return;
2161           }
2162         /* Fall through.  */
2163       }
2164
2165     default: /* 'expr' is not a constant.  */
2166
2167       /* Warn for real types converted to integer types.  */
2168       if (TREE_CODE (expr_type) == REAL_TYPE
2169           && TREE_CODE (type) == INTEGER_TYPE)
2170         give_warning = true;
2171
2172       else if (TREE_CODE (expr_type) == INTEGER_TYPE
2173                && TREE_CODE (type) == INTEGER_TYPE)
2174         {
2175           /* Don't warn about unsigned char y = 0xff, x = (int) y;  */
2176           expr = get_unwidened (expr, 0);
2177           expr_type = TREE_TYPE (expr);
2178
2179           /* Don't warn for short y; short x = ((int)y & 0xff);  */
2180           if (TREE_CODE (expr) == BIT_AND_EXPR 
2181                 || TREE_CODE (expr) == BIT_IOR_EXPR 
2182               || TREE_CODE (expr) == BIT_XOR_EXPR)
2183             {
2184               /* If both args were extended from a shortest type,
2185                  use that type if that is safe.  */
2186               expr_type = shorten_binary_op (expr_type, 
2187                                              TREE_OPERAND (expr, 0), 
2188                                              TREE_OPERAND (expr, 1), 
2189                                              /* bitwise */1);
2190
2191               if (TREE_CODE (expr) == BIT_AND_EXPR)
2192                 {
2193                   tree op0 = TREE_OPERAND (expr, 0);
2194                   tree op1 = TREE_OPERAND (expr, 1);
2195                   bool unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
2196                   bool unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
2197
2198                   /* If one of the operands is a non-negative constant
2199                      that fits in the target type, then the type of the
2200                      other operand does not matter. */
2201                   if ((TREE_CODE (op0) == INTEGER_CST
2202                        && int_fits_type_p (op0, c_common_signed_type (type))
2203                        && int_fits_type_p (op0, c_common_unsigned_type (type)))
2204                       || (TREE_CODE (op1) == INTEGER_CST
2205                           && int_fits_type_p (op1, c_common_signed_type (type))
2206                           && int_fits_type_p (op1, 
2207                                               c_common_unsigned_type (type))))
2208                     return;
2209                   /* If constant is unsigned and fits in the target
2210                      type, then the result will also fit.  */
2211                   else if ((TREE_CODE (op0) == INTEGER_CST
2212                             && unsigned0 
2213                             && int_fits_type_p (op0, type))
2214                            || (TREE_CODE (op1) == INTEGER_CST
2215                                && unsigned1
2216                                && int_fits_type_p (op1, type)))
2217                     return;
2218                 }
2219             }
2220           /* Warn for integer types converted to smaller integer types.  */
2221           if (TYPE_PRECISION (type) < TYPE_PRECISION (expr_type)) 
2222             give_warning = true;
2223
2224           /* When they are the same width but different signedness,
2225              then the value may change.  */
2226           else if ((TYPE_PRECISION (type) == TYPE_PRECISION (expr_type)
2227                     && TYPE_UNSIGNED (expr_type) != TYPE_UNSIGNED (type))
2228                    /* Even when converted to a bigger type, if the type is
2229                       unsigned but expr is signed, then negative values
2230                       will be changed.  */
2231                    || (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (expr_type)))
2232             warning (OPT_Wsign_conversion, "conversion to %qT from %qT "
2233                      "may change the sign of the result",
2234                      type, expr_type);
2235         }
2236
2237       /* Warn for integer types converted to real types if and only if
2238          all the range of values of the integer type cannot be
2239          represented by the real type.  */
2240       else if (TREE_CODE (expr_type) == INTEGER_TYPE
2241                && TREE_CODE (type) == REAL_TYPE)
2242         {
2243           tree type_low_bound = TYPE_MIN_VALUE (expr_type);
2244           tree type_high_bound = TYPE_MAX_VALUE (expr_type);
2245           REAL_VALUE_TYPE real_low_bound 
2246             = real_value_from_int_cst (0, type_low_bound);
2247           REAL_VALUE_TYPE real_high_bound 
2248             = real_value_from_int_cst (0, type_high_bound);
2249
2250           if (!exact_real_truncate (TYPE_MODE (type), &real_low_bound)
2251               || !exact_real_truncate (TYPE_MODE (type), &real_high_bound))
2252             give_warning = true;
2253         }
2254
2255       /* Warn for real types converted to smaller real types.  */
2256       else if (TREE_CODE (expr_type) == REAL_TYPE
2257                && TREE_CODE (type) == REAL_TYPE
2258                && TYPE_PRECISION (type) < TYPE_PRECISION (expr_type))
2259         give_warning = true;
2260
2261
2262       if (give_warning)
2263         warning (OPT_Wconversion,
2264                  "conversion to %qT from %qT may alter its value",
2265                  type, expr_type);
2266     }
2267 }
2268
2269 /* Produce warnings after a conversion. RESULT is the result of
2270    converting EXPR to TYPE.  This is a helper function for
2271    convert_and_check and cp_convert_and_check.  */
2272
2273 void
2274 warnings_for_convert_and_check (tree type, tree expr, tree result)
2275 {
2276   if (TREE_CODE (expr) == INTEGER_CST
2277       && (TREE_CODE (type) == INTEGER_TYPE
2278           || TREE_CODE (type) == ENUMERAL_TYPE)
2279       && !int_fits_type_p (expr, type))
2280     {
2281       /* Do not diagnose overflow in a constant expression merely
2282          because a conversion overflowed.  */
2283       if (TREE_OVERFLOW (result))
2284         TREE_OVERFLOW (result) = TREE_OVERFLOW (expr);
2285
2286       if (TYPE_UNSIGNED (type))
2287         {
2288           /* This detects cases like converting -129 or 256 to
2289              unsigned char.  */
2290           if (!int_fits_type_p (expr, c_common_signed_type (type)))
2291             warning (OPT_Woverflow,
2292                      "large integer implicitly truncated to unsigned type");
2293           else
2294             conversion_warning (type, expr);
2295         }
2296       else if (!int_fits_type_p (expr, c_common_unsigned_type (type))) 
2297         warning (OPT_Woverflow,
2298                  "overflow in implicit constant conversion");
2299       /* No warning for converting 0x80000000 to int.  */
2300       else if (pedantic
2301                && (TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE
2302                    || TYPE_PRECISION (TREE_TYPE (expr))
2303                    != TYPE_PRECISION (type)))
2304         warning (OPT_Woverflow,
2305                  "overflow in implicit constant conversion");
2306
2307       else
2308         conversion_warning (type, expr);
2309     }
2310   else if ((TREE_CODE (result) == INTEGER_CST
2311             || TREE_CODE (result) == FIXED_CST) && TREE_OVERFLOW (result))
2312     warning (OPT_Woverflow,
2313              "overflow in implicit constant conversion");
2314   else
2315     conversion_warning (type, expr);
2316 }
2317
2318
2319 /* Convert EXPR to TYPE, warning about conversion problems with constants.
2320    Invoke this function on every expression that is converted implicitly,
2321    i.e. because of language rules and not because of an explicit cast.  */
2322
2323 tree
2324 convert_and_check (tree type, tree expr)
2325 {
2326   tree result;
2327   tree expr_for_warning;
2328
2329   /* Convert from a value with possible excess precision rather than
2330      via the semantic type, but do not warn about values not fitting
2331      exactly in the semantic type.  */
2332   if (TREE_CODE (expr) == EXCESS_PRECISION_EXPR)
2333     {
2334       tree orig_type = TREE_TYPE (expr);
2335       expr = TREE_OPERAND (expr, 0);
2336       expr_for_warning = convert (orig_type, expr);
2337       if (orig_type == type)
2338         return expr_for_warning;
2339     }
2340   else
2341     expr_for_warning = expr;
2342
2343   if (TREE_TYPE (expr) == type)
2344     return expr;
2345   
2346   result = convert (type, expr);
2347
2348   if (!skip_evaluation && !TREE_OVERFLOW_P (expr) && result != error_mark_node)
2349     warnings_for_convert_and_check (type, expr_for_warning, result);
2350
2351   return result;
2352 }
2353 \f
2354 /* A node in a list that describes references to variables (EXPR), which are
2355    either read accesses if WRITER is zero, or write accesses, in which case
2356    WRITER is the parent of EXPR.  */
2357 struct tlist
2358 {
2359   struct tlist *next;
2360   tree expr, writer;
2361 };
2362
2363 /* Used to implement a cache the results of a call to verify_tree.  We only
2364    use this for SAVE_EXPRs.  */
2365 struct tlist_cache
2366 {
2367   struct tlist_cache *next;
2368   struct tlist *cache_before_sp;
2369   struct tlist *cache_after_sp;
2370   tree expr;
2371 };
2372
2373 /* Obstack to use when allocating tlist structures, and corresponding
2374    firstobj.  */
2375 static struct obstack tlist_obstack;
2376 static char *tlist_firstobj = 0;
2377
2378 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
2379    warnings.  */
2380 static struct tlist *warned_ids;
2381 /* SAVE_EXPRs need special treatment.  We process them only once and then
2382    cache the results.  */
2383 static struct tlist_cache *save_expr_cache;
2384
2385 static void add_tlist (struct tlist **, struct tlist *, tree, int);
2386 static void merge_tlist (struct tlist **, struct tlist *, int);
2387 static void verify_tree (tree, struct tlist **, struct tlist **, tree);
2388 static int warning_candidate_p (tree);
2389 static bool candidate_equal_p (const_tree, const_tree);
2390 static void warn_for_collisions (struct tlist *);
2391 static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
2392 static struct tlist *new_tlist (struct tlist *, tree, tree);
2393
2394 /* Create a new struct tlist and fill in its fields.  */
2395 static struct tlist *
2396 new_tlist (struct tlist *next, tree t, tree writer)
2397 {
2398   struct tlist *l;
2399   l = XOBNEW (&tlist_obstack, struct tlist);
2400   l->next = next;
2401   l->expr = t;
2402   l->writer = writer;
2403   return l;
2404 }
2405
2406 /* Add duplicates of the nodes found in ADD to the list *TO.  If EXCLUDE_WRITER
2407    is nonnull, we ignore any node we find which has a writer equal to it.  */
2408
2409 static void
2410 add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
2411 {
2412   while (add)
2413     {
2414       struct tlist *next = add->next;
2415       if (!copy)
2416         add->next = *to;
2417       if (!exclude_writer || !candidate_equal_p (add->writer, exclude_writer))
2418         *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
2419       add = next;
2420     }
2421 }
2422
2423 /* Merge the nodes of ADD into TO.  This merging process is done so that for
2424    each variable that already exists in TO, no new node is added; however if
2425    there is a write access recorded in ADD, and an occurrence on TO is only
2426    a read access, then the occurrence in TO will be modified to record the
2427    write.  */
2428
2429 static void
2430 merge_tlist (struct tlist **to, struct tlist *add, int copy)
2431 {
2432   struct tlist **end = to;
2433
2434   while (*end)
2435     end = &(*end)->next;
2436
2437   while (add)
2438     {
2439       int found = 0;
2440       struct tlist *tmp2;
2441       struct tlist *next = add->next;
2442
2443       for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
2444         if (candidate_equal_p (tmp2->expr, add->expr))
2445           {
2446             found = 1;
2447             if (!tmp2->writer)
2448               tmp2->writer = add->writer;
2449           }
2450       if (!found)
2451         {
2452           *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
2453           end = &(*end)->next;
2454           *end = 0;
2455         }
2456       add = next;
2457     }
2458 }
2459
2460 /* WRITTEN is a variable, WRITER is its parent.  Warn if any of the variable
2461    references in list LIST conflict with it, excluding reads if ONLY writers
2462    is nonzero.  */
2463
2464 static void
2465 warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
2466                        int only_writes)
2467 {
2468   struct tlist *tmp;
2469
2470   /* Avoid duplicate warnings.  */
2471   for (tmp = warned_ids; tmp; tmp = tmp->next)
2472     if (candidate_equal_p (tmp->expr, written))
2473       return;
2474
2475   while (list)
2476     {
2477       if (candidate_equal_p (list->expr, written)
2478           && !candidate_equal_p (list->writer, writer)
2479           && (!only_writes || list->writer))
2480         {
2481           warned_ids = new_tlist (warned_ids, written, NULL_TREE);
2482           warning_at (EXPR_HAS_LOCATION (writer)
2483                       ? EXPR_LOCATION (writer) : input_location,
2484                       OPT_Wsequence_point, "operation on %qE may be undefined",
2485                       list->expr);
2486         }
2487       list = list->next;
2488     }
2489 }
2490
2491 /* Given a list LIST of references to variables, find whether any of these
2492    can cause conflicts due to missing sequence points.  */
2493
2494 static void
2495 warn_for_collisions (struct tlist *list)
2496 {
2497   struct tlist *tmp;
2498
2499   for (tmp = list; tmp; tmp = tmp->next)
2500     {
2501       if (tmp->writer)
2502         warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
2503     }
2504 }
2505
2506 /* Return nonzero if X is a tree that can be verified by the sequence point
2507    warnings.  */
2508 static int
2509 warning_candidate_p (tree x)
2510 {
2511   /* !VOID_TYPE_P (TREE_TYPE (x)) is workaround for cp/tree.c
2512      (lvalue_p) crash on TRY/CATCH. */
2513   return !(DECL_P (x) && DECL_ARTIFICIAL (x))
2514     && TREE_TYPE (x) && !VOID_TYPE_P (TREE_TYPE (x)) && lvalue_p (x);
2515 }
2516
2517 /* Return nonzero if X and Y appear to be the same candidate (or NULL) */
2518 static bool
2519 candidate_equal_p (const_tree x, const_tree y)
2520 {
2521   return (x == y) || (x && y && operand_equal_p (x, y, 0));
2522 }
2523
2524 /* Walk the tree X, and record accesses to variables.  If X is written by the
2525    parent tree, WRITER is the parent.
2526    We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP.  If this
2527    expression or its only operand forces a sequence point, then everything up
2528    to the sequence point is stored in PBEFORE_SP.  Everything else gets stored
2529    in PNO_SP.
2530    Once we return, we will have emitted warnings if any subexpression before
2531    such a sequence point could be undefined.  On a higher level, however, the
2532    sequence point may not be relevant, and we'll merge the two lists.
2533
2534    Example: (b++, a) + b;
2535    The call that processes the COMPOUND_EXPR will store the increment of B
2536    in PBEFORE_SP, and the use of A in PNO_SP.  The higher-level call that
2537    processes the PLUS_EXPR will need to merge the two lists so that
2538    eventually, all accesses end up on the same list (and we'll warn about the
2539    unordered subexpressions b++ and b.
2540
2541    A note on merging.  If we modify the former example so that our expression
2542    becomes
2543      (b++, b) + a
2544    care must be taken not simply to add all three expressions into the final
2545    PNO_SP list.  The function merge_tlist takes care of that by merging the
2546    before-SP list of the COMPOUND_EXPR into its after-SP list in a special
2547    way, so that no more than one access to B is recorded.  */
2548
2549 static void
2550 verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
2551              tree writer)
2552 {
2553   struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
2554   enum tree_code code;
2555   enum tree_code_class cl;
2556
2557   /* X may be NULL if it is the operand of an empty statement expression
2558      ({ }).  */
2559   if (x == NULL)
2560     return;
2561
2562  restart:
2563   code = TREE_CODE (x);
2564   cl = TREE_CODE_CLASS (code);
2565
2566   if (warning_candidate_p (x))
2567     *pno_sp = new_tlist (*pno_sp, x, writer);
2568
2569   switch (code)
2570     {
2571     case CONSTRUCTOR:
2572       return;
2573
2574     case COMPOUND_EXPR:
2575     case TRUTH_ANDIF_EXPR:
2576     case TRUTH_ORIF_EXPR:
2577       tmp_before = tmp_nosp = tmp_list3 = 0;
2578       verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
2579       warn_for_collisions (tmp_nosp);
2580       merge_tlist (pbefore_sp, tmp_before, 0);
2581       merge_tlist (pbefore_sp, tmp_nosp, 0);
2582       verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
2583       merge_tlist (pbefore_sp, tmp_list3, 0);
2584       return;
2585
2586     case COND_EXPR:
2587       tmp_before = tmp_list2 = 0;
2588       verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
2589       warn_for_collisions (tmp_list2);
2590       merge_tlist (pbefore_sp, tmp_before, 0);
2591       merge_tlist (pbefore_sp, tmp_list2, 1);
2592
2593       tmp_list3 = tmp_nosp = 0;
2594       verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
2595       warn_for_collisions (tmp_nosp);
2596       merge_tlist (pbefore_sp, tmp_list3, 0);
2597
2598       tmp_list3 = tmp_list2 = 0;
2599       verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
2600       warn_for_collisions (tmp_list2);
2601       merge_tlist (pbefore_sp, tmp_list3, 0);
2602       /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
2603          two first, to avoid warning for (a ? b++ : b++).  */
2604       merge_tlist (&tmp_nosp, tmp_list2, 0);
2605       add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
2606       return;
2607
2608     case PREDECREMENT_EXPR:
2609     case PREINCREMENT_EXPR:
2610     case POSTDECREMENT_EXPR:
2611     case POSTINCREMENT_EXPR:
2612       verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
2613       return;
2614
2615     case MODIFY_EXPR:
2616       tmp_before = tmp_nosp = tmp_list3 = 0;
2617       verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
2618       verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
2619       /* Expressions inside the LHS are not ordered wrt. the sequence points
2620          in the RHS.  Example:
2621            *a = (a++, 2)
2622          Despite the fact that the modification of "a" is in the before_sp
2623          list (tmp_before), it conflicts with the use of "a" in the LHS.
2624          We can handle this by adding the contents of tmp_list3
2625          to those of tmp_before, and redoing the collision warnings for that
2626          list.  */
2627       add_tlist (&tmp_before, tmp_list3, x, 1);
2628       warn_for_collisions (tmp_before);
2629       /* Exclude the LHS itself here; we first have to merge it into the
2630          tmp_nosp list.  This is done to avoid warning for "a = a"; if we
2631          didn't exclude the LHS, we'd get it twice, once as a read and once
2632          as a write.  */
2633       add_tlist (pno_sp, tmp_list3, x, 0);
2634       warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
2635
2636       merge_tlist (pbefore_sp, tmp_before, 0);
2637       if (warning_candidate_p (TREE_OPERAND (x, 0)))
2638         merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
2639       add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
2640       return;
2641
2642     case CALL_EXPR:
2643       /* We need to warn about conflicts among arguments and conflicts between
2644          args and the function address.  Side effects of the function address,
2645          however, are not ordered by the sequence point of the call.  */
2646       {
2647         call_expr_arg_iterator iter;
2648         tree arg;
2649         tmp_before = tmp_nosp = 0; 
2650         verify_tree (CALL_EXPR_FN (x), &tmp_before, &tmp_nosp, NULL_TREE);
2651         FOR_EACH_CALL_EXPR_ARG (arg, iter, x)
2652           {
2653             tmp_list2 = tmp_list3 = 0;
2654             verify_tree (arg, &tmp_list2, &tmp_list3, NULL_TREE);
2655             merge_tlist (&tmp_list3, tmp_list2, 0);
2656             add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
2657           }
2658         add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
2659         warn_for_collisions (tmp_before);
2660         add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
2661         return;
2662       }
2663
2664     case TREE_LIST:
2665       /* Scan all the list, e.g. indices of multi dimensional array.  */
2666       while (x)
2667         {
2668           tmp_before = tmp_nosp = 0;
2669           verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
2670           merge_tlist (&tmp_nosp, tmp_before, 0);
2671           add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
2672           x = TREE_CHAIN (x);
2673         }
2674       return;
2675
2676     case SAVE_EXPR:
2677       {
2678         struct tlist_cache *t;
2679         for (t = save_expr_cache; t; t = t->next)
2680           if (candidate_equal_p (t->expr, x))
2681             break;
2682
2683         if (!t)
2684           {
2685             t = XOBNEW (&tlist_obstack, struct tlist_cache);
2686             t->next = save_expr_cache;
2687             t->expr = x;
2688             save_expr_cache = t;
2689
2690             tmp_before = tmp_nosp = 0;
2691             verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
2692             warn_for_collisions (tmp_nosp);
2693
2694             tmp_list3 = 0;
2695             while (tmp_nosp)
2696               {
2697                 struct tlist *t = tmp_nosp;
2698                 tmp_nosp = t->next;
2699                 merge_tlist (&tmp_list3, t, 0);
2700               }
2701             t->cache_before_sp = tmp_before;
2702             t->cache_after_sp = tmp_list3;
2703           }
2704         merge_tlist (pbefore_sp, t->cache_before_sp, 1);
2705         add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
2706         return;
2707       }
2708
2709     case ADDR_EXPR:
2710       x = TREE_OPERAND (x, 0);
2711       if (DECL_P (x))
2712         return;
2713       writer = 0;
2714       goto restart;
2715
2716     default:
2717       /* For other expressions, simply recurse on their operands.
2718          Manual tail recursion for unary expressions.
2719          Other non-expressions need not be processed.  */
2720       if (cl == tcc_unary)
2721         {
2722           x = TREE_OPERAND (x, 0);
2723           writer = 0;
2724           goto restart;
2725         }
2726       else if (IS_EXPR_CODE_CLASS (cl))
2727         {
2728           int lp;
2729           int max = TREE_OPERAND_LENGTH (x);
2730           for (lp = 0; lp < max; lp++)
2731             {
2732               tmp_before = tmp_nosp = 0;
2733               verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
2734               merge_tlist (&tmp_nosp, tmp_before, 0);
2735               add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
2736             }
2737         }
2738       return;
2739     }
2740 }
2741
2742 /* Try to warn for undefined behavior in EXPR due to missing sequence
2743    points.  */
2744
2745 void
2746 verify_sequence_points (tree expr)
2747 {
2748   struct tlist *before_sp = 0, *after_sp = 0;
2749
2750   warned_ids = 0;
2751   save_expr_cache = 0;
2752   if (tlist_firstobj == 0)
2753     {
2754       gcc_obstack_init (&tlist_obstack);
2755       tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
2756     }
2757
2758   verify_tree (expr, &before_sp, &after_sp, 0);
2759   warn_for_collisions (after_sp);
2760   obstack_free (&tlist_obstack, tlist_firstobj);
2761 }
2762 \f
2763 /* Validate the expression after `case' and apply default promotions.  */
2764
2765 static tree
2766 check_case_value (tree value)
2767 {
2768   if (value == NULL_TREE)
2769     return value;
2770
2771   /* ??? Can we ever get nops here for a valid case value?  We
2772      shouldn't for C.  */
2773   STRIP_TYPE_NOPS (value);
2774   /* In C++, the following is allowed:
2775
2776        const int i = 3;
2777        switch (...) { case i: ... }
2778
2779      So, we try to reduce the VALUE to a constant that way.  */
2780   if (c_dialect_cxx ())
2781     {
2782       value = decl_constant_value (value);
2783       STRIP_TYPE_NOPS (value);
2784       value = fold (value);
2785     }
2786
2787   if (TREE_CODE (value) == INTEGER_CST)
2788     /* Promote char or short to int.  */
2789     value = perform_integral_promotions (value);
2790   else if (value != error_mark_node)
2791     {
2792       error ("case label does not reduce to an integer constant");
2793       value = error_mark_node;
2794     }
2795
2796   constant_expression_warning (value);
2797
2798   return value;
2799 }
2800 \f
2801 /* See if the case values LOW and HIGH are in the range of the original
2802    type (i.e. before the default conversion to int) of the switch testing
2803    expression.
2804    TYPE is the promoted type of the testing expression, and ORIG_TYPE is
2805    the type before promoting it.  CASE_LOW_P is a pointer to the lower
2806    bound of the case label, and CASE_HIGH_P is the upper bound or NULL
2807    if the case is not a case range.
2808    The caller has to make sure that we are not called with NULL for
2809    CASE_LOW_P (i.e. the default case).
2810    Returns true if the case label is in range of ORIG_TYPE (saturated or
2811    untouched) or false if the label is out of range.  */
2812
2813 static bool
2814 check_case_bounds (tree type, tree orig_type,
2815                    tree *case_low_p, tree *case_high_p)
2816 {
2817   tree min_value, max_value;
2818   tree case_low = *case_low_p;
2819   tree case_high = case_high_p ? *case_high_p : case_low;
2820
2821   /* If there was a problem with the original type, do nothing.  */
2822   if (orig_type == error_mark_node)
2823     return true;
2824
2825   min_value = TYPE_MIN_VALUE (orig_type);
2826   max_value = TYPE_MAX_VALUE (orig_type);
2827
2828   /* Case label is less than minimum for type.  */
2829   if (tree_int_cst_compare (case_low, min_value) < 0
2830       && tree_int_cst_compare (case_high, min_value) < 0)
2831     {
2832       warning (0, "case label value is less than minimum value for type");
2833       return false;
2834     }
2835
2836   /* Case value is greater than maximum for type.  */
2837   if (tree_int_cst_compare (case_low, max_value) > 0
2838       && tree_int_cst_compare (case_high, max_value) > 0)
2839     {
2840       warning (0, "case label value exceeds maximum value for type");
2841       return false;
2842     }
2843
2844   /* Saturate lower case label value to minimum.  */
2845   if (tree_int_cst_compare (case_high, min_value) >= 0
2846       && tree_int_cst_compare (case_low, min_value) < 0)
2847     {
2848       warning (0, "lower value in case label range"
2849                " less than minimum value for type");
2850       case_low = min_value;
2851     }
2852
2853   /* Saturate upper case label value to maximum.  */
2854   if (tree_int_cst_compare (case_low, max_value) <= 0
2855       && tree_int_cst_compare (case_high, max_value) > 0)
2856     {
2857       warning (0, "upper value in case label range"
2858                " exceeds maximum value for type");
2859       case_high = max_value;
2860     }
2861
2862   if (*case_low_p != case_low)
2863     *case_low_p = convert (type, case_low);
2864   if (case_high_p && *case_high_p != case_high)
2865     *case_high_p = convert (type, case_high);
2866
2867   return true;
2868 }
2869 \f
2870 /* Return an integer type with BITS bits of precision,
2871    that is unsigned if UNSIGNEDP is nonzero, otherwise signed.  */
2872
2873 tree
2874 c_common_type_for_size (unsigned int bits, int unsignedp)
2875 {
2876   if (bits == TYPE_PRECISION (integer_type_node))
2877     return unsignedp ? unsigned_type_node : integer_type_node;
2878
2879   if (bits == TYPE_PRECISION (signed_char_type_node))
2880     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2881
2882   if (bits == TYPE_PRECISION (short_integer_type_node))
2883     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2884
2885   if (bits == TYPE_PRECISION (long_integer_type_node))
2886     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2887
2888   if (bits == TYPE_PRECISION (long_long_integer_type_node))
2889     return (unsignedp ? long_long_unsigned_type_node
2890             : long_long_integer_type_node);
2891
2892   if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
2893     return (unsignedp ? widest_unsigned_literal_type_node
2894             : widest_integer_literal_type_node);
2895
2896   if (bits <= TYPE_PRECISION (intQI_type_node))
2897     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2898
2899   if (bits <= TYPE_PRECISION (intHI_type_node))
2900     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2901
2902   if (bits <= TYPE_PRECISION (intSI_type_node))
2903     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2904
2905   if (bits <= TYPE_PRECISION (intDI_type_node))
2906     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2907
2908   return 0;
2909 }
2910
2911 /* Return a fixed-point type that has at least IBIT ibits and FBIT fbits
2912    that is unsigned if UNSIGNEDP is nonzero, otherwise signed;
2913    and saturating if SATP is nonzero, otherwise not saturating.  */
2914
2915 tree
2916 c_common_fixed_point_type_for_size (unsigned int ibit, unsigned int fbit,
2917                                     int unsignedp, int satp)
2918 {
2919   enum machine_mode mode;
2920   if (ibit == 0)
2921     mode = unsignedp ? UQQmode : QQmode;
2922   else
2923     mode = unsignedp ? UHAmode : HAmode;
2924
2925   for (; mode != VOIDmode; mode = GET_MODE_WIDER_MODE (mode))
2926     if (GET_MODE_IBIT (mode) >= ibit && GET_MODE_FBIT (mode) >= fbit)
2927       break;
2928
2929   if (mode == VOIDmode || !targetm.scalar_mode_supported_p (mode))
2930     {
2931       sorry ("GCC cannot support operators with integer types and "
2932              "fixed-point types that have too many integral and "
2933              "fractional bits together");
2934       return 0;
2935     }
2936
2937   return c_common_type_for_mode (mode, satp);
2938 }
2939
2940 /* Used for communication between c_common_type_for_mode and
2941    c_register_builtin_type.  */
2942 static GTY(()) tree registered_builtin_types;
2943
2944 /* Return a data type that has machine mode MODE.
2945    If the mode is an integer,
2946    then UNSIGNEDP selects between signed and unsigned types.
2947    If the mode is a fixed-point mode,
2948    then UNSIGNEDP selects between saturating and nonsaturating types.  */
2949
2950 tree
2951 c_common_type_for_mode (enum machine_mode mode, int unsignedp)
2952 {
2953   tree t;
2954
2955   if (mode == TYPE_MODE (integer_type_node))
2956     return unsignedp ? unsigned_type_node : integer_type_node;
2957
2958   if (mode == TYPE_MODE (signed_char_type_node))
2959     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2960
2961   if (mode == TYPE_MODE (short_integer_type_node))
2962     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2963
2964   if (mode == TYPE_MODE (long_integer_type_node))
2965     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2966
2967   if (mode == TYPE_MODE (long_long_integer_type_node))
2968     return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
2969
2970   if (mode == TYPE_MODE (widest_integer_literal_type_node))
2971     return unsignedp ? widest_unsigned_literal_type_node
2972                      : widest_integer_literal_type_node;
2973
2974   if (mode == QImode)
2975     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2976
2977   if (mode == HImode)
2978     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2979
2980   if (mode == SImode)
2981     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2982
2983   if (mode == DImode)
2984     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2985
2986 #if HOST_BITS_PER_WIDE_INT >= 64
2987   if (mode == TYPE_MODE (intTI_type_node))
2988     return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2989 #endif
2990
2991   if (mode == TYPE_MODE (float_type_node))
2992     return float_type_node;
2993
2994   if (mode == TYPE_MODE (double_type_node))
2995     return double_type_node;
2996
2997   if (mode == TYPE_MODE (long_double_type_node))
2998     return long_double_type_node;
2999
3000   if (mode == TYPE_MODE (void_type_node))
3001     return void_type_node;
3002
3003   if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
3004     return (unsignedp
3005             ? make_unsigned_type (GET_MODE_PRECISION (mode))
3006             : make_signed_type (GET_MODE_PRECISION (mode)));
3007
3008   if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
3009     return (unsignedp
3010             ? make_unsigned_type (GET_MODE_PRECISION (mode))
3011             : make_signed_type (GET_MODE_PRECISION (mode)));
3012
3013   if (COMPLEX_MODE_P (mode))
3014     {
3015       enum machine_mode inner_mode;
3016       tree inner_type;
3017
3018       if (mode == TYPE_MODE (complex_float_type_node))
3019         return complex_float_type_node;
3020       if (mode == TYPE_MODE (complex_double_type_node))
3021         return complex_double_type_node;
3022       if (mode == TYPE_MODE (complex_long_double_type_node))
3023         return complex_long_double_type_node;
3024
3025       if (mode == TYPE_MODE (complex_integer_type_node) && !unsignedp)
3026         return complex_integer_type_node;
3027
3028       inner_mode = GET_MODE_INNER (mode);
3029       inner_type = c_common_type_for_mode (inner_mode, unsignedp);
3030       if (inner_type != NULL_TREE)
3031         return build_complex_type (inner_type);
3032     }
3033   else if (VECTOR_MODE_P (mode))
3034     {
3035       enum machine_mode inner_mode = GET_MODE_INNER (mode);
3036       tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
3037       if (inner_type != NULL_TREE)
3038         return build_vector_type_for_mode (inner_type, mode);
3039     }
3040
3041   if (mode == TYPE_MODE (dfloat32_type_node))
3042     return dfloat32_type_node;
3043   if (mode == TYPE_MODE (dfloat64_type_node))
3044     return dfloat64_type_node;
3045   if (mode == TYPE_MODE (dfloat128_type_node))
3046     return dfloat128_type_node;
3047
3048   if (ALL_SCALAR_FIXED_POINT_MODE_P (mode))
3049     {
3050       if (mode == TYPE_MODE (short_fract_type_node))
3051         return unsignedp ? sat_short_fract_type_node : short_fract_type_node;
3052       if (mode == TYPE_MODE (fract_type_node))
3053         return unsignedp ? sat_fract_type_node : fract_type_node;
3054       if (mode == TYPE_MODE (long_fract_type_node))
3055         return unsignedp ? sat_long_fract_type_node : long_fract_type_node;
3056       if (mode == TYPE_MODE (long_long_fract_type_node))
3057         return unsignedp ? sat_long_long_fract_type_node
3058                          : long_long_fract_type_node;
3059
3060       if (mode == TYPE_MODE (unsigned_short_fract_type_node))
3061         return unsignedp ? sat_unsigned_short_fract_type_node
3062                          : unsigned_short_fract_type_node;
3063       if (mode == TYPE_MODE (unsigned_fract_type_node))
3064         return unsignedp ? sat_unsigned_fract_type_node
3065                          : unsigned_fract_type_node;
3066       if (mode == TYPE_MODE (unsigned_long_fract_type_node))
3067         return unsignedp ? sat_unsigned_long_fract_type_node
3068                          : unsigned_long_fract_type_node;
3069       if (mode == TYPE_MODE (unsigned_long_long_fract_type_node))
3070         return unsignedp ? sat_unsigned_long_long_fract_type_node
3071                          : unsigned_long_long_fract_type_node;
3072
3073       if (mode == TYPE_MODE (short_accum_type_node))
3074         return unsignedp ? sat_short_accum_type_node : short_accum_type_node;
3075       if (mode == TYPE_MODE (accum_type_node))
3076         return unsignedp ? sat_accum_type_node : accum_type_node;
3077       if (mode == TYPE_MODE (long_accum_type_node))
3078         return unsignedp ? sat_long_accum_type_node : long_accum_type_node;
3079       if (mode == TYPE_MODE (long_long_accum_type_node))
3080         return unsignedp ? sat_long_long_accum_type_node
3081                          : long_long_accum_type_node;
3082
3083       if (mode == TYPE_MODE (unsigned_short_accum_type_node))
3084         return unsignedp ? sat_unsigned_short_accum_type_node
3085                          : unsigned_short_accum_type_node;
3086       if (mode == TYPE_MODE (unsigned_accum_type_node))
3087         return unsignedp ? sat_unsigned_accum_type_node
3088                          : unsigned_accum_type_node;
3089       if (mode == TYPE_MODE (unsigned_long_accum_type_node))
3090         return unsignedp ? sat_unsigned_long_accum_type_node
3091                          : unsigned_long_accum_type_node;
3092       if (mode == TYPE_MODE (unsigned_long_long_accum_type_node))
3093         return unsignedp ? sat_unsigned_long_long_accum_type_node
3094                          : unsigned_long_long_accum_type_node;
3095
3096       if (mode == QQmode)
3097         return unsignedp ? sat_qq_type_node : qq_type_node;
3098       if (mode == HQmode)
3099         return unsignedp ? sat_hq_type_node : hq_type_node;
3100       if (mode == SQmode)
3101         return unsignedp ? sat_sq_type_node : sq_type_node;
3102       if (mode == DQmode)
3103         return unsignedp ? sat_dq_type_node : dq_type_node;
3104       if (mode == TQmode)
3105         return unsignedp ? sat_tq_type_node : tq_type_node;
3106
3107       if (mode == UQQmode)
3108         return unsignedp ? sat_uqq_type_node : uqq_type_node;
3109       if (mode == UHQmode)
3110         return unsignedp ? sat_uhq_type_node : uhq_type_node;
3111       if (mode == USQmode)
3112         return unsignedp ? sat_usq_type_node : usq_type_node;
3113       if (mode == UDQmode)
3114         return unsignedp ? sat_udq_type_node : udq_type_node;
3115       if (mode == UTQmode)
3116         return unsignedp ? sat_utq_type_node : utq_type_node;
3117
3118       if (mode == HAmode)
3119         return unsignedp ? sat_ha_type_node : ha_type_node;
3120       if (mode == SAmode)
3121         return unsignedp ? sat_sa_type_node : sa_type_node;
3122       if (mode == DAmode)
3123         return unsignedp ? sat_da_type_node : da_type_node;
3124       if (mode == TAmode)
3125         return unsignedp ? sat_ta_type_node : ta_type_node;
3126
3127       if (mode == UHAmode)
3128         return unsignedp ? sat_uha_type_node : uha_type_node;
3129       if (mode == USAmode)
3130         return unsignedp ? sat_usa_type_node : usa_type_node;
3131       if (mode == UDAmode)
3132         return unsignedp ? sat_uda_type_node : uda_type_node;
3133       if (mode == UTAmode)
3134         return unsignedp ? sat_uta_type_node : uta_type_node;
3135     }
3136
3137   for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
3138     if (TYPE_MODE (TREE_VALUE (t)) == mode)
3139       return TREE_VALUE (t);
3140
3141   return 0;
3142 }
3143
3144 tree
3145 c_common_unsigned_type (tree type)
3146 {
3147   return c_common_signed_or_unsigned_type (1, type);
3148 }
3149
3150 /* Return a signed type the same as TYPE in other respects.  */
3151
3152 tree
3153 c_common_signed_type (tree type)
3154 {
3155   return c_common_signed_or_unsigned_type (0, type);
3156 }
3157
3158 /* Return a type the same as TYPE except unsigned or
3159    signed according to UNSIGNEDP.  */
3160
3161 tree
3162 c_common_signed_or_unsigned_type (int unsignedp, tree type)
3163 {
3164   tree type1;
3165
3166   /* This block of code emulates the behavior of the old
3167      c_common_unsigned_type. In particular, it returns
3168      long_unsigned_type_node if passed a long, even when a int would
3169      have the same size. This is necessary for warnings to work
3170      correctly in archs where sizeof(int) == sizeof(long) */
3171
3172   type1 = TYPE_MAIN_VARIANT (type);
3173   if (type1 == signed_char_type_node || type1 == char_type_node || type1 == unsigned_char_type_node)
3174     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3175   if (type1 == integer_type_node || type1 == unsigned_type_node)
3176     return unsignedp ? unsigned_type_node : integer_type_node;
3177   if (type1 == short_integer_type_node || type1 == short_unsigned_type_node)
3178     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3179   if (type1 == long_integer_type_node || type1 == long_unsigned_type_node)
3180     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3181   if (type1 == long_long_integer_type_node || type1 == long_long_unsigned_type_node)
3182     return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
3183   if (type1 == widest_integer_literal_type_node || type1 == widest_unsigned_literal_type_node)
3184     return unsignedp ? widest_unsigned_literal_type_node : widest_integer_literal_type_node;
3185 #if HOST_BITS_PER_WIDE_INT >= 64
3186   if (type1 == intTI_type_node || type1 == unsigned_intTI_type_node)
3187     return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
3188 #endif
3189   if (type1 == intDI_type_node || type1 == unsigned_intDI_type_node)
3190     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
3191   if (type1 == intSI_type_node || type1 == unsigned_intSI_type_node)
3192     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
3193   if (type1 == intHI_type_node || type1 == unsigned_intHI_type_node)
3194     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
3195   if (type1 == intQI_type_node || type1 == unsigned_intQI_type_node)
3196     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
3197
3198 #define C_COMMON_FIXED_TYPES(NAME)          \
3199   if (type1 == short_ ## NAME ## _type_node \
3200       || type1 == unsigned_short_ ## NAME ## _type_node) \
3201     return unsignedp ? unsigned_short_ ## NAME ## _type_node \
3202                      : short_ ## NAME ## _type_node; \
3203   if (type1 == NAME ## _type_node \
3204       || type1 == unsigned_ ## NAME ## _type_node) \
3205     return unsignedp ? unsigned_ ## NAME ## _type_node \
3206                      : NAME ## _type_node; \
3207   if (type1 == long_ ## NAME ## _type_node \
3208       || type1 == unsigned_long_ ## NAME ## _type_node) \
3209     return unsignedp ? unsigned_long_ ## NAME ## _type_node \
3210                      : long_ ## NAME ## _type_node; \
3211   if (type1 == long_long_ ## NAME ## _type_node \
3212       || type1 == unsigned_long_long_ ## NAME ## _type_node) \
3213     return unsignedp ? unsigned_long_long_ ## NAME ## _type_node \
3214                      : long_long_ ## NAME ## _type_node;
3215
3216 #define C_COMMON_FIXED_MODE_TYPES(NAME) \
3217   if (type1 == NAME ## _type_node \
3218       || type1 == u ## NAME ## _type_node) \
3219     return unsignedp ? u ## NAME ## _type_node \
3220                      : NAME ## _type_node;
3221
3222 #define C_COMMON_FIXED_TYPES_SAT(NAME) \
3223   if (type1 == sat_ ## short_ ## NAME ## _type_node \
3224       || type1 == sat_ ## unsigned_short_ ## NAME ## _type_node) \
3225     return unsignedp ? sat_ ## unsigned_short_ ## NAME ## _type_node \
3226                      : sat_ ## short_ ## NAME ## _type_node; \
3227   if (type1 == sat_ ## NAME ## _type_node \
3228       || type1 == sat_ ## unsigned_ ## NAME ## _type_node) \
3229     return unsignedp ? sat_ ## unsigned_ ## NAME ## _type_node \
3230                      : sat_ ## NAME ## _type_node; \
3231   if (type1 == sat_ ## long_ ## NAME ## _type_node \
3232       || type1 == sat_ ## unsigned_long_ ## NAME ## _type_node) \
3233     return unsignedp ? sat_ ## unsigned_long_ ## NAME ## _type_node \
3234                      : sat_ ## long_ ## NAME ## _type_node; \
3235   if (type1 == sat_ ## long_long_ ## NAME ## _type_node \
3236       || type1 == sat_ ## unsigned_long_long_ ## NAME ## _type_node) \
3237     return unsignedp ? sat_ ## unsigned_long_long_ ## NAME ## _type_node \
3238                      : sat_ ## long_long_ ## NAME ## _type_node;
3239
3240 #define C_COMMON_FIXED_MODE_TYPES_SAT(NAME)     \
3241   if (type1 == sat_ ## NAME ## _type_node \
3242       || type1 == sat_ ## u ## NAME ## _type_node) \
3243     return unsignedp ? sat_ ## u ## NAME ## _type_node \
3244                      : sat_ ## NAME ## _type_node;
3245
3246   C_COMMON_FIXED_TYPES (fract);
3247   C_COMMON_FIXED_TYPES_SAT (fract);
3248   C_COMMON_FIXED_TYPES (accum);
3249   C_COMMON_FIXED_TYPES_SAT (accum);
3250
3251   C_COMMON_FIXED_MODE_TYPES (qq);
3252   C_COMMON_FIXED_MODE_TYPES (hq);
3253   C_COMMON_FIXED_MODE_TYPES (sq);
3254   C_COMMON_FIXED_MODE_TYPES (dq);
3255   C_COMMON_FIXED_MODE_TYPES (tq);
3256   C_COMMON_FIXED_MODE_TYPES_SAT (qq);
3257   C_COMMON_FIXED_MODE_TYPES_SAT (hq);
3258   C_COMMON_FIXED_MODE_TYPES_SAT (sq);
3259   C_COMMON_FIXED_MODE_TYPES_SAT (dq);
3260   C_COMMON_FIXED_MODE_TYPES_SAT (tq);
3261   C_COMMON_FIXED_MODE_TYPES (ha);
3262   C_COMMON_FIXED_MODE_TYPES (sa);
3263   C_COMMON_FIXED_MODE_TYPES (da);
3264   C_COMMON_FIXED_MODE_TYPES (ta);
3265   C_COMMON_FIXED_MODE_TYPES_SAT (ha);
3266   C_COMMON_FIXED_MODE_TYPES_SAT (sa);
3267   C_COMMON_FIXED_MODE_TYPES_SAT (da);
3268   C_COMMON_FIXED_MODE_TYPES_SAT (ta);
3269
3270   /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
3271      the precision; they have precision set to match their range, but
3272      may use a wider mode to match an ABI.  If we change modes, we may
3273      wind up with bad conversions.  For INTEGER_TYPEs in C, must check
3274      the precision as well, so as to yield correct results for
3275      bit-field types.  C++ does not have these separate bit-field
3276      types, and producing a signed or unsigned variant of an
3277      ENUMERAL_TYPE may cause other problems as well.  */
3278
3279   if (!INTEGRAL_TYPE_P (type)
3280       || TYPE_UNSIGNED (type) == unsignedp)
3281     return type;
3282
3283 #define TYPE_OK(node)                                                       \
3284   (TYPE_MODE (type) == TYPE_MODE (node)                                     \
3285    && TYPE_PRECISION (type) == TYPE_PRECISION (node))
3286   if (TYPE_OK (signed_char_type_node))
3287     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3288   if (TYPE_OK (integer_type_node))
3289     return unsignedp ? unsigned_type_node : integer_type_node;
3290   if (TYPE_OK (short_integer_type_node))
3291     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3292   if (TYPE_OK (long_integer_type_node))
3293     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3294   if (TYPE_OK (long_long_integer_type_node))
3295     return (unsignedp ? long_long_unsigned_type_node
3296             : long_long_integer_type_node);
3297   if (TYPE_OK (widest_integer_literal_type_node))
3298     return (unsignedp ? widest_unsigned_literal_type_node
3299             : widest_integer_literal_type_node);
3300
3301 #if HOST_BITS_PER_WIDE_INT >= 64
3302   if (TYPE_OK (intTI_type_node))
3303     return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
3304 #endif
3305   if (TYPE_OK (intDI_type_node))
3306     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
3307   if (TYPE_OK (intSI_type_node))
3308     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
3309   if (TYPE_OK (intHI_type_node))
3310     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
3311   if (TYPE_OK (intQI_type_node))
3312     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
3313 #undef TYPE_OK
3314
3315   return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
3316 }
3317
3318 /* Build a bit-field integer type for the given WIDTH and UNSIGNEDP.  */
3319
3320 tree
3321 c_build_bitfield_integer_type (unsigned HOST_WIDE_INT width, int unsignedp)
3322 {
3323   /* Extended integer types of the same width as a standard type have
3324      lesser rank, so those of the same width as int promote to int or
3325      unsigned int and are valid for printf formats expecting int or
3326      unsigned int.  To avoid such special cases, avoid creating
3327      extended integer types for bit-fields if a standard integer type
3328      is available.  */
3329   if (width == TYPE_PRECISION (integer_type_node))
3330     return unsignedp ? unsigned_type_node : integer_type_node;
3331   if (width == TYPE_PRECISION (signed_char_type_node))
3332     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3333   if (width == TYPE_PRECISION (short_integer_type_node))
3334     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3335   if (width == TYPE_PRECISION (long_integer_type_node))
3336     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3337   if (width == TYPE_PRECISION (long_long_integer_type_node))
3338     return (unsignedp ? long_long_unsigned_type_node
3339             : long_long_integer_type_node);
3340   return build_nonstandard_integer_type (width, unsignedp);
3341 }
3342
3343 /* The C version of the register_builtin_type langhook.  */
3344
3345 void
3346 c_register_builtin_type (tree type, const char* name)
3347 {
3348   tree decl;
3349
3350   decl = build_decl (TYPE_DECL, get_identifier (name), type);
3351   DECL_ARTIFICIAL (decl) = 1;
3352   if (!TYPE_NAME (type))
3353     TYPE_NAME (type) = decl;
3354   pushdecl (decl);
3355
3356   registered_builtin_types = tree_cons (0, type, registered_builtin_types);
3357 }
3358 \f
3359 /* Print an error message for invalid operands to arith operation
3360    CODE with TYPE0 for operand 0, and TYPE1 for operand 1.
3361    LOCATION is the location of the message.  */
3362
3363 void
3364 binary_op_error (location_t location, enum tree_code code,
3365                  tree type0, tree type1)
3366 {
3367   const char *opname;
3368
3369   switch (code)
3370     {
3371     case PLUS_EXPR:
3372       opname = "+"; break;
3373     case MINUS_EXPR:
3374       opname = "-"; break;
3375     case MULT_EXPR:
3376       opname = "*"; break;
3377     case MAX_EXPR:
3378       opname = "max"; break;
3379     case MIN_EXPR:
3380       opname = "min"; break;
3381     case EQ_EXPR:
3382       opname = "=="; break;
3383     case NE_EXPR:
3384       opname = "!="; break;
3385     case LE_EXPR:
3386       opname = "<="; break;
3387     case GE_EXPR:
3388       opname = ">="; break;
3389     case LT_EXPR:
3390       opname = "<"; break;
3391     case GT_EXPR:
3392       opname = ">"; break;
3393     case LSHIFT_EXPR:
3394       opname = "<<"; break;
3395     case RSHIFT_EXPR:
3396       opname = ">>"; break;
3397     case TRUNC_MOD_EXPR:
3398     case FLOOR_MOD_EXPR:
3399       opname = "%"; break;
3400     case TRUNC_DIV_EXPR:
3401     case FLOOR_DIV_EXPR:
3402       opname = "/"; break;
3403     case BIT_AND_EXPR:
3404       opname = "&"; break;
3405     case BIT_IOR_EXPR:
3406       opname = "|"; break;
3407     case TRUTH_ANDIF_EXPR:
3408       opname = "&&"; break;
3409     case TRUTH_ORIF_EXPR:
3410       opname = "||"; break;
3411     case BIT_XOR_EXPR:
3412       opname = "^"; break;
3413     default:
3414       gcc_unreachable ();
3415     }
3416   error_at (location,
3417             "invalid operands to binary %s (have %qT and %qT)", opname,
3418             type0, type1);
3419 }
3420 \f
3421 /* Subroutine of build_binary_op, used for comparison operations.
3422    See if the operands have both been converted from subword integer types
3423    and, if so, perhaps change them both back to their original type.
3424    This function is also responsible for converting the two operands
3425    to the proper common type for comparison.
3426
3427    The arguments of this function are all pointers to local variables
3428    of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
3429    RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
3430
3431    If this function returns nonzero, it means that the comparison has
3432    a constant value.  What this function returns is an expression for
3433    that value.  */
3434
3435 tree
3436 shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
3437                  enum tree_code *rescode_ptr)
3438 {
3439   tree type;
3440   tree op0 = *op0_ptr;
3441   tree op1 = *op1_ptr;
3442   int unsignedp0, unsignedp1;
3443   int real1, real2;
3444   tree primop0, primop1;
3445   enum tree_code code = *rescode_ptr;
3446
3447   /* Throw away any conversions to wider types
3448      already present in the operands.  */
3449
3450   primop0 = get_narrower (op0, &unsignedp0);
3451   primop1 = get_narrower (op1, &unsignedp1);
3452
3453   /* Handle the case that OP0 does not *contain* a conversion
3454      but it *requires* conversion to FINAL_TYPE.  */
3455
3456   if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
3457     unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
3458   if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
3459     unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
3460
3461   /* If one of the operands must be floated, we cannot optimize.  */
3462   real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
3463   real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
3464
3465   /* If first arg is constant, swap the args (changing operation
3466      so value is preserved), for canonicalization.  Don't do this if
3467      the second arg is 0.  */
3468
3469   if (TREE_CONSTANT (primop0)
3470       && !integer_zerop (primop1) && !real_zerop (primop1)
3471       && !fixed_zerop (primop1))
3472     {
3473       tree tem = primop0;
3474       int temi = unsignedp0;
3475       primop0 = primop1;
3476       primop1 = tem;
3477       tem = op0;
3478       op0 = op1;
3479       op1 = tem;
3480       *op0_ptr = op0;
3481       *op1_ptr = op1;
3482       unsignedp0 = unsignedp1;
3483       unsignedp1 = temi;
3484       temi = real1;
3485       real1 = real2;
3486       real2 = temi;
3487
3488       switch (code)
3489         {
3490         case LT_EXPR:
3491           code = GT_EXPR;
3492           break;
3493         case GT_EXPR:
3494           code = LT_EXPR;
3495           break;
3496         case LE_EXPR:
3497           code = GE_EXPR;
3498           break;
3499         case GE_EXPR:
3500           code = LE_EXPR;
3501           break;
3502         default:
3503           break;
3504         }
3505       *rescode_ptr = code;
3506     }
3507
3508   /* If comparing an integer against a constant more bits wide,
3509      maybe we can deduce a value of 1 or 0 independent of the data.
3510      Or else truncate the constant now
3511      rather than extend the variable at run time.
3512
3513      This is only interesting if the constant is the wider arg.
3514      Also, it is not safe if the constant is unsigned and the
3515      variable arg is signed, since in this case the variable
3516      would be sign-extended and then regarded as unsigned.
3517      Our technique fails in this case because the lowest/highest
3518      possible unsigned results don't follow naturally from the
3519      lowest/highest possible values of the variable operand.
3520      For just EQ_EXPR and NE_EXPR there is another technique that
3521      could be used: see if the constant can be faithfully represented
3522      in the other operand's type, by truncating it and reextending it
3523      and see if that preserves the constant's value.  */
3524
3525   if (!real1 && !real2
3526       && TREE_CODE (TREE_TYPE (primop0)) != FIXED_POINT_TYPE
3527       && TREE_CODE (primop1) == INTEGER_CST
3528       && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
3529     {
3530       int min_gt, max_gt, min_lt, max_lt;
3531       tree maxval, minval;
3532       /* 1 if comparison is nominally unsigned.  */
3533       int unsignedp = TYPE_UNSIGNED (*restype_ptr);
3534       tree val;
3535
3536       type = c_common_signed_or_unsigned_type (unsignedp0,
3537                                                TREE_TYPE (primop0));
3538
3539       maxval = TYPE_MAX_VALUE (type);
3540       minval = TYPE_MIN_VALUE (type);
3541
3542       if (unsignedp && !unsignedp0)
3543         *restype_ptr = c_common_signed_type (*restype_ptr);
3544
3545       if (TREE_TYPE (primop1) != *restype_ptr)
3546         {
3547           /* Convert primop1 to target type, but do not introduce
3548              additional overflow.  We know primop1 is an int_cst.  */
3549           primop1 = force_fit_type_double (*restype_ptr,
3550                                            TREE_INT_CST_LOW (primop1),
3551                                            TREE_INT_CST_HIGH (primop1), 0,
3552                                            TREE_OVERFLOW (primop1));
3553         }
3554       if (type != *restype_ptr)
3555         {
3556           minval = convert (*restype_ptr, minval);
3557           maxval = convert (*restype_ptr, maxval);
3558         }
3559
3560       if (unsignedp && unsignedp0)
3561         {
3562           min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
3563           max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
3564           min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
3565           max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
3566         }
3567       else
3568         {
3569           min_gt = INT_CST_LT (primop1, minval);
3570           max_gt = INT_CST_LT (primop1, maxval);
3571           min_lt = INT_CST_LT (minval, primop1);
3572           max_lt = INT_CST_LT (maxval, primop1);
3573         }
3574
3575       val = 0;
3576       /* This used to be a switch, but Genix compiler can't handle that.  */
3577       if (code == NE_EXPR)
3578         {
3579           if (max_lt || min_gt)
3580             val = truthvalue_true_node;
3581         }
3582       else if (code == EQ_EXPR)
3583         {
3584           if (max_lt || min_gt)
3585             val = truthvalue_false_node;
3586         }
3587       else if (code == LT_EXPR)
3588         {
3589           if (max_lt)
3590             val = truthvalue_true_node;
3591           if (!min_lt)
3592             val = truthvalue_false_node;
3593         }
3594       else if (code == GT_EXPR)
3595         {
3596           if (min_gt)
3597             val = truthvalue_true_node;
3598           if (!max_gt)
3599             val = truthvalue_false_node;
3600         }
3601       else if (code == LE_EXPR)
3602         {
3603           if (!max_gt)
3604             val = truthvalue_true_node;
3605           if (min_gt)
3606             val = truthvalue_false_node;
3607         }
3608       else if (code == GE_EXPR)
3609         {
3610           if (!min_lt)
3611             val = truthvalue_true_node;
3612           if (max_lt)
3613             val = truthvalue_false_node;
3614         }
3615
3616       /* If primop0 was sign-extended and unsigned comparison specd,
3617          we did a signed comparison above using the signed type bounds.
3618          But the comparison we output must be unsigned.
3619
3620          Also, for inequalities, VAL is no good; but if the signed
3621          comparison had *any* fixed result, it follows that the
3622          unsigned comparison just tests the sign in reverse
3623          (positive values are LE, negative ones GE).
3624          So we can generate an unsigned comparison
3625          against an extreme value of the signed type.  */
3626
3627       if (unsignedp && !unsignedp0)
3628         {
3629           if (val != 0)
3630             switch (code)
3631               {
3632               case LT_EXPR:
3633               case GE_EXPR:
3634                 primop1 = TYPE_MIN_VALUE (type);
3635                 val = 0;
3636                 break;
3637
3638               case LE_EXPR:
3639               case GT_EXPR:
3640                 primop1 = TYPE_MAX_VALUE (type);
3641                 val = 0;
3642                 break;
3643
3644               default:
3645                 break;
3646               }
3647           type = c_common_unsigned_type (type);
3648         }
3649
3650       if (TREE_CODE (primop0) != INTEGER_CST)
3651         {
3652           if (val == truthvalue_false_node)
3653             warning (OPT_Wtype_limits, "comparison is always false due to limited range of data type");
3654           if (val == truthvalue_true_node)
3655             warning (OPT_Wtype_limits, "comparison is always true due to limited range of data type");
3656         }
3657
3658       if (val != 0)
3659         {
3660           /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
3661           if (TREE_SIDE_EFFECTS (primop0))
3662             return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
3663           return val;
3664         }
3665
3666       /* Value is not predetermined, but do the comparison
3667          in the type of the operand that is not constant.
3668          TYPE is already properly set.  */
3669     }
3670
3671   /* If either arg is decimal float and the other is float, find the
3672      proper common type to use for comparison.  */
3673   else if (real1 && real2
3674            && (DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0)))
3675                || DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1)))))
3676     type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
3677
3678   else if (real1 && real2
3679            && (TYPE_PRECISION (TREE_TYPE (primop0))
3680                == TYPE_PRECISION (TREE_TYPE (primop1))))
3681     type = TREE_TYPE (primop0);
3682
3683   /* If args' natural types are both narrower than nominal type
3684      and both extend in the same manner, compare them
3685      in the type of the wider arg.
3686      Otherwise must actually extend both to the nominal
3687      common type lest different ways of extending
3688      alter the result.
3689      (eg, (short)-1 == (unsigned short)-1  should be 0.)  */
3690
3691   else if (unsignedp0 == unsignedp1 && real1 == real2
3692            && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
3693            && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
3694     {
3695       type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
3696       type = c_common_signed_or_unsigned_type (unsignedp0
3697                                                || TYPE_UNSIGNED (*restype_ptr),
3698                                                type);
3699       /* Make sure shorter operand is extended the right way
3700          to match the longer operand.  */
3701       primop0
3702         = convert (c_common_signed_or_unsigned_type (unsignedp0,
3703                                                      TREE_TYPE (primop0)),
3704                    primop0);
3705       primop1
3706         = convert (c_common_signed_or_unsigned_type (unsignedp1,
3707                                                      TREE_TYPE (primop1)),
3708                    primop1);
3709     }
3710   else
3711     {
3712       /* Here we must do the comparison on the nominal type
3713          using the args exactly as we received them.  */
3714       type = *restype_ptr;
3715       primop0 = op0;
3716       primop1 = op1;
3717
3718       if (!real1 && !real2 && integer_zerop (primop1)
3719           && TYPE_UNSIGNED (*restype_ptr))
3720         {
3721           tree value = 0;
3722           switch (code)
3723             {
3724             case GE_EXPR:
3725               /* All unsigned values are >= 0, so we warn.  However,
3726                  if OP0 is a constant that is >= 0, the signedness of
3727                  the comparison isn't an issue, so suppress the
3728                  warning.  */
3729               if (warn_type_limits && !in_system_header
3730                   && !(TREE_CODE (primop0) == INTEGER_CST
3731                        && !TREE_OVERFLOW (convert (c_common_signed_type (type),
3732                                                    primop0))))
3733                 warning (OPT_Wtype_limits, 
3734                          "comparison of unsigned expression >= 0 is always true");
3735               value = truthvalue_true_node;
3736               break;
3737
3738             case LT_EXPR:
3739               if (warn_type_limits && !in_system_header
3740                   && !(TREE_CODE (primop0) == INTEGER_CST
3741                        && !TREE_OVERFLOW (convert (c_common_signed_type (type),
3742                                                    primop0))))
3743                 warning (OPT_Wtype_limits, 
3744                          "comparison of unsigned expression < 0 is always false");
3745               value = truthvalue_false_node;
3746               break;
3747
3748             default:
3749               break;
3750             }
3751
3752           if (value != 0)
3753             {
3754               /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
3755               if (TREE_SIDE_EFFECTS (primop0))
3756                 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
3757                                primop0, value);
3758               return value;
3759             }
3760         }
3761     }
3762
3763   *op0_ptr = convert (type, primop0);
3764   *op1_ptr = convert (type, primop1);
3765
3766   *restype_ptr = truthvalue_type_node;
3767
3768   return 0;
3769 }
3770 \f
3771 /* Return a tree for the sum or difference (RESULTCODE says which)
3772    of pointer PTROP and integer INTOP.  */
3773
3774 tree
3775 pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
3776 {
3777   tree size_exp, ret;
3778
3779   /* The result is a pointer of the same type that is being added.  */
3780   tree result_type = TREE_TYPE (ptrop);
3781
3782   if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
3783     {
3784       pedwarn (input_location, pedantic ? OPT_pedantic : OPT_Wpointer_arith, 
3785                "pointer of type %<void *%> used in arithmetic");
3786       size_exp = integer_one_node;
3787     }
3788   else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
3789     {
3790       pedwarn (input_location, pedantic ? OPT_pedantic : OPT_Wpointer_arith, 
3791                "pointer to a function used in arithmetic");
3792       size_exp = integer_one_node;
3793     }
3794   else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
3795     {
3796       pedwarn (input_location, pedantic ? OPT_pedantic : OPT_Wpointer_arith, 
3797                "pointer to member function used in arithmetic");
3798       size_exp = integer_one_node;
3799     }
3800   else
3801     size_exp = size_in_bytes (TREE_TYPE (result_type));
3802
3803   /* We are manipulating pointer values, so we don't need to warn
3804      about relying on undefined signed overflow.  We disable the
3805      warning here because we use integer types so fold won't know that
3806      they are really pointers.  */
3807   fold_defer_overflow_warnings ();
3808
3809   /* If what we are about to multiply by the size of the elements
3810      contains a constant term, apply distributive law
3811      and multiply that constant term separately.
3812      This helps produce common subexpressions.  */
3813   if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
3814       && !TREE_CONSTANT (intop)
3815       && TREE_CONSTANT (TREE_OPERAND (intop, 1))
3816       && TREE_CONSTANT (size_exp)
3817       /* If the constant comes from pointer subtraction,
3818          skip this optimization--it would cause an error.  */
3819       && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
3820       /* If the constant is unsigned, and smaller than the pointer size,
3821          then we must skip this optimization.  This is because it could cause
3822          an overflow error if the constant is negative but INTOP is not.  */
3823       && (!TYPE_UNSIGNED (TREE_TYPE (intop))
3824           || (TYPE_PRECISION (TREE_TYPE (intop))
3825               == TYPE_PRECISION (TREE_TYPE (ptrop)))))
3826     {
3827       enum tree_code subcode = resultcode;
3828       tree int_type = TREE_TYPE (intop);
3829       if (TREE_CODE (intop) == MINUS_EXPR)
3830         subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
3831       /* Convert both subexpression types to the type of intop,
3832          because weird cases involving pointer arithmetic
3833          can result in a sum or difference with different type args.  */
3834       ptrop = build_binary_op (EXPR_LOCATION (TREE_OPERAND (intop, 1)),
3835                                subcode, ptrop,
3836                                convert (int_type, TREE_OPERAND (intop, 1)), 1);
3837       intop = convert (int_type, TREE_OPERAND (intop, 0));
3838     }
3839
3840   /* Convert the integer argument to a type the same size as sizetype
3841      so the multiply won't overflow spuriously.  */
3842   if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
3843       || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
3844     intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
3845                                              TYPE_UNSIGNED (sizetype)), intop);
3846
3847   /* Replace the integer argument with a suitable product by the object size.
3848      Do this multiplication as signed, then convert to the appropriate
3849      type for the pointer operation.  */
3850   intop = convert (sizetype,
3851                    build_binary_op (EXPR_LOCATION (intop),
3852                                     MULT_EXPR, intop,
3853                                     convert (TREE_TYPE (intop), size_exp), 1));
3854
3855   /* Create the sum or difference.  */
3856   if (resultcode == MINUS_EXPR)
3857     intop = fold_build1 (NEGATE_EXPR, sizetype, intop);
3858
3859   ret = fold_build2 (POINTER_PLUS_EXPR, result_type, ptrop, intop);
3860
3861   fold_undefer_and_ignore_overflow_warnings ();
3862
3863   return ret;
3864 }
3865 \f
3866 /* Wrap a SAVE_EXPR around EXPR, if appropriate.  Like save_expr, but
3867    for C folds the inside expression and wraps a C_MAYBE_CONST_EXPR
3868    around the SAVE_EXPR if needed so that c_fully_fold does not need
3869    to look inside SAVE_EXPRs.  */
3870
3871 tree
3872 c_save_expr (tree expr)
3873 {
3874   bool maybe_const = true;
3875   if (c_dialect_cxx ())
3876     return save_expr (expr);
3877   expr = c_fully_fold (expr, false, &maybe_const);
3878   expr = save_expr (expr);
3879   if (!maybe_const)
3880     {
3881       expr = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (expr), NULL, expr);
3882       C_MAYBE_CONST_EXPR_NON_CONST (expr) = 1;
3883     }
3884   return expr;
3885 }
3886
3887 /* Return whether EXPR is a declaration whose address can never be
3888    NULL.  */
3889
3890 bool
3891 decl_with_nonnull_addr_p (const_tree expr)
3892 {
3893   return (DECL_P (expr)
3894           && (TREE_CODE (expr) == PARM_DECL
3895               || TREE_CODE (expr) == LABEL_DECL
3896               || !DECL_WEAK (expr)));
3897 }
3898
3899 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
3900    or for an `if' or `while' statement or ?..: exp.  It should already
3901    have been validated to be of suitable type; otherwise, a bad
3902    diagnostic may result.
3903
3904    The EXPR is located at LOCATION.
3905
3906    This preparation consists of taking the ordinary
3907    representation of an expression expr and producing a valid tree
3908    boolean expression describing whether expr is nonzero.  We could
3909    simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
3910    but we optimize comparisons, &&, ||, and !.
3911
3912    The resulting type should always be `truthvalue_type_node'.  */
3913
3914 tree
3915 c_common_truthvalue_conversion (location_t location, tree expr)
3916 {
3917   switch (TREE_CODE (expr))
3918     {
3919     case EQ_EXPR:   case NE_EXPR:   case UNEQ_EXPR: case LTGT_EXPR:
3920     case LE_EXPR:   case GE_EXPR:   case LT_EXPR:   case GT_EXPR:
3921     case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
3922     case ORDERED_EXPR: case UNORDERED_EXPR:
3923       if (TREE_TYPE (expr) == truthvalue_type_node)
3924         return expr;
3925       return build2 (TREE_CODE (expr), truthvalue_type_node,
3926                      TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
3927
3928     case TRUTH_ANDIF_EXPR:
3929     case TRUTH_ORIF_EXPR:
3930     case TRUTH_AND_EXPR:
3931     case TRUTH_OR_EXPR:
3932     case TRUTH_XOR_EXPR:
3933       if (TREE_TYPE (expr) == truthvalue_type_node)
3934         return expr;
3935       return build2 (TREE_CODE (expr), truthvalue_type_node,
3936                  c_common_truthvalue_conversion (location, 
3937                                                  TREE_OPERAND (expr, 0)),
3938                  c_common_truthvalue_conversion (location,
3939                                                  TREE_OPERAND (expr, 1)));
3940
3941     case TRUTH_NOT_EXPR:
3942       if (TREE_TYPE (expr) == truthvalue_type_node)
3943         return expr;
3944       return build1 (TREE_CODE (expr), truthvalue_type_node,
3945                  c_common_truthvalue_conversion (location,
3946                                                  TREE_OPERAND (expr, 0)));
3947
3948     case ERROR_MARK:
3949       return expr;
3950
3951     case INTEGER_CST:
3952       return integer_zerop (expr) ? truthvalue_false_node
3953                                   : truthvalue_true_node;
3954
3955     case REAL_CST:
3956       return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
3957              ? truthvalue_true_node
3958              : truthvalue_false_node;
3959
3960     case FIXED_CST:
3961       return fixed_compare (NE_EXPR, &TREE_FIXED_CST (expr),
3962                             &FCONST0 (TYPE_MODE (TREE_TYPE (expr))))
3963              ? truthvalue_true_node
3964              : truthvalue_false_node;
3965
3966     case FUNCTION_DECL:
3967       expr = build_unary_op (location, ADDR_EXPR, expr, 0);
3968       /* Fall through.  */
3969
3970     case ADDR_EXPR:
3971       {
3972         tree inner = TREE_OPERAND (expr, 0);
3973         if (decl_with_nonnull_addr_p (inner))
3974           {
3975             /* Common Ada/Pascal programmer's mistake.  */
3976             warning_at (location,
3977                         OPT_Waddress,
3978                         "the address of %qD will always evaluate as %<true%>",
3979                         inner);
3980             return truthvalue_true_node;
3981           }
3982
3983         /* If we still have a decl, it is possible for its address to
3984            be NULL, so we cannot optimize.  */
3985         if (DECL_P (inner))
3986           {
3987             gcc_assert (DECL_WEAK (inner));
3988             break;
3989           }
3990
3991         if (TREE_SIDE_EFFECTS (inner))
3992           return build2 (COMPOUND_EXPR, truthvalue_type_node,
3993                          inner, truthvalue_true_node);
3994         else
3995           return truthvalue_true_node;
3996       }
3997
3998     case COMPLEX_EXPR:
3999       return build_binary_op (EXPR_LOCATION (expr),
4000                               (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
4001                                ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
4002                 c_common_truthvalue_conversion (location,
4003                                                 TREE_OPERAND (expr, 0)),
4004                 c_common_truthvalue_conversion (location,
4005                                                 TREE_OPERAND (expr, 1)),
4006                               0);
4007
4008     case NEGATE_EXPR:
4009     case ABS_EXPR:
4010     case FLOAT_EXPR:
4011     case EXCESS_PRECISION_EXPR:
4012       /* These don't change whether an object is nonzero or zero.  */
4013       return c_common_truthvalue_conversion (location, TREE_OPERAND (expr, 0));
4014
4015     case LROTATE_EXPR:
4016     case RROTATE_EXPR:
4017       /* These don't change whether an object is zero or nonzero, but
4018          we can't ignore them if their second arg has side-effects.  */
4019       if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
4020         return build2 (COMPOUND_EXPR, truthvalue_type_node,
4021                        TREE_OPERAND (expr, 1),
4022                        c_common_truthvalue_conversion 
4023                         (location, TREE_OPERAND (expr, 0)));
4024       else
4025         return c_common_truthvalue_conversion (location,
4026                                                TREE_OPERAND (expr, 0));
4027
4028     case COND_EXPR:
4029       /* Distribute the conversion into the arms of a COND_EXPR.  */
4030       if (c_dialect_cxx ())
4031         return fold_build3 (COND_EXPR, truthvalue_type_node,
4032                             TREE_OPERAND (expr, 0),
4033                             c_common_truthvalue_conversion (location,
4034                                                             TREE_OPERAND (expr,
4035                                                                           1)),
4036                             c_common_truthvalue_conversion (location,
4037                                                             TREE_OPERAND (expr,
4038                                                                           2)));
4039       else
4040         /* Folding will happen later for C.  */
4041         return build3 (COND_EXPR, truthvalue_type_node,
4042                        TREE_OPERAND (expr, 0),
4043                        c_common_truthvalue_conversion (location,
4044                                                        TREE_OPERAND (expr, 1)),
4045                        c_common_truthvalue_conversion (location,
4046                                                        TREE_OPERAND (expr, 2)));
4047
4048     CASE_CONVERT:
4049       /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
4050          since that affects how `default_conversion' will behave.  */
4051       if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
4052           || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
4053         break;
4054       /* If this is widening the argument, we can ignore it.  */
4055       if (TYPE_PRECISION (TREE_TYPE (expr))
4056           >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
4057         return c_common_truthvalue_conversion (location,
4058                                                TREE_OPERAND (expr, 0));
4059       break;
4060
4061     case MODIFY_EXPR:
4062       if (!TREE_NO_WARNING (expr)
4063           && warn_parentheses)
4064         {
4065           warning (OPT_Wparentheses,
4066                    "suggest parentheses around assignment used as truth value");
4067           TREE_NO_WARNING (expr) = 1;
4068         }
4069       break;
4070
4071     default:
4072       break;
4073     }
4074
4075   if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
4076     {
4077       tree t = c_save_expr (expr);
4078       return (build_binary_op
4079               (EXPR_LOCATION (expr),
4080                (TREE_SIDE_EFFECTS (expr)
4081                 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
4082         c_common_truthvalue_conversion
4083                (location,
4084                 build_unary_op (location, REALPART_EXPR, t, 0)),
4085         c_common_truthvalue_conversion
4086                (location,
4087                 build_unary_op (location, IMAGPART_EXPR, t, 0)),
4088                0));
4089     }
4090
4091   if (TREE_CODE (TREE_TYPE (expr)) == FIXED_POINT_TYPE)
4092     {
4093       tree fixed_zero_node = build_fixed (TREE_TYPE (expr),
4094                                           FCONST0 (TYPE_MODE
4095                                                    (TREE_TYPE (expr))));
4096       return build_binary_op (location, NE_EXPR, expr, fixed_zero_node, 1);
4097     }
4098
4099   return build_binary_op (location, NE_EXPR, expr, integer_zero_node, 1);
4100 }
4101 \f
4102 static void def_builtin_1  (enum built_in_function fncode,
4103                             const char *name,
4104                             enum built_in_class fnclass,
4105                             tree fntype, tree libtype,
4106                             bool both_p, bool fallback_p, bool nonansi_p,
4107                             tree fnattrs, bool implicit_p);
4108
4109
4110 /* Apply the TYPE_QUALS to the new DECL.  */
4111
4112 void
4113 c_apply_type_quals_to_decl (int type_quals, tree decl)
4114 {
4115   tree type = TREE_TYPE (decl);
4116
4117   if (type == error_mark_node)
4118     return;
4119
4120   if (((type_quals & TYPE_QUAL_CONST)
4121        || (type && TREE_CODE (type) == REFERENCE_TYPE))
4122       /* An object declared 'const' is only readonly after it is
4123          initialized.  We don't have any way of expressing this currently,
4124          so we need to be conservative and unset TREE_READONLY for types
4125          with constructors.  Otherwise aliasing code will ignore stores in
4126          an inline constructor.  */
4127       && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
4128     TREE_READONLY (decl) = 1;
4129   if (type_quals & TYPE_QUAL_VOLATILE)
4130     {
4131       TREE_SIDE_EFFECTS (decl) = 1;
4132       TREE_THIS_VOLATILE (decl) = 1;
4133     }
4134   if (type_quals & TYPE_QUAL_RESTRICT)
4135     {
4136       while (type && TREE_CODE (type) == ARRAY_TYPE)
4137         /* Allow 'restrict' on arrays of pointers.
4138            FIXME currently we just ignore it.  */
4139         type = TREE_TYPE (type);
4140       if (!type
4141           || !POINTER_TYPE_P (type)
4142           || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
4143         error ("invalid use of %<restrict%>");
4144       else if (flag_strict_aliasing && type == TREE_TYPE (decl))
4145         /* Indicate we need to make a unique alias set for this pointer.
4146            We can't do it here because it might be pointing to an
4147            incomplete type.  */
4148         DECL_POINTER_ALIAS_SET (decl) = -2;
4149     }
4150 }
4151
4152 /* Hash function for the problem of multiple type definitions in
4153    different files.  This must hash all types that will compare
4154    equal via comptypes to the same value.  In practice it hashes
4155    on some of the simple stuff and leaves the details to comptypes.  */
4156
4157 static hashval_t
4158 c_type_hash (const void *p)
4159 {
4160   int i = 0;
4161   int shift, size;
4162   const_tree const t = (const_tree) p;
4163   tree t2;
4164   switch (TREE_CODE (t))
4165     {
4166     /* For pointers, hash on pointee type plus some swizzling.  */
4167     case POINTER_TYPE:
4168       return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
4169     /* Hash on number of elements and total size.  */
4170     case ENUMERAL_TYPE:
4171       shift = 3;
4172       t2 = TYPE_VALUES (t);
4173       break;
4174     case RECORD_TYPE:
4175       shift = 0;
4176       t2 = TYPE_FIELDS (t);
4177       break;
4178     case QUAL_UNION_TYPE:
4179       shift = 1;
4180       t2 = TYPE_FIELDS (t);
4181       break;
4182     case UNION_TYPE:
4183       shift = 2;
4184       t2 = TYPE_FIELDS (t);
4185       break;
4186     default:
4187       gcc_unreachable ();
4188     }
4189   for (; t2; t2 = TREE_CHAIN (t2))
4190     i++;
4191   /* We might have a VLA here.  */
4192   if (TREE_CODE (TYPE_SIZE (t)) != INTEGER_CST)
4193     size = 0;
4194   else
4195     size = TREE_INT_CST_LOW (TYPE_SIZE (t));
4196   return ((size << 24) | (i << shift));
4197 }
4198
4199 static GTY((param_is (union tree_node))) htab_t type_hash_table;
4200
4201 /* Return the typed-based alias set for T, which may be an expression
4202    or a type.  Return -1 if we don't do anything special.  */
4203
4204 alias_set_type
4205 c_common_get_alias_set (tree t)
4206 {
4207   tree u;
4208   PTR *slot;
4209
4210   /* Permit type-punning when accessing a union, provided the access
4211      is directly through the union.  For example, this code does not
4212      permit taking the address of a union member and then storing
4213      through it.  Even the type-punning allowed here is a GCC
4214      extension, albeit a common and useful one; the C standard says
4215      that such accesses have implementation-defined behavior.  */
4216   for (u = t;
4217        TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
4218        u = TREE_OPERAND (u, 0))
4219     if (TREE_CODE (u) == COMPONENT_REF
4220         && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
4221       return 0;
4222
4223   /* That's all the expressions we handle specially.  */
4224   if (!TYPE_P (t))
4225     return -1;
4226
4227   /* The C standard guarantees that any object may be accessed via an
4228      lvalue that has character type.  */
4229   if (t == char_type_node
4230       || t == signed_char_type_node
4231       || t == unsigned_char_type_node)
4232     return 0;
4233
4234   /* The C standard specifically allows aliasing between signed and
4235      unsigned variants of the same type.  We treat the signed
4236      variant as canonical.  */
4237   if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
4238     {
4239       tree t1 = c_common_signed_type (t);
4240
4241       /* t1 == t can happen for boolean nodes which are always unsigned.  */
4242       if (t1 != t)
4243         return get_alias_set (t1);
4244     }
4245   else if (POINTER_TYPE_P (t))
4246     {
4247       tree t1;
4248
4249       /* Unfortunately, there is no canonical form of a pointer type.
4250          In particular, if we have `typedef int I', then `int *', and
4251          `I *' are different types.  So, we have to pick a canonical
4252          representative.  We do this below.
4253
4254          Technically, this approach is actually more conservative that
4255          it needs to be.  In particular, `const int *' and `int *'
4256          should be in different alias sets, according to the C and C++
4257          standard, since their types are not the same, and so,
4258          technically, an `int **' and `const int **' cannot point at
4259          the same thing.
4260
4261          But, the standard is wrong.  In particular, this code is
4262          legal C++:
4263
4264             int *ip;
4265             int **ipp = &ip;
4266             const int* const* cipp = ipp;
4267
4268          And, it doesn't make sense for that to be legal unless you
4269          can dereference IPP and CIPP.  So, we ignore cv-qualifiers on
4270          the pointed-to types.  This issue has been reported to the
4271          C++ committee.  */
4272       t1 = build_type_no_quals (t);
4273       if (t1 != t)
4274         return get_alias_set (t1);
4275     }
4276
4277   /* Handle the case of multiple type nodes referring to "the same" type,
4278      which occurs with IMA.  These share an alias set.  FIXME:  Currently only
4279      C90 is handled.  (In C99 type compatibility is not transitive, which
4280      complicates things mightily. The alias set splay trees can theoretically
4281      represent this, but insertion is tricky when you consider all the
4282      different orders things might arrive in.) */
4283
4284   if (c_language != clk_c || flag_isoc99)
4285     return -1;
4286
4287   /* Save time if there's only one input file.  */
4288   if (num_in_fnames == 1)
4289     return -1;
4290
4291   /* Pointers need special handling if they point to any type that
4292      needs special handling (below).  */
4293   if (TREE_CODE (t) == POINTER_TYPE)
4294     {
4295       tree t2;
4296       /* Find bottom type under any nested POINTERs.  */
4297       for (t2 = TREE_TYPE (t);
4298            TREE_CODE (t2) == POINTER_TYPE;
4299            t2 = TREE_TYPE (t2))
4300         ;
4301       if (TREE_CODE (t2) != RECORD_TYPE
4302           && TREE_CODE (t2) != ENUMERAL_TYPE
4303           && TREE_CODE (t2) != QUAL_UNION_TYPE
4304           && TREE_CODE (t2) != UNION_TYPE)
4305         return -1;
4306       if (TYPE_SIZE (t2) == 0)
4307         return -1;
4308     }
4309   /* These are the only cases that need special handling.  */
4310   if (TREE_CODE (t) != RECORD_TYPE
4311       && TREE_CODE (t) != ENUMERAL_TYPE
4312       && TREE_CODE (t) != QUAL_UNION_TYPE
4313       && TREE_CODE (t) != UNION_TYPE
4314       && TREE_CODE (t) != POINTER_TYPE)
4315     return -1;
4316   /* Undefined? */
4317   if (TYPE_SIZE (t) == 0)
4318     return -1;
4319
4320   /* Look up t in hash table.  Only one of the compatible types within each
4321      alias set is recorded in the table.  */
4322   if (!type_hash_table)
4323     type_hash_table = htab_create_ggc (1021, c_type_hash,
4324             (htab_eq) lang_hooks.types_compatible_p,
4325             NULL);
4326   slot = htab_find_slot (type_hash_table, t, INSERT);
4327   if (*slot != NULL)
4328     {
4329       TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
4330       return TYPE_ALIAS_SET ((tree)*slot);
4331     }
4332   else
4333     /* Our caller will assign and record (in t) a new alias set; all we need
4334        to do is remember t in the hash table.  */
4335     *slot = t;
4336
4337   return -1;
4338 }
4339 \f
4340 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
4341    second parameter indicates which OPERATOR is being applied.  The COMPLAIN
4342    flag controls whether we should diagnose possibly ill-formed
4343    constructs or not.  */
4344
4345 tree
4346 c_sizeof_or_alignof_type (tree type, bool is_sizeof, int complain)
4347 {
4348   const char *op_name;
4349   tree value = NULL;
4350   enum tree_code type_code = TREE_CODE (type);
4351
4352   op_name = is_sizeof ? "sizeof" : "__alignof__";
4353
4354   if (type_code == FUNCTION_TYPE)
4355     {
4356       if (is_sizeof)
4357         {
4358           if (complain && (pedantic || warn_pointer_arith))
4359             pedwarn (input_location, pedantic ? OPT_pedantic : OPT_Wpointer_arith, 
4360                      "invalid application of %<sizeof%> to a function type");
4361           else if (!complain)
4362             return error_mark_node;
4363           value = size_one_node;
4364         }
4365       else
4366         value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
4367     }
4368   else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
4369     {
4370       if (type_code == VOID_TYPE
4371           && complain && (pedantic || warn_pointer_arith))
4372         pedwarn (input_location, pedantic ? OPT_pedantic : OPT_Wpointer_arith, 
4373                  "invalid application of %qs to a void type", op_name);
4374       else if (!complain)
4375         return error_mark_node;
4376       value = size_one_node;
4377     }
4378   else if (!COMPLETE_TYPE_P (type))
4379     {
4380       if (complain)
4381         error ("invalid application of %qs to incomplete type %qT ",
4382                op_name, type);
4383       value = size_zero_node;
4384     }
4385   else
4386     {
4387       if (is_sizeof)
4388         /* Convert in case a char is more than one unit.  */
4389         value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
4390                             size_int (TYPE_PRECISION (char_type_node)
4391                                       / BITS_PER_UNIT));
4392       else
4393         value = size_int (TYPE_ALIGN_UNIT (type));
4394     }
4395
4396   /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
4397      TYPE_IS_SIZETYPE means that certain things (like overflow) will
4398      never happen.  However, this node should really have type
4399      `size_t', which is just a typedef for an ordinary integer type.  */
4400   value = fold_convert (size_type_node, value);
4401   gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
4402
4403   return value;
4404 }
4405
4406 /* Implement the __alignof keyword: Return the minimum required
4407    alignment of EXPR, measured in bytes.  For VAR_DECLs,
4408    FUNCTION_DECLs and FIELD_DECLs return DECL_ALIGN (which can be set
4409    from an "aligned" __attribute__ specification).  */
4410
4411 tree
4412 c_alignof_expr (tree expr)
4413 {
4414   tree t;
4415
4416   if (VAR_OR_FUNCTION_DECL_P (expr))
4417     t = size_int (DECL_ALIGN_UNIT (expr));
4418
4419   else if (TREE_CODE (expr) == COMPONENT_REF
4420            && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
4421     {
4422       error ("%<__alignof%> applied to a bit-field");
4423       t = size_one_node;
4424     }
4425   else if (TREE_CODE (expr) == COMPONENT_REF
4426            && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
4427     t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
4428
4429   else if (TREE_CODE (expr) == INDIRECT_REF)
4430     {
4431       tree t = TREE_OPERAND (expr, 0);
4432       tree best = t;
4433       int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
4434
4435       while (CONVERT_EXPR_P (t)
4436              && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
4437         {
4438           int thisalign;
4439
4440           t = TREE_OPERAND (t, 0);
4441           thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
4442           if (thisalign > bestalign)
4443             best = t, bestalign = thisalign;
4444         }
4445       return c_alignof (TREE_TYPE (TREE_TYPE (best)));
4446     }
4447   else
4448     return c_alignof (TREE_TYPE (expr));
4449
4450   return fold_convert (size_type_node, t);
4451 }
4452 \f
4453 /* Handle C and C++ default attributes.  */
4454
4455 enum built_in_attribute
4456 {
4457 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
4458 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
4459 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
4460 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
4461 #include "builtin-attrs.def"
4462 #undef DEF_ATTR_NULL_TREE
4463 #undef DEF_ATTR_INT
4464 #undef DEF_ATTR_IDENT
4465 #undef DEF_ATTR_TREE_LIST
4466   ATTR_LAST
4467 };
4468
4469 static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
4470
4471 static void c_init_attributes (void);
4472
4473 enum c_builtin_type
4474 {
4475 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
4476 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
4477 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
4478 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
4479 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
4480 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
4481 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
4482 #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME,
4483 #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME,
4484 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
4485 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
4486 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
4487 #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
4488 #define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
4489 #define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
4490   NAME,
4491 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
4492 #include "builtin-types.def"
4493 #undef DEF_PRIMITIVE_TYPE
4494 #undef DEF_FUNCTION_TYPE_0
4495 #undef DEF_FUNCTION_TYPE_1
4496 #undef DEF_FUNCTION_TYPE_2
4497 #undef DEF_FUNCTION_TYPE_3
4498 #undef DEF_FUNCTION_TYPE_4
4499 #undef DEF_FUNCTION_TYPE_5
4500 #undef DEF_FUNCTION_TYPE_6
4501 #undef DEF_FUNCTION_TYPE_7
4502 #undef DEF_FUNCTION_TYPE_VAR_0
4503 #undef DEF_FUNCTION_TYPE_VAR_1
4504 #undef DEF_FUNCTION_TYPE_VAR_2
4505 #undef DEF_FUNCTION_TYPE_VAR_3
4506 #undef DEF_FUNCTION_TYPE_VAR_4
4507 #undef DEF_FUNCTION_TYPE_VAR_5
4508 #undef DEF_POINTER_TYPE
4509   BT_LAST
4510 };
4511
4512 typedef enum c_builtin_type builtin_type;
4513
4514 /* A temporary array for c_common_nodes_and_builtins.  Used in
4515    communication with def_fn_type.  */
4516 static tree builtin_types[(int) BT_LAST + 1];
4517
4518 /* A helper function for c_common_nodes_and_builtins.  Build function type
4519    for DEF with return type RET and N arguments.  If VAR is true, then the
4520    function should be variadic after those N arguments.
4521
4522    Takes special care not to ICE if any of the types involved are
4523    error_mark_node, which indicates that said type is not in fact available
4524    (see builtin_type_for_size).  In which case the function type as a whole
4525    should be error_mark_node.  */
4526
4527 static void
4528 def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
4529 {
4530   tree args = NULL, t;
4531   va_list list;
4532   int i;
4533
4534   va_start (list, n);
4535   for (i = 0; i < n; ++i)
4536     {
4537       builtin_type a = (builtin_type) va_arg (list, int);
4538       t = builtin_types[a];
4539       if (t == error_mark_node)
4540         goto egress;
4541       args = tree_cons (NULL_TREE, t, args);
4542     }
4543   va_end (list);
4544
4545   args = nreverse (args);
4546   if (!var)
4547     args = chainon (args, void_list_node);
4548
4549   t = builtin_types[ret];
4550   if (t == error_mark_node)
4551     goto egress;
4552   t = build_function_type (t, args);
4553
4554  egress:
4555   builtin_types[def] = t;
4556 }
4557
4558 /* Build builtin functions common to both C and C++ language
4559    frontends.  */
4560
4561 static void
4562 c_define_builtins (tree va_list_ref_type_node, tree va_list_arg_type_node)
4563 {
4564 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
4565   builtin_types[ENUM] = VALUE;
4566 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
4567   def_fn_type (ENUM, RETURN, 0, 0);
4568 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
4569   def_fn_type (ENUM, RETURN, 0, 1, ARG1);
4570 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
4571   def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
4572 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
4573   def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
4574 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
4575   def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4);
4576 #define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
4577   def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
4578 #define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
4579                             ARG6)                                       \
4580   def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
4581 #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
4582                             ARG6, ARG7)                                 \
4583   def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
4584 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
4585   def_fn_type (ENUM, RETURN, 1, 0);
4586 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
4587   def_fn_type (ENUM, RETURN, 1, 1, ARG1);
4588 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
4589   def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
4590 #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
4591   def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
4592 #define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
4593   def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4);
4594 #define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
4595   def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
4596 #define DEF_POINTER_TYPE(ENUM, TYPE) \
4597   builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]);
4598
4599 #include "builtin-types.def"
4600
4601 #undef DEF_PRIMITIVE_TYPE
4602 #undef DEF_FUNCTION_TYPE_1
4603 #undef DEF_FUNCTION_TYPE_2
4604 #undef DEF_FUNCTION_TYPE_3
4605 #undef DEF_FUNCTION_TYPE_4
4606 #undef DEF_FUNCTION_TYPE_5
4607 #undef DEF_FUNCTION_TYPE_6
4608 #undef DEF_FUNCTION_TYPE_VAR_0
4609 #undef DEF_FUNCTION_TYPE_VAR_1
4610 #undef DEF_FUNCTION_TYPE_VAR_2
4611 #undef DEF_FUNCTION_TYPE_VAR_3
4612 #undef DEF_FUNCTION_TYPE_VAR_4
4613 #undef DEF_FUNCTION_TYPE_VAR_5
4614 #undef DEF_POINTER_TYPE
4615   builtin_types[(int) BT_LAST] = NULL_TREE;
4616
4617   c_init_attributes ();
4618
4619 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
4620                     NONANSI_P, ATTRS, IMPLICIT, COND)                   \
4621   if (NAME && COND)                                                     \
4622     def_builtin_1 (ENUM, NAME, CLASS,                                   \
4623                    builtin_types[(int) TYPE],                           \
4624                    builtin_types[(int) LIBTYPE],                        \
4625                    BOTH_P, FALLBACK_P, NONANSI_P,                       \
4626                    built_in_attributes[(int) ATTRS], IMPLICIT);
4627 #include "builtins.def"
4628 #undef DEF_BUILTIN
4629
4630   targetm.init_builtins ();
4631
4632   build_common_builtin_nodes ();
4633
4634   if (flag_mudflap)
4635     mudflap_init ();
4636 }
4637
4638 /* Like get_identifier, but avoid warnings about null arguments when
4639    the argument may be NULL for targets where GCC lacks stdint.h type
4640    information.  */
4641
4642 static inline tree
4643 c_get_ident (const char *id)
4644 {
4645   return get_identifier (id);
4646 }
4647
4648 /* Build tree nodes and builtin functions common to both C and C++ language
4649    frontends.  */
4650
4651 void
4652 c_common_nodes_and_builtins (void)
4653 {
4654   int char16_type_size;
4655   int char32_type_size;
4656   int wchar_type_size;
4657   tree array_domain_type;
4658   tree va_list_ref_type_node;
4659   tree va_list_arg_type_node;
4660
4661   /* Define `int' and `char' first so that dbx will output them first.  */
4662   record_builtin_type (RID_INT, NULL, integer_type_node);
4663   record_builtin_type (RID_CHAR, "char", char_type_node);
4664
4665   /* `signed' is the same as `int'.  FIXME: the declarations of "signed",
4666      "unsigned long", "long long unsigned" and "unsigned short" were in C++
4667      but not C.  Are the conditionals here needed?  */
4668   if (c_dialect_cxx ())
4669     record_builtin_type (RID_SIGNED, NULL, integer_type_node);
4670   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
4671   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
4672   record_builtin_type (RID_MAX, "long unsigned int",
4673                        long_unsigned_type_node);
4674   if (c_dialect_cxx ())
4675     record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
4676   record_builtin_type (RID_MAX, "long long int",
4677                        long_long_integer_type_node);
4678   record_builtin_type (RID_MAX, "long long unsigned int",
4679                        long_long_unsigned_type_node);
4680   if (c_dialect_cxx ())
4681     record_builtin_type (RID_MAX, "long long unsigned",
4682                          long_long_unsigned_type_node);
4683   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
4684   record_builtin_type (RID_MAX, "short unsigned int",
4685                        short_unsigned_type_node);
4686   if (c_dialect_cxx ())
4687     record_builtin_type (RID_MAX, "unsigned short",
4688                          short_unsigned_type_node);
4689
4690   /* Define both `signed char' and `unsigned char'.  */
4691   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
4692   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
4693
4694   /* These are types that c_common_type_for_size and
4695      c_common_type_for_mode use.  */
4696   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
4697                                          intQI_type_node));
4698   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
4699                                          intHI_type_node));
4700   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
4701                                          intSI_type_node));
4702   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
4703                                          intDI_type_node));
4704 #if HOST_BITS_PER_WIDE_INT >= 64
4705   if (targetm.scalar_mode_supported_p (TImode))
4706     lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
4707                                            get_identifier ("__int128_t"),
4708                                            intTI_type_node));
4709 #endif
4710   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
4711                                          unsigned_intQI_type_node));
4712   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
4713                                          unsigned_intHI_type_node));
4714   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
4715                                          unsigned_intSI_type_node));
4716   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
4717                                          unsigned_intDI_type_node));
4718 #if HOST_BITS_PER_WIDE_INT >= 64
4719   if (targetm.scalar_mode_supported_p (TImode))
4720     lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
4721                                            get_identifier ("__uint128_t"),
4722                                            unsigned_intTI_type_node));
4723 #endif
4724
4725   /* Create the widest literal types.  */
4726   widest_integer_literal_type_node
4727     = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
4728   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
4729                                          widest_integer_literal_type_node));
4730
4731   widest_unsigned_literal_type_node
4732     = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
4733   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
4734                                          widest_unsigned_literal_type_node));
4735
4736   /* `unsigned long' is the standard type for sizeof.
4737      Note that stddef.h uses `unsigned long',
4738      and this must agree, even if long and int are the same size.  */
4739   size_type_node =
4740     TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
4741   signed_size_type_node = c_common_signed_type (size_type_node);
4742   set_sizetype (size_type_node);
4743
4744   pid_type_node =
4745     TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
4746
4747   build_common_tree_nodes_2 (flag_short_double);
4748
4749   record_builtin_type (RID_FLOAT, NULL, float_type_node);
4750   record_builtin_type (RID_DOUBLE, NULL, double_type_node);
4751   record_builtin_type (RID_MAX, "long double", long_double_type_node);
4752
4753   /* Only supported decimal floating point extension if the target
4754      actually supports underlying modes. */
4755   if (targetm.scalar_mode_supported_p (SDmode) 
4756       && targetm.scalar_mode_supported_p (DDmode)
4757       && targetm.scalar_mode_supported_p (TDmode))
4758     {
4759       record_builtin_type (RID_DFLOAT32, NULL, dfloat32_type_node);
4760       record_builtin_type (RID_DFLOAT64, NULL, dfloat64_type_node);
4761       record_builtin_type (RID_DFLOAT128, NULL, dfloat128_type_node);
4762     }
4763
4764   if (targetm.fixed_point_supported_p ())
4765     {
4766       record_builtin_type (RID_MAX, "short _Fract", short_fract_type_node);
4767       record_builtin_type (RID_FRACT, NULL, fract_type_node);
4768       record_builtin_type (RID_MAX, "long _Fract", long_fract_type_node);
4769       record_builtin_type (RID_MAX, "long long _Fract",
4770                            long_long_fract_type_node);
4771       record_builtin_type (RID_MAX, "unsigned short _Fract",
4772                            unsigned_short_fract_type_node);
4773       record_builtin_type (RID_MAX, "unsigned _Fract",
4774                            unsigned_fract_type_node);
4775       record_builtin_type (RID_MAX, "unsigned long _Fract",
4776                            unsigned_long_fract_type_node);
4777       record_builtin_type (RID_MAX, "unsigned long long _Fract",
4778                            unsigned_long_long_fract_type_node);
4779       record_builtin_type (RID_MAX, "_Sat short _Fract",
4780                            sat_short_fract_type_node);
4781       record_builtin_type (RID_MAX, "_Sat _Fract", sat_fract_type_node);
4782       record_builtin_type (RID_MAX, "_Sat long _Fract",
4783                            sat_long_fract_type_node);
4784       record_builtin_type (RID_MAX, "_Sat long long _Fract",
4785                            sat_long_long_fract_type_node);
4786       record_builtin_type (RID_MAX, "_Sat unsigned short _Fract",
4787                            sat_unsigned_short_fract_type_node);
4788       record_builtin_type (RID_MAX, "_Sat unsigned _Fract",
4789                            sat_unsigned_fract_type_node);
4790       record_builtin_type (RID_MAX, "_Sat unsigned long _Fract",
4791                            sat_unsigned_long_fract_type_node);
4792       record_builtin_type (RID_MAX, "_Sat unsigned long long _Fract",
4793                            sat_unsigned_long_long_fract_type_node);
4794       record_builtin_type (RID_MAX, "short _Accum", short_accum_type_node);
4795       record_builtin_type (RID_ACCUM, NULL, accum_type_node);
4796       record_builtin_type (RID_MAX, "long _Accum", long_accum_type_node);
4797       record_builtin_type (RID_MAX, "long long _Accum",
4798                            long_long_accum_type_node);
4799       record_builtin_type (RID_MAX, "unsigned short _Accum",
4800                            unsigned_short_accum_type_node);
4801       record_builtin_type (RID_MAX, "unsigned _Accum",
4802                            unsigned_accum_type_node);
4803       record_builtin_type (RID_MAX, "unsigned long _Accum",
4804                            unsigned_long_accum_type_node);
4805       record_builtin_type (RID_MAX, "unsigned long long _Accum",
4806                            unsigned_long_long_accum_type_node);
4807       record_builtin_type (RID_MAX, "_Sat short _Accum",
4808                            sat_short_accum_type_node);
4809       record_builtin_type (RID_MAX, "_Sat _Accum", sat_accum_type_node);
4810       record_builtin_type (RID_MAX, "_Sat long _Accum",
4811                            sat_long_accum_type_node);
4812       record_builtin_type (RID_MAX, "_Sat long long _Accum",
4813                           sat_long_long_accum_type_node);
4814       record_builtin_type (RID_MAX, "_Sat unsigned short _Accum",
4815                            sat_unsigned_short_accum_type_node);
4816       record_builtin_type (RID_MAX, "_Sat unsigned _Accum",
4817                            sat_unsigned_accum_type_node);
4818       record_builtin_type (RID_MAX, "_Sat unsigned long _Accum",
4819                            sat_unsigned_long_accum_type_node);
4820       record_builtin_type (RID_MAX, "_Sat unsigned long long _Accum",
4821                            sat_unsigned_long_long_accum_type_node);
4822
4823     }
4824
4825   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
4826                                          get_identifier ("complex int"),
4827                                          complex_integer_type_node));
4828   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
4829                                          get_identifier ("complex float"),
4830                                          complex_float_type_node));
4831   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
4832                                          get_identifier ("complex double"),
4833                                          complex_double_type_node));
4834   lang_hooks.decls.pushdecl
4835     (build_decl (TYPE_DECL, get_identifier ("complex long double"),
4836                  complex_long_double_type_node));
4837
4838   if (c_dialect_cxx ())
4839     /* For C++, make fileptr_type_node a distinct void * type until
4840        FILE type is defined.  */
4841     fileptr_type_node = build_variant_type_copy (ptr_type_node);
4842
4843   record_builtin_type (RID_VOID, NULL, void_type_node);
4844
4845   /* Set the TYPE_NAME for any variants that were built before
4846      record_builtin_type gave names to the built-in types. */
4847   {
4848     tree void_name = TYPE_NAME (void_type_node);
4849     TYPE_NAME (void_type_node) = NULL_TREE;
4850     TYPE_NAME (build_qualified_type (void_type_node, TYPE_QUAL_CONST))
4851       = void_name;
4852     TYPE_NAME (void_type_node) = void_name;
4853   }
4854
4855   /* This node must not be shared.  */
4856   void_zero_node = make_node (INTEGER_CST);
4857   TREE_TYPE (void_zero_node) = void_type_node;
4858
4859   void_list_node = build_void_list_node ();
4860
4861   /* Make a type to be the domain of a few array types
4862      whose domains don't really matter.
4863      200 is small enough that it always fits in size_t
4864      and large enough that it can hold most function names for the
4865      initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
4866   array_domain_type = build_index_type (size_int (200));
4867
4868   /* Make a type for arrays of characters.
4869      With luck nothing will ever really depend on the length of this
4870      array type.  */
4871   char_array_type_node
4872     = build_array_type (char_type_node, array_domain_type);
4873
4874   /* Likewise for arrays of ints.  */
4875   int_array_type_node
4876     = build_array_type (integer_type_node, array_domain_type);
4877
4878   string_type_node = build_pointer_type (char_type_node);
4879   const_string_type_node
4880     = build_pointer_type (build_qualified_type
4881                           (char_type_node, TYPE_QUAL_CONST));
4882
4883   /* This is special for C++ so functions can be overloaded.  */
4884   wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
4885   wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
4886   wchar_type_size = TYPE_PRECISION (wchar_type_node);
4887   underlying_wchar_type_node = wchar_type_node;
4888   if (c_dialect_cxx ())
4889     {
4890       if (TYPE_UNSIGNED (wchar_type_node))
4891         wchar_type_node = make_unsigned_type (wchar_type_size);
4892       else
4893         wchar_type_node = make_signed_type (wchar_type_size);
4894       record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
4895     }
4896
4897   /* This is for wide string constants.  */
4898   wchar_array_type_node
4899     = build_array_type (wchar_type_node, array_domain_type);
4900
4901   /* Define 'char16_t'.  */
4902   char16_type_node = get_identifier (CHAR16_TYPE);
4903   char16_type_node = TREE_TYPE (identifier_global_value (char16_type_node));
4904   char16_type_size = TYPE_PRECISION (char16_type_node);
4905   if (c_dialect_cxx ())
4906     {
4907       char16_type_node = make_unsigned_type (char16_type_size);
4908
4909       if (cxx_dialect == cxx0x)
4910         record_builtin_type (RID_CHAR16, "char16_t", char16_type_node);
4911     }
4912
4913   /* This is for UTF-16 string constants.  */
4914   char16_array_type_node
4915     = build_array_type (char16_type_node, array_domain_type);
4916
4917   /* Define 'char32_t'.  */
4918   char32_type_node = get_identifier (CHAR32_TYPE);
4919   char32_type_node = TREE_TYPE (identifier_global_value (char32_type_node));
4920   char32_type_size = TYPE_PRECISION (char32_type_node);
4921   if (c_dialect_cxx ())
4922     {
4923       char32_type_node = make_unsigned_type (char32_type_size);
4924
4925       if (cxx_dialect == cxx0x)
4926         record_builtin_type (RID_CHAR32, "char32_t", char32_type_node);
4927     }
4928
4929   /* This is for UTF-32 string constants.  */
4930   char32_array_type_node
4931     = build_array_type (char32_type_node, array_domain_type);
4932
4933   wint_type_node =
4934     TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
4935
4936   intmax_type_node =
4937     TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
4938   uintmax_type_node =
4939     TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
4940
4941   if (SIG_ATOMIC_TYPE)
4942     sig_atomic_type_node =
4943       TREE_TYPE (identifier_global_value (c_get_ident (SIG_ATOMIC_TYPE)));
4944   if (INT8_TYPE)
4945     int8_type_node =
4946       TREE_TYPE (identifier_global_value (c_get_ident (INT8_TYPE)));
4947   if (INT16_TYPE)
4948     int16_type_node =
4949       TREE_TYPE (identifier_global_value (c_get_ident (INT16_TYPE)));
4950   if (INT32_TYPE)
4951     int32_type_node =
4952       TREE_TYPE (identifier_global_value (c_get_ident (INT32_TYPE)));
4953   if (INT64_TYPE)
4954     int64_type_node =
4955       TREE_TYPE (identifier_global_value (c_get_ident (INT64_TYPE)));
4956   if (UINT8_TYPE)
4957     uint8_type_node =
4958       TREE_TYPE (identifier_global_value (c_get_ident (UINT8_TYPE)));
4959   if (UINT16_TYPE)
4960     uint16_type_node =
4961       TREE_TYPE (identifier_global_value (c_get_ident (UINT16_TYPE)));
4962   if (UINT32_TYPE)
4963     c_uint32_type_node =
4964       TREE_TYPE (identifier_global_value (c_get_ident (UINT32_TYPE)));
4965   if (UINT64_TYPE)
4966     c_uint64_type_node =
4967       TREE_TYPE (identifier_global_value (c_get_ident (UINT64_TYPE)));
4968   if (INT_LEAST8_TYPE)
4969     int_least8_type_node =
4970       TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST8_TYPE)));
4971   if (INT_LEAST16_TYPE)
4972     int_least16_type_node =
4973       TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST16_TYPE)));
4974   if (INT_LEAST32_TYPE)
4975     int_least32_type_node =
4976       TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST32_TYPE)));
4977   if (INT_LEAST64_TYPE)
4978     int_least64_type_node =
4979       TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST64_TYPE)));
4980   if (UINT_LEAST8_TYPE)
4981     uint_least8_type_node =
4982       TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST8_TYPE)));
4983   if (UINT_LEAST16_TYPE)
4984     uint_least16_type_node =
4985       TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST16_TYPE)));
4986   if (UINT_LEAST32_TYPE)
4987     uint_least32_type_node =
4988       TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST32_TYPE)));
4989   if (UINT_LEAST64_TYPE)
4990     uint_least64_type_node =
4991       TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST64_TYPE)));
4992   if (INT_FAST8_TYPE)
4993     int_fast8_type_node =
4994       TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST8_TYPE)));
4995   if (INT_FAST16_TYPE)
4996     int_fast16_type_node =
4997       TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST16_TYPE)));
4998   if (INT_FAST32_TYPE)
4999     int_fast32_type_node =
5000       TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST32_TYPE)));
5001   if (INT_FAST64_TYPE)
5002     int_fast64_type_node =
5003       TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST64_TYPE)));
5004   if (UINT_FAST8_TYPE)
5005     uint_fast8_type_node =
5006       TREE_TYPE (identifier_global_value (c_get_ident (UINT_FAST8_TYPE)));
5007   if (UINT_FAST16_TYPE)
5008     uint_fast16_type_node =
5009       TREE_TYPE (identifier_global_value (c_get_ident (UINT_FAST16_TYPE)));
5010   if (UINT_FAST32_TYPE)
5011     uint_fast32_type_node =
5012       TREE_TYPE (identifier_global_value (c_get_ident (UINT_FAST32_TYPE)));
5013   if (UINT_FAST64_TYPE)
5014     uint_fast64_type_node =
5015       TREE_TYPE (identifier_global_value (c_get_ident (UINT_FAST64_TYPE)));
5016   if (INTPTR_TYPE)
5017     intptr_type_node =
5018       TREE_TYPE (identifier_global_value (c_get_ident (INTPTR_TYPE)));
5019   if (UINTPTR_TYPE)
5020     uintptr_type_node =
5021       TREE_TYPE (identifier_global_value (c_get_ident (UINTPTR_TYPE)));
5022
5023   default_function_type = build_function_type (integer_type_node, NULL_TREE);
5024   ptrdiff_type_node
5025     = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
5026   unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
5027
5028   lang_hooks.decls.pushdecl
5029     (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
5030                  va_list_type_node));
5031 #ifdef TARGET_ENUM_VA_LIST
5032   {
5033     int l;
5034     const char *pname;
5035     tree ptype;
5036     for (l = 0; TARGET_ENUM_VA_LIST (l, &pname, &ptype); ++l)
5037       {
5038         lang_hooks.decls.pushdecl
5039           (build_decl (TYPE_DECL, get_identifier (pname),
5040                        ptype));
5041
5042       }
5043   }
5044 #endif
5045
5046   if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
5047     {
5048       va_list_arg_type_node = va_list_ref_type_node =
5049         build_pointer_type (TREE_TYPE (va_list_type_node));
5050     }
5051   else
5052     {
5053       va_list_arg_type_node = va_list_type_node;
5054       va_list_ref_type_node = build_reference_type (va_list_type_node);
5055     }
5056
5057   if (!flag_preprocess_only)
5058     c_define_builtins (va_list_ref_type_node, va_list_arg_type_node);
5059
5060   main_identifier_node = get_identifier ("main");
5061
5062   /* Create the built-in __null node.  It is important that this is
5063      not shared.  */
5064   null_node = make_node (INTEGER_CST);
5065   TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
5066
5067   /* Since builtin_types isn't gc'ed, don't export these nodes.  */
5068   memset (builtin_types, 0, sizeof (builtin_types));
5069 }
5070
5071 /* Look up the function in built_in_decls that corresponds to DECL
5072    and set ASMSPEC as its user assembler name.  DECL must be a
5073    function decl that declares a builtin.  */
5074
5075 void
5076 set_builtin_user_assembler_name (tree decl, const char *asmspec)
5077 {
5078   tree builtin;
5079   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
5080               && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
5081               && asmspec != 0);
5082
5083   builtin = built_in_decls [DECL_FUNCTION_CODE (decl)];
5084   set_user_assembler_name (builtin, asmspec);
5085   switch (DECL_FUNCTION_CODE (decl))
5086     {
5087     case BUILT_IN_MEMCPY:
5088       init_block_move_fn (asmspec);
5089       memcpy_libfunc = set_user_assembler_libfunc ("memcpy", asmspec);
5090       break;
5091     case BUILT_IN_MEMSET:
5092       init_block_clear_fn (asmspec);
5093       memset_libfunc = set_user_assembler_libfunc ("memset", asmspec);
5094       break;
5095     case BUILT_IN_MEMMOVE:
5096       memmove_libfunc = set_user_assembler_libfunc ("memmove", asmspec);
5097       break;
5098     case BUILT_IN_MEMCMP:
5099       memcmp_libfunc = set_user_assembler_libfunc ("memcmp", asmspec);
5100       break;
5101     case BUILT_IN_ABORT:
5102       abort_libfunc = set_user_assembler_libfunc ("abort", asmspec);
5103       break;
5104     default:
5105       break;
5106     }
5107 }
5108
5109 /* The number of named compound-literals generated thus far.  */
5110 static GTY(()) int compound_literal_number;
5111
5112 /* Set DECL_NAME for DECL, a VAR_DECL for a compound-literal.  */
5113
5114 void
5115 set_compound_literal_name (tree decl)
5116 {
5117   char *name;
5118   ASM_FORMAT_PRIVATE_NAME (name, "__compound_literal",
5119                            compound_literal_number);
5120   compound_literal_number++;
5121   DECL_NAME (decl) = get_identifier (name);
5122 }
5123
5124 tree
5125 build_va_arg (tree expr, tree type)
5126 {
5127   return build1 (VA_ARG_EXPR, type, expr);
5128 }
5129
5130
5131 /* Linked list of disabled built-in functions.  */
5132
5133 typedef struct disabled_builtin
5134 {
5135   const char *name;
5136   struct disabled_builtin *next;
5137 } disabled_builtin;
5138 static disabled_builtin *disabled_builtins = NULL;
5139
5140 static bool builtin_function_disabled_p (const char *);
5141
5142 /* Disable a built-in function specified by -fno-builtin-NAME.  If NAME
5143    begins with "__builtin_", give an error.  */
5144
5145 void
5146 disable_builtin_function (const char *name)
5147 {
5148   if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
5149     error ("cannot disable built-in function %qs", name);
5150   else
5151     {
5152       disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
5153       new_disabled_builtin->name = name;
5154       new_disabled_builtin->next = disabled_builtins;
5155       disabled_builtins = new_disabled_builtin;
5156     }
5157 }
5158
5159
5160 /* Return true if the built-in function NAME has been disabled, false
5161    otherwise.  */
5162
5163 static bool
5164 builtin_function_disabled_p (const char *name)
5165 {
5166   disabled_builtin *p;
5167   for (p = disabled_builtins; p != NULL; p = p->next)
5168     {
5169       if (strcmp (name, p->name) == 0)
5170         return true;
5171     }
5172   return false;
5173 }
5174
5175
5176 /* Worker for DEF_BUILTIN.
5177    Possibly define a builtin function with one or two names.
5178    Does not declare a non-__builtin_ function if flag_no_builtin, or if
5179    nonansi_p and flag_no_nonansi_builtin.  */
5180
5181 static void
5182 def_builtin_1 (enum built_in_function fncode,
5183                const char *name,
5184                enum built_in_class fnclass,
5185                tree fntype, tree libtype,
5186                bool both_p, bool fallback_p, bool nonansi_p,
5187                tree fnattrs, bool implicit_p)
5188 {
5189   tree decl;
5190   const char *libname;
5191
5192   if (fntype == error_mark_node)
5193     return;
5194
5195   gcc_assert ((!both_p && !fallback_p)
5196               || !strncmp (name, "__builtin_",
5197                            strlen ("__builtin_")));
5198
5199   libname = name + strlen ("__builtin_");
5200   decl = add_builtin_function (name, fntype, fncode, fnclass,
5201                                (fallback_p ? libname : NULL),
5202                                fnattrs);
5203   if (both_p
5204       && !flag_no_builtin && !builtin_function_disabled_p (libname)
5205       && !(nonansi_p && flag_no_nonansi_builtin))
5206     add_builtin_function (libname, libtype, fncode, fnclass,
5207                           NULL, fnattrs);
5208
5209   built_in_decls[(int) fncode] = decl;
5210   if (implicit_p)
5211     implicit_built_in_decls[(int) fncode] = decl;
5212 }
5213 \f
5214 /* Nonzero if the type T promotes to int.  This is (nearly) the
5215    integral promotions defined in ISO C99 6.3.1.1/2.  */
5216
5217 bool
5218 c_promoting_integer_type_p (const_tree t)
5219 {
5220   switch (TREE_CODE (t))
5221     {
5222     case INTEGER_TYPE:
5223       return (TYPE_MAIN_VARIANT (t) == char_type_node
5224               || TYPE_MAIN_VARIANT (t) == signed_char_type_node
5225               || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
5226               || TYPE_MAIN_VARIANT (t) == short_integer_type_node
5227               || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
5228               || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
5229
5230     case ENUMERAL_TYPE:
5231       /* ??? Technically all enumerations not larger than an int
5232          promote to an int.  But this is used along code paths
5233          that only want to notice a size change.  */
5234       return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
5235
5236     case BOOLEAN_TYPE:
5237       return 1;
5238
5239     default:
5240       return 0;
5241     }
5242 }
5243
5244 /* Return 1 if PARMS specifies a fixed number of parameters
5245    and none of their types is affected by default promotions.  */
5246
5247 int
5248 self_promoting_args_p (const_tree parms)
5249 {
5250   const_tree t;
5251   for (t = parms; t; t = TREE_CHAIN (t))
5252     {
5253       tree type = TREE_VALUE (t);
5254
5255       if (type == error_mark_node)
5256         continue;
5257
5258       if (TREE_CHAIN (t) == 0 && type != void_type_node)
5259         return 0;
5260
5261       if (type == 0)
5262         return 0;
5263
5264       if (TYPE_MAIN_VARIANT (type) == float_type_node)
5265         return 0;
5266
5267       if (c_promoting_integer_type_p (type))
5268         return 0;
5269     }
5270   return 1;
5271 }
5272
5273 /* Recursively remove any '*' or '&' operator from TYPE.  */
5274 tree
5275 strip_pointer_operator (tree t)
5276 {
5277   while (POINTER_TYPE_P (t))
5278     t = TREE_TYPE (t);
5279   return t;
5280 }
5281
5282 /* Recursively remove pointer or array type from TYPE. */
5283 tree
5284 strip_pointer_or_array_types (tree t)
5285 {
5286   while (TREE_CODE (t) == ARRAY_TYPE || POINTER_TYPE_P (t))
5287     t = TREE_TYPE (t);
5288   return t;
5289 }
5290
5291 /* Used to compare case labels.  K1 and K2 are actually tree nodes
5292    representing case labels, or NULL_TREE for a `default' label.
5293    Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
5294    K2, and 0 if K1 and K2 are equal.  */
5295
5296 int
5297 case_compare (splay_tree_key k1, splay_tree_key k2)
5298 {
5299   /* Consider a NULL key (such as arises with a `default' label) to be
5300      smaller than anything else.  */
5301   if (!k1)
5302     return k2 ? -1 : 0;
5303   else if (!k2)
5304     return k1 ? 1 : 0;
5305
5306   return tree_int_cst_compare ((tree) k1, (tree) k2);
5307 }
5308
5309 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE.  If
5310    LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
5311    actually a `default' label.  If only HIGH_VALUE is NULL_TREE, then
5312    case label was declared using the usual C/C++ syntax, rather than
5313    the GNU case range extension.  CASES is a tree containing all the
5314    case ranges processed so far; COND is the condition for the
5315    switch-statement itself.  Returns the CASE_LABEL_EXPR created, or
5316    ERROR_MARK_NODE if no CASE_LABEL_EXPR is created.  */
5317
5318 tree
5319 c_add_case_label (splay_tree cases, tree cond, tree orig_type,
5320                   tree low_value, tree high_value)
5321 {
5322   tree type;
5323   tree label;
5324   tree case_label;
5325   splay_tree_node node;
5326
5327   /* Create the LABEL_DECL itself.  */
5328   label = create_artificial_label ();
5329
5330   /* If there was an error processing the switch condition, bail now
5331      before we get more confused.  */
5332   if (!cond || cond == error_mark_node)
5333     goto error_out;
5334
5335   if ((low_value && TREE_TYPE (low_value)
5336        && POINTER_TYPE_P (TREE_TYPE (low_value)))
5337       || (high_value && TREE_TYPE (high_value)
5338           && POINTER_TYPE_P (TREE_TYPE (high_value))))
5339     {
5340       error ("pointers are not permitted as case values");
5341       goto error_out;
5342     }
5343
5344   /* Case ranges are a GNU extension.  */
5345   if (high_value)
5346     pedwarn (input_location, OPT_pedantic, 
5347              "range expressions in switch statements are non-standard");
5348
5349   type = TREE_TYPE (cond);
5350   if (low_value)
5351     {
5352       low_value = check_case_value (low_value);
5353       low_value = convert_and_check (type, low_value);
5354       if (low_value == error_mark_node)
5355         goto error_out;
5356     }
5357   if (high_value)
5358     {
5359       high_value = check_case_value (high_value);
5360       high_value = convert_and_check (type, high_value);
5361       if (high_value == error_mark_node)
5362         goto error_out;
5363     }
5364
5365   if (low_value && high_value)
5366     {
5367       /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
5368          really a case range, even though it was written that way.
5369          Remove the HIGH_VALUE to simplify later processing.  */
5370       if (tree_int_cst_equal (low_value, high_value))
5371         high_value = NULL_TREE;
5372       else if (!tree_int_cst_lt (low_value, high_value))
5373         warning (0, "empty range specified");
5374     }
5375
5376   /* See if the case is in range of the type of the original testing
5377      expression.  If both low_value and high_value are out of range,
5378      don't insert the case label and return NULL_TREE.  */
5379   if (low_value
5380       && !check_case_bounds (type, orig_type,
5381                              &low_value, high_value ? &high_value : NULL))
5382     return NULL_TREE;
5383
5384   /* Look up the LOW_VALUE in the table of case labels we already
5385      have.  */
5386   node = splay_tree_lookup (cases, (splay_tree_key) low_value);
5387   /* If there was not an exact match, check for overlapping ranges.
5388      There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
5389      that's a `default' label and the only overlap is an exact match.  */
5390   if (!node && (low_value || high_value))
5391     {
5392       splay_tree_node low_bound;
5393       splay_tree_node high_bound;
5394
5395       /* Even though there wasn't an exact match, there might be an
5396          overlap between this case range and another case range.
5397          Since we've (inductively) not allowed any overlapping case
5398          ranges, we simply need to find the greatest low case label
5399          that is smaller that LOW_VALUE, and the smallest low case
5400          label that is greater than LOW_VALUE.  If there is an overlap
5401          it will occur in one of these two ranges.  */
5402       low_bound = splay_tree_predecessor (cases,
5403                                           (splay_tree_key) low_value);
5404       high_bound = splay_tree_successor (cases,
5405                                          (splay_tree_key) low_value);
5406
5407       /* Check to see if the LOW_BOUND overlaps.  It is smaller than
5408          the LOW_VALUE, so there is no need to check unless the
5409          LOW_BOUND is in fact itself a case range.  */
5410       if (low_bound
5411           && CASE_HIGH ((tree) low_bound->value)
5412           && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
5413                                     low_value) >= 0)
5414         node = low_bound;
5415       /* Check to see if the HIGH_BOUND overlaps.  The low end of that
5416          range is bigger than the low end of the current range, so we
5417          are only interested if the current range is a real range, and
5418          not an ordinary case label.  */
5419       else if (high_bound
5420                && high_value
5421                && (tree_int_cst_compare ((tree) high_bound->key,
5422                                          high_value)
5423                    <= 0))
5424         node = high_bound;
5425     }
5426   /* If there was an overlap, issue an error.  */
5427   if (node)
5428     {
5429       tree duplicate = CASE_LABEL ((tree) node->value);
5430
5431       if (high_value)
5432         {
5433           error ("duplicate (or overlapping) case value");
5434           error ("%Jthis is the first entry overlapping that value", duplicate);
5435         }
5436       else if (low_value)
5437         {
5438           error ("duplicate case value") ;
5439           error ("%Jpreviously used here", duplicate);
5440         }
5441       else
5442         {
5443           error ("multiple default labels in one switch");
5444           error ("%Jthis is the first default label", duplicate);
5445         }
5446       goto error_out;
5447     }
5448
5449   /* Add a CASE_LABEL to the statement-tree.  */
5450   case_label = add_stmt (build_case_label (low_value, high_value, label));
5451   /* Register this case label in the splay tree.  */
5452   splay_tree_insert (cases,
5453                      (splay_tree_key) low_value,
5454                      (splay_tree_value) case_label);
5455
5456   return case_label;
5457
5458  error_out:
5459   /* Add a label so that the back-end doesn't think that the beginning of
5460      the switch is unreachable.  Note that we do not add a case label, as
5461      that just leads to duplicates and thence to failure later on.  */
5462   if (!cases->root)
5463     {
5464       tree t = create_artificial_label ();
5465       add_stmt (build_stmt (LABEL_EXPR, t));
5466     }
5467   return error_mark_node;
5468 }
5469
5470 /* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
5471    Used to verify that case values match up with enumerator values.  */
5472
5473 static void
5474 match_case_to_enum_1 (tree key, tree type, tree label)
5475 {
5476   char buf[2 + 2*HOST_BITS_PER_WIDE_INT/4 + 1];
5477
5478   /* ??? Not working too hard to print the double-word value.
5479      Should perhaps be done with %lwd in the diagnostic routines?  */
5480   if (TREE_INT_CST_HIGH (key) == 0)
5481     snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_UNSIGNED,
5482               TREE_INT_CST_LOW (key));
5483   else if (!TYPE_UNSIGNED (type)
5484            && TREE_INT_CST_HIGH (key) == -1
5485            && TREE_INT_CST_LOW (key) != 0)
5486     snprintf (buf, sizeof (buf), "-" HOST_WIDE_INT_PRINT_UNSIGNED,
5487               -TREE_INT_CST_LOW (key));
5488   else
5489     snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_DOUBLE_HEX,
5490               (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (key),
5491               (unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (key));
5492
5493   if (TYPE_NAME (type) == 0)
5494     warning (warn_switch ? OPT_Wswitch : OPT_Wswitch_enum,
5495              "%Jcase value %qs not in enumerated type",
5496              CASE_LABEL (label), buf);
5497   else
5498     warning (warn_switch ? OPT_Wswitch : OPT_Wswitch_enum,
5499              "%Jcase value %qs not in enumerated type %qT",
5500              CASE_LABEL (label), buf, type);
5501 }
5502
5503 /* Subroutine of c_do_switch_warnings, called via splay_tree_foreach.
5504    Used to verify that case values match up with enumerator values.  */
5505
5506 static int
5507 match_case_to_enum (splay_tree_node node, void *data)
5508 {
5509   tree label = (tree) node->value;
5510   tree type = (tree) data;
5511
5512   /* Skip default case.  */
5513   if (!CASE_LOW (label))
5514     return 0;
5515
5516   /* If CASE_LOW_SEEN is not set, that means CASE_LOW did not appear
5517      when we did our enum->case scan.  Reset our scratch bit after.  */
5518   if (!CASE_LOW_SEEN (label))
5519     match_case_to_enum_1 (CASE_LOW (label), type, label);
5520   else
5521     CASE_LOW_SEEN (label) = 0;
5522
5523   /* If CASE_HIGH is non-null, we have a range.  If CASE_HIGH_SEEN is
5524      not set, that means that CASE_HIGH did not appear when we did our
5525      enum->case scan.  Reset our scratch bit after.  */
5526   if (CASE_HIGH (label))
5527     {
5528       if (!CASE_HIGH_SEEN (label))
5529         match_case_to_enum_1 (CASE_HIGH (label), type, label);
5530       else
5531         CASE_HIGH_SEEN (label) = 0;
5532     }
5533
5534   return 0;
5535 }
5536
5537 /* Handle -Wswitch*.  Called from the front end after parsing the
5538    switch construct.  */
5539 /* ??? Should probably be somewhere generic, since other languages
5540    besides C and C++ would want this.  At the moment, however, C/C++
5541    are the only tree-ssa languages that support enumerations at all,
5542    so the point is moot.  */
5543
5544 void
5545 c_do_switch_warnings (splay_tree cases, location_t switch_location,
5546                       tree type, tree cond)
5547 {
5548   splay_tree_node default_node;
5549   splay_tree_node node;
5550   tree chain;
5551   int saved_warn_switch;
5552
5553   if (!warn_switch && !warn_switch_enum && !warn_switch_default)
5554     return;
5555
5556   default_node = splay_tree_lookup (cases, (splay_tree_key) NULL);
5557   if (!default_node)
5558     warning (OPT_Wswitch_default, "%Hswitch missing default case",
5559              &switch_location);
5560
5561   /* From here on, we only care about about enumerated types.  */
5562   if (!type || TREE_CODE (type) != ENUMERAL_TYPE)
5563     return;
5564
5565   /* If the switch expression was an enumerated type, check that
5566      exactly all enumeration literals are covered by the cases.
5567      The check is made when -Wswitch was specified and there is no
5568      default case, or when -Wswitch-enum was specified.  */
5569
5570   if (!warn_switch_enum
5571       && !(warn_switch && !default_node))
5572     return;
5573
5574   /* Clearing COND if it is not an integer constant simplifies
5575      the tests inside the loop below.  */
5576   if (TREE_CODE (cond) != INTEGER_CST)
5577     cond = NULL_TREE;
5578
5579   /* The time complexity here is O(N*lg(N)) worst case, but for the
5580       common case of monotonically increasing enumerators, it is
5581       O(N), since the nature of the splay tree will keep the next
5582       element adjacent to the root at all times.  */
5583
5584   for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain))
5585     {
5586       tree value = TREE_VALUE (chain);
5587       if (TREE_CODE (value) == CONST_DECL)
5588         value = DECL_INITIAL (value);
5589       node = splay_tree_lookup (cases, (splay_tree_key) value);
5590       if (node)
5591         {
5592           /* Mark the CASE_LOW part of the case entry as seen.  */
5593           tree label = (tree) node->value;
5594           CASE_LOW_SEEN (label) = 1;
5595           continue;
5596         }
5597
5598       /* Even though there wasn't an exact match, there might be a
5599          case range which includes the enumerator's value.  */
5600       node = splay_tree_predecessor (cases, (splay_tree_key) value);
5601       if (node && CASE_HIGH ((tree) node->value))
5602         {
5603           tree label = (tree) node->value;
5604           int cmp = tree_int_cst_compare (CASE_HIGH (label), value);
5605           if (cmp >= 0)
5606             {
5607               /* If we match the upper bound exactly, mark the CASE_HIGH
5608                  part of the case entry as seen.  */
5609               if (cmp == 0)
5610                 CASE_HIGH_SEEN (label) = 1;
5611               continue;
5612             }
5613         }
5614
5615       /* We've now determined that this enumerated literal isn't
5616          handled by the case labels of the switch statement.  */
5617
5618       /* If the switch expression is a constant, we only really care
5619          about whether that constant is handled by the switch.  */
5620       if (cond && tree_int_cst_compare (cond, value))
5621         continue;
5622
5623       /* If there is a default_node, the only relevant option is
5624          Wswitch-enum. Otherwise, if both are enabled then we prefer
5625          to warn using -Wswitch because -Wswitch is enabled by -Wall
5626          while -Wswitch-enum is explicit.  */
5627       warning ((default_node || !warn_switch) 
5628                ? OPT_Wswitch_enum : OPT_Wswitch,
5629                "%Henumeration value %qE not handled in switch",
5630                &switch_location, TREE_PURPOSE (chain));
5631     }
5632
5633   /* Warn if there are case expressions that don't correspond to
5634      enumerators.  This can occur since C and C++ don't enforce
5635      type-checking of assignments to enumeration variables.
5636
5637      The time complexity here is now always O(N) worst case, since
5638      we should have marked both the lower bound and upper bound of
5639      every disjoint case label, with CASE_LOW_SEEN and CASE_HIGH_SEEN
5640      above.  This scan also resets those fields.  */
5641
5642   /* If there is a default_node, the only relevant option is
5643      Wswitch-enum. Otherwise, if both are enabled then we prefer
5644      to warn using -Wswitch because -Wswitch is enabled by -Wall
5645      while -Wswitch-enum is explicit.  */
5646   saved_warn_switch = warn_switch;
5647   if (default_node)
5648     warn_switch = 0;
5649   splay_tree_foreach (cases, match_case_to_enum, type);
5650   warn_switch = saved_warn_switch;
5651
5652 }
5653
5654 /* Finish an expression taking the address of LABEL (an
5655    IDENTIFIER_NODE).  Returns an expression for the address.
5656
5657    LOC is the location for the expression returned.  */
5658
5659 tree
5660 finish_label_address_expr (tree label, location_t loc)
5661 {
5662   tree result;
5663
5664   pedwarn (input_location, OPT_pedantic, "taking the address of a label is non-standard");
5665
5666   if (label == error_mark_node)
5667     return error_mark_node;
5668
5669   label = lookup_label (label);
5670   if (label == NULL_TREE)
5671     result = null_pointer_node;
5672   else
5673     {
5674       TREE_USED (label) = 1;
5675       result = build1 (ADDR_EXPR, ptr_type_node, label);
5676       /* The current function in not necessarily uninlinable.
5677          Computed gotos are incompatible with inlining, but the value
5678          here could be used only in a diagnostic, for example.  */
5679       protected_set_expr_location (result, loc);
5680     }
5681
5682   return result;
5683 }
5684 \f
5685
5686 /* Given a boolean expression ARG, return a tree representing an increment
5687    or decrement (as indicated by CODE) of ARG.  The front end must check for
5688    invalid cases (e.g., decrement in C++).  */
5689 tree
5690 boolean_increment (enum tree_code code, tree arg)
5691 {
5692   tree val;
5693   tree true_res = build_int_cst (TREE_TYPE (arg), 1);
5694
5695   arg = stabilize_reference (arg);
5696   switch (code)
5697     {
5698     case PREINCREMENT_EXPR:
5699       val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
5700       break;
5701     case POSTINCREMENT_EXPR:
5702       val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
5703       arg = save_expr (arg);
5704       val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
5705       val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
5706       break;
5707     case PREDECREMENT_EXPR:
5708       val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
5709                     invert_truthvalue (arg));
5710       break;
5711     case POSTDECREMENT_EXPR:
5712       val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
5713                     invert_truthvalue (arg));
5714       arg = save_expr (arg);
5715       val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
5716       val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
5717       break;
5718     default:
5719       gcc_unreachable ();
5720     }
5721   TREE_SIDE_EFFECTS (val) = 1;
5722   return val;
5723 }
5724 \f
5725 /* Built-in macros for stddef.h and stdint.h, that require macros
5726    defined in this file.  */
5727 void
5728 c_stddef_cpp_builtins(void)
5729 {
5730   builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
5731   builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
5732   builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
5733   builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
5734   builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE, 0);
5735   builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE, 0);
5736   builtin_define_with_value ("__CHAR16_TYPE__", CHAR16_TYPE, 0);
5737   builtin_define_with_value ("__CHAR32_TYPE__", CHAR32_TYPE, 0);
5738   if (SIG_ATOMIC_TYPE)
5739     builtin_define_with_value ("__SIG_ATOMIC_TYPE__", SIG_ATOMIC_TYPE, 0);
5740   if (INT8_TYPE)
5741     builtin_define_with_value ("__INT8_TYPE__", INT8_TYPE, 0);
5742   if (INT16_TYPE)
5743     builtin_define_with_value ("__INT16_TYPE__", INT16_TYPE, 0);
5744   if (INT32_TYPE)
5745     builtin_define_with_value ("__INT32_TYPE__", INT32_TYPE, 0);
5746   if (INT64_TYPE)
5747     builtin_define_with_value ("__INT64_TYPE__", INT64_TYPE, 0);
5748   if (UINT8_TYPE)
5749     builtin_define_with_value ("__UINT8_TYPE__", UINT8_TYPE, 0);
5750   if (UINT16_TYPE)
5751     builtin_define_with_value ("__UINT16_TYPE__", UINT16_TYPE, 0);
5752   if (UINT32_TYPE)
5753     builtin_define_with_value ("__UINT32_TYPE__", UINT32_TYPE, 0);
5754   if (UINT64_TYPE)
5755     builtin_define_with_value ("__UINT64_TYPE__", UINT64_TYPE, 0);
5756   if (INT_LEAST8_TYPE)
5757     builtin_define_with_value ("__INT_LEAST8_TYPE__", INT_LEAST8_TYPE, 0);
5758   if (INT_LEAST16_TYPE)
5759     builtin_define_with_value ("__INT_LEAST16_TYPE__", INT_LEAST16_TYPE, 0);
5760   if (INT_LEAST32_TYPE)
5761     builtin_define_with_value ("__INT_LEAST32_TYPE__", INT_LEAST32_TYPE, 0);
5762   if (INT_LEAST64_TYPE)
5763     builtin_define_with_value ("__INT_LEAST64_TYPE__", INT_LEAST64_TYPE, 0);
5764   if (UINT_LEAST8_TYPE)
5765     builtin_define_with_value ("__UINT_LEAST8_TYPE__", UINT_LEAST8_TYPE, 0);
5766   if (UINT_LEAST16_TYPE)
5767     builtin_define_with_value ("__UINT_LEAST16_TYPE__", UINT_LEAST16_TYPE, 0);
5768   if (UINT_LEAST32_TYPE)
5769     builtin_define_with_value ("__UINT_LEAST32_TYPE__", UINT_LEAST32_TYPE, 0);
5770   if (UINT_LEAST64_TYPE)
5771     builtin_define_with_value ("__UINT_LEAST64_TYPE__", UINT_LEAST64_TYPE, 0);
5772   if (INT_FAST8_TYPE)
5773     builtin_define_with_value ("__INT_FAST8_TYPE__", INT_FAST8_TYPE, 0);
5774   if (INT_FAST16_TYPE)
5775     builtin_define_with_value ("__INT_FAST16_TYPE__", INT_FAST16_TYPE, 0);
5776   if (INT_FAST32_TYPE)
5777     builtin_define_with_value ("__INT_FAST32_TYPE__", INT_FAST32_TYPE, 0);
5778   if (INT_FAST64_TYPE)
5779     builtin_define_with_value ("__INT_FAST64_TYPE__", INT_FAST64_TYPE, 0);
5780   if (UINT_FAST8_TYPE)
5781     builtin_define_with_value ("__UINT_FAST8_TYPE__", UINT_FAST8_TYPE, 0);
5782   if (UINT_FAST16_TYPE)
5783     builtin_define_with_value ("__UINT_FAST16_TYPE__", UINT_FAST16_TYPE, 0);
5784   if (UINT_FAST32_TYPE)
5785     builtin_define_with_value ("__UINT_FAST32_TYPE__", UINT_FAST32_TYPE, 0);
5786   if (UINT_FAST64_TYPE)
5787     builtin_define_with_value ("__UINT_FAST64_TYPE__", UINT_FAST64_TYPE, 0);
5788   if (INTPTR_TYPE)
5789     builtin_define_with_value ("__INTPTR_TYPE__", INTPTR_TYPE, 0);
5790   if (UINTPTR_TYPE)
5791     builtin_define_with_value ("__UINTPTR_TYPE__", UINTPTR_TYPE, 0);
5792 }
5793
5794 static void
5795 c_init_attributes (void)
5796 {
5797   /* Fill in the built_in_attributes array.  */
5798 #define DEF_ATTR_NULL_TREE(ENUM)                                \
5799   built_in_attributes[(int) ENUM] = NULL_TREE;
5800 #define DEF_ATTR_INT(ENUM, VALUE)                               \
5801   built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
5802 #define DEF_ATTR_IDENT(ENUM, STRING)                            \
5803   built_in_attributes[(int) ENUM] = get_identifier (STRING);
5804 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
5805   built_in_attributes[(int) ENUM]                       \
5806     = tree_cons (built_in_attributes[(int) PURPOSE],    \
5807                  built_in_attributes[(int) VALUE],      \
5808                  built_in_attributes[(int) CHAIN]);
5809 #include "builtin-attrs.def"
5810 #undef DEF_ATTR_NULL_TREE
5811 #undef DEF_ATTR_INT
5812 #undef DEF_ATTR_IDENT
5813 #undef DEF_ATTR_TREE_LIST
5814 }
5815
5816 /* Attribute handlers common to C front ends.  */
5817
5818 /* Handle a "packed" attribute; arguments as in
5819    struct attribute_spec.handler.  */
5820
5821 static tree
5822 handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5823                          int flags, bool *no_add_attrs)
5824 {
5825   if (TYPE_P (*node))
5826     {
5827       if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5828         *node = build_variant_type_copy (*node);
5829       TYPE_PACKED (*node) = 1;
5830     }
5831   else if (TREE_CODE (*node) == FIELD_DECL)
5832     {
5833       if (TYPE_ALIGN (TREE_TYPE (*node)) <= BITS_PER_UNIT
5834           /* Still pack bitfields.  */
5835           && ! DECL_INITIAL (*node))
5836         warning (OPT_Wattributes,
5837                  "%qE attribute ignored for field of type %qT",
5838                  name, TREE_TYPE (*node));
5839       else
5840         DECL_PACKED (*node) = 1;
5841     }
5842   /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
5843      used for DECL_REGISTER.  It wouldn't mean anything anyway.
5844      We can't set DECL_PACKED on the type of a TYPE_DECL, because
5845      that changes what the typedef is typing.  */
5846   else
5847     {
5848       warning (OPT_Wattributes, "%qE attribute ignored", name);
5849       *no_add_attrs = true;
5850     }
5851
5852   return NULL_TREE;
5853 }
5854
5855 /* Handle a "nocommon" attribute; arguments as in
5856    struct attribute_spec.handler.  */
5857
5858 static tree
5859 handle_nocommon_attribute (tree *node, tree name,
5860                            tree ARG_UNUSED (args),
5861                            int ARG_UNUSED (flags), bool *no_add_attrs)
5862 {
5863   if (TREE_CODE (*node) == VAR_DECL)
5864     DECL_COMMON (*node) = 0;
5865   else
5866     {
5867       warning (OPT_Wattributes, "%qE attribute ignored", name);
5868       *no_add_attrs = true;
5869     }
5870
5871   return NULL_TREE;
5872 }
5873
5874 /* Handle a "common" attribute; arguments as in
5875    struct attribute_spec.handler.  */
5876
5877 static tree
5878 handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5879                          int ARG_UNUSED (flags), bool *no_add_attrs)
5880 {
5881   if (TREE_CODE (*node) == VAR_DECL)
5882     DECL_COMMON (*node) = 1;
5883   else
5884     {
5885       warning (OPT_Wattributes, "%qE attribute ignored", name);
5886       *no_add_attrs = true;
5887     }
5888
5889   return NULL_TREE;
5890 }
5891
5892 /* Handle a "noreturn" attribute; arguments as in
5893    struct attribute_spec.handler.  */
5894
5895 static tree
5896 handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5897                            int ARG_UNUSED (flags), bool *no_add_attrs)
5898 {
5899   tree type = TREE_TYPE (*node);
5900
5901   /* See FIXME comment in c_common_attribute_table.  */
5902   if (TREE_CODE (*node) == FUNCTION_DECL)
5903     TREE_THIS_VOLATILE (*node) = 1;
5904   else if (TREE_CODE (type) == POINTER_TYPE
5905            && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
5906     TREE_TYPE (*node)
5907       = build_pointer_type
5908         (build_type_variant (TREE_TYPE (type),
5909                              TYPE_READONLY (TREE_TYPE (type)), 1));
5910   else
5911     {
5912       warning (OPT_Wattributes, "%qE attribute ignored", name);
5913       *no_add_attrs = true;
5914     }
5915
5916   return NULL_TREE;
5917 }
5918
5919 /* Handle a "hot" and attribute; arguments as in
5920    struct attribute_spec.handler.  */
5921
5922 static tree
5923 handle_hot_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5924                       int ARG_UNUSED (flags), bool *no_add_attrs)
5925 {
5926   if (TREE_CODE (*node) == FUNCTION_DECL)
5927     {
5928       if (lookup_attribute ("cold", DECL_ATTRIBUTES (*node)) != NULL)
5929         {
5930           warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
5931                    name, "cold");
5932           *no_add_attrs = true;
5933         }
5934       /* Most of the rest of the hot processing is done later with
5935          lookup_attribute.  */
5936     }
5937   else
5938     {
5939       warning (OPT_Wattributes, "%qE attribute ignored", name);
5940       *no_add_attrs = true;
5941     }
5942
5943   return NULL_TREE;
5944 }
5945 /* Handle a "cold" and attribute; arguments as in
5946    struct attribute_spec.handler.  */
5947
5948 static tree
5949 handle_cold_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5950                        int ARG_UNUSED (flags), bool *no_add_attrs)
5951 {
5952   if (TREE_CODE (*node) == FUNCTION_DECL)
5953     {
5954       if (lookup_attribute ("hot", DECL_ATTRIBUTES (*node)) != NULL)
5955         {
5956           warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
5957                    name, "hot");
5958           *no_add_attrs = true;
5959         }
5960       /* Most of the rest of the cold processing is done later with
5961          lookup_attribute.  */
5962     }
5963   else
5964     {
5965       warning (OPT_Wattributes, "%qE attribute ignored", name);
5966       *no_add_attrs = true;
5967     }
5968
5969   return NULL_TREE;
5970 }
5971
5972 /* Handle a "noinline" attribute; arguments as in
5973    struct attribute_spec.handler.  */
5974
5975 static tree
5976 handle_noinline_attribute (tree *node, tree name,
5977                            tree ARG_UNUSED (args),
5978                            int ARG_UNUSED (flags), bool *no_add_attrs)
5979 {
5980   if (TREE_CODE (*node) == FUNCTION_DECL)
5981     DECL_UNINLINABLE (*node) = 1;
5982   else
5983     {
5984       warning (OPT_Wattributes, "%qE attribute ignored", name);
5985       *no_add_attrs = true;
5986     }
5987
5988   return NULL_TREE;
5989 }
5990
5991 /* Handle a "always_inline" attribute; arguments as in
5992    struct attribute_spec.handler.  */
5993
5994 static tree
5995 handle_always_inline_attribute (tree *node, tree name,
5996                                 tree ARG_UNUSED (args),
5997                                 int ARG_UNUSED (flags),
5998                                 bool *no_add_attrs)
5999 {
6000   if (TREE_CODE (*node) == FUNCTION_DECL)
6001     {
6002       /* Set the attribute and mark it for disregarding inline
6003          limits.  */
6004       DECL_DISREGARD_INLINE_LIMITS (*node) = 1;
6005     }
6006   else
6007     {
6008       warning (OPT_Wattributes, "%qE attribute ignored", name);
6009       *no_add_attrs = true;
6010     }
6011
6012   return NULL_TREE;
6013 }
6014
6015 /* Handle a "gnu_inline" attribute; arguments as in
6016    struct attribute_spec.handler.  */
6017
6018 static tree
6019 handle_gnu_inline_attribute (tree *node, tree name,
6020                              tree ARG_UNUSED (args),
6021                              int ARG_UNUSED (flags),
6022                              bool *no_add_attrs)
6023 {
6024   if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
6025     {
6026       /* Do nothing else, just set the attribute.  We'll get at
6027          it later with lookup_attribute.  */
6028     }
6029   else
6030     {
6031       warning (OPT_Wattributes, "%qE attribute ignored", name);
6032       *no_add_attrs = true;
6033     }
6034
6035   return NULL_TREE;
6036 }
6037
6038 /* Handle an "artificial" attribute; arguments as in
6039    struct attribute_spec.handler.  */
6040
6041 static tree
6042 handle_artificial_attribute (tree *node, tree name,
6043                              tree ARG_UNUSED (args),
6044                              int ARG_UNUSED (flags),
6045                              bool *no_add_attrs)
6046 {
6047   if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
6048     {
6049       /* Do nothing else, just set the attribute.  We'll get at
6050          it later with lookup_attribute.  */
6051     }
6052   else
6053     {
6054       warning (OPT_Wattributes, "%qE attribute ignored", name);
6055       *no_add_attrs = true;
6056     }
6057
6058   return NULL_TREE;
6059 }
6060
6061 /* Handle a "flatten" attribute; arguments as in
6062    struct attribute_spec.handler.  */
6063
6064 static tree
6065 handle_flatten_attribute (tree *node, tree name,
6066                           tree args ATTRIBUTE_UNUSED,
6067                           int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
6068 {
6069   if (TREE_CODE (*node) == FUNCTION_DECL)
6070     /* Do nothing else, just set the attribute.  We'll get at
6071        it later with lookup_attribute.  */
6072     ;
6073   else
6074     {
6075       warning (OPT_Wattributes, "%qE attribute ignored", name);
6076       *no_add_attrs = true;
6077     }
6078
6079   return NULL_TREE;
6080 }
6081
6082 /* Handle a "warning" or "error" attribute; arguments as in
6083    struct attribute_spec.handler.  */
6084
6085 static tree
6086 handle_error_attribute (tree *node, tree name, tree args,
6087                         int ARG_UNUSED (flags), bool *no_add_attrs)
6088 {
6089   if (TREE_CODE (*node) == FUNCTION_DECL
6090       || TREE_CODE (TREE_VALUE (args)) == STRING_CST)
6091     /* Do nothing else, just set the attribute.  We'll get at
6092        it later with lookup_attribute.  */
6093     ;
6094   else
6095     {
6096       warning (OPT_Wattributes, "%qE attribute ignored", name);
6097       *no_add_attrs = true;
6098     }
6099
6100   return NULL_TREE;
6101 }
6102
6103 /* Handle a "used" attribute; arguments as in
6104    struct attribute_spec.handler.  */
6105
6106 static tree
6107 handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
6108                        int ARG_UNUSED (flags), bool *no_add_attrs)
6109 {
6110   tree node = *pnode;
6111
6112   if (TREE_CODE (node) == FUNCTION_DECL
6113       || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
6114     {
6115       TREE_USED (node) = 1;
6116       DECL_PRESERVE_P (node) = 1;
6117     }
6118   else
6119     {
6120       warning (OPT_Wattributes, "%qE attribute ignored", name);
6121       *no_add_attrs = true;
6122     }
6123
6124   return NULL_TREE;
6125 }
6126
6127 /* Handle a "unused" attribute; arguments as in
6128    struct attribute_spec.handler.  */
6129
6130 static tree
6131 handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
6132                          int flags, bool *no_add_attrs)
6133 {
6134   if (DECL_P (*node))
6135     {
6136       tree decl = *node;
6137
6138       if (TREE_CODE (decl) == PARM_DECL
6139           || TREE_CODE (decl) == VAR_DECL
6140           || TREE_CODE (decl) == FUNCTION_DECL
6141           || TREE_CODE (decl) == LABEL_DECL
6142           || TREE_CODE (decl) == TYPE_DECL)
6143         TREE_USED (decl) = 1;
6144       else
6145         {
6146           warning (OPT_Wattributes, "%qE attribute ignored", name);
6147           *no_add_attrs = true;
6148         }
6149     }
6150   else
6151     {
6152       if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
6153         *node = build_variant_type_copy (*node);
6154       TREE_USED (*node) = 1;
6155     }
6156
6157   return NULL_TREE;
6158 }
6159
6160 /* Handle a "externally_visible" attribute; arguments as in
6161    struct attribute_spec.handler.  */
6162
6163 static tree
6164 handle_externally_visible_attribute (tree *pnode, tree name,
6165                                      tree ARG_UNUSED (args),
6166                                      int ARG_UNUSED (flags),
6167                                      bool *no_add_attrs)
6168 {
6169   tree node = *pnode;
6170
6171   if (TREE_CODE (node) == FUNCTION_DECL || TREE_CODE (node) == VAR_DECL)
6172     {
6173       if ((!TREE_STATIC (node) && TREE_CODE (node) != FUNCTION_DECL
6174            && !DECL_EXTERNAL (node)) || !TREE_PUBLIC (node))
6175         {
6176           warning (OPT_Wattributes,
6177                    "%qE attribute have effect only on public objects", name);
6178           *no_add_attrs = true;
6179         }
6180     }
6181   else
6182     {
6183       warning (OPT_Wattributes, "%qE attribute ignored", name);
6184       *no_add_attrs = true;
6185     }
6186
6187   return NULL_TREE;
6188 }
6189
6190 /* Handle a "const" attribute; arguments as in
6191    struct attribute_spec.handler.  */
6192
6193 static tree
6194 handle_const_attribute (tree *node, tree name, tree ARG_UNUSED (args),
6195                         int ARG_UNUSED (flags), bool *no_add_attrs)
6196 {
6197   tree type = TREE_TYPE (*node);
6198
6199   /* See FIXME comment on noreturn in c_common_attribute_table.  */
6200   if (TREE_CODE (*node) == FUNCTION_DECL)
6201     TREE_READONLY (*node) = 1;
6202   else if (TREE_CODE (type) == POINTER_TYPE
6203            && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
6204     TREE_TYPE (*node)
6205       = build_pointer_type
6206         (build_type_variant (TREE_TYPE (type), 1,
6207                              TREE_THIS_VOLATILE (TREE_TYPE (type))));
6208   else
6209     {
6210       warning (OPT_Wattributes, "%qE attribute ignored", name);
6211       *no_add_attrs = true;
6212     }
6213
6214   return NULL_TREE;
6215 }
6216
6217 /* Handle a "transparent_union" attribute; arguments as in
6218    struct attribute_spec.handler.  */
6219
6220 static tree
6221 handle_transparent_union_attribute (tree *node, tree name,
6222                                     tree ARG_UNUSED (args), int flags,
6223                                     bool *no_add_attrs)
6224 {
6225   tree type;
6226
6227   *no_add_attrs = true;
6228
6229   if (TREE_CODE (*node) == TYPE_DECL)
6230     node = &TREE_TYPE (*node);
6231   type = *node;
6232
6233   if (TREE_CODE (type) == UNION_TYPE)
6234     {
6235       /* When IN_PLACE is set, leave the check for FIELDS and MODE to
6236          the code in finish_struct.  */
6237       if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
6238         {
6239           if (TYPE_FIELDS (type) == NULL_TREE
6240               || TYPE_MODE (type) != DECL_MODE (TYPE_FIELDS (type)))
6241             goto ignored;
6242
6243           /* A type variant isn't good enough, since we don't a cast
6244              to such a type removed as a no-op.  */
6245           *node = type = build_duplicate_type (type);
6246         }
6247
6248       TYPE_TRANSPARENT_UNION (type) = 1;
6249       return NULL_TREE;
6250     }
6251
6252  ignored:
6253   warning (OPT_Wattributes, "%qE attribute ignored", name);
6254   return NULL_TREE;
6255 }
6256
6257 /* Subroutine of handle_{con,de}structor_attribute.  Evaluate ARGS to
6258    get the requested priority for a constructor or destructor,
6259    possibly issuing diagnostics for invalid or reserved
6260    priorities.  */
6261
6262 static priority_type
6263 get_priority (tree args, bool is_destructor)
6264 {
6265   HOST_WIDE_INT pri;
6266   tree arg;
6267
6268   if (!args)
6269     return DEFAULT_INIT_PRIORITY;
6270   
6271   if (!SUPPORTS_INIT_PRIORITY)
6272     {
6273       if (is_destructor)
6274         error ("destructor priorities are not supported");
6275       else
6276         error ("constructor priorities are not supported");
6277       return DEFAULT_INIT_PRIORITY;
6278     }
6279
6280   arg = TREE_VALUE (args);
6281   if (!host_integerp (arg, /*pos=*/0)
6282       || !INTEGRAL_TYPE_P (TREE_TYPE (arg)))
6283     goto invalid;
6284
6285   pri = tree_low_cst (TREE_VALUE (args), /*pos=*/0);
6286   if (pri < 0 || pri > MAX_INIT_PRIORITY)
6287     goto invalid;
6288
6289   if (pri <= MAX_RESERVED_INIT_PRIORITY)
6290     {
6291       if (is_destructor)
6292         warning (0,
6293                  "destructor priorities from 0 to %d are reserved "
6294                  "for the implementation", 
6295                  MAX_RESERVED_INIT_PRIORITY);
6296       else
6297         warning (0,
6298                  "constructor priorities from 0 to %d are reserved "
6299                  "for the implementation", 
6300                  MAX_RESERVED_INIT_PRIORITY);
6301     }
6302   return pri;
6303
6304  invalid:
6305   if (is_destructor)
6306     error ("destructor priorities must be integers from 0 to %d inclusive",
6307            MAX_INIT_PRIORITY);
6308   else
6309     error ("constructor priorities must be integers from 0 to %d inclusive",
6310            MAX_INIT_PRIORITY);
6311   return DEFAULT_INIT_PRIORITY;
6312 }
6313
6314 /* Handle a "constructor" attribute; arguments as in
6315    struct attribute_spec.handler.  */
6316
6317 static tree
6318 handle_constructor_attribute (tree *node, tree name, tree args,
6319                               int ARG_UNUSED (flags),
6320                               bool *no_add_attrs)
6321 {
6322   tree decl = *node;
6323   tree type = TREE_TYPE (decl);
6324
6325   if (TREE_CODE (decl) == FUNCTION_DECL
6326       && TREE_CODE (type) == FUNCTION_TYPE
6327       && decl_function_context (decl) == 0)
6328     {
6329       priority_type priority;
6330       DECL_STATIC_CONSTRUCTOR (decl) = 1;
6331       priority = get_priority (args, /*is_destructor=*/false);
6332       SET_DECL_INIT_PRIORITY (decl, priority);
6333       TREE_USED (decl) = 1;
6334     }
6335   else
6336     {
6337       warning (OPT_Wattributes, "%qE attribute ignored", name);
6338       *no_add_attrs = true;
6339     }
6340
6341   return NULL_TREE;
6342 }
6343
6344 /* Handle a "destructor" attribute; arguments as in
6345    struct attribute_spec.handler.  */
6346
6347 static tree
6348 handle_destructor_attribute (tree *node, tree name, tree args,
6349                              int ARG_UNUSED (flags),
6350                              bool *no_add_attrs)
6351 {
6352   tree decl = *node;
6353   tree type = TREE_TYPE (decl);
6354
6355   if (TREE_CODE (decl) == FUNCTION_DECL
6356       && TREE_CODE (type) == FUNCTION_TYPE
6357       && decl_function_context (decl) == 0)
6358     {
6359       priority_type priority;
6360       DECL_STATIC_DESTRUCTOR (decl) = 1;
6361       priority = get_priority (args, /*is_destructor=*/true);
6362       SET_DECL_FINI_PRIORITY (decl, priority);
6363       TREE_USED (decl) = 1;
6364     }
6365   else
6366     {
6367       warning (OPT_Wattributes, "%qE attribute ignored", name);
6368       *no_add_attrs = true;
6369     }
6370
6371   return NULL_TREE;
6372 }
6373
6374 /* Handle a "mode" attribute; arguments as in
6375    struct attribute_spec.handler.  */
6376
6377 static tree
6378 handle_mode_attribute (tree *node, tree name, tree args,
6379                        int ARG_UNUSED (flags), bool *no_add_attrs)
6380 {
6381   tree type = *node;
6382   tree ident = TREE_VALUE (args);
6383
6384   *no_add_attrs = true;
6385
6386   if (TREE_CODE (ident) != IDENTIFIER_NODE)
6387     warning (OPT_Wattributes, "%qE attribute ignored", name);
6388   else
6389     {
6390       int j;
6391       const char *p = IDENTIFIER_POINTER (ident);
6392       int len = strlen (p);
6393       enum machine_mode mode = VOIDmode;
6394       tree typefm;
6395       bool valid_mode;
6396
6397       if (len > 4 && p[0] == '_' && p[1] == '_'
6398           && p[len - 1] == '_' && p[len - 2] == '_')
6399         {
6400           char *newp = (char *) alloca (len - 1);
6401
6402           strcpy (newp, &p[2]);
6403           newp[len - 4] = '\0';
6404           p = newp;
6405         }
6406
6407       /* Change this type to have a type with the specified mode.
6408          First check for the special modes.  */
6409       if (!strcmp (p, "byte"))
6410         mode = byte_mode;
6411       else if (!strcmp (p, "word"))
6412         mode = word_mode;
6413       else if (!strcmp (p, "pointer"))
6414         mode = ptr_mode;
6415       else if (!strcmp (p, "libgcc_cmp_return"))
6416         mode = targetm.libgcc_cmp_return_mode ();
6417       else if (!strcmp (p, "libgcc_shift_count"))
6418         mode = targetm.libgcc_shift_count_mode ();
6419       else if (!strcmp (p, "unwind_word"))
6420         mode = targetm.unwind_word_mode ();
6421       else
6422         for (j = 0; j < NUM_MACHINE_MODES; j++)
6423           if (!strcmp (p, GET_MODE_NAME (j)))
6424             {
6425               mode = (enum machine_mode) j;
6426               break;
6427             }
6428
6429       if (mode == VOIDmode)
6430         {
6431           error ("unknown machine mode %qE", ident);
6432           return NULL_TREE;
6433         }
6434
6435       valid_mode = false;
6436       switch (GET_MODE_CLASS (mode))
6437         {
6438         case MODE_INT:
6439         case MODE_PARTIAL_INT:
6440         case MODE_FLOAT:
6441         case MODE_DECIMAL_FLOAT:
6442         case MODE_FRACT:
6443         case MODE_UFRACT:
6444         case MODE_ACCUM:
6445         case MODE_UACCUM:
6446           valid_mode = targetm.scalar_mode_supported_p (mode);
6447           break;
6448
6449         case MODE_COMPLEX_INT:
6450         case MODE_COMPLEX_FLOAT:
6451           valid_mode = targetm.scalar_mode_supported_p (GET_MODE_INNER (mode));
6452           break;
6453
6454         case MODE_VECTOR_INT:
6455         case MODE_VECTOR_FLOAT:
6456         case MODE_VECTOR_FRACT:
6457         case MODE_VECTOR_UFRACT:
6458         case MODE_VECTOR_ACCUM:
6459         case MODE_VECTOR_UACCUM:
6460           warning (OPT_Wattributes, "specifying vector types with "
6461                    "__attribute__ ((mode)) is deprecated");
6462           warning (OPT_Wattributes,
6463                    "use __attribute__ ((vector_size)) instead");
6464           valid_mode = vector_mode_valid_p (mode);
6465           break;
6466
6467         default:
6468           break;
6469         }
6470       if (!valid_mode)
6471         {
6472           error ("unable to emulate %qs", p);
6473           return NULL_TREE;
6474         }
6475
6476       if (POINTER_TYPE_P (type))
6477         {
6478           tree (*fn)(tree, enum machine_mode, bool);
6479
6480           if (!targetm.valid_pointer_mode (mode))
6481             {
6482               error ("invalid pointer mode %qs", p);
6483               return NULL_TREE;
6484             }
6485
6486           if (TREE_CODE (type) == POINTER_TYPE)
6487             fn = build_pointer_type_for_mode;
6488           else
6489             fn = build_reference_type_for_mode;
6490           typefm = fn (TREE_TYPE (type), mode, false);
6491         }
6492       else
6493         {
6494           /* For fixed-point modes, we need to test if the signness of type
6495              and the machine mode are consistent.  */
6496           if (ALL_FIXED_POINT_MODE_P (mode)
6497               && TYPE_UNSIGNED (type) != UNSIGNED_FIXED_POINT_MODE_P (mode))
6498             {
6499               error ("signness of type and machine mode %qs don't match", p);
6500               return NULL_TREE;
6501             }
6502           /* For fixed-point modes, we need to pass saturating info.  */
6503           typefm = lang_hooks.types.type_for_mode (mode,
6504                         ALL_FIXED_POINT_MODE_P (mode) ? TYPE_SATURATING (type)
6505                                                       : TYPE_UNSIGNED (type));
6506         }
6507
6508       if (typefm == NULL_TREE)
6509         {
6510           error ("no data type for mode %qs", p);
6511           return NULL_TREE;
6512         }
6513       else if (TREE_CODE (type) == ENUMERAL_TYPE)
6514         {
6515           /* For enumeral types, copy the precision from the integer
6516              type returned above.  If not an INTEGER_TYPE, we can't use
6517              this mode for this type.  */
6518           if (TREE_CODE (typefm) != INTEGER_TYPE)
6519             {
6520               error ("cannot use mode %qs for enumeral types", p);
6521               return NULL_TREE;
6522             }
6523
6524           if (flags & ATTR_FLAG_TYPE_IN_PLACE)
6525             {
6526               TYPE_PRECISION (type) = TYPE_PRECISION (typefm);
6527               typefm = type;
6528             }
6529           else
6530             {
6531               /* We cannot build a type variant, as there's code that assumes
6532                  that TYPE_MAIN_VARIANT has the same mode.  This includes the
6533                  debug generators.  Instead, create a subrange type.  This
6534                  results in all of the enumeral values being emitted only once
6535                  in the original, and the subtype gets them by reference.  */
6536               if (TYPE_UNSIGNED (type))
6537                 typefm = make_unsigned_type (TYPE_PRECISION (typefm));
6538               else
6539                 typefm = make_signed_type (TYPE_PRECISION (typefm));
6540               TREE_TYPE (typefm) = type;
6541             }
6542         }
6543       else if (VECTOR_MODE_P (mode)
6544                ? TREE_CODE (type) != TREE_CODE (TREE_TYPE (typefm))
6545                : TREE_CODE (type) != TREE_CODE (typefm))
6546         {
6547           error ("mode %qs applied to inappropriate type", p);
6548           return NULL_TREE;
6549         }
6550
6551       *node = typefm;
6552     }
6553
6554   return NULL_TREE;
6555 }
6556
6557 /* Handle a "section" attribute; arguments as in
6558    struct attribute_spec.handler.  */
6559
6560 static tree
6561 handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
6562                           int ARG_UNUSED (flags), bool *no_add_attrs)
6563 {
6564   tree decl = *node;
6565
6566   if (targetm.have_named_sections)
6567     {
6568       user_defined_section_attribute = true;
6569
6570       if ((TREE_CODE (decl) == FUNCTION_DECL
6571            || TREE_CODE (decl) == VAR_DECL)
6572           && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
6573         {
6574           if (TREE_CODE (decl) == VAR_DECL
6575               && current_function_decl != NULL_TREE
6576               && !TREE_STATIC (decl))
6577             {
6578               error ("%Jsection attribute cannot be specified for "
6579                      "local variables", decl);
6580               *no_add_attrs = true;
6581             }
6582
6583           /* The decl may have already been given a section attribute
6584              from a previous declaration.  Ensure they match.  */
6585           else if (DECL_SECTION_NAME (decl) != NULL_TREE
6586                    && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
6587                               TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
6588             {
6589               error ("section of %q+D conflicts with previous declaration",
6590                      *node);
6591               *no_add_attrs = true;
6592             }
6593           else if (TREE_CODE (decl) == VAR_DECL
6594                    && !targetm.have_tls && targetm.emutls.tmpl_section
6595                    && DECL_THREAD_LOCAL_P (decl))
6596             {
6597               error ("section of %q+D cannot be overridden", *node);
6598               *no_add_attrs = true;
6599             }
6600           else
6601             DECL_SECTION_NAME (decl) = TREE_VALUE (args);
6602         }
6603       else
6604         {
6605           error ("section attribute not allowed for %q+D", *node);
6606           *no_add_attrs = true;
6607         }
6608     }
6609   else
6610     {
6611       error ("%Jsection attributes are not supported for this target", *node);
6612       *no_add_attrs = true;
6613     }
6614
6615   return NULL_TREE;
6616 }
6617
6618 /* Handle a "aligned" attribute; arguments as in
6619    struct attribute_spec.handler.  */
6620
6621 static tree
6622 handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
6623                           int flags, bool *no_add_attrs)
6624 {
6625   tree decl = NULL_TREE;
6626   tree *type = NULL;
6627   int is_type = 0;
6628   tree align_expr = (args ? TREE_VALUE (args)
6629                      : size_int (ATTRIBUTE_ALIGNED_VALUE / BITS_PER_UNIT));
6630   int i;
6631
6632   if (DECL_P (*node))
6633     {
6634       decl = *node;
6635       type = &TREE_TYPE (decl);
6636       is_type = TREE_CODE (*node) == TYPE_DECL;
6637     }
6638   else if (TYPE_P (*node))
6639     type = node, is_type = 1;
6640
6641   if (TREE_CODE (align_expr) != INTEGER_CST)
6642     {
6643       error ("requested alignment is not a constant");
6644       *no_add_attrs = true;
6645     }
6646   else if ((i = tree_log2 (align_expr)) == -1)
6647     {
6648       error ("requested alignment is not a power of 2");
6649       *no_add_attrs = true;
6650     }
6651   else if (i >= HOST_BITS_PER_INT - BITS_PER_UNIT_LOG)
6652     {
6653       error ("requested alignment is too large");
6654       *no_add_attrs = true;
6655     }
6656   else if (is_type)
6657     {
6658       /* If we have a TYPE_DECL, then copy the type, so that we
6659          don't accidentally modify a builtin type.  See pushdecl.  */
6660       if (decl && TREE_TYPE (decl) != error_mark_node
6661           && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
6662         {
6663           tree tt = TREE_TYPE (decl);
6664           *type = build_variant_type_copy (*type);
6665           DECL_ORIGINAL_TYPE (decl) = tt;
6666           TYPE_NAME (*type) = decl;
6667           TREE_USED (*type) = TREE_USED (decl);
6668           TREE_TYPE (decl) = *type;
6669         }
6670       else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
6671         *type = build_variant_type_copy (*type);
6672
6673       TYPE_ALIGN (*type) = (1U << i) * BITS_PER_UNIT;
6674       TYPE_USER_ALIGN (*type) = 1;
6675     }
6676   else if (! VAR_OR_FUNCTION_DECL_P (decl)
6677            && TREE_CODE (decl) != FIELD_DECL)
6678     {
6679       error ("alignment may not be specified for %q+D", decl);
6680       *no_add_attrs = true;
6681     }
6682   else if (TREE_CODE (decl) == FUNCTION_DECL
6683            && DECL_ALIGN (decl) > (1U << i) * BITS_PER_UNIT)
6684     {
6685       if (DECL_USER_ALIGN (decl))
6686         error ("alignment for %q+D was previously specified as %d "
6687                "and may not be decreased", decl,
6688                DECL_ALIGN (decl) / BITS_PER_UNIT);
6689       else
6690         error ("alignment for %q+D must be at least %d", decl,
6691                DECL_ALIGN (decl) / BITS_PER_UNIT);
6692       *no_add_attrs = true;
6693     }
6694   else
6695     {
6696       DECL_ALIGN (decl) = (1U << i) * BITS_PER_UNIT;
6697       DECL_USER_ALIGN (decl) = 1;
6698     }
6699
6700   return NULL_TREE;
6701 }
6702
6703 /* Handle a "weak" attribute; arguments as in
6704    struct attribute_spec.handler.  */
6705
6706 static tree
6707 handle_weak_attribute (tree *node, tree name,
6708                        tree ARG_UNUSED (args),
6709                        int ARG_UNUSED (flags),
6710                        bool * ARG_UNUSED (no_add_attrs))
6711 {
6712   if (TREE_CODE (*node) == FUNCTION_DECL
6713       && DECL_DECLARED_INLINE_P (*node))
6714     {
6715       error ("inline function %q+D cannot be declared weak", *node);
6716       *no_add_attrs = true;
6717     }
6718   else if (TREE_CODE (*node) == FUNCTION_DECL
6719            || TREE_CODE (*node) == VAR_DECL)
6720     declare_weak (*node);
6721   else
6722     warning (OPT_Wattributes, "%qE attribute ignored", name);
6723
6724   return NULL_TREE;
6725 }
6726
6727 /* Handle an "alias" attribute; arguments as in
6728    struct attribute_spec.handler.  */
6729
6730 static tree
6731 handle_alias_attribute (tree *node, tree name, tree args,
6732                         int ARG_UNUSED (flags), bool *no_add_attrs)
6733 {
6734   tree decl = *node;
6735
6736   if (TREE_CODE (decl) != FUNCTION_DECL && TREE_CODE (decl) != VAR_DECL)
6737     {
6738       warning (OPT_Wattributes, "%qE attribute ignored", name);
6739       *no_add_attrs = true;
6740     }
6741   else if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
6742       || (TREE_CODE (decl) != FUNCTION_DECL 
6743           && TREE_PUBLIC (decl) && !DECL_EXTERNAL (decl))
6744       /* A static variable declaration is always a tentative definition,
6745          but the alias is a non-tentative definition which overrides.  */
6746       || (TREE_CODE (decl) != FUNCTION_DECL 
6747           && ! TREE_PUBLIC (decl) && DECL_INITIAL (decl)))
6748     {
6749       error ("%q+D defined both normally and as an alias", decl);
6750       *no_add_attrs = true;
6751     }
6752
6753   /* Note that the very first time we process a nested declaration,
6754      decl_function_context will not be set.  Indeed, *would* never
6755      be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
6756      we do below.  After such frobbery, pushdecl would set the context.
6757      In any case, this is never what we want.  */
6758   else if (decl_function_context (decl) == 0 && current_function_decl == NULL)
6759     {
6760       tree id;
6761
6762       id = TREE_VALUE (args);
6763       if (TREE_CODE (id) != STRING_CST)
6764         {
6765           error ("alias argument not a string");
6766           *no_add_attrs = true;
6767           return NULL_TREE;
6768         }
6769       id = get_identifier (TREE_STRING_POINTER (id));
6770       /* This counts as a use of the object pointed to.  */
6771       TREE_USED (id) = 1;
6772
6773       if (TREE_CODE (decl) == FUNCTION_DECL)
6774         DECL_INITIAL (decl) = error_mark_node;
6775       else
6776         {
6777           if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
6778             DECL_EXTERNAL (decl) = 1;
6779           else
6780             DECL_EXTERNAL (decl) = 0;
6781           TREE_STATIC (decl) = 1;
6782         }
6783     }
6784   else
6785     {
6786       warning (OPT_Wattributes, "%qE attribute ignored", name);
6787       *no_add_attrs = true;
6788     }
6789
6790   return NULL_TREE;
6791 }
6792
6793 /* Handle a "weakref" attribute; arguments as in struct
6794    attribute_spec.handler.  */
6795
6796 static tree
6797 handle_weakref_attribute (tree *node, tree ARG_UNUSED (name), tree args,
6798                           int flags, bool *no_add_attrs)
6799 {
6800   tree attr = NULL_TREE;
6801
6802   /* We must ignore the attribute when it is associated with
6803      local-scoped decls, since attribute alias is ignored and many
6804      such symbols do not even have a DECL_WEAK field.  */
6805   if (decl_function_context (*node)
6806       || current_function_decl
6807       || (TREE_CODE (*node) != VAR_DECL && TREE_CODE (*node) != FUNCTION_DECL))
6808     {
6809       warning (OPT_Wattributes, "%qE attribute ignored", name);
6810       *no_add_attrs = true;
6811       return NULL_TREE;
6812     }
6813
6814   /* The idea here is that `weakref("name")' mutates into `weakref,
6815      alias("name")', and weakref without arguments, in turn,
6816      implicitly adds weak. */
6817
6818   if (args)
6819     {
6820       attr = tree_cons (get_identifier ("alias"), args, attr);
6821       attr = tree_cons (get_identifier ("weakref"), NULL_TREE, attr);
6822
6823       *no_add_attrs = true;
6824
6825       decl_attributes (node, attr, flags);
6826     }
6827   else
6828     {
6829       if (lookup_attribute ("alias", DECL_ATTRIBUTES (*node)))
6830         error ("%Jweakref attribute must appear before alias attribute",
6831                *node);
6832
6833       /* Can't call declare_weak because it wants this to be TREE_PUBLIC,
6834          and that isn't supported; and because it wants to add it to
6835          the list of weak decls, which isn't helpful.  */
6836       DECL_WEAK (*node) = 1;
6837     }
6838
6839   return NULL_TREE;
6840 }
6841
6842 /* Handle an "visibility" attribute; arguments as in
6843    struct attribute_spec.handler.  */
6844
6845 static tree
6846 handle_visibility_attribute (tree *node, tree name, tree args,
6847                              int ARG_UNUSED (flags),
6848                              bool *ARG_UNUSED (no_add_attrs))
6849 {
6850   tree decl = *node;
6851   tree id = TREE_VALUE (args);
6852   enum symbol_visibility vis;
6853
6854   if (TYPE_P (*node))
6855     {
6856       if (TREE_CODE (*node) == ENUMERAL_TYPE)
6857         /* OK */;
6858       else if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE)
6859         {
6860           warning (OPT_Wattributes, "%qE attribute ignored on non-class types",
6861                    name);
6862           return NULL_TREE;
6863         }
6864       else if (TYPE_FIELDS (*node))
6865         {
6866           error ("%qE attribute ignored because %qT is already defined",
6867                  name, *node);
6868           return NULL_TREE;
6869         }
6870     }
6871   else if (decl_function_context (decl) != 0 || !TREE_PUBLIC (decl))
6872     {
6873       warning (OPT_Wattributes, "%qE attribute ignored", name);
6874       return NULL_TREE;
6875     }
6876
6877   if (TREE_CODE (id) != STRING_CST)
6878     {
6879       error ("visibility argument not a string");
6880       return NULL_TREE;
6881     }
6882
6883   /*  If this is a type, set the visibility on the type decl.  */
6884   if (TYPE_P (decl))
6885     {
6886       decl = TYPE_NAME (decl);
6887       if (!decl)
6888         return NULL_TREE;
6889       if (TREE_CODE (decl) == IDENTIFIER_NODE)
6890         {
6891            warning (OPT_Wattributes, "%qE attribute ignored on types",
6892                     name);
6893            return NULL_TREE;
6894         }
6895     }
6896
6897   if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
6898     vis = VISIBILITY_DEFAULT;
6899   else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
6900     vis = VISIBILITY_INTERNAL;
6901   else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
6902     vis = VISIBILITY_HIDDEN;
6903   else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
6904     vis = VISIBILITY_PROTECTED;
6905   else
6906     {
6907       error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
6908       vis = VISIBILITY_DEFAULT;
6909     }
6910
6911   if (DECL_VISIBILITY_SPECIFIED (decl)
6912       && vis != DECL_VISIBILITY (decl))
6913     {
6914       tree attributes = (TYPE_P (*node)
6915                          ? TYPE_ATTRIBUTES (*node)
6916                          : DECL_ATTRIBUTES (decl));
6917       if (lookup_attribute ("visibility", attributes))
6918         error ("%qD redeclared with different visibility", decl);
6919       else if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
6920                && lookup_attribute ("dllimport", attributes))
6921         error ("%qD was declared %qs which implies default visibility",
6922                decl, "dllimport");
6923       else if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
6924                && lookup_attribute ("dllexport", attributes))
6925         error ("%qD was declared %qs which implies default visibility",
6926                decl, "dllexport");
6927     }
6928
6929   DECL_VISIBILITY (decl) = vis;
6930   DECL_VISIBILITY_SPECIFIED (decl) = 1;
6931
6932   /* Go ahead and attach the attribute to the node as well.  This is needed
6933      so we can determine whether we have VISIBILITY_DEFAULT because the
6934      visibility was not specified, or because it was explicitly overridden
6935      from the containing scope.  */
6936
6937   return NULL_TREE;
6938 }
6939
6940 /* Determine the ELF symbol visibility for DECL, which is either a
6941    variable or a function.  It is an error to use this function if a
6942    definition of DECL is not available in this translation unit.
6943    Returns true if the final visibility has been determined by this
6944    function; false if the caller is free to make additional
6945    modifications.  */
6946
6947 bool
6948 c_determine_visibility (tree decl)
6949 {
6950   gcc_assert (TREE_CODE (decl) == VAR_DECL
6951               || TREE_CODE (decl) == FUNCTION_DECL);
6952
6953   /* If the user explicitly specified the visibility with an
6954      attribute, honor that.  DECL_VISIBILITY will have been set during
6955      the processing of the attribute.  We check for an explicit
6956      attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
6957      to distinguish the use of an attribute from the use of a "#pragma
6958      GCC visibility push(...)"; in the latter case we still want other
6959      considerations to be able to overrule the #pragma.  */
6960   if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl))
6961       || (TARGET_DLLIMPORT_DECL_ATTRIBUTES
6962           && (lookup_attribute ("dllimport", DECL_ATTRIBUTES (decl))
6963               || lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))))
6964     return true;
6965
6966   /* Set default visibility to whatever the user supplied with
6967      visibility_specified depending on #pragma GCC visibility.  */
6968   if (!DECL_VISIBILITY_SPECIFIED (decl))
6969     {
6970       if (visibility_options.inpragma
6971           || DECL_VISIBILITY (decl) != default_visibility)
6972         {
6973           DECL_VISIBILITY (decl) = default_visibility;
6974           DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
6975           /* If visibility changed and DECL already has DECL_RTL, ensure
6976              symbol flags are updated.  */
6977           if (((TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
6978                || TREE_CODE (decl) == FUNCTION_DECL)
6979               && DECL_RTL_SET_P (decl))
6980             make_decl_rtl (decl);
6981         }
6982     }
6983   return false;
6984 }
6985
6986 /* Handle an "tls_model" attribute; arguments as in
6987    struct attribute_spec.handler.  */
6988
6989 static tree
6990 handle_tls_model_attribute (tree *node, tree name, tree args,
6991                             int ARG_UNUSED (flags), bool *no_add_attrs)
6992 {
6993   tree id;
6994   tree decl = *node;
6995   enum tls_model kind;
6996
6997   *no_add_attrs = true;
6998
6999   if (TREE_CODE (decl) != VAR_DECL || !DECL_THREAD_LOCAL_P (decl))
7000     {
7001       warning (OPT_Wattributes, "%qE attribute ignored", name);
7002       return NULL_TREE;
7003     }
7004
7005   kind = DECL_TLS_MODEL (decl);
7006   id = TREE_VALUE (args);
7007   if (TREE_CODE (id) != STRING_CST)
7008     {
7009       error ("tls_model argument not a string");
7010       return NULL_TREE;
7011     }
7012
7013   if (!strcmp (TREE_STRING_POINTER (id), "local-exec"))
7014     kind = TLS_MODEL_LOCAL_EXEC;
7015   else if (!strcmp (TREE_STRING_POINTER (id), "initial-exec"))
7016     kind = TLS_MODEL_INITIAL_EXEC;
7017   else if (!strcmp (TREE_STRING_POINTER (id), "local-dynamic"))
7018     kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
7019   else if (!strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
7020     kind = TLS_MODEL_GLOBAL_DYNAMIC;
7021   else
7022     error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
7023
7024   DECL_TLS_MODEL (decl) = kind;
7025   return NULL_TREE;
7026 }
7027
7028 /* Handle a "no_instrument_function" attribute; arguments as in
7029    struct attribute_spec.handler.  */
7030
7031 static tree
7032 handle_no_instrument_function_attribute (tree *node, tree name,
7033                                          tree ARG_UNUSED (args),
7034                                          int ARG_UNUSED (flags),
7035                                          bool *no_add_attrs)
7036 {
7037   tree decl = *node;
7038
7039   if (TREE_CODE (decl) != FUNCTION_DECL)
7040     {
7041       error ("%J%qE attribute applies only to functions", decl, name);
7042       *no_add_attrs = true;
7043     }
7044   else if (DECL_INITIAL (decl))
7045     {
7046       error ("%Jcan%'t set %qE attribute after definition", decl, name);
7047       *no_add_attrs = true;
7048     }
7049   else
7050     DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
7051
7052   return NULL_TREE;
7053 }
7054
7055 /* Handle a "malloc" attribute; arguments as in
7056    struct attribute_spec.handler.  */
7057
7058 static tree
7059 handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
7060                          int ARG_UNUSED (flags), bool *no_add_attrs)
7061 {
7062   if (TREE_CODE (*node) == FUNCTION_DECL
7063       && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
7064     DECL_IS_MALLOC (*node) = 1;
7065   else
7066     {
7067       warning (OPT_Wattributes, "%qE attribute ignored", name);
7068       *no_add_attrs = true;
7069     }
7070
7071   return NULL_TREE;
7072 }
7073
7074 /* Handle a "alloc_size" attribute; arguments as in
7075    struct attribute_spec.handler.  */
7076
7077 static tree
7078 handle_alloc_size_attribute (tree *node, tree ARG_UNUSED (name), tree args,
7079                              int ARG_UNUSED (flags), bool *no_add_attrs)
7080 {
7081   unsigned arg_count = type_num_arguments (*node);
7082   for (; args; args = TREE_CHAIN (args))
7083     {
7084       tree position = TREE_VALUE (args);
7085
7086       if (TREE_CODE (position) != INTEGER_CST
7087           || TREE_INT_CST_HIGH (position) 
7088           || TREE_INT_CST_LOW (position) < 1
7089           || TREE_INT_CST_LOW (position) > arg_count )
7090         {
7091           warning (OPT_Wattributes, 
7092                    "alloc_size parameter outside range");
7093           *no_add_attrs = true;
7094           return NULL_TREE;
7095         }
7096     }
7097   return NULL_TREE;
7098 }
7099
7100 /* Handle a "returns_twice" attribute; arguments as in
7101    struct attribute_spec.handler.  */
7102
7103 static tree
7104 handle_returns_twice_attribute (tree *node, tree name, tree ARG_UNUSED (args),
7105                          int ARG_UNUSED (flags), bool *no_add_attrs)
7106 {
7107   if (TREE_CODE (*node) == FUNCTION_DECL)
7108     DECL_IS_RETURNS_TWICE (*node) = 1;
7109   else
7110     {
7111       warning (OPT_Wattributes, "%qE attribute ignored", name);
7112       *no_add_attrs = true;
7113     }
7114
7115   return NULL_TREE;
7116 }
7117
7118 /* Handle a "no_limit_stack" attribute; arguments as in
7119    struct attribute_spec.handler.  */
7120
7121 static tree
7122 handle_no_limit_stack_attribute (tree *node, tree name,
7123                                  tree ARG_UNUSED (args),
7124                                  int ARG_UNUSED (flags),
7125                                  bool *no_add_attrs)
7126 {
7127   tree decl = *node;
7128
7129   if (TREE_CODE (decl) != FUNCTION_DECL)
7130     {
7131       error ("%J%qE attribute applies only to functions", decl, name);
7132       *no_add_attrs = true;
7133     }
7134   else if (DECL_INITIAL (decl))
7135     {
7136       error ("%Jcan%'t set %qE attribute after definition", decl, name);
7137       *no_add_attrs = true;
7138     }
7139   else
7140     DECL_NO_LIMIT_STACK (decl) = 1;
7141
7142   return NULL_TREE;
7143 }
7144
7145 /* Handle a "pure" attribute; arguments as in
7146    struct attribute_spec.handler.  */
7147
7148 static tree
7149 handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
7150                        int ARG_UNUSED (flags), bool *no_add_attrs)
7151 {
7152   if (TREE_CODE (*node) == FUNCTION_DECL)
7153     DECL_PURE_P (*node) = 1;
7154   /* ??? TODO: Support types.  */
7155   else
7156     {
7157       warning (OPT_Wattributes, "%qE attribute ignored", name);
7158       *no_add_attrs = true;
7159     }
7160
7161   return NULL_TREE;
7162 }
7163
7164 /* Handle a "no vops" attribute; arguments as in
7165    struct attribute_spec.handler.  */
7166
7167 static tree
7168 handle_novops_attribute (tree *node, tree ARG_UNUSED (name),
7169                          tree ARG_UNUSED (args), int ARG_UNUSED (flags),
7170                          bool *ARG_UNUSED (no_add_attrs))
7171 {
7172   gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
7173   DECL_IS_NOVOPS (*node) = 1;
7174   return NULL_TREE;
7175 }
7176
7177 /* Handle a "deprecated" attribute; arguments as in
7178    struct attribute_spec.handler.  */
7179
7180 static tree
7181 handle_deprecated_attribute (tree *node, tree name,
7182                              tree args, int flags,
7183                              bool *no_add_attrs)
7184 {
7185   tree type = NULL_TREE;
7186   int warn = 0;
7187   tree what = NULL_TREE;
7188
7189   if (!args)
7190     *no_add_attrs = true;
7191   else if (TREE_CODE (TREE_VALUE (args)) != STRING_CST)
7192     {
7193       error ("deprecated message is not a string");
7194       *no_add_attrs = true;
7195     }
7196
7197   if (DECL_P (*node))
7198     {
7199       tree decl = *node;
7200       type = TREE_TYPE (decl);
7201
7202       if (TREE_CODE (decl) == TYPE_DECL
7203           || TREE_CODE (decl) == PARM_DECL
7204           || TREE_CODE (decl) == VAR_DECL
7205           || TREE_CODE (decl) == FUNCTION_DECL
7206           || TREE_CODE (decl) == FIELD_DECL)
7207         TREE_DEPRECATED (decl) = 1;
7208       else
7209         warn = 1;
7210     }
7211   else if (TYPE_P (*node))
7212     {
7213       if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
7214         *node = build_variant_type_copy (*node);
7215       TREE_DEPRECATED (*node) = 1;
7216       type = *node;
7217     }
7218   else
7219     warn = 1;
7220
7221   if (warn)
7222     {
7223       *no_add_attrs = true;
7224       if (type && TYPE_NAME (type))
7225         {
7226           if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
7227             what = TYPE_NAME (*node);
7228           else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
7229                    && DECL_NAME (TYPE_NAME (type)))
7230             what = DECL_NAME (TYPE_NAME (type));
7231         }
7232       if (what)
7233         warning (OPT_Wattributes, "%qE attribute ignored for %qE", name, what);
7234       else
7235         warning (OPT_Wattributes, "%qE attribute ignored", name);
7236     }
7237
7238   return NULL_TREE;
7239 }
7240
7241 /* Handle a "vector_size" attribute; arguments as in
7242    struct attribute_spec.handler.  */
7243
7244 static tree
7245 handle_vector_size_attribute (tree *node, tree name, tree args,
7246                               int ARG_UNUSED (flags),
7247                               bool *no_add_attrs)
7248 {
7249   unsigned HOST_WIDE_INT vecsize, nunits;
7250   enum machine_mode orig_mode;
7251   tree type = *node, new_type, size;
7252
7253   *no_add_attrs = true;
7254
7255   size = TREE_VALUE (args);
7256
7257   if (!host_integerp (size, 1))
7258     {
7259       warning (OPT_Wattributes, "%qE attribute ignored", name);
7260       return NULL_TREE;
7261     }
7262
7263   /* Get the vector size (in bytes).  */
7264   vecsize = tree_low_cst (size, 1);
7265
7266   /* We need to provide for vector pointers, vector arrays, and
7267      functions returning vectors.  For example:
7268
7269        __attribute__((vector_size(16))) short *foo;
7270
7271      In this case, the mode is SI, but the type being modified is
7272      HI, so we need to look further.  */
7273
7274   while (POINTER_TYPE_P (type)
7275          || TREE_CODE (type) == FUNCTION_TYPE
7276          || TREE_CODE (type) == METHOD_TYPE
7277          || TREE_CODE (type) == ARRAY_TYPE
7278          || TREE_CODE (type) == OFFSET_TYPE)
7279     type = TREE_TYPE (type);
7280
7281   /* Get the mode of the type being modified.  */
7282   orig_mode = TYPE_MODE (type);
7283
7284   if ((!INTEGRAL_TYPE_P (type)
7285        && !SCALAR_FLOAT_TYPE_P (type)
7286        && !FIXED_POINT_TYPE_P (type))
7287       || (!SCALAR_FLOAT_MODE_P (orig_mode)
7288           && GET_MODE_CLASS (orig_mode) != MODE_INT
7289           && !ALL_SCALAR_FIXED_POINT_MODE_P (orig_mode))
7290       || !host_integerp (TYPE_SIZE_UNIT (type), 1)
7291       || TREE_CODE (type) == BOOLEAN_TYPE)
7292     {
7293       error ("invalid vector type for attribute %qE", name);
7294       return NULL_TREE;
7295     }
7296
7297   if (vecsize % tree_low_cst (TYPE_SIZE_UNIT (type), 1))
7298     {
7299       error ("vector size not an integral multiple of component size");
7300       return NULL;
7301     }
7302
7303   if (vecsize == 0)
7304     {
7305       error ("zero vector size");
7306       return NULL;
7307     }
7308
7309   /* Calculate how many units fit in the vector.  */
7310   nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
7311   if (nunits & (nunits - 1))
7312     {
7313       error ("number of components of the vector not a power of two");
7314       return NULL_TREE;
7315     }
7316
7317   new_type = build_vector_type (type, nunits);
7318
7319   /* Build back pointers if needed.  */
7320   *node = lang_hooks.types.reconstruct_complex_type (*node, new_type);
7321
7322   return NULL_TREE;
7323 }
7324
7325 /* Handle the "nonnull" attribute.  */
7326 static tree
7327 handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
7328                           tree args, int ARG_UNUSED (flags),
7329                           bool *no_add_attrs)
7330 {
7331   tree type = *node;
7332   unsigned HOST_WIDE_INT attr_arg_num;
7333
7334   /* If no arguments are specified, all pointer arguments should be
7335      non-null.  Verify a full prototype is given so that the arguments
7336      will have the correct types when we actually check them later.  */
7337   if (!args)
7338     {
7339       if (!TYPE_ARG_TYPES (type))
7340         {
7341           error ("nonnull attribute without arguments on a non-prototype");
7342           *no_add_attrs = true;
7343         }
7344       return NULL_TREE;
7345     }
7346
7347   /* Argument list specified.  Verify that each argument number references
7348      a pointer argument.  */
7349   for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
7350     {
7351       tree argument;
7352       unsigned HOST_WIDE_INT arg_num = 0, ck_num;
7353
7354       if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
7355         {
7356           error ("nonnull argument has invalid operand number (argument %lu)",
7357                  (unsigned long) attr_arg_num);
7358           *no_add_attrs = true;
7359           return NULL_TREE;
7360         }
7361
7362       argument = TYPE_ARG_TYPES (type);
7363       if (argument)
7364         {
7365           for (ck_num = 1; ; ck_num++)
7366             {
7367               if (!argument || ck_num == arg_num)
7368                 break;
7369               argument = TREE_CHAIN (argument);
7370             }
7371
7372           if (!argument
7373               || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
7374             {
7375               error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
7376                      (unsigned long) attr_arg_num, (unsigned long) arg_num);
7377               *no_add_attrs = true;
7378               return NULL_TREE;
7379             }
7380
7381           if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
7382             {
7383               error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
7384                    (unsigned long) attr_arg_num, (unsigned long) arg_num);
7385               *no_add_attrs = true;
7386               return NULL_TREE;
7387             }
7388         }
7389     }
7390
7391   return NULL_TREE;
7392 }
7393
7394 /* Check the argument list of a function call for null in argument slots
7395    that are marked as requiring a non-null pointer argument.  The NARGS
7396    arguments are passed in the array ARGARRAY.
7397 */
7398
7399 static void
7400 check_function_nonnull (tree attrs, int nargs, tree *argarray)
7401 {
7402   tree a, args;
7403   int i;
7404
7405   for (a = attrs; a; a = TREE_CHAIN (a))
7406     {
7407       if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
7408         {
7409           args = TREE_VALUE (a);
7410
7411           /* Walk the argument list.  If we encounter an argument number we
7412              should check for non-null, do it.  If the attribute has no args,
7413              then every pointer argument is checked (in which case the check
7414              for pointer type is done in check_nonnull_arg).  */
7415           for (i = 0; i < nargs; i++)
7416             {
7417               if (!args || nonnull_check_p (args, i + 1))
7418                 check_function_arguments_recurse (check_nonnull_arg, NULL,
7419                                                   argarray[i],
7420                                                   i + 1);
7421             }
7422         }
7423     }
7424 }
7425
7426 /* Check that the Nth argument of a function call (counting backwards
7427    from the end) is a (pointer)0.  The NARGS arguments are passed in the
7428    array ARGARRAY.  */
7429
7430 static void
7431 check_function_sentinel (tree attrs, int nargs, tree *argarray, tree typelist)
7432 {
7433   tree attr = lookup_attribute ("sentinel", attrs);
7434
7435   if (attr)
7436     {
7437       int len = 0;
7438       int pos = 0;
7439       tree sentinel;
7440
7441       /* Skip over the named arguments.  */
7442       while (typelist && len < nargs)
7443         {
7444           typelist = TREE_CHAIN (typelist);
7445           len++;
7446         }
7447
7448       if (TREE_VALUE (attr))
7449         {
7450           tree p = TREE_VALUE (TREE_VALUE (attr));
7451           pos = TREE_INT_CST_LOW (p);
7452         }
7453
7454       /* The sentinel must be one of the varargs, i.e.
7455          in position >= the number of fixed arguments.  */
7456       if ((nargs - 1 - pos) < len)
7457         {
7458           warning (OPT_Wformat,
7459                    "not enough variable arguments to fit a sentinel");
7460           return;
7461         }
7462
7463       /* Validate the sentinel.  */
7464       sentinel = argarray[nargs - 1 - pos];
7465       if ((!POINTER_TYPE_P (TREE_TYPE (sentinel))
7466            || !integer_zerop (sentinel))
7467           /* Although __null (in C++) is only an integer we allow it
7468              nevertheless, as we are guaranteed that it's exactly
7469              as wide as a pointer, and we don't want to force
7470              users to cast the NULL they have written there.
7471              We warn with -Wstrict-null-sentinel, though.  */
7472           && (warn_strict_null_sentinel || null_node != sentinel))
7473         warning (OPT_Wformat, "missing sentinel in function call");
7474     }
7475 }
7476
7477 /* Helper for check_function_nonnull; given a list of operands which
7478    must be non-null in ARGS, determine if operand PARAM_NUM should be
7479    checked.  */
7480
7481 static bool
7482 nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
7483 {
7484   unsigned HOST_WIDE_INT arg_num = 0;
7485
7486   for (; args; args = TREE_CHAIN (args))
7487     {
7488       bool found = get_nonnull_operand (TREE_VALUE (args), &arg_num);
7489
7490       gcc_assert (found);
7491
7492       if (arg_num == param_num)
7493         return true;
7494     }
7495   return false;
7496 }
7497
7498 /* Check that the function argument PARAM (which is operand number
7499    PARAM_NUM) is non-null.  This is called by check_function_nonnull
7500    via check_function_arguments_recurse.  */
7501
7502 static void
7503 check_nonnull_arg (void * ARG_UNUSED (ctx), tree param,
7504                    unsigned HOST_WIDE_INT param_num)
7505 {
7506   /* Just skip checking the argument if it's not a pointer.  This can
7507      happen if the "nonnull" attribute was given without an operand
7508      list (which means to check every pointer argument).  */
7509
7510   if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
7511     return;
7512
7513   if (integer_zerop (param))
7514     warning (OPT_Wnonnull, "null argument where non-null required "
7515              "(argument %lu)", (unsigned long) param_num);
7516 }
7517
7518 /* Helper for nonnull attribute handling; fetch the operand number
7519    from the attribute argument list.  */
7520
7521 static bool
7522 get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
7523 {
7524   /* Verify the arg number is a constant.  */
7525   if (TREE_CODE (arg_num_expr) != INTEGER_CST
7526       || TREE_INT_CST_HIGH (arg_num_expr) != 0)
7527     return false;
7528
7529   *valp = TREE_INT_CST_LOW (arg_num_expr);
7530   return true;
7531 }
7532
7533 /* Handle a "nothrow" attribute; arguments as in
7534    struct attribute_spec.handler.  */
7535
7536 static tree
7537 handle_nothrow_attribute (tree *node, tree name, tree ARG_UNUSED (args),
7538                           int ARG_UNUSED (flags), bool *no_add_attrs)
7539 {
7540   if (TREE_CODE (*node) == FUNCTION_DECL)
7541     TREE_NOTHROW (*node) = 1;
7542   /* ??? TODO: Support types.  */
7543   else
7544     {
7545       warning (OPT_Wattributes, "%qE attribute ignored", name);
7546       *no_add_attrs = true;
7547     }
7548
7549   return NULL_TREE;
7550 }
7551
7552 /* Handle a "cleanup" attribute; arguments as in
7553    struct attribute_spec.handler.  */
7554
7555 static tree
7556 handle_cleanup_attribute (tree *node, tree name, tree args,
7557                           int ARG_UNUSED (flags), bool *no_add_attrs)
7558 {
7559   tree decl = *node;
7560   tree cleanup_id, cleanup_decl;
7561
7562   /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
7563      for global destructors in C++.  This requires infrastructure that
7564      we don't have generically at the moment.  It's also not a feature
7565      we'd be missing too much, since we do have attribute constructor.  */
7566   if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
7567     {
7568       warning (OPT_Wattributes, "%qE attribute ignored", name);
7569       *no_add_attrs = true;
7570       return NULL_TREE;
7571     }
7572
7573   /* Verify that the argument is a function in scope.  */
7574   /* ??? We could support pointers to functions here as well, if
7575      that was considered desirable.  */
7576   cleanup_id = TREE_VALUE (args);
7577   if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
7578     {
7579       error ("cleanup argument not an identifier");
7580       *no_add_attrs = true;
7581       return NULL_TREE;
7582     }
7583   cleanup_decl = lookup_name (cleanup_id);
7584   if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
7585     {
7586       error ("cleanup argument not a function");
7587       *no_add_attrs = true;
7588       return NULL_TREE;
7589     }
7590
7591   /* That the function has proper type is checked with the
7592      eventual call to build_function_call.  */
7593
7594   return NULL_TREE;
7595 }
7596
7597 /* Handle a "warn_unused_result" attribute.  No special handling.  */
7598
7599 static tree
7600 handle_warn_unused_result_attribute (tree *node, tree name,
7601                                tree ARG_UNUSED (args),
7602                                int ARG_UNUSED (flags), bool *no_add_attrs)
7603 {
7604   /* Ignore the attribute for functions not returning any value.  */
7605   if (VOID_TYPE_P (TREE_TYPE (*node)))
7606     {
7607       warning (OPT_Wattributes, "%qE attribute ignored", name);
7608       *no_add_attrs = true;
7609     }
7610
7611   return NULL_TREE;
7612 }
7613
7614 /* Handle a "sentinel" attribute.  */
7615
7616 static tree
7617 handle_sentinel_attribute (tree *node, tree name, tree args,
7618                            int ARG_UNUSED (flags), bool *no_add_attrs)
7619 {
7620   tree params = TYPE_ARG_TYPES (*node);
7621
7622   if (!params)
7623     {
7624       warning (OPT_Wattributes,
7625                "%qE attribute requires prototypes with named arguments", name);
7626       *no_add_attrs = true;
7627     }
7628   else
7629     {
7630       while (TREE_CHAIN (params))
7631         params = TREE_CHAIN (params);
7632
7633       if (VOID_TYPE_P (TREE_VALUE (params)))
7634         {
7635           warning (OPT_Wattributes,
7636                    "%qE attribute only applies to variadic functions", name);
7637           *no_add_attrs = true;
7638         }
7639     }
7640
7641   if (args)
7642     {
7643       tree position = TREE_VALUE (args);
7644
7645       if (TREE_CODE (position) != INTEGER_CST)
7646         {
7647           warning (OPT_Wattributes, 
7648                    "requested position is not an integer constant");
7649           *no_add_attrs = true;
7650         }
7651       else
7652         {
7653           if (tree_int_cst_lt (position, integer_zero_node))
7654             {
7655               warning (OPT_Wattributes,
7656                        "requested position is less than zero");
7657               *no_add_attrs = true;
7658             }
7659         }
7660     }
7661
7662   return NULL_TREE;
7663 }
7664
7665 /* Handle a "type_generic" attribute.  */
7666
7667 static tree
7668 handle_type_generic_attribute (tree *node, tree ARG_UNUSED (name),
7669                                tree ARG_UNUSED (args), int ARG_UNUSED (flags),
7670                                bool * ARG_UNUSED (no_add_attrs))
7671 {
7672   tree params;
7673   
7674   /* Ensure we have a function type.  */
7675   gcc_assert (TREE_CODE (*node) == FUNCTION_TYPE);
7676   
7677   params = TYPE_ARG_TYPES (*node);
7678   while (params && ! VOID_TYPE_P (TREE_VALUE (params)))
7679     params = TREE_CHAIN (params);
7680
7681   /* Ensure we have a variadic function.  */
7682   gcc_assert (!params);
7683
7684   return NULL_TREE;
7685 }
7686
7687 /* Handle a "target" attribute.  */
7688
7689 static tree
7690 handle_target_attribute (tree *node, tree name, tree args, int flags,
7691                          bool *no_add_attrs)
7692 {
7693   /* Ensure we have a function type.  */
7694   if (TREE_CODE (*node) != FUNCTION_DECL)
7695     {
7696       warning (OPT_Wattributes, "%qE attribute ignored", name);
7697       *no_add_attrs = true;
7698     }
7699   else if (! targetm.target_option.valid_attribute_p (*node, name, args,
7700                                                       flags))
7701     *no_add_attrs = true;
7702
7703   return NULL_TREE;
7704 }
7705
7706 /* Arguments being collected for optimization.  */
7707 typedef const char *const_char_p;               /* For DEF_VEC_P.  */
7708 DEF_VEC_P(const_char_p);
7709 DEF_VEC_ALLOC_P(const_char_p, gc);
7710 static GTY(()) VEC(const_char_p, gc) *optimize_args;
7711
7712
7713 /* Inner function to convert a TREE_LIST to argv string to parse the optimize
7714    options in ARGS.  ATTR_P is true if this is for attribute(optimize), and
7715    false for #pragma GCC optimize.  */
7716
7717 bool
7718 parse_optimize_options (tree args, bool attr_p)
7719 {
7720   bool ret = true;
7721   unsigned opt_argc;
7722   unsigned i;
7723   int saved_flag_strict_aliasing;
7724   const char **opt_argv;
7725   tree ap;
7726
7727   /* Build up argv vector.  Just in case the string is stored away, use garbage
7728      collected strings.  */
7729   VEC_truncate (const_char_p, optimize_args, 0);
7730   VEC_safe_push (const_char_p, gc, optimize_args, NULL);
7731
7732   for (ap = args; ap != NULL_TREE; ap = TREE_CHAIN (ap))
7733     {
7734       tree value = TREE_VALUE (ap);
7735
7736       if (TREE_CODE (value) == INTEGER_CST)
7737         {
7738           char buffer[20];
7739           sprintf (buffer, "-O%ld", (long) TREE_INT_CST_LOW (value));
7740           VEC_safe_push (const_char_p, gc, optimize_args, ggc_strdup (buffer));
7741         }
7742
7743       else if (TREE_CODE (value) == STRING_CST)
7744         {
7745           /* Split string into multiple substrings.  */
7746           size_t len = TREE_STRING_LENGTH (value);
7747           char *p = ASTRDUP (TREE_STRING_POINTER (value));
7748           char *end = p + len;
7749           char *comma;
7750           char *next_p = p;
7751
7752           while (next_p != NULL)
7753             {
7754               size_t len2;
7755               char *q, *r;
7756
7757               p = next_p;
7758               comma = strchr (p, ',');
7759               if (comma)
7760                 {
7761                   len2 = comma - p;
7762                   *comma = '\0';
7763                   next_p = comma+1;
7764                 }
7765               else
7766                 {
7767                   len2 = end - p;
7768                   next_p = NULL;
7769                 }
7770
7771               r = q = (char *) ggc_alloc (len2 + 3);
7772
7773               /* If the user supplied -Oxxx or -fxxx, only allow -Oxxx or -fxxx
7774                  options.  */
7775               if (*p == '-' && p[1] != 'O' && p[1] != 'f')
7776                 {
7777                   ret = false;
7778                   if (attr_p)
7779                     warning (OPT_Wattributes,
7780                              "Bad option %s to optimize attribute.", p);
7781                   else
7782                     warning (OPT_Wpragmas,
7783                              "Bad option %s to pragma attribute", p);
7784                   continue;
7785                 }
7786
7787               if (*p != '-')
7788                 {
7789                   *r++ = '-';
7790
7791                   /* Assume that Ox is -Ox, a numeric value is -Ox, a s by
7792                      itself is -Os, and any other switch begins with a -f.  */
7793                   if ((*p >= '0' && *p <= '9')
7794                       || (p[0] == 's' && p[1] == '\0'))
7795                     *r++ = 'O';
7796                   else if (*p != 'O')
7797                     *r++ = 'f';
7798                 }
7799
7800               memcpy (r, p, len2);
7801               r[len2] = '\0';
7802               VEC_safe_push (const_char_p, gc, optimize_args, q);
7803             }
7804
7805         }
7806     }
7807
7808   opt_argc = VEC_length (const_char_p, optimize_args);
7809   opt_argv = (const char **) alloca (sizeof (char *) * (opt_argc + 1));
7810
7811   for (i = 1; i < opt_argc; i++)
7812     opt_argv[i] = VEC_index (const_char_p, optimize_args, i);
7813
7814   saved_flag_strict_aliasing = flag_strict_aliasing;
7815
7816   /* Now parse the options.  */
7817   decode_options (opt_argc, opt_argv);
7818
7819   /* Don't allow changing -fstrict-aliasing.  */
7820   flag_strict_aliasing = saved_flag_strict_aliasing;
7821
7822   VEC_truncate (const_char_p, optimize_args, 0);
7823   return ret;
7824 }
7825
7826 /* For handling "optimize" attribute. arguments as in
7827    struct attribute_spec.handler.  */
7828
7829 static tree
7830 handle_optimize_attribute (tree *node, tree name, tree args,
7831                            int ARG_UNUSED (flags), bool *no_add_attrs)
7832 {
7833   /* Ensure we have a function type.  */
7834   if (TREE_CODE (*node) != FUNCTION_DECL)
7835     {
7836       warning (OPT_Wattributes, "%qE attribute ignored", name);
7837       *no_add_attrs = true;
7838     }
7839   else
7840     {
7841       struct cl_optimization cur_opts;
7842       tree old_opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node);
7843
7844       /* Save current options.  */
7845       cl_optimization_save (&cur_opts);
7846
7847       /* If we previously had some optimization options, use them as the
7848          default.  */
7849       if (old_opts)
7850         cl_optimization_restore (TREE_OPTIMIZATION (old_opts));
7851
7852       /* Parse options, and update the vector.  */
7853       parse_optimize_options (args, true);
7854       DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node)
7855         = build_optimization_node ();
7856
7857       /* Restore current options.  */
7858       cl_optimization_restore (&cur_opts);
7859     }
7860
7861   return NULL_TREE;
7862 }
7863 \f
7864 /* Check for valid arguments being passed to a function.
7865    ATTRS is a list of attributes.  There are NARGS arguments in the array
7866    ARGARRAY.  TYPELIST is the list of argument types for the function.
7867  */
7868 void
7869 check_function_arguments (tree attrs, int nargs, tree *argarray, tree typelist)
7870 {
7871   /* Check for null being passed in a pointer argument that must be
7872      non-null.  We also need to do this if format checking is enabled.  */
7873
7874   if (warn_nonnull)
7875     check_function_nonnull (attrs, nargs, argarray);
7876
7877   /* Check for errors in format strings.  */
7878
7879   if (warn_format || warn_missing_format_attribute)
7880     check_function_format (attrs, nargs, argarray);
7881
7882   if (warn_format)
7883     check_function_sentinel (attrs, nargs, argarray, typelist);
7884 }
7885
7886 /* Generic argument checking recursion routine.  PARAM is the argument to
7887    be checked.  PARAM_NUM is the number of the argument.  CALLBACK is invoked
7888    once the argument is resolved.  CTX is context for the callback.  */
7889 void
7890 check_function_arguments_recurse (void (*callback)
7891                                   (void *, tree, unsigned HOST_WIDE_INT),
7892                                   void *ctx, tree param,
7893                                   unsigned HOST_WIDE_INT param_num)
7894 {
7895   if (CONVERT_EXPR_P (param)
7896       && (TYPE_PRECISION (TREE_TYPE (param))
7897           == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (param, 0)))))
7898     {
7899       /* Strip coercion.  */
7900       check_function_arguments_recurse (callback, ctx,
7901                                         TREE_OPERAND (param, 0), param_num);
7902       return;
7903     }
7904
7905   if (TREE_CODE (param) == CALL_EXPR)
7906     {
7907       tree type = TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (param)));
7908       tree attrs;
7909       bool found_format_arg = false;
7910
7911       /* See if this is a call to a known internationalization function
7912          that modifies a format arg.  Such a function may have multiple
7913          format_arg attributes (for example, ngettext).  */
7914
7915       for (attrs = TYPE_ATTRIBUTES (type);
7916            attrs;
7917            attrs = TREE_CHAIN (attrs))
7918         if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
7919           {
7920             tree inner_arg;
7921             tree format_num_expr;
7922             int format_num;
7923             int i;
7924             call_expr_arg_iterator iter;
7925
7926             /* Extract the argument number, which was previously checked
7927                to be valid.  */
7928             format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
7929
7930             gcc_assert (TREE_CODE (format_num_expr) == INTEGER_CST
7931                         && !TREE_INT_CST_HIGH (format_num_expr));
7932
7933             format_num = TREE_INT_CST_LOW (format_num_expr);
7934
7935             for (inner_arg = first_call_expr_arg (param, &iter), i = 1;
7936                  inner_arg != 0;
7937                  inner_arg = next_call_expr_arg (&iter), i++)
7938               if (i == format_num)
7939                 {
7940                   check_function_arguments_recurse (callback, ctx,
7941                                                     inner_arg, param_num);
7942                   found_format_arg = true;
7943                   break;
7944                 }
7945           }
7946
7947       /* If we found a format_arg attribute and did a recursive check,
7948          we are done with checking this argument.  Otherwise, we continue
7949          and this will be considered a non-literal.  */
7950       if (found_format_arg)
7951         return;
7952     }
7953
7954   if (TREE_CODE (param) == COND_EXPR)
7955     {
7956       /* Check both halves of the conditional expression.  */
7957       check_function_arguments_recurse (callback, ctx,
7958                                         TREE_OPERAND (param, 1), param_num);
7959       check_function_arguments_recurse (callback, ctx,
7960                                         TREE_OPERAND (param, 2), param_num);
7961       return;
7962     }
7963
7964   (*callback) (ctx, param, param_num);
7965 }
7966
7967 /* Checks the number of arguments NARGS against the required number
7968    REQUIRED and issues an error if there is a mismatch.  Returns true
7969    if the number of arguments is correct, otherwise false.  */
7970
7971 static bool
7972 validate_nargs (tree fndecl, int nargs, int required)
7973 {
7974   if (nargs < required)
7975     {
7976       error ("not enough arguments to function %qE", fndecl);
7977       return false;
7978     }
7979   else if (nargs > required)
7980     {
7981       error ("too many arguments to function %qE", fndecl);
7982       return false;
7983     }
7984   return true;
7985 }
7986
7987 /* Verifies the NARGS arguments ARGS to the builtin function FNDECL.
7988    Returns false if there was an error, otherwise true.  */
7989
7990 bool
7991 check_builtin_function_arguments (tree fndecl, int nargs, tree *args)
7992 {
7993   if (!DECL_BUILT_IN (fndecl)
7994       || DECL_BUILT_IN_CLASS (fndecl) != BUILT_IN_NORMAL)
7995     return true;
7996
7997   switch (DECL_FUNCTION_CODE (fndecl))
7998     {
7999     case BUILT_IN_CONSTANT_P:
8000       return validate_nargs (fndecl, nargs, 1);
8001
8002     case BUILT_IN_ISFINITE:
8003     case BUILT_IN_ISINF:
8004     case BUILT_IN_ISINF_SIGN:
8005     case BUILT_IN_ISNAN:
8006     case BUILT_IN_ISNORMAL:
8007       if (validate_nargs (fndecl, nargs, 1))
8008         {
8009           if (TREE_CODE (TREE_TYPE (args[0])) != REAL_TYPE)
8010             {
8011               error ("non-floating-point argument in call to "
8012                      "function %qE", fndecl);
8013               return false;
8014             }
8015           return true;
8016         }
8017       return false;
8018
8019     case BUILT_IN_ISGREATER:
8020     case BUILT_IN_ISGREATEREQUAL:
8021     case BUILT_IN_ISLESS:
8022     case BUILT_IN_ISLESSEQUAL:
8023     case BUILT_IN_ISLESSGREATER:
8024     case BUILT_IN_ISUNORDERED:
8025       if (validate_nargs (fndecl, nargs, 2))
8026         {
8027           enum tree_code code0, code1;
8028           code0 = TREE_CODE (TREE_TYPE (args[0]));
8029           code1 = TREE_CODE (TREE_TYPE (args[1]));
8030           if (!((code0 == REAL_TYPE && code1 == REAL_TYPE)
8031                 || (code0 == REAL_TYPE && code1 == INTEGER_TYPE)
8032                 || (code0 == INTEGER_TYPE && code1 == REAL_TYPE)))
8033             {
8034               error ("non-floating-point arguments in call to "
8035                      "function %qE", fndecl);
8036               return false;
8037             }
8038           return true;
8039         }
8040       return false;
8041
8042     case BUILT_IN_FPCLASSIFY:
8043       if (validate_nargs (fndecl, nargs, 6))
8044         {
8045           unsigned i;
8046           
8047           for (i=0; i<5; i++)
8048             if (TREE_CODE (args[i]) != INTEGER_CST)
8049               {
8050                 error ("non-const integer argument %u in call to function %qE",
8051                        i+1, fndecl);
8052                 return false;
8053               }
8054
8055           if (TREE_CODE (TREE_TYPE (args[5])) != REAL_TYPE)
8056             {
8057               error ("non-floating-point argument in call to function %qE",
8058                      fndecl);
8059               return false;
8060             }
8061           return true;
8062         }
8063       return false;
8064
8065     default:
8066       return true;
8067     }
8068 }
8069
8070 /* Function to help qsort sort FIELD_DECLs by name order.  */
8071
8072 int
8073 field_decl_cmp (const void *x_p, const void *y_p)
8074 {
8075   const tree *const x = (const tree *const) x_p;
8076   const tree *const y = (const tree *const) y_p;
8077
8078   if (DECL_NAME (*x) == DECL_NAME (*y))
8079     /* A nontype is "greater" than a type.  */
8080     return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
8081   if (DECL_NAME (*x) == NULL_TREE)
8082     return -1;
8083   if (DECL_NAME (*y) == NULL_TREE)
8084     return 1;
8085   if (DECL_NAME (*x) < DECL_NAME (*y))
8086     return -1;
8087   return 1;
8088 }
8089
8090 static struct {
8091   gt_pointer_operator new_value;
8092   void *cookie;
8093 } resort_data;
8094
8095 /* This routine compares two fields like field_decl_cmp but using the
8096 pointer operator in resort_data.  */
8097
8098 static int
8099 resort_field_decl_cmp (const void *x_p, const void *y_p)
8100 {
8101   const tree *const x = (const tree *const) x_p;
8102   const tree *const y = (const tree *const) y_p;
8103
8104   if (DECL_NAME (*x) == DECL_NAME (*y))
8105     /* A nontype is "greater" than a type.  */
8106     return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
8107   if (DECL_NAME (*x) == NULL_TREE)
8108     return -1;
8109   if (DECL_NAME (*y) == NULL_TREE)
8110     return 1;
8111   {
8112     tree d1 = DECL_NAME (*x);
8113     tree d2 = DECL_NAME (*y);
8114     resort_data.new_value (&d1, resort_data.cookie);
8115     resort_data.new_value (&d2, resort_data.cookie);
8116     if (d1 < d2)
8117       return -1;
8118   }
8119   return 1;
8120 }
8121
8122 /* Resort DECL_SORTED_FIELDS because pointers have been reordered.  */
8123
8124 void
8125 resort_sorted_fields (void *obj,
8126                       void * ARG_UNUSED (orig_obj),
8127                       gt_pointer_operator new_value,
8128                       void *cookie)
8129 {
8130   struct sorted_fields_type *sf = (struct sorted_fields_type *) obj;
8131   resort_data.new_value = new_value;
8132   resort_data.cookie = cookie;
8133   qsort (&sf->elts[0], sf->len, sizeof (tree),
8134          resort_field_decl_cmp);
8135 }
8136
8137 /* Subroutine of c_parse_error.
8138    Return the result of concatenating LHS and RHS. RHS is really
8139    a string literal, its first character is indicated by RHS_START and
8140    RHS_SIZE is its length (including the terminating NUL character).
8141
8142    The caller is responsible for deleting the returned pointer.  */
8143
8144 static char *
8145 catenate_strings (const char *lhs, const char *rhs_start, int rhs_size)
8146 {
8147   const int lhs_size = strlen (lhs);
8148   char *result = XNEWVEC (char, lhs_size + rhs_size);
8149   strncpy (result, lhs, lhs_size);
8150   strncpy (result + lhs_size, rhs_start, rhs_size);
8151   return result;
8152 }
8153
8154 /* Issue the error given by GMSGID, indicating that it occurred before
8155    TOKEN, which had the associated VALUE.  */
8156
8157 void
8158 c_parse_error (const char *gmsgid, enum cpp_ttype token_type, 
8159                tree value, unsigned char token_flags)
8160 {
8161 #define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
8162
8163   char *message = NULL;
8164
8165   if (token_type == CPP_EOF)
8166     message = catenate_messages (gmsgid, " at end of input");
8167   else if (token_type == CPP_CHAR 
8168            || token_type == CPP_WCHAR 
8169            || token_type == CPP_CHAR16
8170            || token_type == CPP_CHAR32)
8171     {
8172       unsigned int val = TREE_INT_CST_LOW (value);
8173       const char *prefix;
8174
8175       switch (token_type)
8176         {
8177         default:
8178           prefix = "";
8179           break;
8180         case CPP_WCHAR:
8181           prefix = "L";
8182           break;
8183         case CPP_CHAR16:
8184           prefix = "u";
8185           break;
8186         case CPP_CHAR32:
8187           prefix = "U";
8188           break;
8189         }
8190
8191       if (val <= UCHAR_MAX && ISGRAPH (val))
8192         message = catenate_messages (gmsgid, " before %s'%c'");
8193       else
8194         message = catenate_messages (gmsgid, " before %s'\\x%x'");
8195
8196       error (message, prefix, val);
8197       free (message);
8198       message = NULL;
8199     }
8200   else if (token_type == CPP_STRING 
8201            || token_type == CPP_WSTRING 
8202            || token_type == CPP_STRING16
8203            || token_type == CPP_STRING32)
8204     message = catenate_messages (gmsgid, " before string constant");
8205   else if (token_type == CPP_NUMBER)
8206     message = catenate_messages (gmsgid, " before numeric constant");
8207   else if (token_type == CPP_NAME)
8208     {
8209       message = catenate_messages (gmsgid, " before %qE");
8210       error (message, value);
8211       free (message);
8212       message = NULL;
8213     }
8214   else if (token_type == CPP_PRAGMA)
8215     message = catenate_messages (gmsgid, " before %<#pragma%>");
8216   else if (token_type == CPP_PRAGMA_EOL)
8217     message = catenate_messages (gmsgid, " before end of line");
8218   else if (token_type < N_TTYPES)
8219     {
8220       message = catenate_messages (gmsgid, " before %qs token");
8221       error (message, cpp_type2name (token_type, token_flags));
8222       free (message);
8223       message = NULL;
8224     }
8225   else
8226     error (gmsgid);
8227
8228   if (message)
8229     {
8230       error (message);
8231       free (message);
8232     }
8233 #undef catenate_messages
8234 }
8235
8236 /* Callback from cpp_error for PFILE to print diagnostics from the
8237    preprocessor.  The diagnostic is of type LEVEL, at location
8238    LOCATION unless this is after lexing and the compiler's location
8239    should be used instead, with column number possibly overridden by
8240    COLUMN_OVERRIDE if not zero; MSG is the translated message and AP
8241    the arguments.  Returns true if a diagnostic was emitted, false
8242    otherwise.  */
8243
8244 bool
8245 c_cpp_error (cpp_reader *pfile ATTRIBUTE_UNUSED, int level,
8246              location_t location, unsigned int column_override,
8247              const char *msg, va_list *ap)
8248 {
8249   diagnostic_info diagnostic;
8250   diagnostic_t dlevel;
8251   int save_warn_system_headers = warn_system_headers;
8252   bool ret;
8253
8254   switch (level)
8255     {
8256     case CPP_DL_WARNING_SYSHDR:
8257       if (flag_no_output)
8258         return false;
8259       warn_system_headers = 1;
8260       /* Fall through.  */
8261     case CPP_DL_WARNING:
8262       if (flag_no_output)
8263         return false;
8264       dlevel = DK_WARNING;
8265       break;
8266     case CPP_DL_PEDWARN:
8267       if (flag_no_output && !flag_pedantic_errors)
8268         return false;
8269       dlevel = DK_PEDWARN;
8270       break;
8271     case CPP_DL_ERROR:
8272       dlevel = DK_ERROR;
8273       break;
8274     case CPP_DL_ICE:
8275       dlevel = DK_ICE;
8276       break;
8277     case CPP_DL_NOTE:
8278       dlevel = DK_NOTE;
8279       break;
8280     case CPP_DL_FATAL:
8281       dlevel = DK_FATAL;
8282       break;
8283     default:
8284       gcc_unreachable ();
8285     }
8286   if (done_lexing)
8287     location = input_location;
8288   diagnostic_set_info_translated (&diagnostic, msg, ap,
8289                                   location, dlevel);
8290   if (column_override)
8291     diagnostic_override_column (&diagnostic, column_override);
8292   ret = report_diagnostic (&diagnostic);
8293   if (level == CPP_DL_WARNING_SYSHDR)
8294     warn_system_headers = save_warn_system_headers;
8295   return ret;
8296 }
8297
8298 /* Walk a gimplified function and warn for functions whose return value is
8299    ignored and attribute((warn_unused_result)) is set.  This is done before
8300    inlining, so we don't have to worry about that.  */
8301
8302 void
8303 c_warn_unused_result (gimple_seq seq)
8304 {
8305   tree fdecl, ftype;
8306   gimple_stmt_iterator i;
8307
8308   for (i = gsi_start (seq); !gsi_end_p (i); gsi_next (&i))
8309     {
8310       gimple g = gsi_stmt (i);
8311
8312       switch (gimple_code (g))
8313         {
8314         case GIMPLE_BIND:
8315           c_warn_unused_result (gimple_bind_body (g));
8316           break;
8317         case GIMPLE_TRY:
8318           c_warn_unused_result (gimple_try_eval (g));
8319           c_warn_unused_result (gimple_try_cleanup (g));
8320           break;
8321         case GIMPLE_CATCH:
8322           c_warn_unused_result (gimple_catch_handler (g));
8323           break;
8324         case GIMPLE_EH_FILTER:
8325           c_warn_unused_result (gimple_eh_filter_failure (g));
8326           break;
8327
8328         case GIMPLE_CALL:
8329           if (gimple_call_lhs (g))
8330             break;
8331
8332           /* This is a naked call, as opposed to a GIMPLE_CALL with an
8333              LHS.  All calls whose value is ignored should be
8334              represented like this.  Look for the attribute.  */
8335           fdecl = gimple_call_fndecl (g);
8336           ftype = TREE_TYPE (TREE_TYPE (gimple_call_fn (g)));
8337
8338           if (lookup_attribute ("warn_unused_result", TYPE_ATTRIBUTES (ftype)))
8339             {
8340               location_t loc = gimple_location (g);
8341
8342               if (fdecl)
8343                 warning (0, "%Hignoring return value of %qD, "
8344                          "declared with attribute warn_unused_result",
8345                          &loc, fdecl);
8346               else
8347                 warning (0, "%Hignoring return value of function "
8348                          "declared with attribute warn_unused_result",
8349                          &loc);
8350             }
8351           break;
8352
8353         default:
8354           /* Not a container, not a call, or a call whose value is used.  */
8355           break;
8356         }
8357     }
8358 }
8359
8360 /* Convert a character from the host to the target execution character
8361    set.  cpplib handles this, mostly.  */
8362
8363 HOST_WIDE_INT
8364 c_common_to_target_charset (HOST_WIDE_INT c)
8365 {
8366   /* Character constants in GCC proper are sign-extended under -fsigned-char,
8367      zero-extended under -fno-signed-char.  cpplib insists that characters
8368      and character constants are always unsigned.  Hence we must convert
8369      back and forth.  */
8370   cppchar_t uc = ((cppchar_t)c) & ((((cppchar_t)1) << CHAR_BIT)-1);
8371
8372   uc = cpp_host_to_exec_charset (parse_in, uc);
8373
8374   if (flag_signed_char)
8375     return ((HOST_WIDE_INT)uc) << (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE)
8376                                >> (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE);
8377   else
8378     return uc;
8379 }
8380
8381 /* Build the result of __builtin_offsetof.  EXPR is a nested sequence of
8382    component references, with STOP_REF, or alternatively an INDIRECT_REF of
8383    NULL, at the bottom; much like the traditional rendering of offsetof as a
8384    macro.  Returns the folded and properly cast result.  */
8385
8386 static tree
8387 fold_offsetof_1 (tree expr, tree stop_ref)
8388 {
8389   enum tree_code code = PLUS_EXPR;
8390   tree base, off, t;
8391
8392   if (expr == stop_ref && TREE_CODE (expr) != ERROR_MARK)
8393     return size_zero_node;
8394
8395   switch (TREE_CODE (expr))
8396     {
8397     case ERROR_MARK:
8398       return expr;
8399
8400     case VAR_DECL:
8401       error ("cannot apply %<offsetof%> to static data member %qD", expr);
8402       return error_mark_node;
8403
8404     case CALL_EXPR:
8405     case TARGET_EXPR:
8406       error ("cannot apply %<offsetof%> when %<operator[]%> is overloaded");
8407       return error_mark_node;
8408
8409     case INTEGER_CST:
8410       gcc_assert (integer_zerop (expr));
8411       return size_zero_node;
8412
8413     case NOP_EXPR:
8414     case INDIRECT_REF:
8415       base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
8416       gcc_assert (base == error_mark_node || base == size_zero_node);
8417       return base;
8418
8419     case COMPONENT_REF:
8420       base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
8421       if (base == error_mark_node)
8422         return base;
8423
8424       t = TREE_OPERAND (expr, 1);
8425       if (DECL_C_BIT_FIELD (t))
8426         {
8427           error ("attempt to take address of bit-field structure "
8428                  "member %qD", t);
8429           return error_mark_node;
8430         }
8431       off = size_binop (PLUS_EXPR, DECL_FIELD_OFFSET (t),
8432                         size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t), 1)
8433                                   / BITS_PER_UNIT));
8434       break;
8435
8436     case ARRAY_REF:
8437       base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
8438       if (base == error_mark_node)
8439         return base;
8440
8441       t = TREE_OPERAND (expr, 1);
8442       if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
8443         {
8444           code = MINUS_EXPR;
8445           t = fold_build1 (NEGATE_EXPR, TREE_TYPE (t), t);
8446         }
8447       t = convert (sizetype, t);
8448       off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
8449       break;
8450
8451     case COMPOUND_EXPR:
8452       /* Handle static members of volatile structs.  */
8453       t = TREE_OPERAND (expr, 1);
8454       gcc_assert (TREE_CODE (t) == VAR_DECL);
8455       return fold_offsetof_1 (t, stop_ref);
8456
8457     default:
8458       gcc_unreachable ();
8459     }
8460
8461   return size_binop (code, base, off);
8462 }
8463
8464 tree
8465 fold_offsetof (tree expr, tree stop_ref)
8466 {
8467   /* Convert back from the internal sizetype to size_t.  */
8468   return convert (size_type_node, fold_offsetof_1 (expr, stop_ref));
8469 }
8470
8471 /* Print an error message for an invalid lvalue.  USE says
8472    how the lvalue is being used and so selects the error message.  */
8473
8474 void
8475 lvalue_error (enum lvalue_use use)
8476 {
8477   switch (use)
8478     {
8479     case lv_assign:
8480       error ("lvalue required as left operand of assignment");
8481       break;
8482     case lv_increment:
8483       error ("lvalue required as increment operand");
8484       break;
8485     case lv_decrement:
8486       error ("lvalue required as decrement operand");
8487       break;
8488     case lv_addressof:
8489       error ("lvalue required as unary %<&%> operand");
8490       break;
8491     case lv_asm:
8492       error ("lvalue required in asm statement");
8493       break;
8494     default:
8495       gcc_unreachable ();
8496     }
8497 }
8498 \f
8499 /* *PTYPE is an incomplete array.  Complete it with a domain based on
8500    INITIAL_VALUE.  If INITIAL_VALUE is not present, use 1 if DO_DEFAULT
8501    is true.  Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8502    2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty.  */
8503
8504 int
8505 complete_array_type (tree *ptype, tree initial_value, bool do_default)
8506 {
8507   tree maxindex, type, main_type, elt, unqual_elt;
8508   int failure = 0, quals;
8509   hashval_t hashcode = 0;
8510
8511   maxindex = size_zero_node;
8512   if (initial_value)
8513     {
8514       if (TREE_CODE (initial_value) == STRING_CST)
8515         {
8516           int eltsize
8517             = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8518           maxindex = size_int (TREE_STRING_LENGTH (initial_value)/eltsize - 1);
8519         }
8520       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8521         {
8522           VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
8523
8524           if (VEC_empty (constructor_elt, v))
8525             {
8526               if (pedantic)
8527                 failure = 3;
8528               maxindex = integer_minus_one_node;
8529             }
8530           else
8531             {
8532               tree curindex;
8533               unsigned HOST_WIDE_INT cnt;
8534               constructor_elt *ce;
8535               bool fold_p = false;
8536
8537               if (VEC_index (constructor_elt, v, 0)->index)
8538                 maxindex = fold_convert (sizetype,
8539                                          VEC_index (constructor_elt,
8540                                                     v, 0)->index);
8541               curindex = maxindex;
8542
8543               for (cnt = 1;
8544                    VEC_iterate (constructor_elt, v, cnt, ce);
8545                    cnt++)
8546                 {
8547                   bool curfold_p = false;
8548                   if (ce->index)
8549                     curindex = ce->index, curfold_p = true;
8550                   else
8551                     {
8552                       if (fold_p)
8553                         curindex = fold_convert (sizetype, curindex);
8554                       curindex = size_binop (PLUS_EXPR, curindex, size_one_node);
8555                     }
8556                   if (tree_int_cst_lt (maxindex, curindex))
8557                     maxindex = curindex, fold_p = curfold_p;
8558                 }
8559                if (fold_p)
8560                  maxindex = fold_convert (sizetype, maxindex);
8561             }
8562         }
8563       else
8564         {
8565           /* Make an error message unless that happened already.  */
8566           if (initial_value != error_mark_node)
8567             failure = 1;
8568         }
8569     }
8570   else
8571     {
8572       failure = 2;
8573       if (!do_default)
8574         return failure;
8575     }
8576
8577   type = *ptype;
8578   elt = TREE_TYPE (type);
8579   quals = TYPE_QUALS (strip_array_types (elt));
8580   if (quals == 0)
8581     unqual_elt = elt;
8582   else
8583     unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
8584
8585   /* Using build_distinct_type_copy and modifying things afterward instead
8586      of using build_array_type to create a new type preserves all of the
8587      TYPE_LANG_FLAG_? bits that the front end may have set.  */
8588   main_type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
8589   TREE_TYPE (main_type) = unqual_elt;
8590   TYPE_DOMAIN (main_type) = build_index_type (maxindex);
8591   layout_type (main_type);
8592
8593   /* Make sure we have the canonical MAIN_TYPE. */
8594   hashcode = iterative_hash_object (TYPE_HASH (unqual_elt), hashcode);
8595   hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (main_type)), 
8596                                     hashcode);
8597   main_type = type_hash_canon (hashcode, main_type);
8598
8599   /* Fix the canonical type.  */
8600   if (TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (main_type))
8601       || TYPE_STRUCTURAL_EQUALITY_P (TYPE_DOMAIN (main_type)))
8602     SET_TYPE_STRUCTURAL_EQUALITY (main_type);
8603   else if (TYPE_CANONICAL (TREE_TYPE (main_type)) != TREE_TYPE (main_type)
8604            || (TYPE_CANONICAL (TYPE_DOMAIN (main_type))
8605                != TYPE_DOMAIN (main_type)))
8606     TYPE_CANONICAL (main_type) 
8607       = build_array_type (TYPE_CANONICAL (TREE_TYPE (main_type)),
8608                           TYPE_CANONICAL (TYPE_DOMAIN (main_type)));
8609   else
8610     TYPE_CANONICAL (main_type) = main_type;
8611
8612   if (quals == 0)
8613     type = main_type;
8614   else
8615     type = c_build_qualified_type (main_type, quals);
8616
8617   if (COMPLETE_TYPE_P (type)
8618       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
8619       && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
8620     {
8621       error ("size of array is too large");
8622       /* If we proceed with the array type as it is, we'll eventually
8623          crash in tree_low_cst().  */
8624       type = error_mark_node;
8625     }
8626
8627   *ptype = type;
8628   return failure;
8629 }
8630
8631 \f
8632 /* Used to help initialize the builtin-types.def table.  When a type of
8633    the correct size doesn't exist, use error_mark_node instead of NULL.
8634    The later results in segfaults even when a decl using the type doesn't
8635    get invoked.  */
8636
8637 tree
8638 builtin_type_for_size (int size, bool unsignedp)
8639 {
8640   tree type = lang_hooks.types.type_for_size (size, unsignedp);
8641   return type ? type : error_mark_node;
8642 }
8643
8644 /* A helper function for resolve_overloaded_builtin in resolving the
8645    overloaded __sync_ builtins.  Returns a positive power of 2 if the
8646    first operand of PARAMS is a pointer to a supported data type.
8647    Returns 0 if an error is encountered.  */
8648
8649 static int
8650 sync_resolve_size (tree function, VEC(tree,gc) *params)
8651 {
8652   tree type;
8653   int size;
8654
8655   if (VEC_empty (tree, params))
8656     {
8657       error ("too few arguments to function %qE", function);
8658       return 0;
8659     }
8660
8661   type = TREE_TYPE (VEC_index (tree, params, 0));
8662   if (TREE_CODE (type) != POINTER_TYPE)
8663     goto incompatible;
8664
8665   type = TREE_TYPE (type);
8666   if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
8667     goto incompatible;
8668
8669   size = tree_low_cst (TYPE_SIZE_UNIT (type), 1);
8670   if (size == 1 || size == 2 || size == 4 || size == 8 || size == 16)
8671     return size;
8672
8673  incompatible:
8674   error ("incompatible type for argument %d of %qE", 1, function);
8675   return 0;
8676 }
8677
8678 /* A helper function for resolve_overloaded_builtin.  Adds casts to
8679    PARAMS to make arguments match up with those of FUNCTION.  Drops
8680    the variadic arguments at the end.  Returns false if some error
8681    was encountered; true on success.  */
8682
8683 static bool
8684 sync_resolve_params (tree orig_function, tree function, VEC(tree, gc) *params)
8685 {
8686   tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (function));
8687   tree ptype;
8688   int number;
8689   unsigned int parmnum;
8690
8691   /* We've declared the implementation functions to use "volatile void *"
8692      as the pointer parameter, so we shouldn't get any complaints from the
8693      call to check_function_arguments what ever type the user used.  */
8694   arg_types = TREE_CHAIN (arg_types);
8695   ptype = TREE_TYPE (TREE_TYPE (VEC_index (tree, params, 0)));
8696   number = 2;
8697
8698   /* For the rest of the values, we need to cast these to FTYPE, so that we
8699      don't get warnings for passing pointer types, etc.  */
8700   parmnum = 0;
8701   while (arg_types != void_list_node)
8702     {
8703       tree val;
8704
8705       ++parmnum;
8706       if (VEC_length (tree, params) <= parmnum)
8707         {
8708           error ("too few arguments to function %qE", orig_function);
8709           return false;
8710         }
8711
8712       /* ??? Ideally for the first conversion we'd use convert_for_assignment
8713          so that we get warnings for anything that doesn't match the pointer
8714          type.  This isn't portable across the C and C++ front ends atm.  */
8715       val = VEC_index (tree, params, parmnum);
8716       val = convert (ptype, val);
8717       val = convert (TREE_VALUE (arg_types), val);
8718       VEC_replace (tree, params, parmnum, val);
8719
8720       arg_types = TREE_CHAIN (arg_types);
8721       number++;
8722     }
8723
8724   /* The definition of these primitives is variadic, with the remaining
8725      being "an optional list of variables protected by the memory barrier".
8726      No clue what that's supposed to mean, precisely, but we consider all
8727      call-clobbered variables to be protected so we're safe.  */
8728   VEC_truncate (tree, params, parmnum + 1);
8729
8730   return true;
8731 }
8732
8733 /* A helper function for resolve_overloaded_builtin.  Adds a cast to
8734    RESULT to make it match the type of the first pointer argument in
8735    PARAMS.  */
8736
8737 static tree
8738 sync_resolve_return (tree first_param, tree result)
8739 {
8740   tree ptype = TREE_TYPE (TREE_TYPE (first_param));
8741   ptype = TYPE_MAIN_VARIANT (ptype);
8742   return convert (ptype, result);
8743 }
8744
8745 /* Some builtin functions are placeholders for other expressions.  This
8746    function should be called immediately after parsing the call expression
8747    before surrounding code has committed to the type of the expression.
8748
8749    FUNCTION is the DECL that has been invoked; it is known to be a builtin.
8750    PARAMS is the argument list for the call.  The return value is non-null
8751    when expansion is complete, and null if normal processing should
8752    continue.  */
8753
8754 tree
8755 resolve_overloaded_builtin (tree function, VEC(tree,gc) *params)
8756 {
8757   enum built_in_function orig_code = DECL_FUNCTION_CODE (function);
8758   switch (DECL_BUILT_IN_CLASS (function))
8759     {
8760     case BUILT_IN_NORMAL:
8761       break;
8762     case BUILT_IN_MD:
8763       if (targetm.resolve_overloaded_builtin)
8764         return targetm.resolve_overloaded_builtin (function, params);
8765       else
8766         return NULL_TREE;
8767     default:
8768       return NULL_TREE;
8769     }
8770
8771   /* Handle BUILT_IN_NORMAL here.  */
8772   switch (orig_code)
8773     {
8774     case BUILT_IN_FETCH_AND_ADD_N:
8775     case BUILT_IN_FETCH_AND_SUB_N:
8776     case BUILT_IN_FETCH_AND_OR_N:
8777     case BUILT_IN_FETCH_AND_AND_N:
8778     case BUILT_IN_FETCH_AND_XOR_N:
8779     case BUILT_IN_FETCH_AND_NAND_N:
8780     case BUILT_IN_ADD_AND_FETCH_N:
8781     case BUILT_IN_SUB_AND_FETCH_N:
8782     case BUILT_IN_OR_AND_FETCH_N:
8783     case BUILT_IN_AND_AND_FETCH_N:
8784     case BUILT_IN_XOR_AND_FETCH_N:
8785     case BUILT_IN_NAND_AND_FETCH_N:
8786     case BUILT_IN_BOOL_COMPARE_AND_SWAP_N:
8787     case BUILT_IN_VAL_COMPARE_AND_SWAP_N:
8788     case BUILT_IN_LOCK_TEST_AND_SET_N:
8789     case BUILT_IN_LOCK_RELEASE_N:
8790       {
8791         int n = sync_resolve_size (function, params);
8792         tree new_function, first_param, result;
8793
8794         if (n == 0)
8795           return error_mark_node;
8796
8797         new_function = built_in_decls[orig_code + exact_log2 (n) + 1];
8798         if (!sync_resolve_params (function, new_function, params))
8799           return error_mark_node;
8800
8801         first_param = VEC_index (tree, params, 0);
8802         result = build_function_call_vec (new_function, params, NULL);
8803         if (orig_code != BUILT_IN_BOOL_COMPARE_AND_SWAP_N
8804             && orig_code != BUILT_IN_LOCK_RELEASE_N)
8805           result = sync_resolve_return (first_param, result);
8806
8807         return result;
8808       }
8809
8810     default:
8811       return NULL_TREE;
8812     }
8813 }
8814
8815 /* Ignoring their sign, return true if two scalar types are the same.  */
8816 bool
8817 same_scalar_type_ignoring_signedness (tree t1, tree t2)
8818 {
8819   enum tree_code c1 = TREE_CODE (t1), c2 = TREE_CODE (t2);
8820
8821   gcc_assert ((c1 == INTEGER_TYPE || c1 == REAL_TYPE || c1 == FIXED_POINT_TYPE)
8822               && (c2 == INTEGER_TYPE || c2 == REAL_TYPE
8823                   || c2 == FIXED_POINT_TYPE));
8824
8825   /* Equality works here because c_common_signed_type uses
8826      TYPE_MAIN_VARIANT.  */
8827   return c_common_signed_type (t1)
8828     == c_common_signed_type (t2);
8829 }
8830
8831 /* Check for missing format attributes on function pointers.  LTYPE is
8832    the new type or left-hand side type.  RTYPE is the old type or
8833    right-hand side type.  Returns TRUE if LTYPE is missing the desired
8834    attribute.  */
8835
8836 bool
8837 check_missing_format_attribute (tree ltype, tree rtype)
8838 {
8839   tree const ttr = TREE_TYPE (rtype), ttl = TREE_TYPE (ltype);
8840   tree ra;
8841
8842   for (ra = TYPE_ATTRIBUTES (ttr); ra; ra = TREE_CHAIN (ra))
8843     if (is_attribute_p ("format", TREE_PURPOSE (ra)))
8844       break;
8845   if (ra)
8846     {
8847       tree la;
8848       for (la = TYPE_ATTRIBUTES (ttl); la; la = TREE_CHAIN (la))
8849         if (is_attribute_p ("format", TREE_PURPOSE (la)))
8850           break;
8851       return !la;
8852     }
8853   else
8854     return false;
8855 }
8856
8857 /* Subscripting with type char is likely to lose on a machine where
8858    chars are signed.  So warn on any machine, but optionally.  Don't
8859    warn for unsigned char since that type is safe.  Don't warn for
8860    signed char because anyone who uses that must have done so
8861    deliberately. Furthermore, we reduce the false positive load by
8862    warning only for non-constant value of type char.  */
8863
8864 void
8865 warn_array_subscript_with_type_char (tree index)
8866 {
8867   if (TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node
8868       && TREE_CODE (index) != INTEGER_CST)
8869     warning (OPT_Wchar_subscripts, "array subscript has type %<char%>");
8870 }
8871
8872 /* Implement -Wparentheses for the unexpected C precedence rules, to
8873    cover cases like x + y << z which readers are likely to
8874    misinterpret.  We have seen an expression in which CODE is a binary
8875    operator used to combine expressions ARG_LEFT and ARG_RIGHT, which
8876    before folding had CODE_LEFT and CODE_RIGHT.  CODE_LEFT and
8877    CODE_RIGHT may be ERROR_MARK, which means that that side of the
8878    expression was not formed using a binary or unary operator, or it
8879    was enclosed in parentheses.  */
8880
8881 void
8882 warn_about_parentheses (enum tree_code code,
8883                         enum tree_code code_left, tree arg_left,
8884                         enum tree_code code_right, tree arg_right)
8885 {
8886   if (!warn_parentheses)
8887     return;
8888
8889   /* This macro tests that the expression ARG with original tree code
8890      CODE appears to be a boolean expression. or the result of folding a
8891      boolean expression.  */
8892 #define APPEARS_TO_BE_BOOLEAN_EXPR_P(CODE, ARG)                             \
8893         (truth_value_p (TREE_CODE (ARG))                                    \
8894          || TREE_CODE (TREE_TYPE (ARG)) == BOOLEAN_TYPE                     \
8895          /* Folding may create 0 or 1 integers from other expressions.  */  \
8896          || ((CODE) != INTEGER_CST                                          \
8897              && (integer_onep (ARG) || integer_zerop (ARG))))
8898
8899   switch (code) 
8900     {
8901     case LSHIFT_EXPR:
8902       if (code_left == PLUS_EXPR || code_right == PLUS_EXPR)
8903         warning (OPT_Wparentheses,
8904                  "suggest parentheses around %<+%> inside %<<<%>");
8905       else if (code_left == MINUS_EXPR || code_right == MINUS_EXPR)
8906         warning (OPT_Wparentheses,
8907                  "suggest parentheses around %<-%> inside %<<<%>");
8908       return;
8909
8910     case RSHIFT_EXPR:
8911       if (code_left == PLUS_EXPR || code_right == PLUS_EXPR)
8912         warning (OPT_Wparentheses,
8913                  "suggest parentheses around %<+%> inside %<>>%>");
8914       else if (code_left == MINUS_EXPR || code_right == MINUS_EXPR)
8915         warning (OPT_Wparentheses,
8916                  "suggest parentheses around %<-%> inside %<>>%>");
8917       return;
8918
8919     case TRUTH_ORIF_EXPR:
8920       if (code_left == TRUTH_ANDIF_EXPR || code_right == TRUTH_ANDIF_EXPR)
8921         warning (OPT_Wparentheses,
8922                  "suggest parentheses around %<&&%> within %<||%>");
8923       return;
8924
8925     case BIT_IOR_EXPR:
8926       if (code_left == BIT_AND_EXPR || code_left == BIT_XOR_EXPR
8927           || code_left == PLUS_EXPR || code_left == MINUS_EXPR
8928           || code_right == BIT_AND_EXPR || code_right == BIT_XOR_EXPR
8929           || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
8930         warning (OPT_Wparentheses,
8931                  "suggest parentheses around arithmetic in operand of %<|%>");
8932       /* Check cases like x|y==z */
8933       else if (TREE_CODE_CLASS (code_left) == tcc_comparison
8934                || TREE_CODE_CLASS (code_right) == tcc_comparison)
8935         warning (OPT_Wparentheses,
8936                  "suggest parentheses around comparison in operand of %<|%>");
8937       /* Check cases like !x | y */
8938       else if (code_left == TRUTH_NOT_EXPR
8939                && !APPEARS_TO_BE_BOOLEAN_EXPR_P (code_right, arg_right))
8940         warning (OPT_Wparentheses, "suggest parentheses around operand of "
8941                  "%<!%> or change %<|%> to %<||%> or %<!%> to %<~%>");
8942       return;
8943
8944     case BIT_XOR_EXPR:
8945       if (code_left == BIT_AND_EXPR
8946           || code_left == PLUS_EXPR || code_left == MINUS_EXPR
8947           || code_right == BIT_AND_EXPR
8948           || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
8949         warning (OPT_Wparentheses,
8950                  "suggest parentheses around arithmetic in operand of %<^%>");
8951       /* Check cases like x^y==z */
8952       else if (TREE_CODE_CLASS (code_left) == tcc_comparison
8953                || TREE_CODE_CLASS (code_right) == tcc_comparison)
8954         warning (OPT_Wparentheses,
8955                  "suggest parentheses around comparison in operand of %<^%>");
8956       return;
8957
8958     case BIT_AND_EXPR:
8959       if (code_left == PLUS_EXPR || code_right == PLUS_EXPR)
8960         warning (OPT_Wparentheses,
8961                  "suggest parentheses around %<+%> in operand of %<&%>");
8962       else if (code_left == MINUS_EXPR || code_right == MINUS_EXPR)
8963         warning (OPT_Wparentheses,
8964                  "suggest parentheses around %<-%> in operand of %<&%>");
8965       /* Check cases like x&y==z */
8966       else if (TREE_CODE_CLASS (code_left) == tcc_comparison
8967                || TREE_CODE_CLASS (code_right) == tcc_comparison)
8968         warning (OPT_Wparentheses,
8969                  "suggest parentheses around comparison in operand of %<&%>");
8970       /* Check cases like !x & y */
8971       else if (code_left == TRUTH_NOT_EXPR
8972                && !APPEARS_TO_BE_BOOLEAN_EXPR_P (code_right, arg_right))
8973         warning (OPT_Wparentheses, "suggest parentheses around operand of "
8974                  "%<!%> or change %<&%> to %<&&%> or %<!%> to %<~%>");
8975       return;
8976
8977     case EQ_EXPR:
8978       if (TREE_CODE_CLASS (code_left) == tcc_comparison
8979           || TREE_CODE_CLASS (code_right) == tcc_comparison)
8980         warning (OPT_Wparentheses,
8981                  "suggest parentheses around comparison in operand of %<==%>");
8982       return;
8983     case NE_EXPR:
8984       if (TREE_CODE_CLASS (code_left) == tcc_comparison
8985           || TREE_CODE_CLASS (code_right) == tcc_comparison)
8986         warning (OPT_Wparentheses,
8987                  "suggest parentheses around comparison in operand of %<!=%>");
8988       return;
8989
8990     default:
8991       if (TREE_CODE_CLASS (code) == tcc_comparison
8992            && ((TREE_CODE_CLASS (code_left) == tcc_comparison
8993                 && code_left != NE_EXPR && code_left != EQ_EXPR
8994                 && INTEGRAL_TYPE_P (TREE_TYPE (arg_left)))
8995                || (TREE_CODE_CLASS (code_right) == tcc_comparison
8996                    && code_right != NE_EXPR && code_right != EQ_EXPR
8997                    && INTEGRAL_TYPE_P (TREE_TYPE (arg_right)))))
8998         warning (OPT_Wparentheses, "comparisons like %<X<=Y<=Z%> do not "
8999                  "have their mathematical meaning");
9000       return;
9001     }
9002 #undef NOT_A_BOOLEAN_EXPR_P
9003 }
9004
9005 /* If LABEL (a LABEL_DECL) has not been used, issue a warning.  */
9006
9007 void
9008 warn_for_unused_label (tree label)
9009 {
9010   if (!TREE_USED (label))
9011     {
9012       if (DECL_INITIAL (label))
9013         warning (OPT_Wunused_label, "label %q+D defined but not used", label);
9014       else
9015         warning (OPT_Wunused_label, "label %q+D declared but not defined", label);
9016     }
9017 }
9018
9019 #ifndef TARGET_HAS_TARGETCM
9020 struct gcc_targetcm targetcm = TARGETCM_INITIALIZER;
9021 #endif
9022
9023 /* Warn for division by zero according to the value of DIVISOR.  LOC
9024    is the location of the division operator.  */
9025
9026 void
9027 warn_for_div_by_zero (location_t loc, tree divisor)
9028 {
9029   /* If DIVISOR is zero, and has integral or fixed-point type, issue a warning
9030      about division by zero.  Do not issue a warning if DIVISOR has a
9031      floating-point type, since we consider 0.0/0.0 a valid way of
9032      generating a NaN.  */
9033   if (skip_evaluation == 0
9034       && (integer_zerop (divisor) || fixed_zerop (divisor)))
9035     warning_at (loc, OPT_Wdiv_by_zero, "division by zero");
9036 }
9037
9038 /* Subroutine of build_binary_op. Give warnings for comparisons
9039    between signed and unsigned quantities that may fail. Do the
9040    checking based on the original operand trees ORIG_OP0 and ORIG_OP1,
9041    so that casts will be considered, but default promotions won't
9042    be.
9043
9044    LOCATION is the location of the comparison operator.
9045
9046    The arguments of this function map directly to local variables
9047    of build_binary_op.  */
9048
9049 void 
9050 warn_for_sign_compare (location_t location,
9051                        tree orig_op0, tree orig_op1, 
9052                        tree op0, tree op1, 
9053                        tree result_type, enum tree_code resultcode)
9054 {
9055   int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
9056   int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
9057   int unsignedp0, unsignedp1;
9058   
9059   /* In C++, check for comparison of different enum types.  */
9060   if (c_dialect_cxx()
9061       && TREE_CODE (TREE_TYPE (orig_op0)) == ENUMERAL_TYPE
9062       && TREE_CODE (TREE_TYPE (orig_op1)) == ENUMERAL_TYPE
9063       && TYPE_MAIN_VARIANT (TREE_TYPE (orig_op0))
9064          != TYPE_MAIN_VARIANT (TREE_TYPE (orig_op1)))
9065     {
9066       warning_at (location,
9067                   OPT_Wsign_compare, "comparison between types %qT and %qT",
9068                   TREE_TYPE (orig_op0), TREE_TYPE (orig_op1));
9069     }
9070
9071   /* Do not warn if the comparison is being done in a signed type,
9072      since the signed type will only be chosen if it can represent
9073      all the values of the unsigned type.  */
9074   if (!TYPE_UNSIGNED (result_type))
9075     /* OK */;
9076   /* Do not warn if both operands are unsigned.  */
9077   else if (op0_signed == op1_signed)
9078     /* OK */;
9079   else
9080     {
9081       tree sop, uop, base_type;
9082       bool ovf;
9083
9084       if (op0_signed)
9085         sop = orig_op0, uop = orig_op1;
9086       else 
9087         sop = orig_op1, uop = orig_op0;
9088
9089       STRIP_TYPE_NOPS (sop); 
9090       STRIP_TYPE_NOPS (uop);
9091       base_type = (TREE_CODE (result_type) == COMPLEX_TYPE
9092                    ? TREE_TYPE (result_type) : result_type);
9093
9094       /* Do not warn if the signed quantity is an unsuffixed integer
9095          literal (or some static constant expression involving such
9096          literals or a conditional expression involving such literals)
9097          and it is non-negative.  */
9098       if (tree_expr_nonnegative_warnv_p (sop, &ovf))
9099         /* OK */;
9100       /* Do not warn if the comparison is an equality operation, the
9101          unsigned quantity is an integral constant, and it would fit
9102          in the result if the result were signed.  */
9103       else if (TREE_CODE (uop) == INTEGER_CST
9104                && (resultcode == EQ_EXPR || resultcode == NE_EXPR)
9105                && int_fits_type_p (uop, c_common_signed_type (base_type)))
9106         /* OK */;
9107       /* In C, do not warn if the unsigned quantity is an enumeration
9108          constant and its maximum value would fit in the result if the
9109          result were signed.  */
9110       else if (!c_dialect_cxx() && TREE_CODE (uop) == INTEGER_CST
9111                && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
9112                && int_fits_type_p (TYPE_MAX_VALUE (TREE_TYPE (uop)),
9113                                    c_common_signed_type (base_type)))
9114         /* OK */;
9115       else 
9116         warning_at (location,
9117                     OPT_Wsign_compare, 
9118                     "comparison between signed and unsigned integer expressions");
9119     }
9120   
9121   /* Warn if two unsigned values are being compared in a size larger
9122      than their original size, and one (and only one) is the result of
9123      a `~' operator.  This comparison will always fail.
9124      
9125      Also warn if one operand is a constant, and the constant does not
9126      have all bits set that are set in the ~ operand when it is
9127      extended.  */
9128
9129   op0 = get_narrower (op0, &unsignedp0);
9130   op1 = get_narrower (op1, &unsignedp1);
9131   
9132   if ((TREE_CODE (op0) == BIT_NOT_EXPR)
9133       ^ (TREE_CODE (op1) == BIT_NOT_EXPR))
9134     {
9135       if (TREE_CODE (op0) == BIT_NOT_EXPR)
9136         op0 = get_narrower (TREE_OPERAND (op0, 0), &unsignedp0);
9137       if (TREE_CODE (op1) == BIT_NOT_EXPR)
9138         op1 = get_narrower (TREE_OPERAND (op1, 0), &unsignedp1);
9139
9140       if (host_integerp (op0, 0) || host_integerp (op1, 0))
9141         {
9142           tree primop;
9143           HOST_WIDE_INT constant, mask;
9144           int unsignedp;
9145           unsigned int bits;
9146           
9147           if (host_integerp (op0, 0))
9148             {
9149               primop = op1;
9150               unsignedp = unsignedp1;
9151               constant = tree_low_cst (op0, 0);
9152             }
9153           else
9154             {
9155               primop = op0;
9156               unsignedp = unsignedp0;
9157               constant = tree_low_cst (op1, 0);
9158             }
9159           
9160           bits = TYPE_PRECISION (TREE_TYPE (primop));
9161           if (bits < TYPE_PRECISION (result_type)
9162               && bits < HOST_BITS_PER_LONG && unsignedp)
9163             {
9164               mask = (~ (HOST_WIDE_INT) 0) << bits;
9165               if ((mask & constant) != mask)
9166                 {
9167                   if (constant == 0)
9168                     warning (OPT_Wsign_compare, 
9169                              "promoted ~unsigned is always non-zero");
9170                   else
9171                     warning_at (location, OPT_Wsign_compare, 
9172                                 "comparison of promoted ~unsigned with constant");
9173                 }
9174             }
9175         }
9176       else if (unsignedp0 && unsignedp1
9177                && (TYPE_PRECISION (TREE_TYPE (op0))
9178                    < TYPE_PRECISION (result_type))
9179                && (TYPE_PRECISION (TREE_TYPE (op1))
9180                    < TYPE_PRECISION (result_type)))
9181         warning_at (location, OPT_Wsign_compare,
9182                  "comparison of promoted ~unsigned with unsigned");
9183     }
9184 }
9185
9186 /* Setup a TYPE_DECL node as a typedef representation.
9187
9188    X is a TYPE_DECL for a typedef statement.  Create a brand new
9189    ..._TYPE node (which will be just a variant of the existing
9190    ..._TYPE node with identical properties) and then install X
9191    as the TYPE_NAME of this brand new (duplicate) ..._TYPE node.
9192
9193    The whole point here is to end up with a situation where each
9194    and every ..._TYPE node the compiler creates will be uniquely
9195    associated with AT MOST one node representing a typedef name.
9196    This way, even though the compiler substitutes corresponding
9197    ..._TYPE nodes for TYPE_DECL (i.e. "typedef name") nodes very
9198    early on, later parts of the compiler can always do the reverse
9199    translation and get back the corresponding typedef name.  For
9200    example, given:
9201
9202         typedef struct S MY_TYPE;
9203         MY_TYPE object;
9204
9205    Later parts of the compiler might only know that `object' was of
9206    type `struct S' if it were not for code just below.  With this
9207    code however, later parts of the compiler see something like:
9208
9209         struct S' == struct S
9210         typedef struct S' MY_TYPE;
9211         struct S' object;
9212
9213     And they can then deduce (from the node for type struct S') that
9214     the original object declaration was:
9215
9216                 MY_TYPE object;
9217
9218     Being able to do this is important for proper support of protoize,
9219     and also for generating precise symbolic debugging information
9220     which takes full account of the programmer's (typedef) vocabulary.
9221
9222     Obviously, we don't want to generate a duplicate ..._TYPE node if
9223     the TYPE_DECL node that we are now processing really represents a
9224     standard built-in type.  */
9225
9226 void
9227 set_underlying_type (tree x)
9228 {
9229   if (x == error_mark_node)
9230     return;
9231   if (DECL_IS_BUILTIN (x))
9232     {
9233       if (TYPE_NAME (TREE_TYPE (x)) == 0)
9234         TYPE_NAME (TREE_TYPE (x)) = x;
9235     }
9236   else if (TREE_TYPE (x) != error_mark_node
9237            && DECL_ORIGINAL_TYPE (x) == NULL_TREE)
9238     {
9239       tree tt = TREE_TYPE (x);
9240       DECL_ORIGINAL_TYPE (x) = tt;
9241       tt = build_variant_type_copy (tt);
9242       TYPE_STUB_DECL (tt) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
9243       TYPE_NAME (tt) = x;
9244       TREE_USED (tt) = TREE_USED (x);
9245       TREE_TYPE (x) = tt;
9246     }
9247 }
9248
9249 /* Returns true if X is a typedef decl.  */
9250
9251 bool
9252 is_typedef_decl (tree x)
9253 {
9254   return (x && TREE_CODE (x) == TYPE_DECL
9255           && DECL_ORIGINAL_TYPE (x) != NULL_TREE);
9256 }
9257
9258 #include "gt-c-common.h"