OSDN Git Service

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