OSDN Git Service

ceb2f0666c3d6347b4acba21c969adbfb29de99e
[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 Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3.  If not see
19 <http://www.gnu.org/licenses/>.  */
20
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "tm.h"
25 #include "intl.h"
26 #include "tree.h"
27 #include "flags.h"
28 #include "output.h"
29 #include "c-pragma.h"
30 #include "rtl.h"
31 #include "ggc.h"
32 #include "varray.h"
33 #include "expr.h"
34 #include "c-common.h"
35 #include "diagnostic.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 "tree-iterator.h"
45 #include "hashtab.h"
46 #include "tree-mudflap.h"
47 #include "opts.h"
48 #include "real.h"
49 #include "cgraph.h"
50 #include "target-def.h"
51 #include "fixed-value.h"
52
53 cpp_reader *parse_in;           /* Declared in c-pragma.h.  */
54
55 /* We let tm.h override the types used here, to handle trivial differences
56    such as the choice of unsigned int or long unsigned int for size_t.
57    When machines start needing nontrivial differences in the size type,
58    it would be best to do something here to figure out automatically
59    from other information what type to use.  */
60
61 #ifndef SIZE_TYPE
62 #define SIZE_TYPE "long unsigned int"
63 #endif
64
65 #ifndef PID_TYPE
66 #define PID_TYPE "int"
67 #endif
68
69 #ifndef WCHAR_TYPE
70 #define WCHAR_TYPE "int"
71 #endif
72
73 /* WCHAR_TYPE gets overridden by -fshort-wchar.  */
74 #define MODIFIED_WCHAR_TYPE \
75         (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
76
77 #ifndef PTRDIFF_TYPE
78 #define PTRDIFF_TYPE "long int"
79 #endif
80
81 #ifndef WINT_TYPE
82 #define WINT_TYPE "unsigned int"
83 #endif
84
85 #ifndef INTMAX_TYPE
86 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE)     \
87                      ? "int"                                    \
88                      : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
89                         ? "long int"                            \
90                         : "long long int"))
91 #endif
92
93 #ifndef UINTMAX_TYPE
94 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE)    \
95                      ? "unsigned int"                           \
96                      : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
97                         ? "long unsigned int"                   \
98                         : "long long unsigned int"))
99 #endif
100
101 /* The following symbols are subsumed in the c_global_trees array, and
102    listed here individually for documentation purposes.
103
104    INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
105
106         tree short_integer_type_node;
107         tree long_integer_type_node;
108         tree long_long_integer_type_node;
109
110         tree short_unsigned_type_node;
111         tree long_unsigned_type_node;
112         tree long_long_unsigned_type_node;
113
114         tree truthvalue_type_node;
115         tree truthvalue_false_node;
116         tree truthvalue_true_node;
117
118         tree ptrdiff_type_node;
119
120         tree unsigned_char_type_node;
121         tree signed_char_type_node;
122         tree wchar_type_node;
123         tree signed_wchar_type_node;
124         tree unsigned_wchar_type_node;
125
126         tree float_type_node;
127         tree double_type_node;
128         tree long_double_type_node;
129
130         tree complex_integer_type_node;
131         tree complex_float_type_node;
132         tree complex_double_type_node;
133         tree complex_long_double_type_node;
134
135         tree dfloat32_type_node;
136         tree dfloat64_type_node;
137         tree_dfloat128_type_node;
138
139         tree intQI_type_node;
140         tree intHI_type_node;
141         tree intSI_type_node;
142         tree intDI_type_node;
143         tree intTI_type_node;
144
145         tree unsigned_intQI_type_node;
146         tree unsigned_intHI_type_node;
147         tree unsigned_intSI_type_node;
148         tree unsigned_intDI_type_node;
149         tree unsigned_intTI_type_node;
150
151         tree widest_integer_literal_type_node;
152         tree widest_unsigned_literal_type_node;
153
154    Nodes for types `void *' and `const void *'.
155
156         tree ptr_type_node, const_ptr_type_node;
157
158    Nodes for types `char *' and `const char *'.
159
160         tree string_type_node, const_string_type_node;
161
162    Type `char[SOMENUMBER]'.
163    Used when an array of char is needed and the size is irrelevant.
164
165         tree char_array_type_node;
166
167    Type `int[SOMENUMBER]' or something like it.
168    Used when an array of int needed and the size is irrelevant.
169
170         tree int_array_type_node;
171
172    Type `wchar_t[SOMENUMBER]' or something like it.
173    Used when a wide string literal is created.
174
175         tree wchar_array_type_node;
176
177    Type `int ()' -- used for implicit declaration of functions.
178
179         tree default_function_type;
180
181    A VOID_TYPE node, packaged in a TREE_LIST.
182
183         tree void_list_node;
184
185   The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
186   and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
187   VAR_DECLS, but C++ does.)
188
189         tree function_name_decl_node;
190         tree pretty_function_name_decl_node;
191         tree c99_function_name_decl_node;
192
193   Stack of nested function name VAR_DECLs.
194
195         tree saved_function_name_decls;
196
197 */
198
199 tree c_global_trees[CTI_MAX];
200 \f
201 /* Switches common to the C front ends.  */
202
203 /* Nonzero if prepreprocessing only.  */
204
205 int flag_preprocess_only;
206
207 /* Nonzero means don't output line number information.  */
208
209 char flag_no_line_commands;
210
211 /* Nonzero causes -E output not to be done, but directives such as
212    #define that have side effects are still obeyed.  */
213
214 char flag_no_output;
215
216 /* Nonzero means dump macros in some fashion.  */
217
218 char flag_dump_macros;
219
220 /* Nonzero means pass #include lines through to the output.  */
221
222 char flag_dump_includes;
223
224 /* Nonzero means process PCH files while preprocessing.  */
225
226 bool flag_pch_preprocess;
227
228 /* The file name to which we should write a precompiled header, or
229    NULL if no header will be written in this compile.  */
230
231 const char *pch_file;
232
233 /* Nonzero if an ISO standard was selected.  It rejects macros in the
234    user's namespace.  */
235 int flag_iso;
236
237 /* Nonzero if -undef was given.  It suppresses target built-in macros
238    and assertions.  */
239 int flag_undef;
240
241 /* Nonzero means don't recognize the non-ANSI builtin functions.  */
242
243 int flag_no_builtin;
244
245 /* Nonzero means don't recognize the non-ANSI builtin functions.
246    -ansi sets this.  */
247
248 int flag_no_nonansi_builtin;
249
250 /* Nonzero means give `double' the same size as `float'.  */
251
252 int flag_short_double;
253
254 /* Nonzero means give `wchar_t' the same size as `short'.  */
255
256 int flag_short_wchar;
257
258 /* Nonzero means allow implicit conversions between vectors with
259    differing numbers of subparts and/or differing element types.  */
260 int flag_lax_vector_conversions;
261
262 /* Nonzero means allow Microsoft extensions without warnings or errors.  */
263 int flag_ms_extensions;
264
265 /* Nonzero means don't recognize the keyword `asm'.  */
266
267 int flag_no_asm;
268
269 /* Nonzero means to treat bitfields as signed unless they say `unsigned'.  */
270
271 int flag_signed_bitfields = 1;
272
273 /* Warn about #pragma directives that are not recognized.  */
274
275 int warn_unknown_pragmas; /* Tri state variable.  */
276
277 /* Warn about format/argument anomalies in calls to formatted I/O functions
278    (*printf, *scanf, strftime, strfmon, etc.).  */
279
280 int warn_format;
281
282 /* Warn about using __null (as NULL in C++) as sentinel.  For code compiled
283    with GCC this doesn't matter as __null is guaranteed to have the right
284    size.  */
285
286 int warn_strict_null_sentinel;
287
288 /* Zero means that faster, ...NonNil variants of objc_msgSend...
289    calls will be used in ObjC; passing nil receivers to such calls
290    will most likely result in crashes.  */
291 int flag_nil_receivers = 1;
292
293 /* Nonzero means that code generation will be altered to support
294    "zero-link" execution.  This currently affects ObjC only, but may
295    affect other languages in the future.  */
296 int flag_zero_link = 0;
297
298 /* Nonzero means emit an '__OBJC, __image_info' for the current translation
299    unit.  It will inform the ObjC runtime that class definition(s) herein
300    contained are to replace one(s) previously loaded.  */
301 int flag_replace_objc_classes = 0;
302
303 /* C/ObjC language option variables.  */
304
305
306 /* Nonzero means allow type mismatches in conditional expressions;
307    just make their values `void'.  */
308
309 int flag_cond_mismatch;
310
311 /* Nonzero means enable C89 Amendment 1 features.  */
312
313 int flag_isoc94;
314
315 /* Nonzero means use the ISO C99 dialect of C.  */
316
317 int flag_isoc99;
318
319 /* Nonzero means that we have builtin functions, and main is an int.  */
320
321 int flag_hosted = 1;
322
323 /* Warn if main is suspicious.  */
324
325 int warn_main;
326
327
328 /* ObjC language option variables.  */
329
330
331 /* Open and close the file for outputting class declarations, if
332    requested (ObjC).  */
333
334 int flag_gen_declaration;
335
336 /* Tells the compiler that this is a special run.  Do not perform any
337    compiling, instead we are to test some platform dependent features
338    and output a C header file with appropriate definitions.  */
339
340 int print_struct_values;
341
342 /* Tells the compiler what is the constant string class for Objc.  */
343
344 const char *constant_string_class_name;
345
346
347 /* C++ language option variables.  */
348
349
350 /* Nonzero means don't recognize any extension keywords.  */
351
352 int flag_no_gnu_keywords;
353
354 /* Nonzero means do emit exported implementations of functions even if
355    they can be inlined.  */
356
357 int flag_implement_inlines = 1;
358
359 /* Nonzero means that implicit instantiations will be emitted if needed.  */
360
361 int flag_implicit_templates = 1;
362
363 /* Nonzero means that implicit instantiations of inline templates will be
364    emitted if needed, even if instantiations of non-inline templates
365    aren't.  */
366
367 int flag_implicit_inline_templates = 1;
368
369 /* Nonzero means generate separate instantiation control files and
370    juggle them at link time.  */
371
372 int flag_use_repository;
373
374 /* Nonzero if we want to issue diagnostics that the standard says are not
375    required.  */
376
377 int flag_optional_diags = 1;
378
379 /* Nonzero means we should attempt to elide constructors when possible.  */
380
381 int flag_elide_constructors = 1;
382
383 /* Nonzero means that member functions defined in class scope are
384    inline by default.  */
385
386 int flag_default_inline = 1;
387
388 /* Controls whether compiler generates 'type descriptor' that give
389    run-time type information.  */
390
391 int flag_rtti = 1;
392
393 /* Nonzero if we want to conserve space in the .o files.  We do this
394    by putting uninitialized data and runtime initialized data into
395    .common instead of .data at the expense of not flagging multiple
396    definitions.  */
397
398 int flag_conserve_space;
399
400 /* Nonzero if we want to obey access control semantics.  */
401
402 int flag_access_control = 1;
403
404 /* Nonzero if we want to check the return value of new and avoid calling
405    constructors if it is a null pointer.  */
406
407 int flag_check_new;
408
409 /* The C++ dialect being used. C++98 is the default.  */
410
411 enum cxx_dialect cxx_dialect = cxx98;
412
413 /* Nonzero if we want the new ISO rules for pushing a new scope for `for'
414    initialization variables.
415    0: Old rules, set by -fno-for-scope.
416    2: New ISO rules, set by -ffor-scope.
417    1: Try to implement new ISO rules, but with backup compatibility
418    (and warnings).  This is the default, for now.  */
419
420 int flag_new_for_scope = 1;
421
422 /* Nonzero if we want to emit defined symbols with common-like linkage as
423    weak symbols where possible, in order to conform to C++ semantics.
424    Otherwise, emit them as local symbols.  */
425
426 int flag_weak = 1;
427
428 /* 0 means we want the preprocessor to not emit line directives for
429    the current working directory.  1 means we want it to do it.  -1
430    means we should decide depending on whether debugging information
431    is being emitted or not.  */
432
433 int flag_working_directory = -1;
434
435 /* Nonzero to use __cxa_atexit, rather than atexit, to register
436    destructors for local statics and global objects.  '2' means it has been
437    set nonzero as a default, not by a command-line flag.  */
438
439 int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
440
441 /* Nonzero to use __cxa_get_exception_ptr in C++ exception-handling
442    code.  '2' means it has not been set explicitly on the command line.  */
443
444 int flag_use_cxa_get_exception_ptr = 2;
445
446 /* Nonzero means to implement standard semantics for exception
447    specifications, calling unexpected if an exception is thrown that
448    doesn't match the specification.  Zero means to treat them as
449    assertions and optimize accordingly, but not check them.  */
450
451 int flag_enforce_eh_specs = 1;
452
453 /* Nonzero means to generate thread-safe code for initializing local
454    statics.  */
455
456 int flag_threadsafe_statics = 1;
457
458 /* Nonzero means warn about implicit declarations.  */
459
460 int warn_implicit = 1;
461
462 /* Maximum template instantiation depth.  This limit is rather
463    arbitrary, but it exists to limit the time it takes to notice
464    infinite template instantiations.  */
465
466 int max_tinst_depth = 500;
467
468
469
470 /* The elements of `ridpointers' are identifier nodes for the reserved
471    type names and storage classes.  It is indexed by a RID_... value.  */
472 tree *ridpointers;
473
474 tree (*make_fname_decl) (tree, int);
475
476 /* Nonzero means the expression being parsed will never be evaluated.
477    This is a count, since unevaluated expressions can nest.  */
478 int skip_evaluation;
479
480 /* Information about how a function name is generated.  */
481 struct fname_var_t
482 {
483   tree *const decl;     /* pointer to the VAR_DECL.  */
484   const unsigned rid;   /* RID number for the identifier.  */
485   const int pretty;     /* How pretty is it? */
486 };
487
488 /* The three ways of getting then name of the current function.  */
489
490 const struct fname_var_t fname_vars[] =
491 {
492   /* C99 compliant __func__, must be first.  */
493   {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
494   /* GCC __FUNCTION__ compliant.  */
495   {&function_name_decl_node, RID_FUNCTION_NAME, 0},
496   /* GCC __PRETTY_FUNCTION__ compliant.  */
497   {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
498   {NULL, 0, 0},
499 };
500
501 static tree check_case_value (tree);
502 static bool check_case_bounds (tree, tree, tree *, tree *);
503
504 static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
505 static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
506 static tree handle_common_attribute (tree *, tree, tree, int, bool *);
507 static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
508 static tree handle_hot_attribute (tree *, tree, tree, int, bool *);
509 static tree handle_cold_attribute (tree *, tree, tree, int, bool *);
510 static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
511 static tree handle_always_inline_attribute (tree *, tree, tree, int,
512                                             bool *);
513 static tree handle_gnu_inline_attribute (tree *, tree, tree, int, bool *);
514 static tree handle_artificial_attribute (tree *, tree, tree, int, bool *);
515 static tree handle_flatten_attribute (tree *, tree, tree, int, bool *);
516 static tree handle_error_attribute (tree *, tree, tree, int, bool *);
517 static tree handle_used_attribute (tree *, tree, tree, int, bool *);
518 static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
519 static tree handle_externally_visible_attribute (tree *, tree, tree, int,
520                                                  bool *);
521 static tree handle_const_attribute (tree *, tree, tree, int, bool *);
522 static tree handle_transparent_union_attribute (tree *, tree, tree,
523                                                 int, bool *);
524 static tree handle_constructor_attribute (tree *, tree, tree, int, bool *);
525 static tree handle_destructor_attribute (tree *, tree, tree, int, bool *);
526 static tree handle_mode_attribute (tree *, tree, tree, int, bool *);
527 static tree handle_section_attribute (tree *, tree, tree, int, bool *);
528 static tree handle_aligned_attribute (tree *, tree, tree, int, bool *);
529 static tree handle_weak_attribute (tree *, tree, tree, int, bool *) ;
530 static tree handle_alias_attribute (tree *, tree, tree, int, bool *);
531 static tree handle_weakref_attribute (tree *, tree, tree, int, bool *) ;
532 static tree handle_visibility_attribute (tree *, tree, tree, int,
533                                          bool *);
534 static tree handle_tls_model_attribute (tree *, tree, tree, int,
535                                         bool *);
536 static tree handle_no_instrument_function_attribute (tree *, tree,
537                                                      tree, int, bool *);
538 static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
539 static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
540 static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
541                                              bool *);
542 static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
543 static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
544 static tree handle_deprecated_attribute (tree *, tree, tree, int,
545                                          bool *);
546 static tree handle_vector_size_attribute (tree *, tree, tree, int,
547                                           bool *);
548 static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
549 static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
550 static tree handle_cleanup_attribute (tree *, tree, tree, int, bool *);
551 static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
552                                                  bool *);
553 static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
554 static tree handle_type_generic_attribute (tree *, tree, tree, int, bool *);
555 static tree handle_alloc_size_attribute (tree *, tree, tree, int, bool *);
556
557 static void check_function_nonnull (tree, int, tree *);
558 static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
559 static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
560 static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
561 static int resort_field_decl_cmp (const void *, const void *);
562
563 /* Table of machine-independent attributes common to all C-like languages.  */
564 const struct attribute_spec c_common_attribute_table[] =
565 {
566   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
567   { "packed",                 0, 0, false, false, false,
568                               handle_packed_attribute },
569   { "nocommon",               0, 0, true,  false, false,
570                               handle_nocommon_attribute },
571   { "common",                 0, 0, true,  false, false,
572                               handle_common_attribute },
573   /* FIXME: logically, noreturn attributes should be listed as
574      "false, true, true" and apply to function types.  But implementing this
575      would require all the places in the compiler that use TREE_THIS_VOLATILE
576      on a decl to identify non-returning functions to be located and fixed
577      to check the function type instead.  */
578   { "noreturn",               0, 0, true,  false, false,
579                               handle_noreturn_attribute },
580   { "volatile",               0, 0, true,  false, false,
581                               handle_noreturn_attribute },
582   { "noinline",               0, 0, true,  false, false,
583                               handle_noinline_attribute },
584   { "always_inline",          0, 0, true,  false, false,
585                               handle_always_inline_attribute },
586   { "gnu_inline",             0, 0, true,  false, false,
587                               handle_gnu_inline_attribute },
588   { "artificial",             0, 0, true,  false, false,
589                               handle_artificial_attribute },
590   { "flatten",                0, 0, true,  false, false,
591                               handle_flatten_attribute },
592   { "used",                   0, 0, true,  false, false,
593                               handle_used_attribute },
594   { "unused",                 0, 0, false, false, false,
595                               handle_unused_attribute },
596   { "externally_visible",     0, 0, true,  false, false,
597                               handle_externally_visible_attribute },
598   /* The same comments as for noreturn attributes apply to const ones.  */
599   { "const",                  0, 0, true,  false, false,
600                               handle_const_attribute },
601   { "transparent_union",      0, 0, false, false, false,
602                               handle_transparent_union_attribute },
603   { "constructor",            0, 1, true,  false, false,
604                               handle_constructor_attribute },
605   { "destructor",             0, 1, true,  false, false,
606                               handle_destructor_attribute },
607   { "mode",                   1, 1, false,  true, false,
608                               handle_mode_attribute },
609   { "section",                1, 1, true,  false, false,
610                               handle_section_attribute },
611   { "aligned",                0, 1, false, false, false,
612                               handle_aligned_attribute },
613   { "weak",                   0, 0, true,  false, false,
614                               handle_weak_attribute },
615   { "alias",                  1, 1, true,  false, false,
616                               handle_alias_attribute },
617   { "weakref",                0, 1, true,  false, false,
618                               handle_weakref_attribute },
619   { "no_instrument_function", 0, 0, true,  false, false,
620                               handle_no_instrument_function_attribute },
621   { "malloc",                 0, 0, true,  false, false,
622                               handle_malloc_attribute },
623   { "returns_twice",          0, 0, true,  false, false,
624                               handle_returns_twice_attribute },
625   { "no_stack_limit",         0, 0, true,  false, false,
626                               handle_no_limit_stack_attribute },
627   { "pure",                   0, 0, true,  false, false,
628                               handle_pure_attribute },
629   /* For internal use (marking of builtins) only.  The name contains space
630      to prevent its usage in source code.  */
631   { "no vops",                0, 0, true,  false, false,
632                               handle_novops_attribute },
633   { "deprecated",             0, 0, false, false, false,
634                               handle_deprecated_attribute },
635   { "vector_size",            1, 1, false, true, false,
636                               handle_vector_size_attribute },
637   { "visibility",             1, 1, false, false, false,
638                               handle_visibility_attribute },
639   { "tls_model",              1, 1, true,  false, false,
640                               handle_tls_model_attribute },
641   { "nonnull",                0, -1, false, true, true,
642                               handle_nonnull_attribute },
643   { "nothrow",                0, 0, true,  false, false,
644                               handle_nothrow_attribute },
645   { "may_alias",              0, 0, false, true, false, NULL },
646   { "cleanup",                1, 1, true, false, false,
647                               handle_cleanup_attribute },
648   { "warn_unused_result",     0, 0, false, true, true,
649                               handle_warn_unused_result_attribute },
650   { "sentinel",               0, 1, false, true, true,
651                               handle_sentinel_attribute },
652   /* For internal use (marking of builtins) only.  The name contains space
653      to prevent its usage in source code.  */
654   { "type generic",           0, 0, false, true, true,
655                               handle_type_generic_attribute },
656   { "alloc_size",             1, 2, false, true, true,
657                               handle_alloc_size_attribute },
658   { "cold",                   0, 0, true,  false, false,
659                               handle_cold_attribute },
660   { "hot",                    0, 0, true,  false, false,
661                               handle_hot_attribute },
662   { "warning",                1, 1, true,  false, false,
663                               handle_error_attribute },
664   { "error",                  1, 1, true,  false, false,
665                               handle_error_attribute },
666   { NULL,                     0, 0, false, false, false, NULL }
667 };
668
669 /* Give the specifications for the format attributes, used by C and all
670    descendants.  */
671
672 const struct attribute_spec c_common_format_attribute_table[] =
673 {
674   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
675   { "format",                 3, 3, false, true,  true,
676                               handle_format_attribute },
677   { "format_arg",             1, 1, false, true,  true,
678                               handle_format_arg_attribute },
679   { NULL,                     0, 0, false, false, false, NULL }
680 };
681
682 /* Push current bindings for the function name VAR_DECLS.  */
683
684 void
685 start_fname_decls (void)
686 {
687   unsigned ix;
688   tree saved = NULL_TREE;
689
690   for (ix = 0; fname_vars[ix].decl; ix++)
691     {
692       tree decl = *fname_vars[ix].decl;
693
694       if (decl)
695         {
696           saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
697           *fname_vars[ix].decl = NULL_TREE;
698         }
699     }
700   if (saved || saved_function_name_decls)
701     /* Normally they'll have been NULL, so only push if we've got a
702        stack, or they are non-NULL.  */
703     saved_function_name_decls = tree_cons (saved, NULL_TREE,
704                                            saved_function_name_decls);
705 }
706
707 /* Finish up the current bindings, adding them into the current function's
708    statement tree.  This must be done _before_ finish_stmt_tree is called.
709    If there is no current function, we must be at file scope and no statements
710    are involved. Pop the previous bindings.  */
711
712 void
713 finish_fname_decls (void)
714 {
715   unsigned ix;
716   tree stmts = NULL_TREE;
717   tree stack = saved_function_name_decls;
718
719   for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
720     append_to_statement_list (TREE_VALUE (stack), &stmts);
721
722   if (stmts)
723     {
724       tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
725
726       if (TREE_CODE (*bodyp) == BIND_EXPR)
727         bodyp = &BIND_EXPR_BODY (*bodyp);
728
729       append_to_statement_list_force (*bodyp, &stmts);
730       *bodyp = stmts;
731     }
732
733   for (ix = 0; fname_vars[ix].decl; ix++)
734     *fname_vars[ix].decl = NULL_TREE;
735
736   if (stack)
737     {
738       /* We had saved values, restore them.  */
739       tree saved;
740
741       for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
742         {
743           tree decl = TREE_PURPOSE (saved);
744           unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
745
746           *fname_vars[ix].decl = decl;
747         }
748       stack = TREE_CHAIN (stack);
749     }
750   saved_function_name_decls = stack;
751 }
752
753 /* Return the text name of the current function, suitably prettified
754    by PRETTY_P.  Return string must be freed by caller.  */
755
756 const char *
757 fname_as_string (int pretty_p)
758 {
759   const char *name = "top level";
760   char *namep;
761   int vrb = 2, len;
762   cpp_string cstr = { 0, 0 }, strname;
763
764   if (!pretty_p)
765     {
766       name = "";
767       vrb = 0;
768     }
769
770   if (current_function_decl)
771     name = lang_hooks.decl_printable_name (current_function_decl, vrb);
772
773   len = strlen (name) + 3; /* Two for '"'s.  One for NULL.  */
774
775   namep = XNEWVEC (char, len);
776   snprintf (namep, len, "\"%s\"", name);
777   strname.text = (unsigned char *) namep;
778   strname.len = len - 1;
779
780   if (cpp_interpret_string (parse_in, &strname, 1, &cstr, false))
781     {
782       XDELETEVEC (namep);
783       return (const char *) cstr.text;
784     }
785
786   return namep;
787 }
788
789 /* Expand DECL if it declares an entity not handled by the
790    common code.  */
791
792 int
793 c_expand_decl (tree decl)
794 {
795   if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
796     {
797       /* Let the back-end know about this variable.  */
798       if (!anon_aggr_type_p (TREE_TYPE (decl)))
799         emit_local_var (decl);
800       else
801         expand_anon_union_decl (decl, NULL_TREE,
802                                 DECL_ANON_UNION_ELEMS (decl));
803     }
804   else
805     return 0;
806
807   return 1;
808 }
809
810
811 /* Return the VAR_DECL for a const char array naming the current
812    function. If the VAR_DECL has not yet been created, create it
813    now. RID indicates how it should be formatted and IDENTIFIER_NODE
814    ID is its name (unfortunately C and C++ hold the RID values of
815    keywords in different places, so we can't derive RID from ID in
816    this language independent code.  */
817
818 tree
819 fname_decl (unsigned int rid, tree id)
820 {
821   unsigned ix;
822   tree decl = NULL_TREE;
823
824   for (ix = 0; fname_vars[ix].decl; ix++)
825     if (fname_vars[ix].rid == rid)
826       break;
827
828   decl = *fname_vars[ix].decl;
829   if (!decl)
830     {
831       /* If a tree is built here, it would normally have the lineno of
832          the current statement.  Later this tree will be moved to the
833          beginning of the function and this line number will be wrong.
834          To avoid this problem set the lineno to 0 here; that prevents
835          it from appearing in the RTL.  */
836       tree stmts;
837       location_t saved_location = input_location;
838       input_location = UNKNOWN_LOCATION;
839
840       stmts = push_stmt_list ();
841       decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
842       stmts = pop_stmt_list (stmts);
843       if (!IS_EMPTY_STMT (stmts))
844         saved_function_name_decls
845           = tree_cons (decl, stmts, saved_function_name_decls);
846       *fname_vars[ix].decl = decl;
847       input_location = saved_location;
848     }
849   if (!ix && !current_function_decl)
850     pedwarn ("%qD is not defined outside of function scope", decl);
851
852   return decl;
853 }
854
855 /* Given a STRING_CST, give it a suitable array-of-chars data type.  */
856
857 tree
858 fix_string_type (tree value)
859 {
860   const int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
861   const int wide_flag = TREE_TYPE (value) == wchar_array_type_node;
862   int length = TREE_STRING_LENGTH (value);
863   int nchars;
864   tree e_type, i_type, a_type;
865
866   /* Compute the number of elements, for the array type.  */
867   nchars = wide_flag ? length / wchar_bytes : length;
868
869   /* C89 2.2.4.1, C99 5.2.4.1 (Translation limits).  The analogous
870      limit in C++98 Annex B is very large (65536) and is not normative,
871      so we do not diagnose it (warn_overlength_strings is forced off
872      in c_common_post_options).  */
873   if (warn_overlength_strings)
874     {
875       const int nchars_max = flag_isoc99 ? 4095 : 509;
876       const int relevant_std = flag_isoc99 ? 99 : 90;
877       if (nchars - 1 > nchars_max)
878         /* Translators: The %d after 'ISO C' will be 90 or 99.  Do not
879            separate the %d from the 'C'.  'ISO' should not be
880            translated, but it may be moved after 'C%d' in languages
881            where modifiers follow nouns.  */
882         pedwarn ("string length %qd is greater than the length %qd "
883                  "ISO C%d compilers are required to support",
884                  nchars - 1, nchars_max, relevant_std);
885     }
886
887   /* Create the array type for the string constant.  The ISO C++
888      standard says that a string literal has type `const char[N]' or
889      `const wchar_t[N]'.  We use the same logic when invoked as a C
890      front-end with -Wwrite-strings.
891      ??? We should change the type of an expression depending on the
892      state of a warning flag.  We should just be warning -- see how
893      this is handled in the C++ front-end for the deprecated implicit
894      conversion from string literals to `char*' or `wchar_t*'.
895
896      The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
897      array type being the unqualified version of that type.
898      Therefore, if we are constructing an array of const char, we must
899      construct the matching unqualified array type first.  The C front
900      end does not require this, but it does no harm, so we do it
901      unconditionally.  */
902   e_type = wide_flag ? wchar_type_node : char_type_node;
903   i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
904   a_type = build_array_type (e_type, i_type);
905   if (c_dialect_cxx() || warn_write_strings)
906     a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
907
908   TREE_TYPE (value) = a_type;
909   TREE_CONSTANT (value) = 1;
910   TREE_INVARIANT (value) = 1;
911   TREE_READONLY (value) = 1;
912   TREE_STATIC (value) = 1;
913   return value;
914 }
915 \f
916 /* Print a warning if a constant expression had overflow in folding.
917    Invoke this function on every expression that the language
918    requires to be a constant expression.
919    Note the ANSI C standard says it is erroneous for a
920    constant expression to overflow.  */
921
922 void
923 constant_expression_warning (tree value)
924 {
925   if (warn_overflow && pedantic 
926       && (TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
927           || TREE_CODE (value) == FIXED_CST
928           || TREE_CODE (value) == VECTOR_CST
929           || TREE_CODE (value) == COMPLEX_CST)
930       && TREE_OVERFLOW (value))
931     pedwarn ("overflow in constant expression");
932 }
933
934 /* The same as above but print an unconditional error.  */
935 void
936 constant_expression_error (tree value)
937 {
938   if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
939        || TREE_CODE (value) == FIXED_CST
940        || TREE_CODE (value) == VECTOR_CST
941        || TREE_CODE (value) == COMPLEX_CST)
942       && TREE_OVERFLOW (value))
943     error ("overflow in constant expression");
944 }
945
946 /* Print a warning if an expression had overflow in folding and its
947    operands hadn't.
948
949    Invoke this function on every expression that
950    (1) appears in the source code, and
951    (2) is a constant expression that overflowed, and
952    (3) is not already checked by convert_and_check;
953    however, do not invoke this function on operands of explicit casts
954    or when the expression is the result of an operator and any operand
955    already overflowed.  */
956
957 void
958 overflow_warning (tree value)
959 {
960   if (skip_evaluation) return;
961
962   switch (TREE_CODE (value))
963     {
964     case INTEGER_CST:
965       warning (OPT_Woverflow, "integer overflow in expression");
966       break;
967       
968     case REAL_CST:
969       warning (OPT_Woverflow, "floating point overflow in expression");
970       break;
971       
972     case FIXED_CST:
973       warning (OPT_Woverflow, "fixed-point overflow in expression");
974       break;
975
976     case VECTOR_CST:
977       warning (OPT_Woverflow, "vector overflow in expression");
978       break;
979       
980     case COMPLEX_CST:
981       if (TREE_CODE (TREE_REALPART (value)) == INTEGER_CST)
982         warning (OPT_Woverflow, "complex integer overflow in expression");
983       else if (TREE_CODE (TREE_REALPART (value)) == REAL_CST)
984         warning (OPT_Woverflow, "complex floating point overflow in expression");
985       break;
986
987     default:
988       break;
989     }
990 }
991
992
993 /* Warn about use of a logical || / && operator being used in a
994    context where it is likely that the bitwise equivalent was intended
995    by the programmer. CODE is the TREE_CODE of the operator, ARG1
996    and ARG2 the arguments.  */
997
998 void
999 warn_logical_operator (enum tree_code code, tree arg1, tree
1000     arg2)
1001 {
1002   switch (code)
1003     {
1004       case TRUTH_ANDIF_EXPR:
1005       case TRUTH_ORIF_EXPR:
1006       case TRUTH_OR_EXPR:
1007       case TRUTH_AND_EXPR:
1008         if (!TREE_NO_WARNING (arg1)
1009             && INTEGRAL_TYPE_P (TREE_TYPE (arg1))
1010             && !CONSTANT_CLASS_P (arg1)
1011             && TREE_CODE (arg2) == INTEGER_CST
1012             && !integer_zerop (arg2))
1013           {
1014             warning (OPT_Wlogical_op,
1015                      "logical %<%s%> with non-zero constant "
1016                      "will always evaluate as true",
1017                      ((code == TRUTH_ANDIF_EXPR)
1018                       || (code == TRUTH_AND_EXPR)) ? "&&" : "||");
1019             TREE_NO_WARNING (arg1) = true;
1020           }
1021         break;
1022       default:
1023         break;
1024     }
1025 }
1026
1027
1028 /* Print a warning about casts that might indicate violation
1029    of strict aliasing rules if -Wstrict-aliasing is used and
1030    strict aliasing mode is in effect. OTYPE is the original
1031    TREE_TYPE of EXPR, and TYPE the type we're casting to. */
1032
1033 bool
1034 strict_aliasing_warning (tree otype, tree type, tree expr)
1035 {
1036   if (!(flag_strict_aliasing && POINTER_TYPE_P (type) 
1037         && POINTER_TYPE_P (otype) && !VOID_TYPE_P (TREE_TYPE (type))))
1038     return false;
1039
1040   if ((warn_strict_aliasing > 1) && TREE_CODE (expr) == ADDR_EXPR
1041       && (DECL_P (TREE_OPERAND (expr, 0))
1042           || handled_component_p (TREE_OPERAND (expr, 0))))
1043     {
1044       /* Casting the address of an object to non void pointer. Warn
1045          if the cast breaks type based aliasing.  */
1046       if (!COMPLETE_TYPE_P (TREE_TYPE (type)) && warn_strict_aliasing == 2)
1047         {
1048           warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
1049                    "might break strict-aliasing rules");
1050           return true;
1051         }
1052       else
1053         {
1054           /* warn_strict_aliasing >= 3.   This includes the default (3).  
1055              Only warn if the cast is dereferenced immediately.  */
1056           alias_set_type set1 =
1057             get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
1058           alias_set_type set2 = get_alias_set (TREE_TYPE (type));
1059
1060           if (!alias_sets_conflict_p (set1, set2))
1061             {
1062               warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1063                        "pointer will break strict-aliasing rules");
1064               return true;
1065             }
1066           else if (warn_strict_aliasing == 2
1067                    && !alias_sets_must_conflict_p (set1, set2))
1068             {
1069               warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1070                        "pointer might break strict-aliasing rules");
1071               return true;
1072             }
1073         }
1074     }
1075   else
1076     if ((warn_strict_aliasing == 1) && !VOID_TYPE_P (TREE_TYPE (otype)))
1077       {
1078         /* At this level, warn for any conversions, even if an address is
1079            not taken in the same statement.  This will likely produce many
1080            false positives, but could be useful to pinpoint problems that
1081            are not revealed at higher levels.  */
1082         alias_set_type set1 = get_alias_set (TREE_TYPE (otype));
1083         alias_set_type set2 = get_alias_set (TREE_TYPE (type));
1084         if (!COMPLETE_TYPE_P (type)
1085             || !alias_sets_must_conflict_p (set1, set2))
1086           {
1087             warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1088                      "pointer might break strict-aliasing rules");
1089             return true;
1090           }
1091       }
1092
1093   return false;
1094 }
1095
1096 /* Print a warning about if (); or if () .. else; constructs
1097    via the special empty statement node that we create.  INNER_THEN
1098    and INNER_ELSE are the statement lists of the if and the else
1099    block.  */
1100
1101 void
1102 empty_if_body_warning (tree inner_then, tree inner_else)
1103 {
1104   if (TREE_CODE (inner_then) == STATEMENT_LIST
1105       && STATEMENT_LIST_TAIL (inner_then))
1106     inner_then = STATEMENT_LIST_TAIL (inner_then)->stmt;
1107
1108   if (inner_else && TREE_CODE (inner_else) == STATEMENT_LIST
1109       && STATEMENT_LIST_TAIL (inner_else))
1110     inner_else = STATEMENT_LIST_TAIL (inner_else)->stmt;
1111
1112   if (IS_EMPTY_STMT (inner_then) && !inner_else)
1113     warning (OPT_Wempty_body, "%Hsuggest braces around empty body "
1114              "in an %<if%> statement", EXPR_LOCUS (inner_then));
1115
1116   else if (inner_else && IS_EMPTY_STMT (inner_else))
1117     warning (OPT_Wempty_body, "%Hsuggest braces around empty body "
1118              "in an %<else%> statement", EXPR_LOCUS (inner_else));
1119 }
1120
1121 /* Warn for unlikely, improbable, or stupid DECL declarations
1122    of `main'.  */
1123
1124 void
1125 check_main_parameter_types (tree decl)
1126 {
1127   tree args;
1128   int argct = 0;
1129
1130   for (args = TYPE_ARG_TYPES (TREE_TYPE (decl)); args;
1131       args = TREE_CHAIN (args))
1132    {
1133      tree type = args ? TREE_VALUE (args) : 0;
1134
1135      if (type == void_type_node || type == error_mark_node )
1136        break;
1137
1138      ++argct;
1139      switch (argct)
1140        {
1141        case 1:
1142          if (TYPE_MAIN_VARIANT (type) != integer_type_node)
1143            pedwarn ("first argument of %q+D should be %<int%>", decl);
1144          break;
1145
1146        case 2:
1147          if (TREE_CODE (type) != POINTER_TYPE
1148              || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1149              || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1150                  != char_type_node))
1151            pedwarn ("second argument of %q+D should be %<char **%>",
1152                     decl);
1153          break;
1154
1155        case 3:
1156          if (TREE_CODE (type) != POINTER_TYPE
1157              || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1158              || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1159                  != char_type_node))
1160            pedwarn ("third argument of %q+D should probably be "
1161                     "%<char **%>", decl);
1162          break;
1163        }
1164    }
1165
1166   /* It is intentional that this message does not mention the third
1167     argument because it's only mentioned in an appendix of the
1168     standard.  */
1169   if (argct > 0 && (argct < 2 || argct > 3))
1170    pedwarn ("%q+D takes only zero or two arguments", decl);
1171 }
1172
1173 /* True if vector types T1 and T2 can be converted to each other
1174    without an explicit cast.  If EMIT_LAX_NOTE is true, and T1 and T2
1175    can only be converted with -flax-vector-conversions yet that is not
1176    in effect, emit a note telling the user about that option if such
1177    a note has not previously been emitted.  */
1178 bool
1179 vector_types_convertible_p (const_tree t1, const_tree t2, bool emit_lax_note)
1180 {
1181   static bool emitted_lax_note = false;
1182   bool convertible_lax;
1183
1184   if ((targetm.vector_opaque_p (t1) || targetm.vector_opaque_p (t2))
1185       && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1186     return true;
1187
1188   convertible_lax =
1189     (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
1190      && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
1191          TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
1192      && (INTEGRAL_TYPE_P (TREE_TYPE (t1))
1193          == INTEGRAL_TYPE_P (TREE_TYPE (t2))));
1194
1195   if (!convertible_lax || flag_lax_vector_conversions)
1196     return convertible_lax;
1197
1198   if (TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
1199       && lang_hooks.types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1200     return true;
1201
1202   if (emit_lax_note && !emitted_lax_note)
1203     {
1204       emitted_lax_note = true;
1205       inform ("use -flax-vector-conversions to permit "
1206               "conversions between vectors with differing "
1207               "element types or numbers of subparts");
1208     }
1209
1210   return false;
1211 }
1212
1213 /* Warns if the conversion of EXPR to TYPE may alter a value.
1214    This is a helper function for warnings_for_convert_and_check.  */
1215
1216 static void
1217 conversion_warning (tree type, tree expr)
1218 {
1219   bool give_warning = false;
1220
1221   unsigned int formal_prec = TYPE_PRECISION (type);
1222
1223   if (!warn_conversion && !warn_sign_conversion)
1224     return;
1225
1226   if (TREE_CODE (expr) == REAL_CST || TREE_CODE (expr) == INTEGER_CST)
1227     {
1228       /* Warn for real constant that is not an exact integer converted
1229          to integer type.  */
1230       if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1231           && TREE_CODE (type) == INTEGER_TYPE)
1232         {
1233           if (!real_isinteger (TREE_REAL_CST_PTR (expr), TYPE_MODE (TREE_TYPE (expr))))
1234             give_warning = true;
1235         }
1236       /* Warn for an integer constant that does not fit into integer type.  */
1237       else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1238                && TREE_CODE (type) == INTEGER_TYPE
1239                && !int_fits_type_p (expr, type))
1240         {
1241           if (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr)))
1242             warning (OPT_Wsign_conversion,
1243                      "negative integer implicitly converted to unsigned type");
1244           else if (!TYPE_UNSIGNED (type) && TYPE_UNSIGNED (TREE_TYPE (expr)))
1245             warning (OPT_Wsign_conversion,
1246                      "conversion of unsigned constant value to negative integer");
1247           else
1248             give_warning = true;
1249         }
1250       else if (TREE_CODE (type) == REAL_TYPE)
1251         {
1252           /* Warn for an integer constant that does not fit into real type.  */
1253           if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE)
1254             {
1255               REAL_VALUE_TYPE a = real_value_from_int_cst (0, expr);
1256               if (!exact_real_truncate (TYPE_MODE (type), &a))
1257                 give_warning = true;
1258             }
1259           /* Warn for a real constant that does not fit into a smaller
1260              real type.  */
1261           else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1262                    && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1263             {
1264               REAL_VALUE_TYPE a = TREE_REAL_CST (expr);
1265               if (!exact_real_truncate (TYPE_MODE (type), &a))
1266                 give_warning = true;
1267             }
1268         }
1269
1270       if (give_warning)
1271         warning (OPT_Wconversion,
1272                  "conversion to %qT alters %qT constant value",
1273                  type, TREE_TYPE (expr));
1274     }
1275   else /* 'expr' is not a constant.  */
1276     {
1277       /* Warn for real types converted to integer types.  */
1278       if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1279           && TREE_CODE (type) == INTEGER_TYPE)
1280         give_warning = true;
1281
1282       else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1283                && TREE_CODE (type) == INTEGER_TYPE)
1284         {
1285           /* Don't warn about unsigned char y = 0xff, x = (int) y;  */
1286           expr = get_unwidened (expr, 0);
1287
1288           /* Warn for integer types converted to smaller integer types.  */
1289           if (formal_prec < TYPE_PRECISION (TREE_TYPE (expr))) 
1290             give_warning = true;
1291
1292           /* When they are the same width but different signedness,
1293              then the value may change.  */
1294           else if ((formal_prec == TYPE_PRECISION (TREE_TYPE (expr))
1295                     && TYPE_UNSIGNED (TREE_TYPE (expr)) != TYPE_UNSIGNED (type))
1296                    /* Even when converted to a bigger type, if the type is
1297                       unsigned but expr is signed, then negative values
1298                       will be changed.  */
1299                    || (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr))))
1300             warning (OPT_Wsign_conversion,
1301                      "conversion to %qT from %qT may change the sign of the result",
1302                      type, TREE_TYPE (expr));
1303         }
1304
1305       /* Warn for integer types converted to real types if and only if
1306          all the range of values of the integer type cannot be
1307          represented by the real type.  */
1308       else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1309                && TREE_CODE (type) == REAL_TYPE)
1310         {
1311           tree type_low_bound = TYPE_MIN_VALUE (TREE_TYPE (expr));
1312           tree type_high_bound = TYPE_MAX_VALUE (TREE_TYPE (expr));
1313           REAL_VALUE_TYPE real_low_bound = real_value_from_int_cst (0, type_low_bound);
1314           REAL_VALUE_TYPE real_high_bound = real_value_from_int_cst (0, type_high_bound);
1315
1316           if (!exact_real_truncate (TYPE_MODE (type), &real_low_bound)
1317               || !exact_real_truncate (TYPE_MODE (type), &real_high_bound))
1318             give_warning = true;
1319         }
1320
1321       /* Warn for real types converted to smaller real types.  */
1322       else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1323                && TREE_CODE (type) == REAL_TYPE
1324                && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1325         give_warning = true;
1326
1327
1328       if (give_warning)
1329         warning (OPT_Wconversion,
1330                  "conversion to %qT from %qT may alter its value",
1331                  type, TREE_TYPE (expr));
1332     }
1333 }
1334
1335 /* Produce warnings after a conversion. RESULT is the result of
1336    converting EXPR to TYPE.  This is a helper function for
1337    convert_and_check and cp_convert_and_check.  */
1338
1339 void
1340 warnings_for_convert_and_check (tree type, tree expr, tree result)
1341 {
1342   if (TREE_CODE (expr) == INTEGER_CST
1343       && (TREE_CODE (type) == INTEGER_TYPE
1344           || TREE_CODE (type) == ENUMERAL_TYPE)
1345       && !int_fits_type_p (expr, type))
1346     {
1347       /* Do not diagnose overflow in a constant expression merely
1348          because a conversion overflowed.  */
1349       if (TREE_OVERFLOW (result))
1350         TREE_OVERFLOW (result) = TREE_OVERFLOW (expr);
1351
1352       if (TYPE_UNSIGNED (type))
1353         {
1354           /* This detects cases like converting -129 or 256 to
1355              unsigned char.  */
1356           if (!int_fits_type_p (expr, c_common_signed_type (type)))
1357             warning (OPT_Woverflow,
1358                      "large integer implicitly truncated to unsigned type");
1359           else
1360             conversion_warning (type, expr);
1361         }
1362       else if (!int_fits_type_p (expr, c_common_unsigned_type (type))) 
1363         warning (OPT_Woverflow,
1364                  "overflow in implicit constant conversion");
1365       /* No warning for converting 0x80000000 to int.  */
1366       else if (pedantic
1367                && (TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE
1368                    || TYPE_PRECISION (TREE_TYPE (expr))
1369                    != TYPE_PRECISION (type)))
1370         warning (OPT_Woverflow,
1371                  "overflow in implicit constant conversion");
1372
1373       else
1374         conversion_warning (type, expr);
1375     }
1376   else if ((TREE_CODE (result) == INTEGER_CST
1377             || TREE_CODE (result) == FIXED_CST) && TREE_OVERFLOW (result))
1378     warning (OPT_Woverflow,
1379              "overflow in implicit constant conversion");
1380   else
1381     conversion_warning (type, expr);
1382 }
1383
1384
1385 /* Convert EXPR to TYPE, warning about conversion problems with constants.
1386    Invoke this function on every expression that is converted implicitly,
1387    i.e. because of language rules and not because of an explicit cast.  */
1388
1389 tree
1390 convert_and_check (tree type, tree expr)
1391 {
1392   tree result;
1393
1394   if (TREE_TYPE (expr) == type)
1395     return expr;
1396   
1397   result = convert (type, expr);
1398
1399   if (!skip_evaluation && !TREE_OVERFLOW_P (expr) && result != error_mark_node)
1400     warnings_for_convert_and_check (type, expr, result);
1401
1402   return result;
1403 }
1404 \f
1405 /* A node in a list that describes references to variables (EXPR), which are
1406    either read accesses if WRITER is zero, or write accesses, in which case
1407    WRITER is the parent of EXPR.  */
1408 struct tlist
1409 {
1410   struct tlist *next;
1411   tree expr, writer;
1412 };
1413
1414 /* Used to implement a cache the results of a call to verify_tree.  We only
1415    use this for SAVE_EXPRs.  */
1416 struct tlist_cache
1417 {
1418   struct tlist_cache *next;
1419   struct tlist *cache_before_sp;
1420   struct tlist *cache_after_sp;
1421   tree expr;
1422 };
1423
1424 /* Obstack to use when allocating tlist structures, and corresponding
1425    firstobj.  */
1426 static struct obstack tlist_obstack;
1427 static char *tlist_firstobj = 0;
1428
1429 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
1430    warnings.  */
1431 static struct tlist *warned_ids;
1432 /* SAVE_EXPRs need special treatment.  We process them only once and then
1433    cache the results.  */
1434 static struct tlist_cache *save_expr_cache;
1435
1436 static void add_tlist (struct tlist **, struct tlist *, tree, int);
1437 static void merge_tlist (struct tlist **, struct tlist *, int);
1438 static void verify_tree (tree, struct tlist **, struct tlist **, tree);
1439 static int warning_candidate_p (tree);
1440 static void warn_for_collisions (struct tlist *);
1441 static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
1442 static struct tlist *new_tlist (struct tlist *, tree, tree);
1443
1444 /* Create a new struct tlist and fill in its fields.  */
1445 static struct tlist *
1446 new_tlist (struct tlist *next, tree t, tree writer)
1447 {
1448   struct tlist *l;
1449   l = XOBNEW (&tlist_obstack, struct tlist);
1450   l->next = next;
1451   l->expr = t;
1452   l->writer = writer;
1453   return l;
1454 }
1455
1456 /* Add duplicates of the nodes found in ADD to the list *TO.  If EXCLUDE_WRITER
1457    is nonnull, we ignore any node we find which has a writer equal to it.  */
1458
1459 static void
1460 add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
1461 {
1462   while (add)
1463     {
1464       struct tlist *next = add->next;
1465       if (!copy)
1466         add->next = *to;
1467       if (!exclude_writer || add->writer != exclude_writer)
1468         *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
1469       add = next;
1470     }
1471 }
1472
1473 /* Merge the nodes of ADD into TO.  This merging process is done so that for
1474    each variable that already exists in TO, no new node is added; however if
1475    there is a write access recorded in ADD, and an occurrence on TO is only
1476    a read access, then the occurrence in TO will be modified to record the
1477    write.  */
1478
1479 static void
1480 merge_tlist (struct tlist **to, struct tlist *add, int copy)
1481 {
1482   struct tlist **end = to;
1483
1484   while (*end)
1485     end = &(*end)->next;
1486
1487   while (add)
1488     {
1489       int found = 0;
1490       struct tlist *tmp2;
1491       struct tlist *next = add->next;
1492
1493       for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
1494         if (tmp2->expr == add->expr)
1495           {
1496             found = 1;
1497             if (!tmp2->writer)
1498               tmp2->writer = add->writer;
1499           }
1500       if (!found)
1501         {
1502           *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
1503           end = &(*end)->next;
1504           *end = 0;
1505         }
1506       add = next;
1507     }
1508 }
1509
1510 /* WRITTEN is a variable, WRITER is its parent.  Warn if any of the variable
1511    references in list LIST conflict with it, excluding reads if ONLY writers
1512    is nonzero.  */
1513
1514 static void
1515 warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
1516                        int only_writes)
1517 {
1518   struct tlist *tmp;
1519
1520   /* Avoid duplicate warnings.  */
1521   for (tmp = warned_ids; tmp; tmp = tmp->next)
1522     if (tmp->expr == written)
1523       return;
1524
1525   while (list)
1526     {
1527       if (list->expr == written
1528           && list->writer != writer
1529           && (!only_writes || list->writer)
1530           && DECL_NAME (list->expr))
1531         {
1532           warned_ids = new_tlist (warned_ids, written, NULL_TREE);
1533           warning (OPT_Wsequence_point, "operation on %qE may be undefined",
1534                    list->expr);
1535         }
1536       list = list->next;
1537     }
1538 }
1539
1540 /* Given a list LIST of references to variables, find whether any of these
1541    can cause conflicts due to missing sequence points.  */
1542
1543 static void
1544 warn_for_collisions (struct tlist *list)
1545 {
1546   struct tlist *tmp;
1547
1548   for (tmp = list; tmp; tmp = tmp->next)
1549     {
1550       if (tmp->writer)
1551         warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
1552     }
1553 }
1554
1555 /* Return nonzero if X is a tree that can be verified by the sequence point
1556    warnings.  */
1557 static int
1558 warning_candidate_p (tree x)
1559 {
1560   return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
1561 }
1562
1563 /* Walk the tree X, and record accesses to variables.  If X is written by the
1564    parent tree, WRITER is the parent.
1565    We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP.  If this
1566    expression or its only operand forces a sequence point, then everything up
1567    to the sequence point is stored in PBEFORE_SP.  Everything else gets stored
1568    in PNO_SP.
1569    Once we return, we will have emitted warnings if any subexpression before
1570    such a sequence point could be undefined.  On a higher level, however, the
1571    sequence point may not be relevant, and we'll merge the two lists.
1572
1573    Example: (b++, a) + b;
1574    The call that processes the COMPOUND_EXPR will store the increment of B
1575    in PBEFORE_SP, and the use of A in PNO_SP.  The higher-level call that
1576    processes the PLUS_EXPR will need to merge the two lists so that
1577    eventually, all accesses end up on the same list (and we'll warn about the
1578    unordered subexpressions b++ and b.
1579
1580    A note on merging.  If we modify the former example so that our expression
1581    becomes
1582      (b++, b) + a
1583    care must be taken not simply to add all three expressions into the final
1584    PNO_SP list.  The function merge_tlist takes care of that by merging the
1585    before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1586    way, so that no more than one access to B is recorded.  */
1587
1588 static void
1589 verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
1590              tree writer)
1591 {
1592   struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1593   enum tree_code code;
1594   enum tree_code_class cl;
1595
1596   /* X may be NULL if it is the operand of an empty statement expression
1597      ({ }).  */
1598   if (x == NULL)
1599     return;
1600
1601  restart:
1602   code = TREE_CODE (x);
1603   cl = TREE_CODE_CLASS (code);
1604
1605   if (warning_candidate_p (x))
1606     {
1607       *pno_sp = new_tlist (*pno_sp, x, writer);
1608       return;
1609     }
1610
1611   switch (code)
1612     {
1613     case CONSTRUCTOR:
1614       return;
1615
1616     case COMPOUND_EXPR:
1617     case TRUTH_ANDIF_EXPR:
1618     case TRUTH_ORIF_EXPR:
1619       tmp_before = tmp_nosp = tmp_list3 = 0;
1620       verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1621       warn_for_collisions (tmp_nosp);
1622       merge_tlist (pbefore_sp, tmp_before, 0);
1623       merge_tlist (pbefore_sp, tmp_nosp, 0);
1624       verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
1625       merge_tlist (pbefore_sp, tmp_list3, 0);
1626       return;
1627
1628     case COND_EXPR:
1629       tmp_before = tmp_list2 = 0;
1630       verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
1631       warn_for_collisions (tmp_list2);
1632       merge_tlist (pbefore_sp, tmp_before, 0);
1633       merge_tlist (pbefore_sp, tmp_list2, 1);
1634
1635       tmp_list3 = tmp_nosp = 0;
1636       verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
1637       warn_for_collisions (tmp_nosp);
1638       merge_tlist (pbefore_sp, tmp_list3, 0);
1639
1640       tmp_list3 = tmp_list2 = 0;
1641       verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
1642       warn_for_collisions (tmp_list2);
1643       merge_tlist (pbefore_sp, tmp_list3, 0);
1644       /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1645          two first, to avoid warning for (a ? b++ : b++).  */
1646       merge_tlist (&tmp_nosp, tmp_list2, 0);
1647       add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1648       return;
1649
1650     case PREDECREMENT_EXPR:
1651     case PREINCREMENT_EXPR:
1652     case POSTDECREMENT_EXPR:
1653     case POSTINCREMENT_EXPR:
1654       verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
1655       return;
1656
1657     case MODIFY_EXPR:
1658       tmp_before = tmp_nosp = tmp_list3 = 0;
1659       verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
1660       verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
1661       /* Expressions inside the LHS are not ordered wrt. the sequence points
1662          in the RHS.  Example:
1663            *a = (a++, 2)
1664          Despite the fact that the modification of "a" is in the before_sp
1665          list (tmp_before), it conflicts with the use of "a" in the LHS.
1666          We can handle this by adding the contents of tmp_list3
1667          to those of tmp_before, and redoing the collision warnings for that
1668          list.  */
1669       add_tlist (&tmp_before, tmp_list3, x, 1);
1670       warn_for_collisions (tmp_before);
1671       /* Exclude the LHS itself here; we first have to merge it into the
1672          tmp_nosp list.  This is done to avoid warning for "a = a"; if we
1673          didn't exclude the LHS, we'd get it twice, once as a read and once
1674          as a write.  */
1675       add_tlist (pno_sp, tmp_list3, x, 0);
1676       warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
1677
1678       merge_tlist (pbefore_sp, tmp_before, 0);
1679       if (warning_candidate_p (TREE_OPERAND (x, 0)))
1680         merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
1681       add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
1682       return;
1683
1684     case CALL_EXPR:
1685       /* We need to warn about conflicts among arguments and conflicts between
1686          args and the function address.  Side effects of the function address,
1687          however, are not ordered by the sequence point of the call.  */
1688       {
1689         call_expr_arg_iterator iter;
1690         tree arg;
1691         tmp_before = tmp_nosp = 0; 
1692         verify_tree (CALL_EXPR_FN (x), &tmp_before, &tmp_nosp, NULL_TREE);
1693         FOR_EACH_CALL_EXPR_ARG (arg, iter, x)
1694           {
1695             tmp_list2 = tmp_list3 = 0;
1696             verify_tree (arg, &tmp_list2, &tmp_list3, NULL_TREE);
1697             merge_tlist (&tmp_list3, tmp_list2, 0);
1698             add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
1699           }
1700         add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
1701         warn_for_collisions (tmp_before);
1702         add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
1703         return;
1704       }
1705
1706     case TREE_LIST:
1707       /* Scan all the list, e.g. indices of multi dimensional array.  */
1708       while (x)
1709         {
1710           tmp_before = tmp_nosp = 0;
1711           verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
1712           merge_tlist (&tmp_nosp, tmp_before, 0);
1713           add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1714           x = TREE_CHAIN (x);
1715         }
1716       return;
1717
1718     case SAVE_EXPR:
1719       {
1720         struct tlist_cache *t;
1721         for (t = save_expr_cache; t; t = t->next)
1722           if (t->expr == x)
1723             break;
1724
1725         if (!t)
1726           {
1727             t = XOBNEW (&tlist_obstack, struct tlist_cache);
1728             t->next = save_expr_cache;
1729             t->expr = x;
1730             save_expr_cache = t;
1731
1732             tmp_before = tmp_nosp = 0;
1733             verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1734             warn_for_collisions (tmp_nosp);
1735
1736             tmp_list3 = 0;
1737             while (tmp_nosp)
1738               {
1739                 struct tlist *t = tmp_nosp;
1740                 tmp_nosp = t->next;
1741                 merge_tlist (&tmp_list3, t, 0);
1742               }
1743             t->cache_before_sp = tmp_before;
1744             t->cache_after_sp = tmp_list3;
1745           }
1746         merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1747         add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1748         return;
1749       }
1750
1751     default:
1752       /* For other expressions, simply recurse on their operands.
1753          Manual tail recursion for unary expressions.
1754          Other non-expressions need not be processed.  */
1755       if (cl == tcc_unary)
1756         {
1757           x = TREE_OPERAND (x, 0);
1758           writer = 0;
1759           goto restart;
1760         }
1761       else if (IS_EXPR_CODE_CLASS (cl))
1762         {
1763           int lp;
1764           int max = TREE_OPERAND_LENGTH (x);
1765           for (lp = 0; lp < max; lp++)
1766             {
1767               tmp_before = tmp_nosp = 0;
1768               verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
1769               merge_tlist (&tmp_nosp, tmp_before, 0);
1770               add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1771             }
1772         }
1773       return;
1774     }
1775 }
1776
1777 /* Try to warn for undefined behavior in EXPR due to missing sequence
1778    points.  */
1779
1780 void
1781 verify_sequence_points (tree expr)
1782 {
1783   struct tlist *before_sp = 0, *after_sp = 0;
1784
1785   warned_ids = 0;
1786   save_expr_cache = 0;
1787   if (tlist_firstobj == 0)
1788     {
1789       gcc_obstack_init (&tlist_obstack);
1790       tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
1791     }
1792
1793   verify_tree (expr, &before_sp, &after_sp, 0);
1794   warn_for_collisions (after_sp);
1795   obstack_free (&tlist_obstack, tlist_firstobj);
1796 }
1797 \f
1798 /* Validate the expression after `case' and apply default promotions.  */
1799
1800 static tree
1801 check_case_value (tree value)
1802 {
1803   if (value == NULL_TREE)
1804     return value;
1805
1806   /* ??? Can we ever get nops here for a valid case value?  We
1807      shouldn't for C.  */
1808   STRIP_TYPE_NOPS (value);
1809   /* In C++, the following is allowed:
1810
1811        const int i = 3;
1812        switch (...) { case i: ... }
1813
1814      So, we try to reduce the VALUE to a constant that way.  */
1815   if (c_dialect_cxx ())
1816     {
1817       value = decl_constant_value (value);
1818       STRIP_TYPE_NOPS (value);
1819       value = fold (value);
1820     }
1821
1822   if (TREE_CODE (value) == INTEGER_CST)
1823     /* Promote char or short to int.  */
1824     value = perform_integral_promotions (value);
1825   else if (value != error_mark_node)
1826     {
1827       error ("case label does not reduce to an integer constant");
1828       value = error_mark_node;
1829     }
1830
1831   constant_expression_warning (value);
1832
1833   return value;
1834 }
1835 \f
1836 /* See if the case values LOW and HIGH are in the range of the original
1837    type (i.e. before the default conversion to int) of the switch testing
1838    expression.
1839    TYPE is the promoted type of the testing expression, and ORIG_TYPE is
1840    the type before promoting it.  CASE_LOW_P is a pointer to the lower
1841    bound of the case label, and CASE_HIGH_P is the upper bound or NULL
1842    if the case is not a case range.
1843    The caller has to make sure that we are not called with NULL for
1844    CASE_LOW_P (i.e. the default case).
1845    Returns true if the case label is in range of ORIG_TYPE (saturated or
1846    untouched) or false if the label is out of range.  */
1847
1848 static bool
1849 check_case_bounds (tree type, tree orig_type,
1850                    tree *case_low_p, tree *case_high_p)
1851 {
1852   tree min_value, max_value;
1853   tree case_low = *case_low_p;
1854   tree case_high = case_high_p ? *case_high_p : case_low;
1855
1856   /* If there was a problem with the original type, do nothing.  */
1857   if (orig_type == error_mark_node)
1858     return true;
1859
1860   min_value = TYPE_MIN_VALUE (orig_type);
1861   max_value = TYPE_MAX_VALUE (orig_type);
1862
1863   /* Case label is less than minimum for type.  */
1864   if (tree_int_cst_compare (case_low, min_value) < 0
1865       && tree_int_cst_compare (case_high, min_value) < 0)
1866     {
1867       warning (0, "case label value is less than minimum value for type");
1868       return false;
1869     }
1870
1871   /* Case value is greater than maximum for type.  */
1872   if (tree_int_cst_compare (case_low, max_value) > 0
1873       && tree_int_cst_compare (case_high, max_value) > 0)
1874     {
1875       warning (0, "case label value exceeds maximum value for type");
1876       return false;
1877     }
1878
1879   /* Saturate lower case label value to minimum.  */
1880   if (tree_int_cst_compare (case_high, min_value) >= 0
1881       && tree_int_cst_compare (case_low, min_value) < 0)
1882     {
1883       warning (0, "lower value in case label range"
1884                " less than minimum value for type");
1885       case_low = min_value;
1886     }
1887
1888   /* Saturate upper case label value to maximum.  */
1889   if (tree_int_cst_compare (case_low, max_value) <= 0
1890       && tree_int_cst_compare (case_high, max_value) > 0)
1891     {
1892       warning (0, "upper value in case label range"
1893                " exceeds maximum value for type");
1894       case_high = max_value;
1895     }
1896
1897   if (*case_low_p != case_low)
1898     *case_low_p = convert (type, case_low);
1899   if (case_high_p && *case_high_p != case_high)
1900     *case_high_p = convert (type, case_high);
1901
1902   return true;
1903 }
1904 \f
1905 /* Return an integer type with BITS bits of precision,
1906    that is unsigned if UNSIGNEDP is nonzero, otherwise signed.  */
1907
1908 tree
1909 c_common_type_for_size (unsigned int bits, int unsignedp)
1910 {
1911   if (bits == TYPE_PRECISION (integer_type_node))
1912     return unsignedp ? unsigned_type_node : integer_type_node;
1913
1914   if (bits == TYPE_PRECISION (signed_char_type_node))
1915     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1916
1917   if (bits == TYPE_PRECISION (short_integer_type_node))
1918     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1919
1920   if (bits == TYPE_PRECISION (long_integer_type_node))
1921     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1922
1923   if (bits == TYPE_PRECISION (long_long_integer_type_node))
1924     return (unsignedp ? long_long_unsigned_type_node
1925             : long_long_integer_type_node);
1926
1927   if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
1928     return (unsignedp ? widest_unsigned_literal_type_node
1929             : widest_integer_literal_type_node);
1930
1931   if (bits <= TYPE_PRECISION (intQI_type_node))
1932     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1933
1934   if (bits <= TYPE_PRECISION (intHI_type_node))
1935     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1936
1937   if (bits <= TYPE_PRECISION (intSI_type_node))
1938     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1939
1940   if (bits <= TYPE_PRECISION (intDI_type_node))
1941     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1942
1943   return 0;
1944 }
1945
1946 /* Return a fixed-point type that has at least IBIT ibits and FBIT fbits
1947    that is unsigned if UNSIGNEDP is nonzero, otherwise signed;
1948    and saturating if SATP is nonzero, otherwise not saturating.  */
1949
1950 tree
1951 c_common_fixed_point_type_for_size (unsigned int ibit, unsigned int fbit,
1952                                     int unsignedp, int satp)
1953 {
1954   enum machine_mode mode;
1955   if (ibit == 0)
1956     mode = unsignedp ? UQQmode : QQmode;
1957   else
1958     mode = unsignedp ? UHAmode : HAmode;
1959
1960   for (; mode != VOIDmode; mode = GET_MODE_WIDER_MODE (mode))
1961     if (GET_MODE_IBIT (mode) >= ibit && GET_MODE_FBIT (mode) >= fbit)
1962       break;
1963
1964   if (mode == VOIDmode || !targetm.scalar_mode_supported_p (mode))
1965     {
1966       sorry ("GCC cannot support operators with integer types and "
1967              "fixed-point types that have too many integral and "
1968              "fractional bits together");
1969       return 0;
1970     }
1971
1972   return c_common_type_for_mode (mode, satp);
1973 }
1974
1975 /* Used for communication between c_common_type_for_mode and
1976    c_register_builtin_type.  */
1977 static GTY(()) tree registered_builtin_types;
1978
1979 /* Return a data type that has machine mode MODE.
1980    If the mode is an integer,
1981    then UNSIGNEDP selects between signed and unsigned types.
1982    If the mode is a fixed-point mode,
1983    then UNSIGNEDP selects between saturating and nonsaturating types.  */
1984
1985 tree
1986 c_common_type_for_mode (enum machine_mode mode, int unsignedp)
1987 {
1988   tree t;
1989
1990   if (mode == TYPE_MODE (integer_type_node))
1991     return unsignedp ? unsigned_type_node : integer_type_node;
1992
1993   if (mode == TYPE_MODE (signed_char_type_node))
1994     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1995
1996   if (mode == TYPE_MODE (short_integer_type_node))
1997     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1998
1999   if (mode == TYPE_MODE (long_integer_type_node))
2000     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2001
2002   if (mode == TYPE_MODE (long_long_integer_type_node))
2003     return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
2004
2005   if (mode == TYPE_MODE (widest_integer_literal_type_node))
2006     return unsignedp ? widest_unsigned_literal_type_node
2007                      : widest_integer_literal_type_node;
2008
2009   if (mode == QImode)
2010     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2011
2012   if (mode == HImode)
2013     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2014
2015   if (mode == SImode)
2016     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2017
2018   if (mode == DImode)
2019     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2020
2021 #if HOST_BITS_PER_WIDE_INT >= 64
2022   if (mode == TYPE_MODE (intTI_type_node))
2023     return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2024 #endif
2025
2026   if (mode == TYPE_MODE (float_type_node))
2027     return float_type_node;
2028
2029   if (mode == TYPE_MODE (double_type_node))
2030     return double_type_node;
2031
2032   if (mode == TYPE_MODE (long_double_type_node))
2033     return long_double_type_node;
2034
2035   if (mode == TYPE_MODE (void_type_node))
2036     return void_type_node;
2037
2038   if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
2039     return (unsignedp
2040             ? make_unsigned_type (GET_MODE_PRECISION (mode))
2041             : make_signed_type (GET_MODE_PRECISION (mode)));
2042
2043   if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
2044     return (unsignedp
2045             ? make_unsigned_type (GET_MODE_PRECISION (mode))
2046             : make_signed_type (GET_MODE_PRECISION (mode)));
2047
2048   if (COMPLEX_MODE_P (mode))
2049     {
2050       enum machine_mode inner_mode;
2051       tree inner_type;
2052
2053       if (mode == TYPE_MODE (complex_float_type_node))
2054         return complex_float_type_node;
2055       if (mode == TYPE_MODE (complex_double_type_node))
2056         return complex_double_type_node;
2057       if (mode == TYPE_MODE (complex_long_double_type_node))
2058         return complex_long_double_type_node;
2059
2060       if (mode == TYPE_MODE (complex_integer_type_node) && !unsignedp)
2061         return complex_integer_type_node;
2062
2063       inner_mode = GET_MODE_INNER (mode);
2064       inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2065       if (inner_type != NULL_TREE)
2066         return build_complex_type (inner_type);
2067     }
2068   else if (VECTOR_MODE_P (mode))
2069     {
2070       enum machine_mode inner_mode = GET_MODE_INNER (mode);
2071       tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2072       if (inner_type != NULL_TREE)
2073         return build_vector_type_for_mode (inner_type, mode);
2074     }
2075
2076   if (mode == TYPE_MODE (dfloat32_type_node))
2077     return dfloat32_type_node;
2078   if (mode == TYPE_MODE (dfloat64_type_node))
2079     return dfloat64_type_node;
2080   if (mode == TYPE_MODE (dfloat128_type_node))
2081     return dfloat128_type_node;
2082
2083   if (ALL_SCALAR_FIXED_POINT_MODE_P (mode))
2084     {
2085       if (mode == TYPE_MODE (short_fract_type_node))
2086         return unsignedp ? sat_short_fract_type_node : short_fract_type_node;
2087       if (mode == TYPE_MODE (fract_type_node))
2088         return unsignedp ? sat_fract_type_node : fract_type_node;
2089       if (mode == TYPE_MODE (long_fract_type_node))
2090         return unsignedp ? sat_long_fract_type_node : long_fract_type_node;
2091       if (mode == TYPE_MODE (long_long_fract_type_node))
2092         return unsignedp ? sat_long_long_fract_type_node
2093                          : long_long_fract_type_node;
2094
2095       if (mode == TYPE_MODE (unsigned_short_fract_type_node))
2096         return unsignedp ? sat_unsigned_short_fract_type_node
2097                          : unsigned_short_fract_type_node;
2098       if (mode == TYPE_MODE (unsigned_fract_type_node))
2099         return unsignedp ? sat_unsigned_fract_type_node
2100                          : unsigned_fract_type_node;
2101       if (mode == TYPE_MODE (unsigned_long_fract_type_node))
2102         return unsignedp ? sat_unsigned_long_fract_type_node
2103                          : unsigned_long_fract_type_node;
2104       if (mode == TYPE_MODE (unsigned_long_long_fract_type_node))
2105         return unsignedp ? sat_unsigned_long_long_fract_type_node
2106                          : unsigned_long_long_fract_type_node;
2107
2108       if (mode == TYPE_MODE (short_accum_type_node))
2109         return unsignedp ? sat_short_accum_type_node : short_accum_type_node;
2110       if (mode == TYPE_MODE (accum_type_node))
2111         return unsignedp ? sat_accum_type_node : accum_type_node;
2112       if (mode == TYPE_MODE (long_accum_type_node))
2113         return unsignedp ? sat_long_accum_type_node : long_accum_type_node;
2114       if (mode == TYPE_MODE (long_long_accum_type_node))
2115         return unsignedp ? sat_long_long_accum_type_node
2116                          : long_long_accum_type_node;
2117
2118       if (mode == TYPE_MODE (unsigned_short_accum_type_node))
2119         return unsignedp ? sat_unsigned_short_accum_type_node
2120                          : unsigned_short_accum_type_node;
2121       if (mode == TYPE_MODE (unsigned_accum_type_node))
2122         return unsignedp ? sat_unsigned_accum_type_node
2123                          : unsigned_accum_type_node;
2124       if (mode == TYPE_MODE (unsigned_long_accum_type_node))
2125         return unsignedp ? sat_unsigned_long_accum_type_node
2126                          : unsigned_long_accum_type_node;
2127       if (mode == TYPE_MODE (unsigned_long_long_accum_type_node))
2128         return unsignedp ? sat_unsigned_long_long_accum_type_node
2129                          : unsigned_long_long_accum_type_node;
2130
2131       if (mode == QQmode)
2132         return unsignedp ? sat_qq_type_node : qq_type_node;
2133       if (mode == HQmode)
2134         return unsignedp ? sat_hq_type_node : hq_type_node;
2135       if (mode == SQmode)
2136         return unsignedp ? sat_sq_type_node : sq_type_node;
2137       if (mode == DQmode)
2138         return unsignedp ? sat_dq_type_node : dq_type_node;
2139       if (mode == TQmode)
2140         return unsignedp ? sat_tq_type_node : tq_type_node;
2141
2142       if (mode == UQQmode)
2143         return unsignedp ? sat_uqq_type_node : uqq_type_node;
2144       if (mode == UHQmode)
2145         return unsignedp ? sat_uhq_type_node : uhq_type_node;
2146       if (mode == USQmode)
2147         return unsignedp ? sat_usq_type_node : usq_type_node;
2148       if (mode == UDQmode)
2149         return unsignedp ? sat_udq_type_node : udq_type_node;
2150       if (mode == UTQmode)
2151         return unsignedp ? sat_utq_type_node : utq_type_node;
2152
2153       if (mode == HAmode)
2154         return unsignedp ? sat_ha_type_node : ha_type_node;
2155       if (mode == SAmode)
2156         return unsignedp ? sat_sa_type_node : sa_type_node;
2157       if (mode == DAmode)
2158         return unsignedp ? sat_da_type_node : da_type_node;
2159       if (mode == TAmode)
2160         return unsignedp ? sat_ta_type_node : ta_type_node;
2161
2162       if (mode == UHAmode)
2163         return unsignedp ? sat_uha_type_node : uha_type_node;
2164       if (mode == USAmode)
2165         return unsignedp ? sat_usa_type_node : usa_type_node;
2166       if (mode == UDAmode)
2167         return unsignedp ? sat_uda_type_node : uda_type_node;
2168       if (mode == UTAmode)
2169         return unsignedp ? sat_uta_type_node : uta_type_node;
2170     }
2171
2172   for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
2173     if (TYPE_MODE (TREE_VALUE (t)) == mode)
2174       return TREE_VALUE (t);
2175
2176   return 0;
2177 }
2178
2179 tree
2180 c_common_unsigned_type (tree type)
2181 {
2182   return c_common_signed_or_unsigned_type (1, type);
2183 }
2184
2185 /* Return a signed type the same as TYPE in other respects.  */
2186
2187 tree
2188 c_common_signed_type (tree type)
2189 {
2190   return c_common_signed_or_unsigned_type (0, type);
2191 }
2192
2193 /* Return a type the same as TYPE except unsigned or
2194    signed according to UNSIGNEDP.  */
2195
2196 tree
2197 c_common_signed_or_unsigned_type (int unsignedp, tree type)
2198 {
2199   tree type1;
2200
2201   /* This block of code emulates the behavior of the old
2202      c_common_unsigned_type. In particular, it returns
2203      long_unsigned_type_node if passed a long, even when a int would
2204      have the same size. This is necessary for warnings to work
2205      correctly in archs where sizeof(int) == sizeof(long) */
2206
2207   type1 = TYPE_MAIN_VARIANT (type);
2208   if (type1 == signed_char_type_node || type1 == char_type_node || type1 == unsigned_char_type_node)
2209     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2210   if (type1 == integer_type_node || type1 == unsigned_type_node)
2211     return unsignedp ? unsigned_type_node : integer_type_node;
2212   if (type1 == short_integer_type_node || type1 == short_unsigned_type_node)
2213     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2214   if (type1 == long_integer_type_node || type1 == long_unsigned_type_node)
2215     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2216   if (type1 == long_long_integer_type_node || type1 == long_long_unsigned_type_node)
2217     return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
2218   if (type1 == widest_integer_literal_type_node || type1 == widest_unsigned_literal_type_node)
2219     return unsignedp ? widest_unsigned_literal_type_node : widest_integer_literal_type_node;
2220 #if HOST_BITS_PER_WIDE_INT >= 64
2221   if (type1 == intTI_type_node || type1 == unsigned_intTI_type_node)
2222     return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2223 #endif
2224   if (type1 == intDI_type_node || type1 == unsigned_intDI_type_node)
2225     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2226   if (type1 == intSI_type_node || type1 == unsigned_intSI_type_node)
2227     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2228   if (type1 == intHI_type_node || type1 == unsigned_intHI_type_node)
2229     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2230   if (type1 == intQI_type_node || type1 == unsigned_intQI_type_node)
2231     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2232
2233 #define C_COMMON_FIXED_TYPES(SAT,NAME) \
2234   if (type1 == SAT ## short_ ## NAME ## _type_node \
2235       || type1 == SAT ## unsigned_short_ ## NAME ## _type_node) \
2236     return unsignedp ? SAT ## unsigned_short_ ## NAME ## _type_node \
2237                      : SAT ## short_ ## NAME ## _type_node; \
2238   if (type1 == SAT ## NAME ## _type_node \
2239       || type1 == SAT ## unsigned_ ## NAME ## _type_node) \
2240     return unsignedp ? SAT ## unsigned_ ## NAME ## _type_node \
2241                      : SAT ## NAME ## _type_node; \
2242   if (type1 == SAT ## long_ ## NAME ## _type_node \
2243       || type1 == SAT ## unsigned_long_ ## NAME ## _type_node) \
2244     return unsignedp ? SAT ## unsigned_long_ ## NAME ## _type_node \
2245                      : SAT ## long_ ## NAME ## _type_node; \
2246   if (type1 == SAT ## long_long_ ## NAME ## _type_node \
2247       || type1 == SAT ## unsigned_long_long_ ## NAME ## _type_node) \
2248     return unsignedp ? SAT ## unsigned_long_long_ ## NAME ## _type_node \
2249                      : SAT ## long_long_ ## NAME ## _type_node;
2250
2251 #define C_COMMON_FIXED_MODE_TYPES(SAT,NAME) \
2252   if (type1 == SAT ## NAME ## _type_node \
2253       || type1 == SAT ## u ## NAME ## _type_node) \
2254     return unsignedp ? SAT ## u ## NAME ## _type_node \
2255                      : SAT ## NAME ## _type_node;
2256
2257   C_COMMON_FIXED_TYPES (, fract);
2258   C_COMMON_FIXED_TYPES (sat_, fract);
2259   C_COMMON_FIXED_TYPES (, accum);
2260   C_COMMON_FIXED_TYPES (sat_, accum);
2261
2262   C_COMMON_FIXED_MODE_TYPES (, qq);
2263   C_COMMON_FIXED_MODE_TYPES (, hq);
2264   C_COMMON_FIXED_MODE_TYPES (, sq);
2265   C_COMMON_FIXED_MODE_TYPES (, dq);
2266   C_COMMON_FIXED_MODE_TYPES (, tq);
2267   C_COMMON_FIXED_MODE_TYPES (sat_, qq);
2268   C_COMMON_FIXED_MODE_TYPES (sat_, hq);
2269   C_COMMON_FIXED_MODE_TYPES (sat_, sq);
2270   C_COMMON_FIXED_MODE_TYPES (sat_, dq);
2271   C_COMMON_FIXED_MODE_TYPES (sat_, tq);
2272   C_COMMON_FIXED_MODE_TYPES (, ha);
2273   C_COMMON_FIXED_MODE_TYPES (, sa);
2274   C_COMMON_FIXED_MODE_TYPES (, da);
2275   C_COMMON_FIXED_MODE_TYPES (, ta);
2276   C_COMMON_FIXED_MODE_TYPES (sat_, ha);
2277   C_COMMON_FIXED_MODE_TYPES (sat_, sa);
2278   C_COMMON_FIXED_MODE_TYPES (sat_, da);
2279   C_COMMON_FIXED_MODE_TYPES (sat_, ta);
2280
2281   /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
2282      the precision; they have precision set to match their range, but
2283      may use a wider mode to match an ABI.  If we change modes, we may
2284      wind up with bad conversions.  For INTEGER_TYPEs in C, must check
2285      the precision as well, so as to yield correct results for
2286      bit-field types.  C++ does not have these separate bit-field
2287      types, and producing a signed or unsigned variant of an
2288      ENUMERAL_TYPE may cause other problems as well.  */
2289
2290   if (!INTEGRAL_TYPE_P (type)
2291       || TYPE_UNSIGNED (type) == unsignedp)
2292     return type;
2293
2294 #define TYPE_OK(node)                                                       \
2295   (TYPE_MODE (type) == TYPE_MODE (node)                                     \
2296    && (c_dialect_cxx () || TYPE_PRECISION (type) == TYPE_PRECISION (node)))
2297   if (TYPE_OK (signed_char_type_node))
2298     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2299   if (TYPE_OK (integer_type_node))
2300     return unsignedp ? unsigned_type_node : integer_type_node;
2301   if (TYPE_OK (short_integer_type_node))
2302     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2303   if (TYPE_OK (long_integer_type_node))
2304     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2305   if (TYPE_OK (long_long_integer_type_node))
2306     return (unsignedp ? long_long_unsigned_type_node
2307             : long_long_integer_type_node);
2308   if (TYPE_OK (widest_integer_literal_type_node))
2309     return (unsignedp ? widest_unsigned_literal_type_node
2310             : widest_integer_literal_type_node);
2311
2312 #if HOST_BITS_PER_WIDE_INT >= 64
2313   if (TYPE_OK (intTI_type_node))
2314     return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2315 #endif
2316   if (TYPE_OK (intDI_type_node))
2317     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2318   if (TYPE_OK (intSI_type_node))
2319     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2320   if (TYPE_OK (intHI_type_node))
2321     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2322   if (TYPE_OK (intQI_type_node))
2323     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2324 #undef TYPE_OK
2325
2326   if (c_dialect_cxx ())
2327     return type;
2328   else
2329     return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
2330 }
2331
2332 /* Build a bit-field integer type for the given WIDTH and UNSIGNEDP.  */
2333
2334 tree
2335 c_build_bitfield_integer_type (unsigned HOST_WIDE_INT width, int unsignedp)
2336 {
2337   /* Extended integer types of the same width as a standard type have
2338      lesser rank, so those of the same width as int promote to int or
2339      unsigned int and are valid for printf formats expecting int or
2340      unsigned int.  To avoid such special cases, avoid creating
2341      extended integer types for bit-fields if a standard integer type
2342      is available.  */
2343   if (width == TYPE_PRECISION (integer_type_node))
2344     return unsignedp ? unsigned_type_node : integer_type_node;
2345   if (width == TYPE_PRECISION (signed_char_type_node))
2346     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2347   if (width == TYPE_PRECISION (short_integer_type_node))
2348     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2349   if (width == TYPE_PRECISION (long_integer_type_node))
2350     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2351   if (width == TYPE_PRECISION (long_long_integer_type_node))
2352     return (unsignedp ? long_long_unsigned_type_node
2353             : long_long_integer_type_node);
2354   return build_nonstandard_integer_type (width, unsignedp);
2355 }
2356
2357 /* The C version of the register_builtin_type langhook.  */
2358
2359 void
2360 c_register_builtin_type (tree type, const char* name)
2361 {
2362   tree decl;
2363
2364   decl = build_decl (TYPE_DECL, get_identifier (name), type);
2365   DECL_ARTIFICIAL (decl) = 1;
2366   if (!TYPE_NAME (type))
2367     TYPE_NAME (type) = decl;
2368   pushdecl (decl);
2369
2370   registered_builtin_types = tree_cons (0, type, registered_builtin_types);
2371 }
2372
2373 \f
2374 /* Return the minimum number of bits needed to represent VALUE in a
2375    signed or unsigned type, UNSIGNEDP says which.  */
2376
2377 unsigned int
2378 min_precision (tree value, int unsignedp)
2379 {
2380   int log;
2381
2382   /* If the value is negative, compute its negative minus 1.  The latter
2383      adjustment is because the absolute value of the largest negative value
2384      is one larger than the largest positive value.  This is equivalent to
2385      a bit-wise negation, so use that operation instead.  */
2386
2387   if (tree_int_cst_sgn (value) < 0)
2388     value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
2389
2390   /* Return the number of bits needed, taking into account the fact
2391      that we need one more bit for a signed than unsigned type.  */
2392
2393   if (integer_zerop (value))
2394     log = 0;
2395   else
2396     log = tree_floor_log2 (value);
2397
2398   return log + 1 + !unsignedp;
2399 }
2400 \f
2401 /* Print an error message for invalid operands to arith operation
2402    CODE with TYPE0 for operand 0, and TYPE1 for operand 1.  */
2403
2404 void
2405 binary_op_error (enum tree_code code, tree type0, tree type1)
2406 {
2407   const char *opname;
2408
2409   switch (code)
2410     {
2411     case PLUS_EXPR:
2412       opname = "+"; break;
2413     case MINUS_EXPR:
2414       opname = "-"; break;
2415     case MULT_EXPR:
2416       opname = "*"; break;
2417     case MAX_EXPR:
2418       opname = "max"; break;
2419     case MIN_EXPR:
2420       opname = "min"; break;
2421     case EQ_EXPR:
2422       opname = "=="; break;
2423     case NE_EXPR:
2424       opname = "!="; break;
2425     case LE_EXPR:
2426       opname = "<="; break;
2427     case GE_EXPR:
2428       opname = ">="; break;
2429     case LT_EXPR:
2430       opname = "<"; break;
2431     case GT_EXPR:
2432       opname = ">"; break;
2433     case LSHIFT_EXPR:
2434       opname = "<<"; break;
2435     case RSHIFT_EXPR:
2436       opname = ">>"; break;
2437     case TRUNC_MOD_EXPR:
2438     case FLOOR_MOD_EXPR:
2439       opname = "%"; break;
2440     case TRUNC_DIV_EXPR:
2441     case FLOOR_DIV_EXPR:
2442       opname = "/"; break;
2443     case BIT_AND_EXPR:
2444       opname = "&"; break;
2445     case BIT_IOR_EXPR:
2446       opname = "|"; break;
2447     case TRUTH_ANDIF_EXPR:
2448       opname = "&&"; break;
2449     case TRUTH_ORIF_EXPR:
2450       opname = "||"; break;
2451     case BIT_XOR_EXPR:
2452       opname = "^"; break;
2453     default:
2454       gcc_unreachable ();
2455     }
2456   error ("invalid operands to binary %s (have %qT and %qT)", opname,
2457          type0, type1);
2458 }
2459 \f
2460 /* Subroutine of build_binary_op, used for comparison operations.
2461    See if the operands have both been converted from subword integer types
2462    and, if so, perhaps change them both back to their original type.
2463    This function is also responsible for converting the two operands
2464    to the proper common type for comparison.
2465
2466    The arguments of this function are all pointers to local variables
2467    of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
2468    RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
2469
2470    If this function returns nonzero, it means that the comparison has
2471    a constant value.  What this function returns is an expression for
2472    that value.  */
2473
2474 tree
2475 shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
2476                  enum tree_code *rescode_ptr)
2477 {
2478   tree type;
2479   tree op0 = *op0_ptr;
2480   tree op1 = *op1_ptr;
2481   int unsignedp0, unsignedp1;
2482   int real1, real2;
2483   tree primop0, primop1;
2484   enum tree_code code = *rescode_ptr;
2485
2486   /* Throw away any conversions to wider types
2487      already present in the operands.  */
2488
2489   primop0 = get_narrower (op0, &unsignedp0);
2490   primop1 = get_narrower (op1, &unsignedp1);
2491
2492   /* Handle the case that OP0 does not *contain* a conversion
2493      but it *requires* conversion to FINAL_TYPE.  */
2494
2495   if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
2496     unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
2497   if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
2498     unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
2499
2500   /* If one of the operands must be floated, we cannot optimize.  */
2501   real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
2502   real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
2503
2504   /* If first arg is constant, swap the args (changing operation
2505      so value is preserved), for canonicalization.  Don't do this if
2506      the second arg is 0.  */
2507
2508   if (TREE_CONSTANT (primop0)
2509       && !integer_zerop (primop1) && !real_zerop (primop1)
2510       && !fixed_zerop (primop1))
2511     {
2512       tree tem = primop0;
2513       int temi = unsignedp0;
2514       primop0 = primop1;
2515       primop1 = tem;
2516       tem = op0;
2517       op0 = op1;
2518       op1 = tem;
2519       *op0_ptr = op0;
2520       *op1_ptr = op1;
2521       unsignedp0 = unsignedp1;
2522       unsignedp1 = temi;
2523       temi = real1;
2524       real1 = real2;
2525       real2 = temi;
2526
2527       switch (code)
2528         {
2529         case LT_EXPR:
2530           code = GT_EXPR;
2531           break;
2532         case GT_EXPR:
2533           code = LT_EXPR;
2534           break;
2535         case LE_EXPR:
2536           code = GE_EXPR;
2537           break;
2538         case GE_EXPR:
2539           code = LE_EXPR;
2540           break;
2541         default:
2542           break;
2543         }
2544       *rescode_ptr = code;
2545     }
2546
2547   /* If comparing an integer against a constant more bits wide,
2548      maybe we can deduce a value of 1 or 0 independent of the data.
2549      Or else truncate the constant now
2550      rather than extend the variable at run time.
2551
2552      This is only interesting if the constant is the wider arg.
2553      Also, it is not safe if the constant is unsigned and the
2554      variable arg is signed, since in this case the variable
2555      would be sign-extended and then regarded as unsigned.
2556      Our technique fails in this case because the lowest/highest
2557      possible unsigned results don't follow naturally from the
2558      lowest/highest possible values of the variable operand.
2559      For just EQ_EXPR and NE_EXPR there is another technique that
2560      could be used: see if the constant can be faithfully represented
2561      in the other operand's type, by truncating it and reextending it
2562      and see if that preserves the constant's value.  */
2563
2564   if (!real1 && !real2
2565       && TREE_CODE (TREE_TYPE (primop0)) != FIXED_POINT_TYPE
2566       && TREE_CODE (primop1) == INTEGER_CST
2567       && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
2568     {
2569       int min_gt, max_gt, min_lt, max_lt;
2570       tree maxval, minval;
2571       /* 1 if comparison is nominally unsigned.  */
2572       int unsignedp = TYPE_UNSIGNED (*restype_ptr);
2573       tree val;
2574
2575       type = c_common_signed_or_unsigned_type (unsignedp0,
2576                                                TREE_TYPE (primop0));
2577
2578       maxval = TYPE_MAX_VALUE (type);
2579       minval = TYPE_MIN_VALUE (type);
2580
2581       if (unsignedp && !unsignedp0)
2582         *restype_ptr = c_common_signed_type (*restype_ptr);
2583
2584       if (TREE_TYPE (primop1) != *restype_ptr)
2585         {
2586           /* Convert primop1 to target type, but do not introduce
2587              additional overflow.  We know primop1 is an int_cst.  */
2588           primop1 = force_fit_type_double (*restype_ptr,
2589                                            TREE_INT_CST_LOW (primop1),
2590                                            TREE_INT_CST_HIGH (primop1), 0,
2591                                            TREE_OVERFLOW (primop1));
2592         }
2593       if (type != *restype_ptr)
2594         {
2595           minval = convert (*restype_ptr, minval);
2596           maxval = convert (*restype_ptr, maxval);
2597         }
2598
2599       if (unsignedp && unsignedp0)
2600         {
2601           min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
2602           max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
2603           min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
2604           max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
2605         }
2606       else
2607         {
2608           min_gt = INT_CST_LT (primop1, minval);
2609           max_gt = INT_CST_LT (primop1, maxval);
2610           min_lt = INT_CST_LT (minval, primop1);
2611           max_lt = INT_CST_LT (maxval, primop1);
2612         }
2613
2614       val = 0;
2615       /* This used to be a switch, but Genix compiler can't handle that.  */
2616       if (code == NE_EXPR)
2617         {
2618           if (max_lt || min_gt)
2619             val = truthvalue_true_node;
2620         }
2621       else if (code == EQ_EXPR)
2622         {
2623           if (max_lt || min_gt)
2624             val = truthvalue_false_node;
2625         }
2626       else if (code == LT_EXPR)
2627         {
2628           if (max_lt)
2629             val = truthvalue_true_node;
2630           if (!min_lt)
2631             val = truthvalue_false_node;
2632         }
2633       else if (code == GT_EXPR)
2634         {
2635           if (min_gt)
2636             val = truthvalue_true_node;
2637           if (!max_gt)
2638             val = truthvalue_false_node;
2639         }
2640       else if (code == LE_EXPR)
2641         {
2642           if (!max_gt)
2643             val = truthvalue_true_node;
2644           if (min_gt)
2645             val = truthvalue_false_node;
2646         }
2647       else if (code == GE_EXPR)
2648         {
2649           if (!min_lt)
2650             val = truthvalue_true_node;
2651           if (max_lt)
2652             val = truthvalue_false_node;
2653         }
2654
2655       /* If primop0 was sign-extended and unsigned comparison specd,
2656          we did a signed comparison above using the signed type bounds.
2657          But the comparison we output must be unsigned.
2658
2659          Also, for inequalities, VAL is no good; but if the signed
2660          comparison had *any* fixed result, it follows that the
2661          unsigned comparison just tests the sign in reverse
2662          (positive values are LE, negative ones GE).
2663          So we can generate an unsigned comparison
2664          against an extreme value of the signed type.  */
2665
2666       if (unsignedp && !unsignedp0)
2667         {
2668           if (val != 0)
2669             switch (code)
2670               {
2671               case LT_EXPR:
2672               case GE_EXPR:
2673                 primop1 = TYPE_MIN_VALUE (type);
2674                 val = 0;
2675                 break;
2676
2677               case LE_EXPR:
2678               case GT_EXPR:
2679                 primop1 = TYPE_MAX_VALUE (type);
2680                 val = 0;
2681                 break;
2682
2683               default:
2684                 break;
2685               }
2686           type = c_common_unsigned_type (type);
2687         }
2688
2689       if (TREE_CODE (primop0) != INTEGER_CST)
2690         {
2691           if (val == truthvalue_false_node)
2692             warning (OPT_Wtype_limits, "comparison is always false due to limited range of data type");
2693           if (val == truthvalue_true_node)
2694             warning (OPT_Wtype_limits, "comparison is always true due to limited range of data type");
2695         }
2696
2697       if (val != 0)
2698         {
2699           /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
2700           if (TREE_SIDE_EFFECTS (primop0))
2701             return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
2702           return val;
2703         }
2704
2705       /* Value is not predetermined, but do the comparison
2706          in the type of the operand that is not constant.
2707          TYPE is already properly set.  */
2708     }
2709
2710   /* If either arg is decimal float and the other is float, find the
2711      proper common type to use for comparison.  */
2712   else if (real1 && real2
2713            && (DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0)))
2714                || DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1)))))
2715     type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2716
2717   else if (real1 && real2
2718            && (TYPE_PRECISION (TREE_TYPE (primop0))
2719                == TYPE_PRECISION (TREE_TYPE (primop1))))
2720     type = TREE_TYPE (primop0);
2721
2722   /* If args' natural types are both narrower than nominal type
2723      and both extend in the same manner, compare them
2724      in the type of the wider arg.
2725      Otherwise must actually extend both to the nominal
2726      common type lest different ways of extending
2727      alter the result.
2728      (eg, (short)-1 == (unsigned short)-1  should be 0.)  */
2729
2730   else if (unsignedp0 == unsignedp1 && real1 == real2
2731            && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
2732            && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
2733     {
2734       type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2735       type = c_common_signed_or_unsigned_type (unsignedp0
2736                                                || TYPE_UNSIGNED (*restype_ptr),
2737                                                type);
2738       /* Make sure shorter operand is extended the right way
2739          to match the longer operand.  */
2740       primop0
2741         = convert (c_common_signed_or_unsigned_type (unsignedp0,
2742                                                      TREE_TYPE (primop0)),
2743                    primop0);
2744       primop1
2745         = convert (c_common_signed_or_unsigned_type (unsignedp1,
2746                                                      TREE_TYPE (primop1)),
2747                    primop1);
2748     }
2749   else
2750     {
2751       /* Here we must do the comparison on the nominal type
2752          using the args exactly as we received them.  */
2753       type = *restype_ptr;
2754       primop0 = op0;
2755       primop1 = op1;
2756
2757       if (!real1 && !real2 && integer_zerop (primop1)
2758           && TYPE_UNSIGNED (*restype_ptr))
2759         {
2760           tree value = 0;
2761           switch (code)
2762             {
2763             case GE_EXPR:
2764               /* All unsigned values are >= 0, so we warn.  However,
2765                  if OP0 is a constant that is >= 0, the signedness of
2766                  the comparison isn't an issue, so suppress the
2767                  warning.  */
2768               if (warn_type_limits && !in_system_header
2769                   && !(TREE_CODE (primop0) == INTEGER_CST
2770                        && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2771                                                    primop0))))
2772                 warning (OPT_Wtype_limits, 
2773                          "comparison of unsigned expression >= 0 is always true");
2774               value = truthvalue_true_node;
2775               break;
2776
2777             case LT_EXPR:
2778               if (warn_type_limits && !in_system_header
2779                   && !(TREE_CODE (primop0) == INTEGER_CST
2780                        && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2781                                                    primop0))))
2782                 warning (OPT_Wtype_limits, 
2783                          "comparison of unsigned expression < 0 is always false");
2784               value = truthvalue_false_node;
2785               break;
2786
2787             default:
2788               break;
2789             }
2790
2791           if (value != 0)
2792             {
2793               /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
2794               if (TREE_SIDE_EFFECTS (primop0))
2795                 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
2796                                primop0, value);
2797               return value;
2798             }
2799         }
2800     }
2801
2802   *op0_ptr = convert (type, primop0);
2803   *op1_ptr = convert (type, primop1);
2804
2805   *restype_ptr = truthvalue_type_node;
2806
2807   return 0;
2808 }
2809 \f
2810 /* Return a tree for the sum or difference (RESULTCODE says which)
2811    of pointer PTROP and integer INTOP.  */
2812
2813 tree
2814 pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
2815 {
2816   tree size_exp, ret;
2817
2818   /* The result is a pointer of the same type that is being added.  */
2819   tree result_type = TREE_TYPE (ptrop);
2820
2821   if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2822     {
2823       if (pedantic || warn_pointer_arith)
2824         pedwarn ("pointer of type %<void *%> used in arithmetic");
2825       size_exp = integer_one_node;
2826     }
2827   else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2828     {
2829       if (pedantic || warn_pointer_arith)
2830         pedwarn ("pointer to a function used in arithmetic");
2831       size_exp = integer_one_node;
2832     }
2833   else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
2834     {
2835       if (pedantic || warn_pointer_arith)
2836         pedwarn ("pointer to member function used in arithmetic");
2837       size_exp = integer_one_node;
2838     }
2839   else
2840     size_exp = size_in_bytes (TREE_TYPE (result_type));
2841
2842   /* We are manipulating pointer values, so we don't need to warn
2843      about relying on undefined signed overflow.  We disable the
2844      warning here because we use integer types so fold won't know that
2845      they are really pointers.  */
2846   fold_defer_overflow_warnings ();
2847
2848   /* If what we are about to multiply by the size of the elements
2849      contains a constant term, apply distributive law
2850      and multiply that constant term separately.
2851      This helps produce common subexpressions.  */
2852   if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2853       && !TREE_CONSTANT (intop)
2854       && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2855       && TREE_CONSTANT (size_exp)
2856       /* If the constant comes from pointer subtraction,
2857          skip this optimization--it would cause an error.  */
2858       && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2859       /* If the constant is unsigned, and smaller than the pointer size,
2860          then we must skip this optimization.  This is because it could cause
2861          an overflow error if the constant is negative but INTOP is not.  */
2862       && (!TYPE_UNSIGNED (TREE_TYPE (intop))
2863           || (TYPE_PRECISION (TREE_TYPE (intop))
2864               == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2865     {
2866       enum tree_code subcode = resultcode;
2867       tree int_type = TREE_TYPE (intop);
2868       if (TREE_CODE (intop) == MINUS_EXPR)
2869         subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2870       /* Convert both subexpression types to the type of intop,
2871          because weird cases involving pointer arithmetic
2872          can result in a sum or difference with different type args.  */
2873       ptrop = build_binary_op (subcode, ptrop,
2874                                convert (int_type, TREE_OPERAND (intop, 1)), 1);
2875       intop = convert (int_type, TREE_OPERAND (intop, 0));
2876     }
2877
2878   /* Convert the integer argument to a type the same size as sizetype
2879      so the multiply won't overflow spuriously.  */
2880   if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
2881       || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
2882     intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
2883                                              TYPE_UNSIGNED (sizetype)), intop);
2884
2885   /* Replace the integer argument with a suitable product by the object size.
2886      Do this multiplication as signed, then convert to the appropriate
2887      type for the pointer operation.  */
2888   intop = convert (sizetype,
2889                    build_binary_op (MULT_EXPR, intop,
2890                                     convert (TREE_TYPE (intop), size_exp), 1));
2891
2892   /* Create the sum or difference.  */
2893   if (resultcode == MINUS_EXPR)
2894     intop = fold_build1 (NEGATE_EXPR, sizetype, intop);
2895
2896   ret = fold_build2 (POINTER_PLUS_EXPR, result_type, ptrop, intop);
2897
2898   fold_undefer_and_ignore_overflow_warnings ();
2899
2900   return ret;
2901 }
2902 \f
2903 /* Return whether EXPR is a declaration whose address can never be
2904    NULL.  */
2905
2906 bool
2907 decl_with_nonnull_addr_p (const_tree expr)
2908 {
2909   return (DECL_P (expr)
2910           && (TREE_CODE (expr) == PARM_DECL
2911               || TREE_CODE (expr) == LABEL_DECL
2912               || !DECL_WEAK (expr)));
2913 }
2914
2915 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
2916    or for an `if' or `while' statement or ?..: exp.  It should already
2917    have been validated to be of suitable type; otherwise, a bad
2918    diagnostic may result.
2919
2920    This preparation consists of taking the ordinary
2921    representation of an expression expr and producing a valid tree
2922    boolean expression describing whether expr is nonzero.  We could
2923    simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
2924    but we optimize comparisons, &&, ||, and !.
2925
2926    The resulting type should always be `truthvalue_type_node'.  */
2927
2928 tree
2929 c_common_truthvalue_conversion (tree expr)
2930 {
2931   switch (TREE_CODE (expr))
2932     {
2933     case EQ_EXPR:   case NE_EXPR:   case UNEQ_EXPR: case LTGT_EXPR:
2934     case LE_EXPR:   case GE_EXPR:   case LT_EXPR:   case GT_EXPR:
2935     case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
2936     case ORDERED_EXPR: case UNORDERED_EXPR:
2937       if (TREE_TYPE (expr) == truthvalue_type_node)
2938         return expr;
2939       return build2 (TREE_CODE (expr), truthvalue_type_node,
2940                      TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
2941
2942     case TRUTH_ANDIF_EXPR:
2943     case TRUTH_ORIF_EXPR:
2944     case TRUTH_AND_EXPR:
2945     case TRUTH_OR_EXPR:
2946     case TRUTH_XOR_EXPR:
2947       if (TREE_TYPE (expr) == truthvalue_type_node)
2948         return expr;
2949       return build2 (TREE_CODE (expr), truthvalue_type_node,
2950                  c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2951                  c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)));
2952
2953     case TRUTH_NOT_EXPR:
2954       if (TREE_TYPE (expr) == truthvalue_type_node)
2955         return expr;
2956       return build1 (TREE_CODE (expr), truthvalue_type_node,
2957                  c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2958
2959     case ERROR_MARK:
2960       return expr;
2961
2962     case INTEGER_CST:
2963       return integer_zerop (expr) ? truthvalue_false_node
2964                                   : truthvalue_true_node;
2965
2966     case REAL_CST:
2967       return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
2968              ? truthvalue_true_node
2969              : truthvalue_false_node;
2970
2971     case FIXED_CST:
2972       return fixed_compare (NE_EXPR, &TREE_FIXED_CST (expr),
2973                             &FCONST0 (TYPE_MODE (TREE_TYPE (expr))))
2974              ? truthvalue_true_node
2975              : truthvalue_false_node;
2976
2977     case FUNCTION_DECL:
2978       expr = build_unary_op (ADDR_EXPR, expr, 0);
2979       /* Fall through.  */
2980
2981     case ADDR_EXPR:
2982       {
2983         tree inner = TREE_OPERAND (expr, 0);
2984         if (decl_with_nonnull_addr_p (inner))
2985           {
2986             /* Common Ada/Pascal programmer's mistake.  */
2987             warning (OPT_Waddress,
2988                      "the address of %qD will always evaluate as %<true%>",
2989                      inner);
2990             return truthvalue_true_node;
2991           }
2992
2993         /* If we still have a decl, it is possible for its address to
2994            be NULL, so we cannot optimize.  */
2995         if (DECL_P (inner))
2996           {
2997             gcc_assert (DECL_WEAK (inner));
2998             break;
2999           }
3000
3001         if (TREE_SIDE_EFFECTS (inner))
3002           return build2 (COMPOUND_EXPR, truthvalue_type_node,
3003                          inner, truthvalue_true_node);
3004         else
3005           return truthvalue_true_node;
3006       }
3007
3008     case COMPLEX_EXPR:
3009       return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
3010                                ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
3011                 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
3012                 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
3013                               0);
3014
3015     case NEGATE_EXPR:
3016     case ABS_EXPR:
3017     case FLOAT_EXPR:
3018       /* These don't change whether an object is nonzero or zero.  */
3019       return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
3020
3021     case LROTATE_EXPR:
3022     case RROTATE_EXPR:
3023       /* These don't change whether an object is zero or nonzero, but
3024          we can't ignore them if their second arg has side-effects.  */
3025       if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
3026         return build2 (COMPOUND_EXPR, truthvalue_type_node,
3027                        TREE_OPERAND (expr, 1),
3028                        c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
3029       else
3030         return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
3031
3032     case COND_EXPR:
3033       /* Distribute the conversion into the arms of a COND_EXPR.  */
3034       return fold_build3 (COND_EXPR, truthvalue_type_node,
3035                 TREE_OPERAND (expr, 0),
3036                 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
3037                 c_common_truthvalue_conversion (TREE_OPERAND (expr, 2)));
3038
3039     case CONVERT_EXPR:
3040     case NOP_EXPR:
3041       /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
3042          since that affects how `default_conversion' will behave.  */
3043       if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
3044           || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
3045         break;
3046       /* If this is widening the argument, we can ignore it.  */
3047       if (TYPE_PRECISION (TREE_TYPE (expr))
3048           >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
3049         return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
3050       break;
3051
3052     case MODIFY_EXPR:
3053       if (!TREE_NO_WARNING (expr)
3054           && warn_parentheses)
3055         {
3056           warning (OPT_Wparentheses,
3057                    "suggest parentheses around assignment used as truth value");
3058           TREE_NO_WARNING (expr) = 1;
3059         }
3060       break;
3061
3062     default:
3063       break;
3064     }
3065
3066   if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
3067     {
3068       tree t = save_expr (expr);
3069       return (build_binary_op
3070               ((TREE_SIDE_EFFECTS (expr)
3071                 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
3072         c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
3073         c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
3074                0));
3075     }
3076
3077   if (TREE_CODE (TREE_TYPE (expr)) == FIXED_POINT_TYPE)
3078     {
3079       tree fixed_zero_node = build_fixed (TREE_TYPE (expr),
3080                                           FCONST0 (TYPE_MODE
3081                                                    (TREE_TYPE (expr))));
3082       return build_binary_op (NE_EXPR, expr, fixed_zero_node, 1);
3083     }
3084
3085   return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
3086 }
3087 \f
3088 static void def_builtin_1  (enum built_in_function fncode,
3089                             const char *name,
3090                             enum built_in_class fnclass,
3091                             tree fntype, tree libtype,
3092                             bool both_p, bool fallback_p, bool nonansi_p,
3093                             tree fnattrs, bool implicit_p);
3094
3095
3096 /* Apply the TYPE_QUALS to the new DECL.  */
3097
3098 void
3099 c_apply_type_quals_to_decl (int type_quals, tree decl)
3100 {
3101   tree type = TREE_TYPE (decl);
3102
3103   if (type == error_mark_node)
3104     return;
3105
3106   if (((type_quals & TYPE_QUAL_CONST)
3107        || (type && TREE_CODE (type) == REFERENCE_TYPE))
3108       /* An object declared 'const' is only readonly after it is
3109          initialized.  We don't have any way of expressing this currently,
3110          so we need to be conservative and unset TREE_READONLY for types
3111          with constructors.  Otherwise aliasing code will ignore stores in
3112          an inline constructor.  */
3113       && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
3114     TREE_READONLY (decl) = 1;
3115   if (type_quals & TYPE_QUAL_VOLATILE)
3116     {
3117       TREE_SIDE_EFFECTS (decl) = 1;
3118       TREE_THIS_VOLATILE (decl) = 1;
3119     }
3120   if (type_quals & TYPE_QUAL_RESTRICT)
3121     {
3122       while (type && TREE_CODE (type) == ARRAY_TYPE)
3123         /* Allow 'restrict' on arrays of pointers.
3124            FIXME currently we just ignore it.  */
3125         type = TREE_TYPE (type);
3126       if (!type
3127           || !POINTER_TYPE_P (type)
3128           || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
3129         error ("invalid use of %<restrict%>");
3130       else if (flag_strict_aliasing && type == TREE_TYPE (decl))
3131         /* Indicate we need to make a unique alias set for this pointer.
3132            We can't do it here because it might be pointing to an
3133            incomplete type.  */
3134         DECL_POINTER_ALIAS_SET (decl) = -2;
3135     }
3136 }
3137
3138 /* Hash function for the problem of multiple type definitions in
3139    different files.  This must hash all types that will compare
3140    equal via comptypes to the same value.  In practice it hashes
3141    on some of the simple stuff and leaves the details to comptypes.  */
3142
3143 static hashval_t
3144 c_type_hash (const void *p)
3145 {
3146   int i = 0;
3147   int shift, size;
3148   const_tree const t = (const_tree) p;
3149   tree t2;
3150   switch (TREE_CODE (t))
3151     {
3152     /* For pointers, hash on pointee type plus some swizzling.  */
3153     case POINTER_TYPE:
3154       return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
3155     /* Hash on number of elements and total size.  */
3156     case ENUMERAL_TYPE:
3157       shift = 3;
3158       t2 = TYPE_VALUES (t);
3159       break;
3160     case RECORD_TYPE:
3161       shift = 0;
3162       t2 = TYPE_FIELDS (t);
3163       break;
3164     case QUAL_UNION_TYPE:
3165       shift = 1;
3166       t2 = TYPE_FIELDS (t);
3167       break;
3168     case UNION_TYPE:
3169       shift = 2;
3170       t2 = TYPE_FIELDS (t);
3171       break;
3172     default:
3173       gcc_unreachable ();
3174     }
3175   for (; t2; t2 = TREE_CHAIN (t2))
3176     i++;
3177   /* We might have a VLA here.  */
3178   if (TREE_CODE (TYPE_SIZE (t)) != INTEGER_CST)
3179     size = 0;
3180   else
3181     size = TREE_INT_CST_LOW (TYPE_SIZE (t));
3182   return ((size << 24) | (i << shift));
3183 }
3184
3185 static GTY((param_is (union tree_node))) htab_t type_hash_table;
3186
3187 /* Return the typed-based alias set for T, which may be an expression
3188    or a type.  Return -1 if we don't do anything special.  */
3189
3190 alias_set_type
3191 c_common_get_alias_set (tree t)
3192 {
3193   tree u;
3194   PTR *slot;
3195
3196   /* Permit type-punning when accessing a union, provided the access
3197      is directly through the union.  For example, this code does not
3198      permit taking the address of a union member and then storing
3199      through it.  Even the type-punning allowed here is a GCC
3200      extension, albeit a common and useful one; the C standard says
3201      that such accesses have implementation-defined behavior.  */
3202   for (u = t;
3203        TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
3204        u = TREE_OPERAND (u, 0))
3205     if (TREE_CODE (u) == COMPONENT_REF
3206         && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
3207       return 0;
3208
3209   /* That's all the expressions we handle specially.  */
3210   if (!TYPE_P (t))
3211     return -1;
3212
3213   /* The C standard guarantees that any object may be accessed via an
3214      lvalue that has character type.  */
3215   if (t == char_type_node
3216       || t == signed_char_type_node
3217       || t == unsigned_char_type_node)
3218     return 0;
3219
3220   /* If it has the may_alias attribute, it can alias anything.  */
3221   if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t)))
3222     return 0;
3223
3224   /* The C standard specifically allows aliasing between signed and
3225      unsigned variants of the same type.  We treat the signed
3226      variant as canonical.  */
3227   if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
3228     {
3229       tree t1 = c_common_signed_type (t);
3230
3231       /* t1 == t can happen for boolean nodes which are always unsigned.  */
3232       if (t1 != t)
3233         return get_alias_set (t1);
3234     }
3235   else if (POINTER_TYPE_P (t))
3236     {
3237       tree t1;
3238
3239       /* Unfortunately, there is no canonical form of a pointer type.
3240          In particular, if we have `typedef int I', then `int *', and
3241          `I *' are different types.  So, we have to pick a canonical
3242          representative.  We do this below.
3243
3244          Technically, this approach is actually more conservative that
3245          it needs to be.  In particular, `const int *' and `int *'
3246          should be in different alias sets, according to the C and C++
3247          standard, since their types are not the same, and so,
3248          technically, an `int **' and `const int **' cannot point at
3249          the same thing.
3250
3251          But, the standard is wrong.  In particular, this code is
3252          legal C++:
3253
3254             int *ip;
3255             int **ipp = &ip;
3256             const int* const* cipp = ipp;
3257
3258          And, it doesn't make sense for that to be legal unless you
3259          can dereference IPP and CIPP.  So, we ignore cv-qualifiers on
3260          the pointed-to types.  This issue has been reported to the
3261          C++ committee.  */
3262       t1 = build_type_no_quals (t);
3263       if (t1 != t)
3264         return get_alias_set (t1);
3265     }
3266
3267   /* Handle the case of multiple type nodes referring to "the same" type,
3268      which occurs with IMA.  These share an alias set.  FIXME:  Currently only
3269      C90 is handled.  (In C99 type compatibility is not transitive, which
3270      complicates things mightily. The alias set splay trees can theoretically
3271      represent this, but insertion is tricky when you consider all the
3272      different orders things might arrive in.) */
3273
3274   if (c_language != clk_c || flag_isoc99)
3275     return -1;
3276
3277   /* Save time if there's only one input file.  */
3278   if (num_in_fnames == 1)
3279     return -1;
3280
3281   /* Pointers need special handling if they point to any type that
3282      needs special handling (below).  */
3283   if (TREE_CODE (t) == POINTER_TYPE)
3284     {
3285       tree t2;
3286       /* Find bottom type under any nested POINTERs.  */
3287       for (t2 = TREE_TYPE (t);
3288            TREE_CODE (t2) == POINTER_TYPE;
3289            t2 = TREE_TYPE (t2))
3290         ;
3291       if (TREE_CODE (t2) != RECORD_TYPE
3292           && TREE_CODE (t2) != ENUMERAL_TYPE
3293           && TREE_CODE (t2) != QUAL_UNION_TYPE
3294           && TREE_CODE (t2) != UNION_TYPE)
3295         return -1;
3296       if (TYPE_SIZE (t2) == 0)
3297         return -1;
3298     }
3299   /* These are the only cases that need special handling.  */
3300   if (TREE_CODE (t) != RECORD_TYPE
3301       && TREE_CODE (t) != ENUMERAL_TYPE
3302       && TREE_CODE (t) != QUAL_UNION_TYPE
3303       && TREE_CODE (t) != UNION_TYPE
3304       && TREE_CODE (t) != POINTER_TYPE)
3305     return -1;
3306   /* Undefined? */
3307   if (TYPE_SIZE (t) == 0)
3308     return -1;
3309
3310   /* Look up t in hash table.  Only one of the compatible types within each
3311      alias set is recorded in the table.  */
3312   if (!type_hash_table)
3313     type_hash_table = htab_create_ggc (1021, c_type_hash,
3314             (htab_eq) lang_hooks.types_compatible_p,
3315             NULL);
3316   slot = htab_find_slot (type_hash_table, t, INSERT);
3317   if (*slot != NULL)
3318     {
3319       TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
3320       return TYPE_ALIAS_SET ((tree)*slot);
3321     }
3322   else
3323     /* Our caller will assign and record (in t) a new alias set; all we need
3324        to do is remember t in the hash table.  */
3325     *slot = t;
3326
3327   return -1;
3328 }
3329 \f
3330 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
3331    second parameter indicates which OPERATOR is being applied.  The COMPLAIN
3332    flag controls whether we should diagnose possibly ill-formed
3333    constructs or not.  */
3334
3335 tree
3336 c_sizeof_or_alignof_type (tree type, bool is_sizeof, int complain)
3337 {
3338   const char *op_name;
3339   tree value = NULL;
3340   enum tree_code type_code = TREE_CODE (type);
3341
3342   op_name = is_sizeof ? "sizeof" : "__alignof__";
3343
3344   if (type_code == FUNCTION_TYPE)
3345     {
3346       if (is_sizeof)
3347         {
3348           if (complain && (pedantic || warn_pointer_arith))
3349             pedwarn ("invalid application of %<sizeof%> to a function type");
3350           else if (!complain)
3351             return error_mark_node;
3352           value = size_one_node;
3353         }
3354       else
3355         value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
3356     }
3357   else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
3358     {
3359       if (type_code == VOID_TYPE
3360           && complain && (pedantic || warn_pointer_arith))
3361         pedwarn ("invalid application of %qs to a void type", op_name);
3362       else if (!complain)
3363         return error_mark_node;
3364       value = size_one_node;
3365     }
3366   else if (!COMPLETE_TYPE_P (type))
3367     {
3368       if (complain)
3369         error ("invalid application of %qs to incomplete type %qT ",
3370                op_name, type);
3371       value = size_zero_node;
3372     }
3373   else
3374     {
3375       if (is_sizeof)
3376         /* Convert in case a char is more than one unit.  */
3377         value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
3378                             size_int (TYPE_PRECISION (char_type_node)
3379                                       / BITS_PER_UNIT));
3380       else
3381         value = size_int (TYPE_ALIGN_UNIT (type));
3382     }
3383
3384   /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
3385      TYPE_IS_SIZETYPE means that certain things (like overflow) will
3386      never happen.  However, this node should really have type
3387      `size_t', which is just a typedef for an ordinary integer type.  */
3388   value = fold_convert (size_type_node, value);
3389   gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
3390
3391   return value;
3392 }
3393
3394 /* Implement the __alignof keyword: Return the minimum required
3395    alignment of EXPR, measured in bytes.  For VAR_DECLs,
3396    FUNCTION_DECLs and FIELD_DECLs return DECL_ALIGN (which can be set
3397    from an "aligned" __attribute__ specification).  */
3398
3399 tree
3400 c_alignof_expr (tree expr)
3401 {
3402   tree t;
3403
3404   if (VAR_OR_FUNCTION_DECL_P (expr))
3405     t = size_int (DECL_ALIGN_UNIT (expr));
3406
3407   else if (TREE_CODE (expr) == COMPONENT_REF
3408            && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
3409     {
3410       error ("%<__alignof%> applied to a bit-field");
3411       t = size_one_node;
3412     }
3413   else if (TREE_CODE (expr) == COMPONENT_REF
3414            && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
3415     t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
3416
3417   else if (TREE_CODE (expr) == INDIRECT_REF)
3418     {
3419       tree t = TREE_OPERAND (expr, 0);
3420       tree best = t;
3421       int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3422
3423       while ((TREE_CODE (t) == NOP_EXPR || TREE_CODE (t) == CONVERT_EXPR)
3424              && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
3425         {
3426           int thisalign;
3427
3428           t = TREE_OPERAND (t, 0);
3429           thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3430           if (thisalign > bestalign)
3431             best = t, bestalign = thisalign;
3432         }
3433       return c_alignof (TREE_TYPE (TREE_TYPE (best)));
3434     }
3435   else
3436     return c_alignof (TREE_TYPE (expr));
3437
3438   return fold_convert (size_type_node, t);
3439 }
3440 \f
3441 /* Handle C and C++ default attributes.  */
3442
3443 enum built_in_attribute
3444 {
3445 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
3446 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
3447 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
3448 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
3449 #include "builtin-attrs.def"
3450 #undef DEF_ATTR_NULL_TREE
3451 #undef DEF_ATTR_INT
3452 #undef DEF_ATTR_IDENT
3453 #undef DEF_ATTR_TREE_LIST
3454   ATTR_LAST
3455 };
3456
3457 static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
3458
3459 static void c_init_attributes (void);
3460
3461 enum c_builtin_type
3462 {
3463 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
3464 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
3465 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
3466 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
3467 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3468 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3469 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
3470 #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME,
3471 #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME,
3472 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
3473 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
3474 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
3475 #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3476 #define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3477 #define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
3478   NAME,
3479 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
3480 #include "builtin-types.def"
3481 #undef DEF_PRIMITIVE_TYPE
3482 #undef DEF_FUNCTION_TYPE_0
3483 #undef DEF_FUNCTION_TYPE_1
3484 #undef DEF_FUNCTION_TYPE_2
3485 #undef DEF_FUNCTION_TYPE_3
3486 #undef DEF_FUNCTION_TYPE_4
3487 #undef DEF_FUNCTION_TYPE_5
3488 #undef DEF_FUNCTION_TYPE_6
3489 #undef DEF_FUNCTION_TYPE_7
3490 #undef DEF_FUNCTION_TYPE_VAR_0
3491 #undef DEF_FUNCTION_TYPE_VAR_1
3492 #undef DEF_FUNCTION_TYPE_VAR_2
3493 #undef DEF_FUNCTION_TYPE_VAR_3
3494 #undef DEF_FUNCTION_TYPE_VAR_4
3495 #undef DEF_FUNCTION_TYPE_VAR_5
3496 #undef DEF_POINTER_TYPE
3497   BT_LAST
3498 };
3499
3500 typedef enum c_builtin_type builtin_type;
3501
3502 /* A temporary array for c_common_nodes_and_builtins.  Used in
3503    communication with def_fn_type.  */
3504 static tree builtin_types[(int) BT_LAST + 1];
3505
3506 /* A helper function for c_common_nodes_and_builtins.  Build function type
3507    for DEF with return type RET and N arguments.  If VAR is true, then the
3508    function should be variadic after those N arguments.
3509
3510    Takes special care not to ICE if any of the types involved are
3511    error_mark_node, which indicates that said type is not in fact available
3512    (see builtin_type_for_size).  In which case the function type as a whole
3513    should be error_mark_node.  */
3514
3515 static void
3516 def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
3517 {
3518   tree args = NULL, t;
3519   va_list list;
3520   int i;
3521
3522   va_start (list, n);
3523   for (i = 0; i < n; ++i)
3524     {
3525       builtin_type a = va_arg (list, builtin_type);
3526       t = builtin_types[a];
3527       if (t == error_mark_node)
3528         goto egress;
3529       args = tree_cons (NULL_TREE, t, args);
3530     }
3531   va_end (list);
3532
3533   args = nreverse (args);
3534   if (!var)
3535     args = chainon (args, void_list_node);
3536
3537   t = builtin_types[ret];
3538   if (t == error_mark_node)
3539     goto egress;
3540   t = build_function_type (t, args);
3541
3542  egress:
3543   builtin_types[def] = t;
3544 }
3545
3546 /* Build builtin functions common to both C and C++ language
3547    frontends.  */
3548
3549 static void
3550 c_define_builtins (tree va_list_ref_type_node, tree va_list_arg_type_node)
3551 {
3552 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
3553   builtin_types[ENUM] = VALUE;
3554 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
3555   def_fn_type (ENUM, RETURN, 0, 0);
3556 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
3557   def_fn_type (ENUM, RETURN, 0, 1, ARG1);
3558 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
3559   def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
3560 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3561   def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
3562 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3563   def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4);
3564 #define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3565   def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3566 #define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3567                             ARG6)                                       \
3568   def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
3569 #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3570                             ARG6, ARG7)                                 \
3571   def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
3572 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
3573   def_fn_type (ENUM, RETURN, 1, 0);
3574 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
3575   def_fn_type (ENUM, RETURN, 1, 1, ARG1);
3576 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
3577   def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
3578 #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3579   def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
3580 #define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3581   def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4);
3582 #define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3583   def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3584 #define DEF_POINTER_TYPE(ENUM, TYPE) \
3585   builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]);
3586
3587 #include "builtin-types.def"
3588
3589 #undef DEF_PRIMITIVE_TYPE
3590 #undef DEF_FUNCTION_TYPE_1
3591 #undef DEF_FUNCTION_TYPE_2
3592 #undef DEF_FUNCTION_TYPE_3
3593 #undef DEF_FUNCTION_TYPE_4
3594 #undef DEF_FUNCTION_TYPE_5
3595 #undef DEF_FUNCTION_TYPE_6
3596 #undef DEF_FUNCTION_TYPE_VAR_0
3597 #undef DEF_FUNCTION_TYPE_VAR_1
3598 #undef DEF_FUNCTION_TYPE_VAR_2
3599 #undef DEF_FUNCTION_TYPE_VAR_3
3600 #undef DEF_FUNCTION_TYPE_VAR_4
3601 #undef DEF_FUNCTION_TYPE_VAR_5
3602 #undef DEF_POINTER_TYPE
3603   builtin_types[(int) BT_LAST] = NULL_TREE;
3604
3605   c_init_attributes ();
3606
3607 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
3608                     NONANSI_P, ATTRS, IMPLICIT, COND)                   \
3609   if (NAME && COND)                                                     \
3610     def_builtin_1 (ENUM, NAME, CLASS,                                   \
3611                    builtin_types[(int) TYPE],                           \
3612                    builtin_types[(int) LIBTYPE],                        \
3613                    BOTH_P, FALLBACK_P, NONANSI_P,                       \
3614                    built_in_attributes[(int) ATTRS], IMPLICIT);
3615 #include "builtins.def"
3616 #undef DEF_BUILTIN
3617
3618   targetm.init_builtins ();
3619
3620   build_common_builtin_nodes ();
3621
3622   if (flag_mudflap)
3623     mudflap_init ();
3624 }
3625
3626 /* Build tree nodes and builtin functions common to both C and C++ language
3627    frontends.  */
3628
3629 void
3630 c_common_nodes_and_builtins (void)
3631 {
3632   int wchar_type_size;
3633   tree array_domain_type;
3634   tree va_list_ref_type_node;
3635   tree va_list_arg_type_node;
3636
3637   /* Define `int' and `char' first so that dbx will output them first.  */
3638   record_builtin_type (RID_INT, NULL, integer_type_node);
3639   record_builtin_type (RID_CHAR, "char", char_type_node);
3640
3641   /* `signed' is the same as `int'.  FIXME: the declarations of "signed",
3642      "unsigned long", "long long unsigned" and "unsigned short" were in C++
3643      but not C.  Are the conditionals here needed?  */
3644   if (c_dialect_cxx ())
3645     record_builtin_type (RID_SIGNED, NULL, integer_type_node);
3646   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
3647   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
3648   record_builtin_type (RID_MAX, "long unsigned int",
3649                        long_unsigned_type_node);
3650   if (c_dialect_cxx ())
3651     record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
3652   record_builtin_type (RID_MAX, "long long int",
3653                        long_long_integer_type_node);
3654   record_builtin_type (RID_MAX, "long long unsigned int",
3655                        long_long_unsigned_type_node);
3656   if (c_dialect_cxx ())
3657     record_builtin_type (RID_MAX, "long long unsigned",
3658                          long_long_unsigned_type_node);
3659   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
3660   record_builtin_type (RID_MAX, "short unsigned int",
3661                        short_unsigned_type_node);
3662   if (c_dialect_cxx ())
3663     record_builtin_type (RID_MAX, "unsigned short",
3664                          short_unsigned_type_node);
3665
3666   /* Define both `signed char' and `unsigned char'.  */
3667   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
3668   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
3669
3670   /* These are types that c_common_type_for_size and
3671      c_common_type_for_mode use.  */
3672   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3673                                          intQI_type_node));
3674   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3675                                          intHI_type_node));
3676   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3677                                          intSI_type_node));
3678   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3679                                          intDI_type_node));
3680 #if HOST_BITS_PER_WIDE_INT >= 64
3681   if (targetm.scalar_mode_supported_p (TImode))
3682     lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3683                                            get_identifier ("__int128_t"),
3684                                            intTI_type_node));
3685 #endif
3686   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3687                                          unsigned_intQI_type_node));
3688   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3689                                          unsigned_intHI_type_node));
3690   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3691                                          unsigned_intSI_type_node));
3692   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3693                                          unsigned_intDI_type_node));
3694 #if HOST_BITS_PER_WIDE_INT >= 64
3695   if (targetm.scalar_mode_supported_p (TImode))
3696     lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3697                                            get_identifier ("__uint128_t"),
3698                                            unsigned_intTI_type_node));
3699 #endif
3700
3701   /* Create the widest literal types.  */
3702   widest_integer_literal_type_node
3703     = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
3704   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3705                                          widest_integer_literal_type_node));
3706
3707   widest_unsigned_literal_type_node
3708     = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
3709   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3710                                          widest_unsigned_literal_type_node));
3711
3712   /* `unsigned long' is the standard type for sizeof.
3713      Note that stddef.h uses `unsigned long',
3714      and this must agree, even if long and int are the same size.  */
3715   size_type_node =
3716     TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
3717   signed_size_type_node = c_common_signed_type (size_type_node);
3718   set_sizetype (size_type_node);
3719
3720   pid_type_node =
3721     TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
3722
3723   build_common_tree_nodes_2 (flag_short_double);
3724
3725   record_builtin_type (RID_FLOAT, NULL, float_type_node);
3726   record_builtin_type (RID_DOUBLE, NULL, double_type_node);
3727   record_builtin_type (RID_MAX, "long double", long_double_type_node);
3728
3729   /* Only supported decimal floating point extension if the target
3730      actually supports underlying modes. */
3731   if (targetm.scalar_mode_supported_p (SDmode) 
3732       && targetm.scalar_mode_supported_p (DDmode)
3733       && targetm.scalar_mode_supported_p (TDmode))
3734     {
3735       record_builtin_type (RID_DFLOAT32, NULL, dfloat32_type_node);
3736       record_builtin_type (RID_DFLOAT64, NULL, dfloat64_type_node);
3737       record_builtin_type (RID_DFLOAT128, NULL, dfloat128_type_node);
3738     }
3739
3740   if (targetm.fixed_point_supported_p ())
3741     {
3742       record_builtin_type (RID_MAX, "short _Fract", short_fract_type_node);
3743       record_builtin_type (RID_FRACT, NULL, fract_type_node);
3744       record_builtin_type (RID_MAX, "long _Fract", long_fract_type_node);
3745       record_builtin_type (RID_MAX, "long long _Fract",
3746                            long_long_fract_type_node);
3747       record_builtin_type (RID_MAX, "unsigned short _Fract",
3748                            unsigned_short_fract_type_node);
3749       record_builtin_type (RID_MAX, "unsigned _Fract",
3750                            unsigned_fract_type_node);
3751       record_builtin_type (RID_MAX, "unsigned long _Fract",
3752                            unsigned_long_fract_type_node);
3753       record_builtin_type (RID_MAX, "unsigned long long _Fract",
3754                            unsigned_long_long_fract_type_node);
3755       record_builtin_type (RID_MAX, "_Sat short _Fract",
3756                            sat_short_fract_type_node);
3757       record_builtin_type (RID_MAX, "_Sat _Fract", sat_fract_type_node);
3758       record_builtin_type (RID_MAX, "_Sat long _Fract",
3759                            sat_long_fract_type_node);
3760       record_builtin_type (RID_MAX, "_Sat long long _Fract",
3761                            sat_long_long_fract_type_node);
3762       record_builtin_type (RID_MAX, "_Sat unsigned short _Fract",
3763                            sat_unsigned_short_fract_type_node);
3764       record_builtin_type (RID_MAX, "_Sat unsigned _Fract",
3765                            sat_unsigned_fract_type_node);
3766       record_builtin_type (RID_MAX, "_Sat unsigned long _Fract",
3767                            sat_unsigned_long_fract_type_node);
3768       record_builtin_type (RID_MAX, "_Sat unsigned long long _Fract",
3769                            sat_unsigned_long_long_fract_type_node);
3770       record_builtin_type (RID_MAX, "short _Accum", short_accum_type_node);
3771       record_builtin_type (RID_ACCUM, NULL, accum_type_node);
3772       record_builtin_type (RID_MAX, "long _Accum", long_accum_type_node);
3773       record_builtin_type (RID_MAX, "long long _Accum",
3774                            long_long_accum_type_node);
3775       record_builtin_type (RID_MAX, "unsigned short _Accum",
3776                            unsigned_short_accum_type_node);
3777       record_builtin_type (RID_MAX, "unsigned _Accum",
3778                            unsigned_accum_type_node);
3779       record_builtin_type (RID_MAX, "unsigned long _Accum",
3780                            unsigned_long_accum_type_node);
3781       record_builtin_type (RID_MAX, "unsigned long long _Accum",
3782                            unsigned_long_long_accum_type_node);
3783       record_builtin_type (RID_MAX, "_Sat short _Accum",
3784                            sat_short_accum_type_node);
3785       record_builtin_type (RID_MAX, "_Sat _Accum", sat_accum_type_node);
3786       record_builtin_type (RID_MAX, "_Sat long _Accum",
3787                            sat_long_accum_type_node);
3788       record_builtin_type (RID_MAX, "_Sat long long _Accum",
3789                           sat_long_long_accum_type_node);
3790       record_builtin_type (RID_MAX, "_Sat unsigned short _Accum",
3791                            sat_unsigned_short_accum_type_node);
3792       record_builtin_type (RID_MAX, "_Sat unsigned _Accum",
3793                            sat_unsigned_accum_type_node);
3794       record_builtin_type (RID_MAX, "_Sat unsigned long _Accum",
3795                            sat_unsigned_long_accum_type_node);
3796       record_builtin_type (RID_MAX, "_Sat unsigned long long _Accum",
3797                            sat_unsigned_long_long_accum_type_node);
3798
3799     }
3800
3801   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3802                                          get_identifier ("complex int"),
3803                                          complex_integer_type_node));
3804   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3805                                          get_identifier ("complex float"),
3806                                          complex_float_type_node));
3807   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3808                                          get_identifier ("complex double"),
3809                                          complex_double_type_node));
3810   lang_hooks.decls.pushdecl
3811     (build_decl (TYPE_DECL, get_identifier ("complex long double"),
3812                  complex_long_double_type_node));
3813
3814   if (c_dialect_cxx ())
3815     /* For C++, make fileptr_type_node a distinct void * type until
3816        FILE type is defined.  */
3817     fileptr_type_node = build_variant_type_copy (ptr_type_node);
3818
3819   record_builtin_type (RID_VOID, NULL, void_type_node);
3820
3821   /* Set the TYPE_NAME for any variants that were built before
3822      record_builtin_type gave names to the built-in types. */
3823   {
3824     tree void_name = TYPE_NAME (void_type_node);
3825     TYPE_NAME (void_type_node) = NULL_TREE;
3826     TYPE_NAME (build_qualified_type (void_type_node, TYPE_QUAL_CONST))
3827       = void_name;
3828     TYPE_NAME (void_type_node) = void_name;
3829   }
3830
3831   /* This node must not be shared.  */
3832   void_zero_node = make_node (INTEGER_CST);
3833   TREE_TYPE (void_zero_node) = void_type_node;
3834
3835   void_list_node = build_void_list_node ();
3836
3837   /* Make a type to be the domain of a few array types
3838      whose domains don't really matter.
3839      200 is small enough that it always fits in size_t
3840      and large enough that it can hold most function names for the
3841      initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
3842   array_domain_type = build_index_type (size_int (200));
3843
3844   /* Make a type for arrays of characters.
3845      With luck nothing will ever really depend on the length of this
3846      array type.  */
3847   char_array_type_node
3848     = build_array_type (char_type_node, array_domain_type);
3849
3850   /* Likewise for arrays of ints.  */
3851   int_array_type_node
3852     = build_array_type (integer_type_node, array_domain_type);
3853
3854   string_type_node = build_pointer_type (char_type_node);
3855   const_string_type_node
3856     = build_pointer_type (build_qualified_type
3857                           (char_type_node, TYPE_QUAL_CONST));
3858
3859   /* This is special for C++ so functions can be overloaded.  */
3860   wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
3861   wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
3862   wchar_type_size = TYPE_PRECISION (wchar_type_node);
3863   if (c_dialect_cxx ())
3864     {
3865       if (TYPE_UNSIGNED (wchar_type_node))
3866         wchar_type_node = make_unsigned_type (wchar_type_size);
3867       else
3868         wchar_type_node = make_signed_type (wchar_type_size);
3869       record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
3870     }
3871   else
3872     {
3873       signed_wchar_type_node = c_common_signed_type (wchar_type_node);
3874       unsigned_wchar_type_node = c_common_unsigned_type (wchar_type_node);
3875     }
3876
3877   /* This is for wide string constants.  */
3878   wchar_array_type_node
3879     = build_array_type (wchar_type_node, array_domain_type);
3880
3881   wint_type_node =
3882     TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
3883
3884   intmax_type_node =
3885     TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
3886   uintmax_type_node =
3887     TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
3888
3889   default_function_type = build_function_type (integer_type_node, NULL_TREE);
3890   ptrdiff_type_node
3891     = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
3892   unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
3893
3894   lang_hooks.decls.pushdecl
3895     (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
3896                  va_list_type_node));
3897
3898   if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
3899     {
3900       va_list_arg_type_node = va_list_ref_type_node =
3901         build_pointer_type (TREE_TYPE (va_list_type_node));
3902     }
3903   else
3904     {
3905       va_list_arg_type_node = va_list_type_node;
3906       va_list_ref_type_node = build_reference_type (va_list_type_node);
3907     }
3908
3909   if (!flag_preprocess_only)
3910     c_define_builtins (va_list_ref_type_node, va_list_arg_type_node);
3911
3912   main_identifier_node = get_identifier ("main");
3913
3914   /* Create the built-in __null node.  It is important that this is
3915      not shared.  */
3916   null_node = make_node (INTEGER_CST);
3917   TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
3918
3919   /* Since builtin_types isn't gc'ed, don't export these nodes.  */
3920   memset (builtin_types, 0, sizeof (builtin_types));
3921 }
3922
3923 /* Look up the function in built_in_decls that corresponds to DECL
3924    and set ASMSPEC as its user assembler name.  DECL must be a
3925    function decl that declares a builtin.  */
3926
3927 void
3928 set_builtin_user_assembler_name (tree decl, const char *asmspec)
3929 {
3930   tree builtin;
3931   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
3932               && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
3933               && asmspec != 0);
3934
3935   builtin = built_in_decls [DECL_FUNCTION_CODE (decl)];
3936   set_user_assembler_name (builtin, asmspec);
3937   if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMCPY)
3938     init_block_move_fn (asmspec);
3939   else if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMSET)
3940     init_block_clear_fn (asmspec);
3941 }
3942
3943 /* The number of named compound-literals generated thus far.  */
3944 static GTY(()) int compound_literal_number;
3945
3946 /* Set DECL_NAME for DECL, a VAR_DECL for a compound-literal.  */
3947
3948 void
3949 set_compound_literal_name (tree decl)
3950 {
3951   char *name;
3952   ASM_FORMAT_PRIVATE_NAME (name, "__compound_literal",
3953                            compound_literal_number);
3954   compound_literal_number++;
3955   DECL_NAME (decl) = get_identifier (name);
3956 }
3957
3958 tree
3959 build_va_arg (tree expr, tree type)
3960 {
3961   return build1 (VA_ARG_EXPR, type, expr);
3962 }
3963
3964
3965 /* Linked list of disabled built-in functions.  */
3966
3967 typedef struct disabled_builtin
3968 {
3969   const char *name;
3970   struct disabled_builtin *next;
3971 } disabled_builtin;
3972 static disabled_builtin *disabled_builtins = NULL;
3973
3974 static bool builtin_function_disabled_p (const char *);
3975
3976 /* Disable a built-in function specified by -fno-builtin-NAME.  If NAME
3977    begins with "__builtin_", give an error.  */
3978
3979 void
3980 disable_builtin_function (const char *name)
3981 {
3982   if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
3983     error ("cannot disable built-in function %qs", name);
3984   else
3985     {
3986       disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
3987       new_disabled_builtin->name = name;
3988       new_disabled_builtin->next = disabled_builtins;
3989       disabled_builtins = new_disabled_builtin;
3990     }
3991 }
3992
3993
3994 /* Return true if the built-in function NAME has been disabled, false
3995    otherwise.  */
3996
3997 static bool
3998 builtin_function_disabled_p (const char *name)
3999 {
4000   disabled_builtin *p;
4001   for (p = disabled_builtins; p != NULL; p = p->next)
4002     {
4003       if (strcmp (name, p->name) == 0)
4004         return true;
4005     }
4006   return false;
4007 }
4008
4009
4010 /* Worker for DEF_BUILTIN.
4011    Possibly define a builtin function with one or two names.
4012    Does not declare a non-__builtin_ function if flag_no_builtin, or if
4013    nonansi_p and flag_no_nonansi_builtin.  */
4014
4015 static void
4016 def_builtin_1 (enum built_in_function fncode,
4017                const char *name,
4018                enum built_in_class fnclass,
4019                tree fntype, tree libtype,
4020                bool both_p, bool fallback_p, bool nonansi_p,
4021                tree fnattrs, bool implicit_p)
4022 {
4023   tree decl;
4024   const char *libname;
4025
4026   if (fntype == error_mark_node)
4027     return;
4028
4029   gcc_assert ((!both_p && !fallback_p)
4030               || !strncmp (name, "__builtin_",
4031                            strlen ("__builtin_")));
4032
4033   libname = name + strlen ("__builtin_");
4034   decl = add_builtin_function (name, fntype, fncode, fnclass,
4035                                (fallback_p ? libname : NULL),
4036                                fnattrs);
4037   if (both_p
4038       && !flag_no_builtin && !builtin_function_disabled_p (libname)
4039       && !(nonansi_p && flag_no_nonansi_builtin))
4040     add_builtin_function (libname, libtype, fncode, fnclass,
4041                           NULL, fnattrs);
4042
4043   built_in_decls[(int) fncode] = decl;
4044   if (implicit_p)
4045     implicit_built_in_decls[(int) fncode] = decl;
4046 }
4047 \f
4048 /* Nonzero if the type T promotes to int.  This is (nearly) the
4049    integral promotions defined in ISO C99 6.3.1.1/2.  */
4050
4051 bool
4052 c_promoting_integer_type_p (const_tree t)
4053 {
4054   switch (TREE_CODE (t))
4055     {
4056     case INTEGER_TYPE:
4057       return (TYPE_MAIN_VARIANT (t) == char_type_node
4058               || TYPE_MAIN_VARIANT (t) == signed_char_type_node
4059               || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
4060               || TYPE_MAIN_VARIANT (t) == short_integer_type_node
4061               || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
4062               || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
4063
4064     case ENUMERAL_TYPE:
4065       /* ??? Technically all enumerations not larger than an int
4066          promote to an int.  But this is used along code paths
4067          that only want to notice a size change.  */
4068       return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
4069
4070     case BOOLEAN_TYPE:
4071       return 1;
4072
4073     default:
4074       return 0;
4075     }
4076 }
4077
4078 /* Return 1 if PARMS specifies a fixed number of parameters
4079    and none of their types is affected by default promotions.  */
4080
4081 int
4082 self_promoting_args_p (const_tree parms)
4083 {
4084   const_tree t;
4085   for (t = parms; t; t = TREE_CHAIN (t))
4086     {
4087       tree type = TREE_VALUE (t);
4088
4089       if (type == error_mark_node)
4090         continue;
4091
4092       if (TREE_CHAIN (t) == 0 && type != void_type_node)
4093         return 0;
4094
4095       if (type == 0)
4096         return 0;
4097
4098       if (TYPE_MAIN_VARIANT (type) == float_type_node)