]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/c-common.c
Makefile.in (PREPROCESSOR_DEFINES): Add directory terminators to PREFIX and STANDARD_...
[thirdparty/gcc.git] / gcc / c-common.c
CommitLineData
b30f223b 1/* Subroutines shared by all languages that are variants of C.
1574ef13 2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
fbc8d2d3 3 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
b30f223b 4
1322177d 5This file is part of GCC.
b30f223b 6
1322177d
LB
7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
9Software Foundation; either version 2, or (at your option) any later
10version.
b30f223b 11
1322177d
LB
12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15for more details.
b30f223b
RS
16
17You should have received a copy of the GNU General Public License
1322177d 18along with GCC; see the file COPYING. If not, write to the Free
366ccddb
KC
19Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
2002110-1301, USA. */
b30f223b
RS
21
22#include "config.h"
670ee920 23#include "system.h"
4977bab6
ZW
24#include "coretypes.h"
25#include "tm.h"
d9b2742a 26#include "intl.h"
b30f223b 27#include "tree.h"
b30f223b 28#include "flags.h"
d6f4ec51 29#include "output.h"
e2af664c 30#include "c-pragma.h"
3932261a 31#include "rtl.h"
1526a060 32#include "ggc.h"
17211ab5 33#include "varray.h"
c6991660 34#include "expr.h"
8f17b5c5 35#include "c-common.h"
22703ccc 36#include "diagnostic.h"
7bdb32b9 37#include "tm_p.h"
235cfbc4 38#include "obstack.h"
c8724862 39#include "cpplib.h"
12a68f1f 40#include "target.h"
7afff7cf 41#include "langhooks.h"
d57a4b98 42#include "tree-inline.h"
0bfa5f65 43#include "c-tree.h"
5f1989e6 44#include "toplev.h"
6de9cd9a
DN
45#include "tree-iterator.h"
46#include "hashtab.h"
c31b8e1b 47#include "tree-mudflap.h"
d974312d 48#include "opts.h"
010c4d9c 49#include "real.h"
ce91e74c 50#include "cgraph.h"
1f1d5130 51#include "target-def.h"
cb60f38d 52
81a75f0f 53cpp_reader *parse_in; /* Declared in c-pragma.h. */
c8724862 54
eaa7c03f
JM
55/* We let tm.h override the types used here, to handle trivial differences
56 such as the choice of unsigned int or long unsigned int for size_t.
57 When machines start needing nontrivial differences in the size type,
58 it would be best to do something here to figure out automatically
59 from other information what type to use. */
60
61#ifndef SIZE_TYPE
62#define SIZE_TYPE "long unsigned int"
63#endif
64
d1c38823
ZD
65#ifndef PID_TYPE
66#define PID_TYPE "int"
67#endif
68
eaa7c03f
JM
69#ifndef WCHAR_TYPE
70#define WCHAR_TYPE "int"
71#endif
72
a11eba95
ZW
73/* WCHAR_TYPE gets overridden by -fshort-wchar. */
74#define MODIFIED_WCHAR_TYPE \
75 (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
76
0884b60c
BS
77#ifndef PTRDIFF_TYPE
78#define PTRDIFF_TYPE "long int"
79#endif
80
5fd8e536
JM
81#ifndef WINT_TYPE
82#define WINT_TYPE "unsigned int"
83#endif
84
85#ifndef INTMAX_TYPE
86#define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
87 ? "int" \
88 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
89 ? "long int" \
90 : "long long int"))
91#endif
92
93#ifndef UINTMAX_TYPE
94#define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
95 ? "unsigned int" \
96 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
97 ? "long unsigned int" \
98 : "long long unsigned int"))
99#endif
100
7f4edbcb 101/* The following symbols are subsumed in the c_global_trees array, and
d125d268 102 listed here individually for documentation purposes.
7f4edbcb
BS
103
104 INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
105
106 tree short_integer_type_node;
107 tree long_integer_type_node;
108 tree long_long_integer_type_node;
109
110 tree short_unsigned_type_node;
111 tree long_unsigned_type_node;
112 tree long_long_unsigned_type_node;
113
de7df9eb
JM
114 tree truthvalue_type_node;
115 tree truthvalue_false_node;
116 tree truthvalue_true_node;
7f4edbcb
BS
117
118 tree ptrdiff_type_node;
119
120 tree unsigned_char_type_node;
121 tree signed_char_type_node;
122 tree wchar_type_node;
123 tree signed_wchar_type_node;
124 tree unsigned_wchar_type_node;
125
126 tree float_type_node;
127 tree double_type_node;
128 tree long_double_type_node;
129
130 tree complex_integer_type_node;
131 tree complex_float_type_node;
132 tree complex_double_type_node;
133 tree complex_long_double_type_node;
134
9a8ce21f
JG
135 tree dfloat32_type_node;
136 tree dfloat64_type_node;
137 tree_dfloat128_type_node;
138
7f4edbcb
BS
139 tree intQI_type_node;
140 tree intHI_type_node;
141 tree intSI_type_node;
142 tree intDI_type_node;
143 tree intTI_type_node;
144
145 tree unsigned_intQI_type_node;
146 tree unsigned_intHI_type_node;
147 tree unsigned_intSI_type_node;
148 tree unsigned_intDI_type_node;
149 tree unsigned_intTI_type_node;
150
151 tree widest_integer_literal_type_node;
152 tree widest_unsigned_literal_type_node;
153
154 Nodes for types `void *' and `const void *'.
155
156 tree ptr_type_node, const_ptr_type_node;
157
158 Nodes for types `char *' and `const char *'.
159
160 tree string_type_node, const_string_type_node;
161
162 Type `char[SOMENUMBER]'.
163 Used when an array of char is needed and the size is irrelevant.
164
165 tree char_array_type_node;
166
167 Type `int[SOMENUMBER]' or something like it.
168 Used when an array of int needed and the size is irrelevant.
169
170 tree int_array_type_node;
171
172 Type `wchar_t[SOMENUMBER]' or something like it.
173 Used when a wide string literal is created.
174
175 tree wchar_array_type_node;
176
177 Type `int ()' -- used for implicit declaration of functions.
178
179 tree default_function_type;
180
7f4edbcb
BS
181 A VOID_TYPE node, packaged in a TREE_LIST.
182
183 tree void_list_node;
184
684d9f3b 185 The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
0ba8a114
NS
186 and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
187 VAR_DECLS, but C++ does.)
63ad61ed 188
0ba8a114 189 tree function_name_decl_node;
684d9f3b 190 tree pretty_function_name_decl_node;
0ba8a114
NS
191 tree c99_function_name_decl_node;
192
193 Stack of nested function name VAR_DECLs.
35b1a6fa 194
0ba8a114 195 tree saved_function_name_decls;
63ad61ed 196
7f4edbcb
BS
197*/
198
199tree c_global_trees[CTI_MAX];
17211ab5 200\f
4078b403
NB
201/* Switches common to the C front ends. */
202
aaf93206 203/* Nonzero if prepreprocessing only. */
63973df3 204
aaf93206
NB
205int flag_preprocess_only;
206
63973df3
NB
207/* Nonzero means don't output line number information. */
208
209char flag_no_line_commands;
210
211/* Nonzero causes -E output not to be done, but directives such as
212 #define that have side effects are still obeyed. */
213
214char flag_no_output;
215
216/* Nonzero means dump macros in some fashion. */
217
218char flag_dump_macros;
219
220/* Nonzero means pass #include lines through to the output. */
221
222char flag_dump_includes;
223
c0d578e6
GK
224/* Nonzero means process PCH files while preprocessing. */
225
226bool flag_pch_preprocess;
227
17211ab5
GK
228/* The file name to which we should write a precompiled header, or
229 NULL if no header will be written in this compile. */
230
231const char *pch_file;
232
3df89291
NB
233/* Nonzero if an ISO standard was selected. It rejects macros in the
234 user's namespace. */
235int flag_iso;
236
237/* Nonzero if -undef was given. It suppresses target built-in macros
238 and assertions. */
239int flag_undef;
240
6bcedb4e
MM
241/* Nonzero means don't recognize the non-ANSI builtin functions. */
242
243int flag_no_builtin;
244
245/* Nonzero means don't recognize the non-ANSI builtin functions.
246 -ansi sets this. */
247
248int flag_no_nonansi_builtin;
249
eaa7c03f
JM
250/* Nonzero means give `double' the same size as `float'. */
251
252int flag_short_double;
253
254/* Nonzero means give `wchar_t' the same size as `short'. */
255
256int flag_short_wchar;
257
00c8e9f6
MS
258/* Nonzero means allow implicit conversions between vectors with
259 differing numbers of subparts and/or differing element types. */
260int flag_lax_vector_conversions;
261
750491fc
RH
262/* Nonzero means allow Microsoft extensions without warnings or errors. */
263int flag_ms_extensions;
264
4078b403
NB
265/* Nonzero means don't recognize the keyword `asm'. */
266
267int flag_no_asm;
268
4078b403
NB
269/* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
270
271int flag_signed_bitfields = 1;
4078b403 272
35b1a6fa 273/* Warn about #pragma directives that are not recognized. */
4078b403 274
35b1a6fa 275int warn_unknown_pragmas; /* Tri state variable. */
4078b403 276
4078b403
NB
277/* Warn about format/argument anomalies in calls to formatted I/O functions
278 (*printf, *scanf, strftime, strfmon, etc.). */
279
280int warn_format;
281
b2f97e4a
MM
282/* Warn about using __null (as NULL in C++) as sentinel. For code compiled
283 with GCC this doesn't matter as __null is guaranteed to have the right
284 size. */
285
286int warn_strict_null_sentinel;
287
264fa2db
ZL
288/* Zero means that faster, ...NonNil variants of objc_msgSend...
289 calls will be used in ObjC; passing nil receivers to such calls
290 will most likely result in crashes. */
291int flag_nil_receivers = 1;
292
264fa2db
ZL
293/* Nonzero means that code generation will be altered to support
294 "zero-link" execution. This currently affects ObjC only, but may
295 affect other languages in the future. */
296int flag_zero_link = 0;
297
298/* Nonzero means emit an '__OBJC, __image_info' for the current translation
299 unit. It will inform the ObjC runtime that class definition(s) herein
300 contained are to replace one(s) previously loaded. */
301int flag_replace_objc_classes = 0;
9f63daea 302
4078b403
NB
303/* C/ObjC language option variables. */
304
305
4078b403
NB
306/* Nonzero means allow type mismatches in conditional expressions;
307 just make their values `void'. */
308
309int flag_cond_mismatch;
310
311/* Nonzero means enable C89 Amendment 1 features. */
312
313int flag_isoc94;
314
315/* Nonzero means use the ISO C99 dialect of C. */
316
317int flag_isoc99;
318
6614fd40 319/* Nonzero means that we have builtin functions, and main is an int. */
4078b403
NB
320
321int flag_hosted = 1;
322
4078b403
NB
323/* Warn if main is suspicious. */
324
325int warn_main;
326
4078b403
NB
327
328/* ObjC language option variables. */
329
330
331/* Open and close the file for outputting class declarations, if
332 requested (ObjC). */
333
334int flag_gen_declaration;
335
4078b403
NB
336/* Tells the compiler that this is a special run. Do not perform any
337 compiling, instead we are to test some platform dependent features
338 and output a C header file with appropriate definitions. */
339
340int print_struct_values;
341
2a694ec8 342/* Tells the compiler what is the constant string class for Objc. */
4078b403
NB
343
344const char *constant_string_class_name;
345
4078b403
NB
346
347/* C++ language option variables. */
348
349
350/* Nonzero means don't recognize any extension keywords. */
351
352int flag_no_gnu_keywords;
353
354/* Nonzero means do emit exported implementations of functions even if
355 they can be inlined. */
356
357int flag_implement_inlines = 1;
358
4078b403
NB
359/* Nonzero means that implicit instantiations will be emitted if needed. */
360
361int flag_implicit_templates = 1;
362
363/* Nonzero means that implicit instantiations of inline templates will be
364 emitted if needed, even if instantiations of non-inline templates
365 aren't. */
366
367int flag_implicit_inline_templates = 1;
368
369/* Nonzero means generate separate instantiation control files and
370 juggle them at link time. */
371
372int flag_use_repository;
373
374/* Nonzero if we want to issue diagnostics that the standard says are not
375 required. */
376
377int flag_optional_diags = 1;
378
379/* Nonzero means we should attempt to elide constructors when possible. */
380
381int flag_elide_constructors = 1;
382
383/* Nonzero means that member functions defined in class scope are
384 inline by default. */
385
386int flag_default_inline = 1;
387
388/* Controls whether compiler generates 'type descriptor' that give
389 run-time type information. */
390
391int flag_rtti = 1;
392
393/* Nonzero if we want to conserve space in the .o files. We do this
394 by putting uninitialized data and runtime initialized data into
395 .common instead of .data at the expense of not flagging multiple
396 definitions. */
397
398int flag_conserve_space;
399
400/* Nonzero if we want to obey access control semantics. */
401
402int flag_access_control = 1;
403
404/* Nonzero if we want to check the return value of new and avoid calling
405 constructors if it is a null pointer. */
406
407int flag_check_new;
408
966541e3
DG
409/* Nonzero if we want to allow the use of experimental features that
410 are likely to become part of C++0x. */
411
412int flag_cpp0x = 0;
413
4078b403
NB
414/* Nonzero if we want the new ISO rules for pushing a new scope for `for'
415 initialization variables.
416 0: Old rules, set by -fno-for-scope.
417 2: New ISO rules, set by -ffor-scope.
418 1: Try to implement new ISO rules, but with backup compatibility
419 (and warnings). This is the default, for now. */
420
421int flag_new_for_scope = 1;
422
423/* Nonzero if we want to emit defined symbols with common-like linkage as
424 weak symbols where possible, in order to conform to C++ semantics.
425 Otherwise, emit them as local symbols. */
426
427int flag_weak = 1;
428
b20d9f0c
AO
429/* 0 means we want the preprocessor to not emit line directives for
430 the current working directory. 1 means we want it to do it. -1
431 means we should decide depending on whether debugging information
432 is being emitted or not. */
433
434int flag_working_directory = -1;
435
4078b403 436/* Nonzero to use __cxa_atexit, rather than atexit, to register
c7b5e395
GK
437 destructors for local statics and global objects. '2' means it has been
438 set nonzero as a default, not by a command-line flag. */
4078b403
NB
439
440int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
441
c7b5e395
GK
442/* Nonzero to use __cxa_get_exception_ptr in C++ exception-handling
443 code. '2' means it has not been set explicitly on the command line. */
444
445int flag_use_cxa_get_exception_ptr = 2;
446
4078b403
NB
447/* Nonzero means make the default pedwarns warnings instead of errors.
448 The value of this flag is ignored if -pedantic is specified. */
449
450int flag_permissive;
451
452/* Nonzero means to implement standard semantics for exception
453 specifications, calling unexpected if an exception is thrown that
454 doesn't match the specification. Zero means to treat them as
455 assertions and optimize accordingly, but not check them. */
456
457int flag_enforce_eh_specs = 1;
458
40aac948
JM
459/* Nonzero means to generate thread-safe code for initializing local
460 statics. */
461
462int flag_threadsafe_statics = 1;
463
4078b403
NB
464/* Nonzero means warn about implicit declarations. */
465
466int warn_implicit = 1;
467
4078b403
NB
468/* Maximum template instantiation depth. This limit is rather
469 arbitrary, but it exists to limit the time it takes to notice
470 infinite template instantiations. */
471
472int max_tinst_depth = 500;
473
474
475
f09f1de5
MM
476/* The elements of `ridpointers' are identifier nodes for the reserved
477 type names and storage classes. It is indexed by a RID_... value. */
478tree *ridpointers;
479
35b1a6fa 480tree (*make_fname_decl) (tree, int);
2ce07e2d 481
e78a3b42
RK
482/* Nonzero means the expression being parsed will never be evaluated.
483 This is a count, since unevaluated expressions can nest. */
484int skip_evaluation;
485
ec5c56db 486/* Information about how a function name is generated. */
0ba8a114
NS
487struct fname_var_t
488{
8b60264b
KG
489 tree *const decl; /* pointer to the VAR_DECL. */
490 const unsigned rid; /* RID number for the identifier. */
491 const int pretty; /* How pretty is it? */
0ba8a114
NS
492};
493
ec5c56db 494/* The three ways of getting then name of the current function. */
0ba8a114
NS
495
496const struct fname_var_t fname_vars[] =
497{
ec5c56db 498 /* C99 compliant __func__, must be first. */
0ba8a114 499 {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
ec5c56db 500 /* GCC __FUNCTION__ compliant. */
0ba8a114 501 {&function_name_decl_node, RID_FUNCTION_NAME, 0},
ec5c56db 502 /* GCC __PRETTY_FUNCTION__ compliant. */
0ba8a114
NS
503 {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
504 {NULL, 0, 0},
505};
506
a6c0a76c
SB
507static tree check_case_value (tree);
508static bool check_case_bounds (tree, tree, tree *, tree *);
4724b3de 509
35b1a6fa
AJ
510static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
511static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
512static tree handle_common_attribute (tree *, tree, tree, int, bool *);
513static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
52bf96d2
JH
514static tree handle_hot_attribute (tree *, tree, tree, int, bool *);
515static tree handle_cold_attribute (tree *, tree, tree, int, bool *);
35b1a6fa
AJ
516static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
517static tree handle_always_inline_attribute (tree *, tree, tree, int,
518 bool *);
4eb7fd83
JJ
519static tree handle_gnu_inline_attribute (tree *, tree, tree, int,
520 bool *);
0691d1d4 521static tree handle_flatten_attribute (tree *, tree, tree, int, bool *);
35b1a6fa
AJ
522static tree handle_used_attribute (tree *, tree, tree, int, bool *);
523static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
ce91e74c
JH
524static tree handle_externally_visible_attribute (tree *, tree, tree, int,
525 bool *);
35b1a6fa
AJ
526static tree handle_const_attribute (tree *, tree, tree, int, bool *);
527static tree handle_transparent_union_attribute (tree *, tree, tree,
528 int, bool *);
529static tree handle_constructor_attribute (tree *, tree, tree, int, bool *);
530static tree handle_destructor_attribute (tree *, tree, tree, int, bool *);
531static tree handle_mode_attribute (tree *, tree, tree, int, bool *);
532static tree handle_section_attribute (tree *, tree, tree, int, bool *);
533static tree handle_aligned_attribute (tree *, tree, tree, int, bool *);
534static tree handle_weak_attribute (tree *, tree, tree, int, bool *) ;
535static tree handle_alias_attribute (tree *, tree, tree, int, bool *);
a0203ca7 536static tree handle_weakref_attribute (tree *, tree, tree, int, bool *) ;
35b1a6fa
AJ
537static tree handle_visibility_attribute (tree *, tree, tree, int,
538 bool *);
539static tree handle_tls_model_attribute (tree *, tree, tree, int,
540 bool *);
541static tree handle_no_instrument_function_attribute (tree *, tree,
542 tree, int, bool *);
543static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
6e9a3221 544static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
35b1a6fa
AJ
545static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
546 bool *);
547static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
dcd6de6d 548static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
35b1a6fa
AJ
549static tree handle_deprecated_attribute (tree *, tree, tree, int,
550 bool *);
551static tree handle_vector_size_attribute (tree *, tree, tree, int,
552 bool *);
553static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
554static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
555static tree handle_cleanup_attribute (tree *, tree, tree, int, bool *);
72954a4f
JM
556static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
557 bool *);
3d091dac 558static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
35b1a6fa 559
94a0dd7b 560static void check_function_nonnull (tree, int, tree *);
35b1a6fa
AJ
561static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
562static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
563static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
d07605f5 564static int resort_field_decl_cmp (const void *, const void *);
b34c7881 565
349ae713
NB
566/* Table of machine-independent attributes common to all C-like languages. */
567const struct attribute_spec c_common_attribute_table[] =
568{
569 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
570 { "packed", 0, 0, false, false, false,
35b1a6fa 571 handle_packed_attribute },
349ae713
NB
572 { "nocommon", 0, 0, true, false, false,
573 handle_nocommon_attribute },
574 { "common", 0, 0, true, false, false,
575 handle_common_attribute },
576 /* FIXME: logically, noreturn attributes should be listed as
577 "false, true, true" and apply to function types. But implementing this
578 would require all the places in the compiler that use TREE_THIS_VOLATILE
579 on a decl to identify non-returning functions to be located and fixed
580 to check the function type instead. */
581 { "noreturn", 0, 0, true, false, false,
582 handle_noreturn_attribute },
583 { "volatile", 0, 0, true, false, false,
584 handle_noreturn_attribute },
585 { "noinline", 0, 0, true, false, false,
586 handle_noinline_attribute },
587 { "always_inline", 0, 0, true, false, false,
588 handle_always_inline_attribute },
4eb7fd83
JJ
589 { "gnu_inline", 0, 0, true, false, false,
590 handle_gnu_inline_attribute },
0691d1d4 591 { "flatten", 0, 0, true, false, false,
c22cacf3 592 handle_flatten_attribute },
349ae713
NB
593 { "used", 0, 0, true, false, false,
594 handle_used_attribute },
595 { "unused", 0, 0, false, false, false,
596 handle_unused_attribute },
ce91e74c
JH
597 { "externally_visible", 0, 0, true, false, false,
598 handle_externally_visible_attribute },
349ae713
NB
599 /* The same comments as for noreturn attributes apply to const ones. */
600 { "const", 0, 0, true, false, false,
601 handle_const_attribute },
602 { "transparent_union", 0, 0, false, false, false,
603 handle_transparent_union_attribute },
fc8600f9 604 { "constructor", 0, 1, true, false, false,
349ae713 605 handle_constructor_attribute },
fc8600f9 606 { "destructor", 0, 1, true, false, false,
349ae713
NB
607 handle_destructor_attribute },
608 { "mode", 1, 1, false, true, false,
609 handle_mode_attribute },
610 { "section", 1, 1, true, false, false,
611 handle_section_attribute },
612 { "aligned", 0, 1, false, false, false,
613 handle_aligned_attribute },
614 { "weak", 0, 0, true, false, false,
615 handle_weak_attribute },
616 { "alias", 1, 1, true, false, false,
617 handle_alias_attribute },
a0203ca7
AO
618 { "weakref", 0, 1, true, false, false,
619 handle_weakref_attribute },
349ae713
NB
620 { "no_instrument_function", 0, 0, true, false, false,
621 handle_no_instrument_function_attribute },
622 { "malloc", 0, 0, true, false, false,
623 handle_malloc_attribute },
6e9a3221
AN
624 { "returns_twice", 0, 0, true, false, false,
625 handle_returns_twice_attribute },
349ae713
NB
626 { "no_stack_limit", 0, 0, true, false, false,
627 handle_no_limit_stack_attribute },
628 { "pure", 0, 0, true, false, false,
629 handle_pure_attribute },
dcd6de6d
ZD
630 /* For internal use (marking of builtins) only. The name contains space
631 to prevent its usage in source code. */
632 { "no vops", 0, 0, true, false, false,
633 handle_novops_attribute },
349ae713
NB
634 { "deprecated", 0, 0, false, false, false,
635 handle_deprecated_attribute },
636 { "vector_size", 1, 1, false, true, false,
637 handle_vector_size_attribute },
d7afec4b 638 { "visibility", 1, 1, false, false, false,
349ae713 639 handle_visibility_attribute },
dce81a1a
JJ
640 { "tls_model", 1, 1, true, false, false,
641 handle_tls_model_attribute },
b34c7881
JT
642 { "nonnull", 0, -1, false, true, true,
643 handle_nonnull_attribute },
39f2f3c8
RS
644 { "nothrow", 0, 0, true, false, false,
645 handle_nothrow_attribute },
d18b1ed8 646 { "may_alias", 0, 0, false, true, false, NULL },
0bfa5f65
RH
647 { "cleanup", 1, 1, true, false, false,
648 handle_cleanup_attribute },
72954a4f
JM
649 { "warn_unused_result", 0, 0, false, true, true,
650 handle_warn_unused_result_attribute },
254986c7 651 { "sentinel", 0, 1, false, true, true,
3d091dac 652 handle_sentinel_attribute },
52bf96d2
JH
653 { "cold", 0, 0, true, false, false,
654 handle_cold_attribute },
655 { "hot", 0, 0, true, false, false,
656 handle_hot_attribute },
349ae713
NB
657 { NULL, 0, 0, false, false, false, NULL }
658};
659
660/* Give the specifications for the format attributes, used by C and all
95bd1dd7 661 descendants. */
349ae713
NB
662
663const struct attribute_spec c_common_format_attribute_table[] =
664{
665 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
666 { "format", 3, 3, false, true, true,
667 handle_format_attribute },
668 { "format_arg", 1, 1, false, true, true,
669 handle_format_arg_attribute },
670 { NULL, 0, 0, false, false, false, NULL }
671};
672
57a4c089
MM
673/* Functions called automatically at the beginning and end of execution. */
674
675tree static_ctors;
676tree static_dtors;
677
ec5c56db 678/* Push current bindings for the function name VAR_DECLS. */
7da551a2
RS
679
680void
35b1a6fa 681start_fname_decls (void)
7da551a2 682{
0ba8a114
NS
683 unsigned ix;
684 tree saved = NULL_TREE;
35b1a6fa 685
0ba8a114
NS
686 for (ix = 0; fname_vars[ix].decl; ix++)
687 {
688 tree decl = *fname_vars[ix].decl;
7da551a2 689
0ba8a114
NS
690 if (decl)
691 {
7d60be94 692 saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
0ba8a114
NS
693 *fname_vars[ix].decl = NULL_TREE;
694 }
695 }
696 if (saved || saved_function_name_decls)
697 /* Normally they'll have been NULL, so only push if we've got a
698 stack, or they are non-NULL. */
699 saved_function_name_decls = tree_cons (saved, NULL_TREE,
700 saved_function_name_decls);
701}
702
325c3691
RH
703/* Finish up the current bindings, adding them into the current function's
704 statement tree. This must be done _before_ finish_stmt_tree is called.
705 If there is no current function, we must be at file scope and no statements
706 are involved. Pop the previous bindings. */
0ba8a114
NS
707
708void
35b1a6fa 709finish_fname_decls (void)
0ba8a114
NS
710{
711 unsigned ix;
325c3691 712 tree stmts = NULL_TREE;
0ba8a114
NS
713 tree stack = saved_function_name_decls;
714
715 for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
325c3691 716 append_to_statement_list (TREE_VALUE (stack), &stmts);
35b1a6fa 717
325c3691 718 if (stmts)
0ba8a114 719 {
325c3691 720 tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
bfaba7a9 721
325c3691
RH
722 if (TREE_CODE (*bodyp) == BIND_EXPR)
723 bodyp = &BIND_EXPR_BODY (*bodyp);
6cce57b0 724
86ad3aa9 725 append_to_statement_list_force (*bodyp, &stmts);
325c3691 726 *bodyp = stmts;
0ba8a114 727 }
35b1a6fa 728
0ba8a114
NS
729 for (ix = 0; fname_vars[ix].decl; ix++)
730 *fname_vars[ix].decl = NULL_TREE;
35b1a6fa 731
0ba8a114 732 if (stack)
7da551a2 733 {
ec5c56db 734 /* We had saved values, restore them. */
0ba8a114
NS
735 tree saved;
736
737 for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
738 {
739 tree decl = TREE_PURPOSE (saved);
740 unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
35b1a6fa 741
0ba8a114
NS
742 *fname_vars[ix].decl = decl;
743 }
744 stack = TREE_CHAIN (stack);
7da551a2 745 }
0ba8a114
NS
746 saved_function_name_decls = stack;
747}
748
6cce57b0 749/* Return the text name of the current function, suitably prettified
0d0bc036 750 by PRETTY_P. Return string must be freed by caller. */
0ba8a114
NS
751
752const char *
35b1a6fa 753fname_as_string (int pretty_p)
0ba8a114 754{
47ab33b2 755 const char *name = "top level";
0d0bc036 756 char *namep;
47ab33b2
MA
757 int vrb = 2;
758
3f75a254 759 if (!pretty_p)
47ab33b2
MA
760 {
761 name = "";
762 vrb = 0;
763 }
764
765 if (current_function_decl)
ae2bcd98 766 name = lang_hooks.decl_printable_name (current_function_decl, vrb);
47ab33b2 767
0d0bc036
AH
768 if (c_lex_string_translate)
769 {
770 int len = strlen (name) + 3; /* Two for '"'s. One for NULL. */
771 cpp_string cstr = { 0, 0 }, strname;
772
28dab132 773 namep = XNEWVEC (char, len);
0d0bc036
AH
774 snprintf (namep, len, "\"%s\"", name);
775 strname.text = (unsigned char *) namep;
776 strname.len = len - 1;
777
778 if (cpp_interpret_string (parse_in, &strname, 1, &cstr, false))
029fc60b
KH
779 {
780 XDELETEVEC (namep);
781 return (char *) cstr.text;
782 }
0d0bc036
AH
783 }
784 else
5557d672 785 namep = xstrdup (name);
0d0bc036
AH
786
787 return namep;
0ba8a114
NS
788}
789
3c79fa86
AP
790/* Expand DECL if it declares an entity not handled by the
791 common code. */
792
793int
794c_expand_decl (tree decl)
795{
796 if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
797 {
798 /* Let the back-end know about this variable. */
799 if (!anon_aggr_type_p (TREE_TYPE (decl)))
c22cacf3 800 emit_local_var (decl);
3c79fa86 801 else
c22cacf3
MS
802 expand_anon_union_decl (decl, NULL_TREE,
803 DECL_ANON_UNION_ELEMS (decl));
3c79fa86 804 }
3c79fa86
AP
805 else
806 return 0;
807
808 return 1;
809}
810
811
0ba8a114
NS
812/* Return the VAR_DECL for a const char array naming the current
813 function. If the VAR_DECL has not yet been created, create it
814 now. RID indicates how it should be formatted and IDENTIFIER_NODE
815 ID is its name (unfortunately C and C++ hold the RID values of
816 keywords in different places, so we can't derive RID from ID in
f63d1bf7 817 this language independent code. */
0ba8a114
NS
818
819tree
35b1a6fa 820fname_decl (unsigned int rid, tree id)
0ba8a114
NS
821{
822 unsigned ix;
823 tree decl = NULL_TREE;
824
825 for (ix = 0; fname_vars[ix].decl; ix++)
826 if (fname_vars[ix].rid == rid)
827 break;
828
829 decl = *fname_vars[ix].decl;
830 if (!decl)
7da551a2 831 {
8d3e27d1
DJ
832 /* If a tree is built here, it would normally have the lineno of
833 the current statement. Later this tree will be moved to the
834 beginning of the function and this line number will be wrong.
835 To avoid this problem set the lineno to 0 here; that prevents
4b7e68e7 836 it from appearing in the RTL. */
325c3691 837 tree stmts;
3c20847b
PB
838 location_t saved_location = input_location;
839#ifdef USE_MAPPED_LOCATION
840 input_location = UNKNOWN_LOCATION;
841#else
d479d37f 842 input_line = 0;
3c20847b 843#endif
35b1a6fa 844
325c3691 845 stmts = push_stmt_list ();
0ba8a114 846 decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
325c3691
RH
847 stmts = pop_stmt_list (stmts);
848 if (!IS_EMPTY_STMT (stmts))
849 saved_function_name_decls
850 = tree_cons (decl, stmts, saved_function_name_decls);
0ba8a114 851 *fname_vars[ix].decl = decl;
3c20847b 852 input_location = saved_location;
7da551a2 853 }
0ba8a114 854 if (!ix && !current_function_decl)
8b17a9d6 855 pedwarn ("%qD is not defined outside of function scope", decl);
6cce57b0 856
0ba8a114 857 return decl;
7da551a2
RS
858}
859
b84a3874 860/* Given a STRING_CST, give it a suitable array-of-chars data type. */
b30f223b
RS
861
862tree
35b1a6fa 863fix_string_type (tree value)
b30f223b 864{
b84a3874
RH
865 const int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
866 const int wide_flag = TREE_TYPE (value) == wchar_array_type_node;
b84a3874
RH
867 int length = TREE_STRING_LENGTH (value);
868 int nchars;
c162c75e
MA
869 tree e_type, i_type, a_type;
870
b57062ca 871 /* Compute the number of elements, for the array type. */
b30f223b
RS
872 nchars = wide_flag ? length / wchar_bytes : length;
873
89a42ac8
ZW
874 /* C89 2.2.4.1, C99 5.2.4.1 (Translation limits). The analogous
875 limit in C++98 Annex B is very large (65536) and is not normative,
876 so we do not diagnose it (warn_overlength_strings is forced off
877 in c_common_post_options). */
878 if (warn_overlength_strings)
879 {
880 const int nchars_max = flag_isoc99 ? 4095 : 509;
881 const int relevant_std = flag_isoc99 ? 99 : 90;
882 if (nchars - 1 > nchars_max)
883 /* Translators: The %d after 'ISO C' will be 90 or 99. Do not
884 separate the %d from the 'C'. 'ISO' should not be
885 translated, but it may be moved after 'C%d' in languages
886 where modifiers follow nouns. */
887 pedwarn ("string length %qd is greater than the length %qd "
888 "ISO C%d compilers are required to support",
889 nchars - 1, nchars_max, relevant_std);
890 }
1326a48b 891
cfb10bd3
GDR
892 /* Create the array type for the string constant. The ISO C++
893 standard says that a string literal has type `const char[N]' or
894 `const wchar_t[N]'. We use the same logic when invoked as a C
895 front-end with -Wwrite-strings.
896 ??? We should change the type of an expression depending on the
897 state of a warning flag. We should just be warning -- see how
898 this is handled in the C++ front-end for the deprecated implicit
899 conversion from string literals to `char*' or `wchar_t*'.
c162c75e
MA
900
901 The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
902 array type being the unqualified version of that type.
903 Therefore, if we are constructing an array of const char, we must
904 construct the matching unqualified array type first. The C front
905 end does not require this, but it does no harm, so we do it
906 unconditionally. */
89a42ac8 907 e_type = wide_flag ? wchar_type_node : char_type_node;
7d60be94 908 i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
c162c75e 909 a_type = build_array_type (e_type, i_type);
cfb10bd3 910 if (c_dialect_cxx() || warn_write_strings)
46df2823 911 a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
d9cf7c82 912
c162c75e 913 TREE_TYPE (value) = a_type;
ccd4c832 914 TREE_CONSTANT (value) = 1;
6de9cd9a 915 TREE_INVARIANT (value) = 1;
3521b33c 916 TREE_READONLY (value) = 1;
b30f223b
RS
917 TREE_STATIC (value) = 1;
918 return value;
919}
920\f
d74154d5
RS
921/* Print a warning if a constant expression had overflow in folding.
922 Invoke this function on every expression that the language
923 requires to be a constant expression.
924 Note the ANSI C standard says it is erroneous for a
925 constant expression to overflow. */
96571883
BK
926
927void
35b1a6fa 928constant_expression_warning (tree value)
96571883 929{
c05f751c 930 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
69ef87e2 931 || TREE_CODE (value) == VECTOR_CST
c05f751c 932 || TREE_CODE (value) == COMPLEX_CST)
d95787e6 933 && TREE_OVERFLOW (value)
71834ad3
RS
934 && warn_overflow
935 && pedantic)
c05f751c 936 pedwarn ("overflow in constant expression");
d74154d5
RS
937}
938
59c0753d
MLI
939/* Print a warning if an expression had overflow in folding and its
940 operands hadn't.
941
d74154d5
RS
942 Invoke this function on every expression that
943 (1) appears in the source code, and
59c0753d 944 (2) is a constant expression that overflowed, and
d74154d5 945 (3) is not already checked by convert_and_check;
59c0753d
MLI
946 however, do not invoke this function on operands of explicit casts
947 or when the expression is the result of an operator and any operand
948 already overflowed. */
d74154d5
RS
949
950void
35b1a6fa 951overflow_warning (tree value)
d74154d5 952{
59c0753d
MLI
953 if (skip_evaluation) return;
954
955 switch (TREE_CODE (value))
69ef87e2 956 {
59c0753d
MLI
957 case INTEGER_CST:
958 warning (OPT_Woverflow, "integer overflow in expression");
959 break;
960
961 case REAL_CST:
962 warning (OPT_Woverflow, "floating point overflow in expression");
963 break;
964
965 case VECTOR_CST:
966 warning (OPT_Woverflow, "vector overflow in expression");
967 break;
968
969 case COMPLEX_CST:
970 if (TREE_CODE (TREE_REALPART (value)) == INTEGER_CST)
971 warning (OPT_Woverflow, "complex integer overflow in expression");
972 else if (TREE_CODE (TREE_REALPART (value)) == REAL_CST)
973 warning (OPT_Woverflow, "complex floating point overflow in expression");
974 break;
975
976 default:
977 break;
69ef87e2 978 }
d74154d5
RS
979}
980
63a08740
DM
981
982/* Warn about use of a logical || / && operator being used in a
983 context where it is likely that the bitwise equivalent was intended
984 by the programmer. CODE is the TREE_CODE of the operator, ARG1
985 and ARG2 the arguments. */
986
987void
988warn_logical_operator (enum tree_code code, tree arg1, tree
989 arg2)
990{
991 switch (code)
992 {
993 case TRUTH_ANDIF_EXPR:
994 case TRUTH_ORIF_EXPR:
995 case TRUTH_OR_EXPR:
996 case TRUTH_AND_EXPR:
89132ebc
DM
997 if (!TREE_NO_WARNING (arg1)
998 && INTEGRAL_TYPE_P (TREE_TYPE (arg1))
999 && !CONSTANT_CLASS_P (arg1)
1000 && TREE_CODE (arg2) == INTEGER_CST
1001 && !integer_zerop (arg2))
1002 {
1003 warning (OPT_Wlogical_op,
1004 "logical %<%s%> with non-zero constant "
1005 "will always evaluate as true",
1006 ((code == TRUTH_ANDIF_EXPR)
1007 || (code == TRUTH_AND_EXPR)) ? "&&" : "||");
1008 TREE_NO_WARNING (arg1) = true;
1009 }
1010 break;
63a08740 1011 default:
89132ebc 1012 break;
63a08740
DM
1013 }
1014}
1015
1016
de9c56a4
RG
1017/* Print a warning about casts that might indicate violation
1018 of strict aliasing rules if -Wstrict-aliasing is used and
3f0a2a47
DM
1019 strict aliasing mode is in effect. OTYPE is the original
1020 TREE_TYPE of EXPR, and TYPE the type we're casting to. */
de9c56a4
RG
1021
1022void
3f0a2a47 1023strict_aliasing_warning (tree otype, tree type, tree expr)
de9c56a4
RG
1024{
1025 if (flag_strict_aliasing && warn_strict_aliasing
1026 && POINTER_TYPE_P (type) && POINTER_TYPE_P (otype)
1027 && TREE_CODE (expr) == ADDR_EXPR
1028 && (DECL_P (TREE_OPERAND (expr, 0))
bbee4b64 1029 || handled_component_p (TREE_OPERAND (expr, 0)))
de9c56a4
RG
1030 && !VOID_TYPE_P (TREE_TYPE (type)))
1031 {
1032 /* Casting the address of an object to non void pointer. Warn
1033 if the cast breaks type based aliasing. */
1034 if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
1035 warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
1036 "might break strict-aliasing rules");
1037 else
1038 {
1039 HOST_WIDE_INT set1 = get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
1040 HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
1041
1042 if (!alias_sets_conflict_p (set1, set2))
1043 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1044 "pointer will break strict-aliasing rules");
1045 else if (warn_strict_aliasing > 1
1046 && !alias_sets_might_conflict_p (set1, set2))
1047 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1048 "pointer might break strict-aliasing rules");
1049 }
1050 }
1051}
1052
74ac79fa
DM
1053/* Print a warning about if (); or if () .. else; constructs
1054 via the special empty statement node that we create. INNER_THEN
1055 and INNER_ELSE are the statement lists of the if and the else
1056 block. */
1057
1058void
1059empty_body_warning (tree inner_then, tree inner_else)
1060{
b3b433c5 1061 if (warn_empty_body)
74ac79fa
DM
1062 {
1063 if (TREE_CODE (inner_then) == STATEMENT_LIST
1064 && STATEMENT_LIST_TAIL (inner_then))
1065 inner_then = STATEMENT_LIST_TAIL (inner_then)->stmt;
1066
1067 if (inner_else && TREE_CODE (inner_else) == STATEMENT_LIST
1068 && STATEMENT_LIST_TAIL (inner_else))
1069 inner_else = STATEMENT_LIST_TAIL (inner_else)->stmt;
1070
1071 if (IS_EMPTY_STMT (inner_then) && !inner_else)
b3b433c5 1072 warning (OPT_Wempty_body, "%Hempty body in an if-statement",
74ac79fa
DM
1073 EXPR_LOCUS (inner_then));
1074
1075 if (inner_else && IS_EMPTY_STMT (inner_else))
b3b433c5 1076 warning (OPT_Wempty_body, "%Hempty body in an else-statement",
74ac79fa
DM
1077 EXPR_LOCUS (inner_else));
1078 }
1079}
1080
a1e45ff0
DM
1081/* Warn for unlikely, improbable, or stupid DECL declarations
1082 of `main'. */
1083
1084void
1085check_main_parameter_types (tree decl)
1086{
1087 tree args;
1088 int argct = 0;
1089
1090 for (args = TYPE_ARG_TYPES (TREE_TYPE (decl)); args;
1091 args = TREE_CHAIN (args))
1092 {
1093 tree type = args ? TREE_VALUE (args) : 0;
1094
d8e1d619 1095 if (type == void_type_node || type == error_mark_node )
a1e45ff0
DM
1096 break;
1097
1098 ++argct;
1099 switch (argct)
1100 {
1101 case 1:
1102 if (TYPE_MAIN_VARIANT (type) != integer_type_node)
1103 pedwarn ("first argument of %q+D should be %<int%>", decl);
1104 break;
1105
1106 case 2:
1107 if (TREE_CODE (type) != POINTER_TYPE
1108 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1109 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1110 != char_type_node))
1111 pedwarn ("second argument of %q+D should be %<char **%>",
1112 decl);
1113 break;
1114
1115 case 3:
1116 if (TREE_CODE (type) != POINTER_TYPE
1117 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1118 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1119 != char_type_node))
1120 pedwarn ("third argument of %q+D should probably be "
1121 "%<char **%>", decl);
1122 break;
1123 }
1124 }
1125
1126 /* It is intentional that this message does not mention the third
1127 argument because it's only mentioned in an appendix of the
1128 standard. */
1129 if (argct > 0 && (argct < 2 || argct > 3))
1130 pedwarn ("%q+D takes only zero or two arguments", decl);
1131}
1132
00c8e9f6
MS
1133/* True if vector types T1 and T2 can be converted to each other
1134 without an explicit cast. If EMIT_LAX_NOTE is true, and T1 and T2
1135 can only be converted with -flax-vector-conversions yet that is not
1136 in effect, emit a note telling the user about that option if such
1137 a note has not previously been emitted. */
1138bool
1139vector_types_convertible_p (tree t1, tree t2, bool emit_lax_note)
cc27e657 1140{
00c8e9f6 1141 static bool emitted_lax_note = false;
14e765da
JM
1142 bool convertible_lax;
1143
1144 if ((targetm.vector_opaque_p (t1) || targetm.vector_opaque_p (t2))
1145 && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1146 return true;
1147
1148 convertible_lax =
1149 (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
1150 && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
1151 TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
1152 && (INTEGRAL_TYPE_P (TREE_TYPE (t1))
1153 == INTEGRAL_TYPE_P (TREE_TYPE (t2))));
00c8e9f6
MS
1154
1155 if (!convertible_lax || flag_lax_vector_conversions)
1156 return convertible_lax;
1157
1158 if (TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
1159 && comptypes (TREE_TYPE (t1), TREE_TYPE (t2)))
1160 return true;
1161
1162 if (emit_lax_note && !emitted_lax_note)
1163 {
1164 emitted_lax_note = true;
1165 inform ("use -flax-vector-conversions to permit "
1166 "conversions between vectors with differing "
1167 "element types or numbers of subparts");
1168 }
1169
1170 return false;
cc27e657
PB
1171}
1172
422c3a54
MLI
1173/* Warns if the conversion of EXPR to TYPE may alter a value.
1174 This function is called from convert_and_check. */
1175
1176static void
1177conversion_warning (tree type, tree expr)
1178{
1179 bool give_warning = false;
1180
1181 unsigned int formal_prec = TYPE_PRECISION (type);
1182
1183 if (TREE_CODE (expr) == REAL_CST || TREE_CODE (expr) == INTEGER_CST)
1184 {
1185 /* Warn for real constant that is not an exact integer converted
1186 to integer type. */
1187 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1188 && TREE_CODE (type) == INTEGER_TYPE)
1189 {
1190 if (!real_isinteger (TREE_REAL_CST_PTR (expr), TYPE_MODE (TREE_TYPE (expr))))
1191 give_warning = true;
1192 }
91c41804 1193 /* Warn for an integer constant that does not fit into integer type. */
422c3a54
MLI
1194 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1195 && TREE_CODE (type) == INTEGER_TYPE
91c41804
RS
1196 && !int_fits_type_p (expr, type))
1197 {
1198 if (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr)))
1199 warning (OPT_Wconversion,
1200 "negative integer implicitly converted to unsigned type");
1201 else
1202 give_warning = true;
1203 }
422c3a54
MLI
1204 else if (TREE_CODE (type) == REAL_TYPE)
1205 {
1206 /* Warn for an integer constant that does not fit into real type. */
1207 if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE)
1208 {
1209 REAL_VALUE_TYPE a = real_value_from_int_cst (0, expr);
1210 if (!exact_real_truncate (TYPE_MODE (type), &a))
1211 give_warning = true;
1212 }
1213 /* Warn for a real constant that does not fit into a smaller
1214 real type. */
1215 else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1216 && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1217 {
1218 REAL_VALUE_TYPE a = TREE_REAL_CST (expr);
1219 if (!exact_real_truncate (TYPE_MODE (type), &a))
1220 give_warning = true;
1221 }
1222 }
1223
1224 if (give_warning)
1225 warning (OPT_Wconversion,
1226 "conversion to %qT alters %qT constant value",
1227 type, TREE_TYPE (expr));
1228 }
1229 else /* 'expr' is not a constant. */
1230 {
1231 /* Warn for real types converted to integer types. */
1232 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1233 && TREE_CODE (type) == INTEGER_TYPE)
1234 give_warning = true;
1235
1236 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1237 && TREE_CODE (type) == INTEGER_TYPE)
1238 {
1239 /* Warn for integer types converted to smaller integer types. */
1240 if (formal_prec < TYPE_PRECISION (TREE_TYPE (expr))
1241 /* When they are the same width but different signedness,
1242 then the value may change. */
1243 || (formal_prec == TYPE_PRECISION (TREE_TYPE (expr))
1244 && TYPE_UNSIGNED (TREE_TYPE (expr)) != TYPE_UNSIGNED (type))
1245 /* Even when converted to a bigger type, if the type is
1246 unsigned but expr is signed, then negative values
1247 will be changed. */
1248 || (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr))))
1249 give_warning = true;
1250 }
1251
1252 /* Warn for integer types converted to real types if and only if
1253 all the range of values of the integer type cannot be
1254 represented by the real type. */
1255 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1256 && TREE_CODE (type) == REAL_TYPE)
1257 {
1258 tree type_low_bound = TYPE_MIN_VALUE (TREE_TYPE (expr));
1259 tree type_high_bound = TYPE_MAX_VALUE (TREE_TYPE (expr));
1260 REAL_VALUE_TYPE real_low_bound = real_value_from_int_cst (0, type_low_bound);
1261 REAL_VALUE_TYPE real_high_bound = real_value_from_int_cst (0, type_high_bound);
1262
1263 if (!exact_real_truncate (TYPE_MODE (type), &real_low_bound)
1264 || !exact_real_truncate (TYPE_MODE (type), &real_high_bound))
1265 give_warning = true;
1266 }
1267
1268 /* Warn for real types converted to smaller real types. */
1269 else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1270 && TREE_CODE (type) == REAL_TYPE
1271 && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1272 give_warning = true;
1273
1274
1275 if (give_warning)
1276 warning (OPT_Wconversion,
1277 "conversion to %qT from %qT may alter its value",
1278 type, TREE_TYPE (expr));
1279 }
1280}
1281
d74154d5
RS
1282/* Convert EXPR to TYPE, warning about conversion problems with constants.
1283 Invoke this function on every expression that is converted implicitly,
1284 i.e. because of language rules and not because of an explicit cast. */
1285
1286tree
35b1a6fa 1287convert_and_check (tree type, tree expr)
d74154d5 1288{
91c41804
RS
1289 tree result;
1290
1291 if (TREE_TYPE (expr) == type)
1292 return expr;
1293
1294 result = convert (type, expr);
1295
f73fe417 1296 if (skip_evaluation || TREE_OVERFLOW_P (expr))
91c41804
RS
1297 return result;
1298
91c41804
RS
1299 if (TREE_CODE (expr) == INTEGER_CST
1300 && (TREE_CODE (type) == INTEGER_TYPE
1301 || TREE_CODE (type) == ENUMERAL_TYPE)
1302 && !int_fits_type_p (expr, type))
1303 {
422c3a54
MLI
1304 /* Do not diagnose overflow in a constant expression merely
1305 because a conversion overflowed. */
91c41804 1306 if (TREE_OVERFLOW (result))
d95787e6
RS
1307 TREE_OVERFLOW (result) = TREE_OVERFLOW (expr);
1308
91c41804 1309 if (TYPE_UNSIGNED (type))
422c3a54 1310 {
91c41804
RS
1311 /* This detects cases like converting -129 or 256 to
1312 unsigned char. */
1313 if (!int_fits_type_p (expr, c_common_signed_type (type)))
1314 warning (OPT_Woverflow,
1315 "large integer implicitly truncated to unsigned type");
1316 else if (warn_conversion)
1317 conversion_warning (type, expr);
1318 }
f73fe417
MLI
1319 else if (!int_fits_type_p (expr, c_common_unsigned_type (type)))
1320 warning (OPT_Woverflow,
1321 "overflow in implicit constant conversion");
1322 /* No warning for converting 0x80000000 to int. */
1323 else if (pedantic
1324 && (TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE
1325 || TYPE_PRECISION (TREE_TYPE (expr))
1326 != TYPE_PRECISION (type)))
1327 warning (OPT_Woverflow,
1328 "overflow in implicit constant conversion");
1329
1330 else if (warn_conversion)
1331 conversion_warning (type, expr);
d74154d5 1332 }
91c41804
RS
1333 else if (TREE_CODE (result) == INTEGER_CST && TREE_OVERFLOW (result))
1334 warning (OPT_Woverflow,
1335 "overflow in implicit constant conversion");
1336 else if (warn_conversion)
1337 conversion_warning (type, expr);
1338
1339 return result;
96571883
BK
1340}
1341\f
235cfbc4
BS
1342/* A node in a list that describes references to variables (EXPR), which are
1343 either read accesses if WRITER is zero, or write accesses, in which case
1344 WRITER is the parent of EXPR. */
1345struct tlist
1346{
1347 struct tlist *next;
1348 tree expr, writer;
1349};
1350
1351/* Used to implement a cache the results of a call to verify_tree. We only
1352 use this for SAVE_EXPRs. */
1353struct tlist_cache
1354{
1355 struct tlist_cache *next;
1356 struct tlist *cache_before_sp;
1357 struct tlist *cache_after_sp;
1358 tree expr;
2683ed8d
BS
1359};
1360
235cfbc4
BS
1361/* Obstack to use when allocating tlist structures, and corresponding
1362 firstobj. */
1363static struct obstack tlist_obstack;
1364static char *tlist_firstobj = 0;
1365
1366/* Keep track of the identifiers we've warned about, so we can avoid duplicate
1367 warnings. */
1368static struct tlist *warned_ids;
1369/* SAVE_EXPRs need special treatment. We process them only once and then
1370 cache the results. */
1371static struct tlist_cache *save_expr_cache;
1372
35b1a6fa
AJ
1373static void add_tlist (struct tlist **, struct tlist *, tree, int);
1374static void merge_tlist (struct tlist **, struct tlist *, int);
1375static void verify_tree (tree, struct tlist **, struct tlist **, tree);
1376static int warning_candidate_p (tree);
1377static void warn_for_collisions (struct tlist *);
1378static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
1379static struct tlist *new_tlist (struct tlist *, tree, tree);
2683ed8d 1380
235cfbc4
BS
1381/* Create a new struct tlist and fill in its fields. */
1382static struct tlist *
35b1a6fa 1383new_tlist (struct tlist *next, tree t, tree writer)
235cfbc4
BS
1384{
1385 struct tlist *l;
5d038c4c 1386 l = XOBNEW (&tlist_obstack, struct tlist);
235cfbc4
BS
1387 l->next = next;
1388 l->expr = t;
1389 l->writer = writer;
1390 return l;
1391}
1392
1393/* Add duplicates of the nodes found in ADD to the list *TO. If EXCLUDE_WRITER
1394 is nonnull, we ignore any node we find which has a writer equal to it. */
1395
1396static void
35b1a6fa 1397add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
235cfbc4
BS
1398{
1399 while (add)
1400 {
1401 struct tlist *next = add->next;
3f75a254 1402 if (!copy)
235cfbc4 1403 add->next = *to;
3f75a254 1404 if (!exclude_writer || add->writer != exclude_writer)
235cfbc4
BS
1405 *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
1406 add = next;
1407 }
1408}
1409
1410/* Merge the nodes of ADD into TO. This merging process is done so that for
1411 each variable that already exists in TO, no new node is added; however if
1412 there is a write access recorded in ADD, and an occurrence on TO is only
1413 a read access, then the occurrence in TO will be modified to record the
1414 write. */
2683ed8d
BS
1415
1416static void
35b1a6fa 1417merge_tlist (struct tlist **to, struct tlist *add, int copy)
235cfbc4
BS
1418{
1419 struct tlist **end = to;
1420
1421 while (*end)
1422 end = &(*end)->next;
1423
1424 while (add)
1425 {
1426 int found = 0;
1427 struct tlist *tmp2;
1428 struct tlist *next = add->next;
1429
1430 for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
1431 if (tmp2->expr == add->expr)
1432 {
1433 found = 1;
3f75a254 1434 if (!tmp2->writer)
235cfbc4
BS
1435 tmp2->writer = add->writer;
1436 }
3f75a254 1437 if (!found)
235cfbc4
BS
1438 {
1439 *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
1440 end = &(*end)->next;
1441 *end = 0;
1442 }
1443 add = next;
1444 }
1445}
1446
1447/* WRITTEN is a variable, WRITER is its parent. Warn if any of the variable
1448 references in list LIST conflict with it, excluding reads if ONLY writers
1449 is nonzero. */
1450
1451static void
35b1a6fa
AJ
1452warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
1453 int only_writes)
235cfbc4
BS
1454{
1455 struct tlist *tmp;
1456
1457 /* Avoid duplicate warnings. */
1458 for (tmp = warned_ids; tmp; tmp = tmp->next)
1459 if (tmp->expr == written)
1460 return;
1461
1462 while (list)
1463 {
1464 if (list->expr == written
1465 && list->writer != writer
3f75a254 1466 && (!only_writes || list->writer)
e3790655 1467 && DECL_NAME (list->expr))
235cfbc4
BS
1468 {
1469 warned_ids = new_tlist (warned_ids, written, NULL_TREE);
d4ee4d25 1470 warning (0, "operation on %qE may be undefined", list->expr);
235cfbc4
BS
1471 }
1472 list = list->next;
1473 }
1474}
1475
1476/* Given a list LIST of references to variables, find whether any of these
1477 can cause conflicts due to missing sequence points. */
1478
1479static void
35b1a6fa 1480warn_for_collisions (struct tlist *list)
235cfbc4
BS
1481{
1482 struct tlist *tmp;
35b1a6fa 1483
235cfbc4
BS
1484 for (tmp = list; tmp; tmp = tmp->next)
1485 {
1486 if (tmp->writer)
1487 warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
1488 }
1489}
1490
684d9f3b 1491/* Return nonzero if X is a tree that can be verified by the sequence point
235cfbc4
BS
1492 warnings. */
1493static int
35b1a6fa 1494warning_candidate_p (tree x)
2683ed8d 1495{
235cfbc4
BS
1496 return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
1497}
2683ed8d 1498
235cfbc4
BS
1499/* Walk the tree X, and record accesses to variables. If X is written by the
1500 parent tree, WRITER is the parent.
1501 We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP. If this
1502 expression or its only operand forces a sequence point, then everything up
1503 to the sequence point is stored in PBEFORE_SP. Everything else gets stored
1504 in PNO_SP.
1505 Once we return, we will have emitted warnings if any subexpression before
1506 such a sequence point could be undefined. On a higher level, however, the
1507 sequence point may not be relevant, and we'll merge the two lists.
1508
1509 Example: (b++, a) + b;
1510 The call that processes the COMPOUND_EXPR will store the increment of B
1511 in PBEFORE_SP, and the use of A in PNO_SP. The higher-level call that
1512 processes the PLUS_EXPR will need to merge the two lists so that
1513 eventually, all accesses end up on the same list (and we'll warn about the
1514 unordered subexpressions b++ and b.
1515
1516 A note on merging. If we modify the former example so that our expression
1517 becomes
1518 (b++, b) + a
1519 care must be taken not simply to add all three expressions into the final
1520 PNO_SP list. The function merge_tlist takes care of that by merging the
1521 before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1522 way, so that no more than one access to B is recorded. */
2683ed8d 1523
235cfbc4 1524static void
35b1a6fa
AJ
1525verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
1526 tree writer)
235cfbc4
BS
1527{
1528 struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1529 enum tree_code code;
6615c446 1530 enum tree_code_class cl;
2683ed8d 1531
f9e1917e
JM
1532 /* X may be NULL if it is the operand of an empty statement expression
1533 ({ }). */
1534 if (x == NULL)
1535 return;
1536
235cfbc4
BS
1537 restart:
1538 code = TREE_CODE (x);
e3a64162 1539 cl = TREE_CODE_CLASS (code);
2683ed8d 1540
235cfbc4 1541 if (warning_candidate_p (x))
2683ed8d 1542 {
235cfbc4
BS
1543 *pno_sp = new_tlist (*pno_sp, x, writer);
1544 return;
1545 }
1546
1547 switch (code)
1548 {
52a84e42
BS
1549 case CONSTRUCTOR:
1550 return;
1551
235cfbc4
BS
1552 case COMPOUND_EXPR:
1553 case TRUTH_ANDIF_EXPR:
1554 case TRUTH_ORIF_EXPR:
1555 tmp_before = tmp_nosp = tmp_list3 = 0;
1556 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1557 warn_for_collisions (tmp_nosp);
1558 merge_tlist (pbefore_sp, tmp_before, 0);
1559 merge_tlist (pbefore_sp, tmp_nosp, 0);
1560 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
1561 merge_tlist (pbefore_sp, tmp_list3, 0);
1562 return;
1563
1564 case COND_EXPR:
1565 tmp_before = tmp_list2 = 0;
1566 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
1567 warn_for_collisions (tmp_list2);
1568 merge_tlist (pbefore_sp, tmp_before, 0);
1569 merge_tlist (pbefore_sp, tmp_list2, 1);
1570
1571 tmp_list3 = tmp_nosp = 0;
1572 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
1573 warn_for_collisions (tmp_nosp);
1574 merge_tlist (pbefore_sp, tmp_list3, 0);
1575
1576 tmp_list3 = tmp_list2 = 0;
1577 verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
1578 warn_for_collisions (tmp_list2);
1579 merge_tlist (pbefore_sp, tmp_list3, 0);
1580 /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1581 two first, to avoid warning for (a ? b++ : b++). */
1582 merge_tlist (&tmp_nosp, tmp_list2, 0);
1583 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1584 return;
1585
2683ed8d
BS
1586 case PREDECREMENT_EXPR:
1587 case PREINCREMENT_EXPR:
1588 case POSTDECREMENT_EXPR:
1589 case POSTINCREMENT_EXPR:
235cfbc4
BS
1590 verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
1591 return;
1592
1593 case MODIFY_EXPR:
1594 tmp_before = tmp_nosp = tmp_list3 = 0;
1595 verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
1596 verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
1597 /* Expressions inside the LHS are not ordered wrt. the sequence points
1598 in the RHS. Example:
1599 *a = (a++, 2)
1600 Despite the fact that the modification of "a" is in the before_sp
1601 list (tmp_before), it conflicts with the use of "a" in the LHS.
1602 We can handle this by adding the contents of tmp_list3
1603 to those of tmp_before, and redoing the collision warnings for that
1604 list. */
1605 add_tlist (&tmp_before, tmp_list3, x, 1);
1606 warn_for_collisions (tmp_before);
1607 /* Exclude the LHS itself here; we first have to merge it into the
1608 tmp_nosp list. This is done to avoid warning for "a = a"; if we
1609 didn't exclude the LHS, we'd get it twice, once as a read and once
1610 as a write. */
1611 add_tlist (pno_sp, tmp_list3, x, 0);
1612 warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
1613
1614 merge_tlist (pbefore_sp, tmp_before, 0);
1615 if (warning_candidate_p (TREE_OPERAND (x, 0)))
1616 merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
1617 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
1618 return;
2683ed8d
BS
1619
1620 case CALL_EXPR:
235cfbc4
BS
1621 /* We need to warn about conflicts among arguments and conflicts between
1622 args and the function address. Side effects of the function address,
1623 however, are not ordered by the sequence point of the call. */
5039610b
SL
1624 {
1625 call_expr_arg_iterator iter;
1626 tree arg;
1627 tmp_before = tmp_nosp = 0;
1628 verify_tree (CALL_EXPR_FN (x), &tmp_before, &tmp_nosp, NULL_TREE);
1629 FOR_EACH_CALL_EXPR_ARG (arg, iter, x)
1630 {
1631 tmp_list2 = tmp_list3 = 0;
1632 verify_tree (arg, &tmp_list2, &tmp_list3, NULL_TREE);
1633 merge_tlist (&tmp_list3, tmp_list2, 0);
1634 add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
1635 }
1636 add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
1637 warn_for_collisions (tmp_before);
1638 add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
1639 return;
1640 }
2683ed8d
BS
1641
1642 case TREE_LIST:
1643 /* Scan all the list, e.g. indices of multi dimensional array. */
1644 while (x)
1645 {
235cfbc4
BS
1646 tmp_before = tmp_nosp = 0;
1647 verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
1648 merge_tlist (&tmp_nosp, tmp_before, 0);
1649 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
2683ed8d
BS
1650 x = TREE_CHAIN (x);
1651 }
235cfbc4 1652 return;
2683ed8d 1653
235cfbc4
BS
1654 case SAVE_EXPR:
1655 {
1656 struct tlist_cache *t;
1657 for (t = save_expr_cache; t; t = t->next)
1658 if (t->expr == x)
1659 break;
2683ed8d 1660
3f75a254 1661 if (!t)
2683ed8d 1662 {
5d038c4c 1663 t = XOBNEW (&tlist_obstack, struct tlist_cache);
235cfbc4
BS
1664 t->next = save_expr_cache;
1665 t->expr = x;
1666 save_expr_cache = t;
1667
1668 tmp_before = tmp_nosp = 0;
1669 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1670 warn_for_collisions (tmp_nosp);
1671
1672 tmp_list3 = 0;
1673 while (tmp_nosp)
1674 {
1675 struct tlist *t = tmp_nosp;
1676 tmp_nosp = t->next;
1677 merge_tlist (&tmp_list3, t, 0);
1678 }
1679 t->cache_before_sp = tmp_before;
1680 t->cache_after_sp = tmp_list3;
2683ed8d 1681 }
235cfbc4
BS
1682 merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1683 add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1684 return;
1685 }
2683ed8d 1686
6615c446
JO
1687 default:
1688 /* For other expressions, simply recurse on their operands.
c22cacf3 1689 Manual tail recursion for unary expressions.
6615c446
JO
1690 Other non-expressions need not be processed. */
1691 if (cl == tcc_unary)
1692 {
6615c446
JO
1693 x = TREE_OPERAND (x, 0);
1694 writer = 0;
1695 goto restart;
1696 }
1697 else if (IS_EXPR_CODE_CLASS (cl))
1698 {
1699 int lp;
5039610b 1700 int max = TREE_OPERAND_LENGTH (x);
6615c446
JO
1701 for (lp = 0; lp < max; lp++)
1702 {
1703 tmp_before = tmp_nosp = 0;
1704 verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
1705 merge_tlist (&tmp_nosp, tmp_before, 0);
1706 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1707 }
1708 }
1709 return;
2683ed8d 1710 }
2683ed8d
BS
1711}
1712
8d9afc4e 1713/* Try to warn for undefined behavior in EXPR due to missing sequence
2683ed8d
BS
1714 points. */
1715
3a5b9284 1716void
35b1a6fa 1717verify_sequence_points (tree expr)
2683ed8d 1718{
235cfbc4 1719 struct tlist *before_sp = 0, *after_sp = 0;
2683ed8d 1720
235cfbc4
BS
1721 warned_ids = 0;
1722 save_expr_cache = 0;
1723 if (tlist_firstobj == 0)
2683ed8d 1724 {
235cfbc4 1725 gcc_obstack_init (&tlist_obstack);
28dab132 1726 tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
2683ed8d
BS
1727 }
1728
235cfbc4
BS
1729 verify_tree (expr, &before_sp, &after_sp, 0);
1730 warn_for_collisions (after_sp);
1731 obstack_free (&tlist_obstack, tlist_firstobj);
2683ed8d 1732}
b30f223b
RS
1733\f
1734/* Validate the expression after `case' and apply default promotions. */
1735
a6c0a76c 1736static tree
35b1a6fa 1737check_case_value (tree value)
b30f223b
RS
1738{
1739 if (value == NULL_TREE)
1740 return value;
1741
ed248cf7
JM
1742 /* ??? Can we ever get nops here for a valid case value? We
1743 shouldn't for C. */
8493738b 1744 STRIP_TYPE_NOPS (value);
56cb9733
MM
1745 /* In C++, the following is allowed:
1746
1747 const int i = 3;
1748 switch (...) { case i: ... }
1749
1750 So, we try to reduce the VALUE to a constant that way. */
37fa72e9 1751 if (c_dialect_cxx ())
56cb9733
MM
1752 {
1753 value = decl_constant_value (value);
1754 STRIP_TYPE_NOPS (value);
1755 value = fold (value);
1756 }
b30f223b 1757
522ddfa2
JM
1758 if (TREE_CODE (value) == INTEGER_CST)
1759 /* Promote char or short to int. */
1760 value = perform_integral_promotions (value);
1761 else if (value != error_mark_node)
b30f223b
RS
1762 {
1763 error ("case label does not reduce to an integer constant");
1764 value = error_mark_node;
1765 }
b30f223b 1766
bc690db1
RS
1767 constant_expression_warning (value);
1768
b30f223b
RS
1769 return value;
1770}
1771\f
a6c0a76c 1772/* See if the case values LOW and HIGH are in the range of the original
89dbed81 1773 type (i.e. before the default conversion to int) of the switch testing
a6c0a76c
SB
1774 expression.
1775 TYPE is the promoted type of the testing expression, and ORIG_TYPE is
2a7e31df 1776 the type before promoting it. CASE_LOW_P is a pointer to the lower
a6c0a76c
SB
1777 bound of the case label, and CASE_HIGH_P is the upper bound or NULL
1778 if the case is not a case range.
1779 The caller has to make sure that we are not called with NULL for
89dbed81 1780 CASE_LOW_P (i.e. the default case).
0fa2e4df 1781 Returns true if the case label is in range of ORIG_TYPE (saturated or
a6c0a76c
SB
1782 untouched) or false if the label is out of range. */
1783
1784static bool
1785check_case_bounds (tree type, tree orig_type,
1786 tree *case_low_p, tree *case_high_p)
1787{
1788 tree min_value, max_value;
1789 tree case_low = *case_low_p;
1790 tree case_high = case_high_p ? *case_high_p : case_low;
1791
1792 /* If there was a problem with the original type, do nothing. */
1793 if (orig_type == error_mark_node)
1794 return true;
1795
1796 min_value = TYPE_MIN_VALUE (orig_type);
1797 max_value = TYPE_MAX_VALUE (orig_type);
1798
1799 /* Case label is less than minimum for type. */
1800 if (tree_int_cst_compare (case_low, min_value) < 0
1801 && tree_int_cst_compare (case_high, min_value) < 0)
1802 {
d4ee4d25 1803 warning (0, "case label value is less than minimum value for type");
a6c0a76c
SB
1804 return false;
1805 }
9f63daea 1806
a6c0a76c
SB
1807 /* Case value is greater than maximum for type. */
1808 if (tree_int_cst_compare (case_low, max_value) > 0
1809 && tree_int_cst_compare (case_high, max_value) > 0)
1810 {
d4ee4d25 1811 warning (0, "case label value exceeds maximum value for type");
a6c0a76c
SB
1812 return false;
1813 }
1814
1815 /* Saturate lower case label value to minimum. */
1816 if (tree_int_cst_compare (case_high, min_value) >= 0
1817 && tree_int_cst_compare (case_low, min_value) < 0)
1818 {
d4ee4d25 1819 warning (0, "lower value in case label range"
a6c0a76c
SB
1820 " less than minimum value for type");
1821 case_low = min_value;
1822 }
9f63daea 1823
a6c0a76c
SB
1824 /* Saturate upper case label value to maximum. */
1825 if (tree_int_cst_compare (case_low, max_value) <= 0
1826 && tree_int_cst_compare (case_high, max_value) > 0)
1827 {
d4ee4d25 1828 warning (0, "upper value in case label range"
a6c0a76c
SB
1829 " exceeds maximum value for type");
1830 case_high = max_value;
1831 }
1832
1833 if (*case_low_p != case_low)
1834 *case_low_p = convert (type, case_low);
1835 if (case_high_p && *case_high_p != case_high)
1836 *case_high_p = convert (type, case_high);
1837
1838 return true;
1839}
1840\f
b30f223b
RS
1841/* Return an integer type with BITS bits of precision,
1842 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
1843
1844tree
35b1a6fa 1845c_common_type_for_size (unsigned int bits, int unsignedp)
b30f223b 1846{
a311b52c
JM
1847 if (bits == TYPE_PRECISION (integer_type_node))
1848 return unsignedp ? unsigned_type_node : integer_type_node;
1849
3fc7e390 1850 if (bits == TYPE_PRECISION (signed_char_type_node))
b30f223b
RS
1851 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1852
3fc7e390 1853 if (bits == TYPE_PRECISION (short_integer_type_node))
b30f223b
RS
1854 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1855
3fc7e390 1856 if (bits == TYPE_PRECISION (long_integer_type_node))
b30f223b
RS
1857 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1858
3fc7e390 1859 if (bits == TYPE_PRECISION (long_long_integer_type_node))
b30f223b
RS
1860 return (unsignedp ? long_long_unsigned_type_node
1861 : long_long_integer_type_node);
1862
835f9b4d
GRK
1863 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
1864 return (unsignedp ? widest_unsigned_literal_type_node
1865 : widest_integer_literal_type_node);
1866
3fc7e390
RS
1867 if (bits <= TYPE_PRECISION (intQI_type_node))
1868 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1869
1870 if (bits <= TYPE_PRECISION (intHI_type_node))
1871 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1872
1873 if (bits <= TYPE_PRECISION (intSI_type_node))
1874 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1875
1876 if (bits <= TYPE_PRECISION (intDI_type_node))
1877 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1878
b30f223b
RS
1879 return 0;
1880}
1881
d1d3865f
ZW
1882/* Used for communication between c_common_type_for_mode and
1883 c_register_builtin_type. */
1884static GTY(()) tree registered_builtin_types;
1885
b30f223b
RS
1886/* Return a data type that has machine mode MODE.
1887 If the mode is an integer,
1888 then UNSIGNEDP selects between signed and unsigned types. */
1889
1890tree
35b1a6fa 1891c_common_type_for_mode (enum machine_mode mode, int unsignedp)
b30f223b 1892{
d1d3865f
ZW
1893 tree t;
1894
a311b52c
JM
1895 if (mode == TYPE_MODE (integer_type_node))
1896 return unsignedp ? unsigned_type_node : integer_type_node;
1897
b30f223b
RS
1898 if (mode == TYPE_MODE (signed_char_type_node))
1899 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1900
1901 if (mode == TYPE_MODE (short_integer_type_node))
1902 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1903
b30f223b
RS
1904 if (mode == TYPE_MODE (long_integer_type_node))
1905 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1906
1907 if (mode == TYPE_MODE (long_long_integer_type_node))
1908 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
1909
835f9b4d 1910 if (mode == TYPE_MODE (widest_integer_literal_type_node))
d125d268 1911 return unsignedp ? widest_unsigned_literal_type_node
6de9cd9a 1912 : widest_integer_literal_type_node;
835f9b4d 1913
0afeef64 1914 if (mode == QImode)
3fc7e390
RS
1915 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1916
0afeef64 1917 if (mode == HImode)
3fc7e390
RS
1918 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1919
0afeef64 1920 if (mode == SImode)
3fc7e390
RS
1921 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1922
0afeef64 1923 if (mode == DImode)
3fc7e390
RS
1924 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1925
21a9616b 1926#if HOST_BITS_PER_WIDE_INT >= 64
a6d7e156
JL
1927 if (mode == TYPE_MODE (intTI_type_node))
1928 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
21a9616b 1929#endif
a6d7e156 1930
b30f223b
RS
1931 if (mode == TYPE_MODE (float_type_node))
1932 return float_type_node;
1933
1934 if (mode == TYPE_MODE (double_type_node))
1935 return double_type_node;
1936
1937 if (mode == TYPE_MODE (long_double_type_node))
1938 return long_double_type_node;
1939
ff42324e
NS
1940 if (mode == TYPE_MODE (void_type_node))
1941 return void_type_node;
9f63daea 1942
b30f223b 1943 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
19b3ffbc
DD
1944 return (unsignedp
1945 ? make_unsigned_type (GET_MODE_PRECISION (mode))
1946 : make_signed_type (GET_MODE_PRECISION (mode)));
b30f223b
RS
1947
1948 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
19b3ffbc
DD
1949 return (unsignedp
1950 ? make_unsigned_type (GET_MODE_PRECISION (mode))
1951 : make_signed_type (GET_MODE_PRECISION (mode)));
b30f223b 1952
7e7e470f
RH
1953 if (COMPLEX_MODE_P (mode))
1954 {
1955 enum machine_mode inner_mode;
1956 tree inner_type;
1957
1958 if (mode == TYPE_MODE (complex_float_type_node))
1959 return complex_float_type_node;
1960 if (mode == TYPE_MODE (complex_double_type_node))
1961 return complex_double_type_node;
1962 if (mode == TYPE_MODE (complex_long_double_type_node))
1963 return complex_long_double_type_node;
1964
1965 if (mode == TYPE_MODE (complex_integer_type_node) && !unsignedp)
1966 return complex_integer_type_node;
1967
1968 inner_mode = GET_MODE_INNER (mode);
1969 inner_type = c_common_type_for_mode (inner_mode, unsignedp);
1970 if (inner_type != NULL_TREE)
1971 return build_complex_type (inner_type);
1972 }
1973 else if (VECTOR_MODE_P (mode))
4a5eab38
PB
1974 {
1975 enum machine_mode inner_mode = GET_MODE_INNER (mode);
1976 tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
1977 if (inner_type != NULL_TREE)
1978 return build_vector_type_for_mode (inner_type, mode);
0afeef64 1979 }
4061f623 1980
9a8ce21f
JG
1981 if (mode == TYPE_MODE (dfloat32_type_node))
1982 return dfloat32_type_node;
1983 if (mode == TYPE_MODE (dfloat64_type_node))
1984 return dfloat64_type_node;
1985 if (mode == TYPE_MODE (dfloat128_type_node))
1986 return dfloat128_type_node;
1987
d1d3865f
ZW
1988 for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
1989 if (TYPE_MODE (TREE_VALUE (t)) == mode)
1990 return TREE_VALUE (t);
1991
b30f223b
RS
1992 return 0;
1993}
693a6128 1994
ec5c56db 1995/* Return an unsigned type the same as TYPE in other respects. */
693a6128 1996tree
35b1a6fa 1997c_common_unsigned_type (tree type)
693a6128
GRK
1998{
1999 tree type1 = TYPE_MAIN_VARIANT (type);
2000 if (type1 == signed_char_type_node || type1 == char_type_node)
2001 return unsigned_char_type_node;
2002 if (type1 == integer_type_node)
2003 return unsigned_type_node;
2004 if (type1 == short_integer_type_node)
2005 return short_unsigned_type_node;
2006 if (type1 == long_integer_type_node)
2007 return long_unsigned_type_node;
2008 if (type1 == long_long_integer_type_node)
2009 return long_long_unsigned_type_node;
2010 if (type1 == widest_integer_literal_type_node)
2011 return widest_unsigned_literal_type_node;
2012#if HOST_BITS_PER_WIDE_INT >= 64
2013 if (type1 == intTI_type_node)
2014 return unsigned_intTI_type_node;
2015#endif
2016 if (type1 == intDI_type_node)
2017 return unsigned_intDI_type_node;
2018 if (type1 == intSI_type_node)
2019 return unsigned_intSI_type_node;
2020 if (type1 == intHI_type_node)
2021 return unsigned_intHI_type_node;
2022 if (type1 == intQI_type_node)
2023 return unsigned_intQI_type_node;
2024
ceef8ce4 2025 return c_common_signed_or_unsigned_type (1, type);
693a6128
GRK
2026}
2027
2028/* Return a signed type the same as TYPE in other respects. */
2029
2030tree
35b1a6fa 2031c_common_signed_type (tree type)
693a6128
GRK
2032{
2033 tree type1 = TYPE_MAIN_VARIANT (type);
2034 if (type1 == unsigned_char_type_node || type1 == char_type_node)
2035 return signed_char_type_node;
2036 if (type1 == unsigned_type_node)
2037 return integer_type_node;
2038 if (type1 == short_unsigned_type_node)
2039 return short_integer_type_node;
2040 if (type1 == long_unsigned_type_node)
2041 return long_integer_type_node;
2042 if (type1 == long_long_unsigned_type_node)
2043 return long_long_integer_type_node;
2044 if (type1 == widest_unsigned_literal_type_node)
2045 return widest_integer_literal_type_node;
2046#if HOST_BITS_PER_WIDE_INT >= 64
2047 if (type1 == unsigned_intTI_type_node)
2048 return intTI_type_node;
2049#endif
2050 if (type1 == unsigned_intDI_type_node)
2051 return intDI_type_node;
2052 if (type1 == unsigned_intSI_type_node)
2053 return intSI_type_node;
2054 if (type1 == unsigned_intHI_type_node)
2055 return intHI_type_node;
2056 if (type1 == unsigned_intQI_type_node)
2057 return intQI_type_node;
2058
ceef8ce4 2059 return c_common_signed_or_unsigned_type (0, type);
693a6128
GRK
2060}
2061
2062/* Return a type the same as TYPE except unsigned or
2063 signed according to UNSIGNEDP. */
2064
2065tree
35b1a6fa 2066c_common_signed_or_unsigned_type (int unsignedp, tree type)
693a6128 2067{
3f75a254 2068 if (!INTEGRAL_TYPE_P (type)
8df83eae 2069 || TYPE_UNSIGNED (type) == unsignedp)
693a6128
GRK
2070 return type;
2071
bc15d0ef
JM
2072 /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
2073 the precision; they have precision set to match their range, but
2074 may use a wider mode to match an ABI. If we change modes, we may
2075 wind up with bad conversions. For INTEGER_TYPEs in C, must check
2076 the precision as well, so as to yield correct results for
2077 bit-field types. C++ does not have these separate bit-field
2078 types, and producing a signed or unsigned variant of an
2079 ENUMERAL_TYPE may cause other problems as well. */
2080
2081#define TYPE_OK(node) \
2082 (TYPE_MODE (type) == TYPE_MODE (node) \
2083 && (c_dialect_cxx () || TYPE_PRECISION (type) == TYPE_PRECISION (node)))
2084 if (TYPE_OK (signed_char_type_node))
693a6128 2085 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
bc15d0ef 2086 if (TYPE_OK (integer_type_node))
693a6128 2087 return unsignedp ? unsigned_type_node : integer_type_node;
bc15d0ef 2088 if (TYPE_OK (short_integer_type_node))
693a6128 2089 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
bc15d0ef 2090 if (TYPE_OK (long_integer_type_node))
693a6128 2091 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
bc15d0ef 2092 if (TYPE_OK (long_long_integer_type_node))
693a6128
GRK
2093 return (unsignedp ? long_long_unsigned_type_node
2094 : long_long_integer_type_node);
bc15d0ef 2095 if (TYPE_OK (widest_integer_literal_type_node))
693a6128
GRK
2096 return (unsignedp ? widest_unsigned_literal_type_node
2097 : widest_integer_literal_type_node);
4a063bec
RH
2098
2099#if HOST_BITS_PER_WIDE_INT >= 64
bc15d0ef 2100 if (TYPE_OK (intTI_type_node))
4a063bec
RH
2101 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2102#endif
bc15d0ef 2103 if (TYPE_OK (intDI_type_node))
4a063bec 2104 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
bc15d0ef 2105 if (TYPE_OK (intSI_type_node))
4a063bec 2106 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
bc15d0ef 2107 if (TYPE_OK (intHI_type_node))
4a063bec 2108 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
bc15d0ef 2109 if (TYPE_OK (intQI_type_node))
4a063bec 2110 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
bc15d0ef 2111#undef TYPE_OK
4a063bec 2112
bc15d0ef
JM
2113 if (c_dialect_cxx ())
2114 return type;
2115 else
2116 return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
693a6128 2117}
9649812a 2118
38a4afee
MM
2119/* Build a bit-field integer type for the given WIDTH and UNSIGNEDP. */
2120
2121tree
2122c_build_bitfield_integer_type (unsigned HOST_WIDE_INT width, int unsignedp)
2123{
2124 /* Extended integer types of the same width as a standard type have
2125 lesser rank, so those of the same width as int promote to int or
2126 unsigned int and are valid for printf formats expecting int or
2127 unsigned int. To avoid such special cases, avoid creating
2128 extended integer types for bit-fields if a standard integer type
2129 is available. */
2130 if (width == TYPE_PRECISION (integer_type_node))
2131 return unsignedp ? unsigned_type_node : integer_type_node;
2132 if (width == TYPE_PRECISION (signed_char_type_node))
2133 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2134 if (width == TYPE_PRECISION (short_integer_type_node))
2135 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2136 if (width == TYPE_PRECISION (long_integer_type_node))
2137 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2138 if (width == TYPE_PRECISION (long_long_integer_type_node))
2139 return (unsignedp ? long_long_unsigned_type_node
2140 : long_long_integer_type_node);
2141 return build_nonstandard_integer_type (width, unsignedp);
2142}
2143
9649812a
MM
2144/* The C version of the register_builtin_type langhook. */
2145
2146void
2147c_register_builtin_type (tree type, const char* name)
2148{
2149 tree decl;
2150
2151 decl = build_decl (TYPE_DECL, get_identifier (name), type);
2152 DECL_ARTIFICIAL (decl) = 1;
2153 if (!TYPE_NAME (type))
2154 TYPE_NAME (type) = decl;
2155 pushdecl (decl);
d1d3865f
ZW
2156
2157 registered_builtin_types = tree_cons (0, type, registered_builtin_types);
9649812a
MM
2158}
2159
b30f223b 2160\f
6acfe908
JM
2161/* Return the minimum number of bits needed to represent VALUE in a
2162 signed or unsigned type, UNSIGNEDP says which. */
2163
05bccae2 2164unsigned int
35b1a6fa 2165min_precision (tree value, int unsignedp)
6acfe908
JM
2166{
2167 int log;
2168
2169 /* If the value is negative, compute its negative minus 1. The latter
2170 adjustment is because the absolute value of the largest negative value
2171 is one larger than the largest positive value. This is equivalent to
2172 a bit-wise negation, so use that operation instead. */
2173
2174 if (tree_int_cst_sgn (value) < 0)
987b67bc 2175 value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
6acfe908
JM
2176
2177 /* Return the number of bits needed, taking into account the fact
2178 that we need one more bit for a signed than unsigned type. */
2179
2180 if (integer_zerop (value))
2181 log = 0;
6acfe908 2182 else
05bccae2 2183 log = tree_floor_log2 (value);
6acfe908 2184
3f75a254 2185 return log + 1 + !unsignedp;
6acfe908
JM
2186}
2187\f
78ef5b89 2188/* Print an error message for invalid operands to arith operation
1344f9a3 2189 CODE. */
b30f223b
RS
2190
2191void
35b1a6fa 2192binary_op_error (enum tree_code code)
b30f223b 2193{
b3694847 2194 const char *opname;
89c78d7d 2195
b30f223b
RS
2196 switch (code)
2197 {
b30f223b
RS
2198 case PLUS_EXPR:
2199 opname = "+"; break;
2200 case MINUS_EXPR:
2201 opname = "-"; break;
2202 case MULT_EXPR:
2203 opname = "*"; break;
2204 case MAX_EXPR:
2205 opname = "max"; break;
2206 case MIN_EXPR:
2207 opname = "min"; break;
2208 case EQ_EXPR:
2209 opname = "=="; break;
2210 case NE_EXPR:
2211 opname = "!="; break;
2212 case LE_EXPR:
2213 opname = "<="; break;
2214 case GE_EXPR:
2215 opname = ">="; break;
2216 case LT_EXPR:
2217 opname = "<"; break;
2218 case GT_EXPR:
2219 opname = ">"; break;
2220 case LSHIFT_EXPR:
2221 opname = "<<"; break;
2222 case RSHIFT_EXPR:
2223 opname = ">>"; break;
2224 case TRUNC_MOD_EXPR:
047de90b 2225 case FLOOR_MOD_EXPR:
b30f223b
RS
2226 opname = "%"; break;
2227 case TRUNC_DIV_EXPR:
047de90b 2228 case FLOOR_DIV_EXPR:
b30f223b
RS
2229 opname = "/"; break;
2230 case BIT_AND_EXPR:
2231 opname = "&"; break;
2232 case BIT_IOR_EXPR:
2233 opname = "|"; break;
2234 case TRUTH_ANDIF_EXPR:
2235 opname = "&&"; break;
2236 case TRUTH_ORIF_EXPR:
2237 opname = "||"; break;
2238 case BIT_XOR_EXPR:
2239 opname = "^"; break;
6d819282 2240 default:
37b2f290 2241 gcc_unreachable ();
b30f223b
RS
2242 }
2243 error ("invalid operands to binary %s", opname);
2244}
2245\f
2246/* Subroutine of build_binary_op, used for comparison operations.
2247 See if the operands have both been converted from subword integer types
2248 and, if so, perhaps change them both back to their original type.
94dccd9d
RS
2249 This function is also responsible for converting the two operands
2250 to the proper common type for comparison.
b30f223b
RS
2251
2252 The arguments of this function are all pointers to local variables
2253 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
2254 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
2255
2256 If this function returns nonzero, it means that the comparison has
2257 a constant value. What this function returns is an expression for
2258 that value. */
2259
2260tree
35b1a6fa
AJ
2261shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
2262 enum tree_code *rescode_ptr)
b30f223b 2263{
b3694847 2264 tree type;
b30f223b
RS
2265 tree op0 = *op0_ptr;
2266 tree op1 = *op1_ptr;
2267 int unsignedp0, unsignedp1;
2268 int real1, real2;
2269 tree primop0, primop1;
2270 enum tree_code code = *rescode_ptr;
2271
2272 /* Throw away any conversions to wider types
2273 already present in the operands. */
2274
2275 primop0 = get_narrower (op0, &unsignedp0);
2276 primop1 = get_narrower (op1, &unsignedp1);
2277
2278 /* Handle the case that OP0 does not *contain* a conversion
2279 but it *requires* conversion to FINAL_TYPE. */
2280
2281 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
8df83eae 2282 unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
b30f223b 2283 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
8df83eae 2284 unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
b30f223b
RS
2285
2286 /* If one of the operands must be floated, we cannot optimize. */
2287 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
2288 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
2289
2290 /* If first arg is constant, swap the args (changing operation
5af6001b
RK
2291 so value is preserved), for canonicalization. Don't do this if
2292 the second arg is 0. */
b30f223b 2293
5af6001b 2294 if (TREE_CONSTANT (primop0)
3f75a254 2295 && !integer_zerop (primop1) && !real_zerop (primop1))
b30f223b 2296 {
b3694847
SS
2297 tree tem = primop0;
2298 int temi = unsignedp0;
b30f223b
RS
2299 primop0 = primop1;
2300 primop1 = tem;
2301 tem = op0;
2302 op0 = op1;
2303 op1 = tem;
2304 *op0_ptr = op0;
2305 *op1_ptr = op1;
2306 unsignedp0 = unsignedp1;
2307 unsignedp1 = temi;
2308 temi = real1;
2309 real1 = real2;
2310 real2 = temi;
2311
2312 switch (code)
2313 {
2314 case LT_EXPR:
2315 code = GT_EXPR;
2316 break;
2317 case GT_EXPR:
2318 code = LT_EXPR;
2319 break;
2320 case LE_EXPR:
2321 code = GE_EXPR;
2322 break;
2323 case GE_EXPR:
2324 code = LE_EXPR;
2325 break;
6d819282
MK
2326 default:
2327 break;
b30f223b
RS
2328 }
2329 *rescode_ptr = code;
2330 }
2331
2332 /* If comparing an integer against a constant more bits wide,
2333 maybe we can deduce a value of 1 or 0 independent of the data.
2334 Or else truncate the constant now
2335 rather than extend the variable at run time.
2336
2337 This is only interesting if the constant is the wider arg.
2338 Also, it is not safe if the constant is unsigned and the
2339 variable arg is signed, since in this case the variable
2340 would be sign-extended and then regarded as unsigned.
2341 Our technique fails in this case because the lowest/highest
2342 possible unsigned results don't follow naturally from the
2343 lowest/highest possible values of the variable operand.
2344 For just EQ_EXPR and NE_EXPR there is another technique that
2345 could be used: see if the constant can be faithfully represented
2346 in the other operand's type, by truncating it and reextending it
2347 and see if that preserves the constant's value. */
2348
2349 if (!real1 && !real2
2350 && TREE_CODE (primop1) == INTEGER_CST
2351 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
2352 {
2353 int min_gt, max_gt, min_lt, max_lt;
2354 tree maxval, minval;
2355 /* 1 if comparison is nominally unsigned. */
8df83eae 2356 int unsignedp = TYPE_UNSIGNED (*restype_ptr);
b30f223b
RS
2357 tree val;
2358
ceef8ce4
NB
2359 type = c_common_signed_or_unsigned_type (unsignedp0,
2360 TREE_TYPE (primop0));
8bbd5685 2361
b30f223b
RS
2362 maxval = TYPE_MAX_VALUE (type);
2363 minval = TYPE_MIN_VALUE (type);
2364
2365 if (unsignedp && !unsignedp0)
ceef8ce4 2366 *restype_ptr = c_common_signed_type (*restype_ptr);
b30f223b
RS
2367
2368 if (TREE_TYPE (primop1) != *restype_ptr)
fae1b38d 2369 {
af9c6659
NS
2370 /* Convert primop1 to target type, but do not introduce
2371 additional overflow. We know primop1 is an int_cst. */
b8fca551
RG
2372 primop1 = force_fit_type_double (*restype_ptr,
2373 TREE_INT_CST_LOW (primop1),
2374 TREE_INT_CST_HIGH (primop1), 0,
d95787e6 2375 TREE_OVERFLOW (primop1));
fae1b38d 2376 }
b30f223b
RS
2377 if (type != *restype_ptr)
2378 {
2379 minval = convert (*restype_ptr, minval);
2380 maxval = convert (*restype_ptr, maxval);
2381 }
2382
2383 if (unsignedp && unsignedp0)
2384 {
2385 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
2386 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
2387 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
2388 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
2389 }
2390 else
2391 {
2392 min_gt = INT_CST_LT (primop1, minval);
2393 max_gt = INT_CST_LT (primop1, maxval);
2394 min_lt = INT_CST_LT (minval, primop1);
2395 max_lt = INT_CST_LT (maxval, primop1);
2396 }
2397
2398 val = 0;
2399 /* This used to be a switch, but Genix compiler can't handle that. */
2400 if (code == NE_EXPR)
2401 {
2402 if (max_lt || min_gt)
de7df9eb 2403 val = truthvalue_true_node;
b30f223b
RS
2404 }
2405 else if (code == EQ_EXPR)
2406 {
2407 if (max_lt || min_gt)
de7df9eb 2408 val = truthvalue_false_node;
b30f223b
RS
2409 }
2410 else if (code == LT_EXPR)
2411 {
2412 if (max_lt)
de7df9eb 2413 val = truthvalue_true_node;
b30f223b 2414 if (!min_lt)
de7df9eb 2415 val = truthvalue_false_node;
b30f223b
RS
2416 }
2417 else if (code == GT_EXPR)
2418 {
2419 if (min_gt)
de7df9eb 2420 val = truthvalue_true_node;
b30f223b 2421 if (!max_gt)
de7df9eb 2422 val = truthvalue_false_node;
b30f223b
RS
2423 }
2424 else if (code == LE_EXPR)
2425 {
2426 if (!max_gt)
de7df9eb 2427 val = truthvalue_true_node;
b30f223b 2428 if (min_gt)
de7df9eb 2429 val = truthvalue_false_node;
b30f223b
RS
2430 }
2431 else if (code == GE_EXPR)
2432 {
2433 if (!min_lt)
de7df9eb 2434 val = truthvalue_true_node;
b30f223b 2435 if (max_lt)
de7df9eb 2436 val = truthvalue_false_node;
b30f223b
RS
2437 }
2438
2439 /* If primop0 was sign-extended and unsigned comparison specd,
2440 we did a signed comparison above using the signed type bounds.
2441 But the comparison we output must be unsigned.
2442
2443 Also, for inequalities, VAL is no good; but if the signed
2444 comparison had *any* fixed result, it follows that the
2445 unsigned comparison just tests the sign in reverse
2446 (positive values are LE, negative ones GE).
2447 So we can generate an unsigned comparison
2448 against an extreme value of the signed type. */
2449
2450 if (unsignedp && !unsignedp0)
2451 {
2452 if (val != 0)
2453 switch (code)
2454 {
2455 case LT_EXPR:
2456 case GE_EXPR:
2457 primop1 = TYPE_MIN_VALUE (type);
2458 val = 0;
2459 break;
2460
2461 case LE_EXPR:
2462 case GT_EXPR:
2463 primop1 = TYPE_MAX_VALUE (type);
2464 val = 0;
2465 break;
6d819282
MK
2466
2467 default:
2468 break;
b30f223b 2469 }
ceef8ce4 2470 type = c_common_unsigned_type (type);
b30f223b
RS
2471 }
2472
5c5b2283 2473 if (TREE_CODE (primop0) != INTEGER_CST)
b30f223b 2474 {
de7df9eb 2475 if (val == truthvalue_false_node)
d4ee4d25 2476 warning (0, "comparison is always false due to limited range of data type");
de7df9eb 2477 if (val == truthvalue_true_node)
d4ee4d25 2478 warning (0, "comparison is always true due to limited range of data type");
b30f223b
RS
2479 }
2480
2481 if (val != 0)
2482 {
2483 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2484 if (TREE_SIDE_EFFECTS (primop0))
53fb4de3 2485 return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
b30f223b
RS
2486 return val;
2487 }
2488
2489 /* Value is not predetermined, but do the comparison
2490 in the type of the operand that is not constant.
2491 TYPE is already properly set. */
2492 }
9a8ce21f
JG
2493
2494 /* If either arg is decimal float and the other is float, find the
2495 proper common type to use for comparison. */
2496 else if (real1 && real2
2497 && (DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0)))
2498 || DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1)))))
2499 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2500
b30f223b 2501 else if (real1 && real2
766f6c30
RS
2502 && (TYPE_PRECISION (TREE_TYPE (primop0))
2503 == TYPE_PRECISION (TREE_TYPE (primop1))))
b30f223b
RS
2504 type = TREE_TYPE (primop0);
2505
2506 /* If args' natural types are both narrower than nominal type
2507 and both extend in the same manner, compare them
2508 in the type of the wider arg.
2509 Otherwise must actually extend both to the nominal
2510 common type lest different ways of extending
2511 alter the result.
2512 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
2513
2514 else if (unsignedp0 == unsignedp1 && real1 == real2
2515 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
2516 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
2517 {
2518 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
ceef8ce4 2519 type = c_common_signed_or_unsigned_type (unsignedp0
8df83eae 2520 || TYPE_UNSIGNED (*restype_ptr),
ceef8ce4 2521 type);
b30f223b
RS
2522 /* Make sure shorter operand is extended the right way
2523 to match the longer operand. */
ceef8ce4
NB
2524 primop0
2525 = convert (c_common_signed_or_unsigned_type (unsignedp0,
2526 TREE_TYPE (primop0)),
2527 primop0);
2528 primop1
2529 = convert (c_common_signed_or_unsigned_type (unsignedp1,
2530 TREE_TYPE (primop1)),
2531 primop1);
b30f223b
RS
2532 }
2533 else
2534 {
2535 /* Here we must do the comparison on the nominal type
2536 using the args exactly as we received them. */
2537 type = *restype_ptr;
2538 primop0 = op0;
2539 primop1 = op1;
2540
2541 if (!real1 && !real2 && integer_zerop (primop1)
8df83eae 2542 && TYPE_UNSIGNED (*restype_ptr))
b30f223b
RS
2543 {
2544 tree value = 0;
2545 switch (code)
2546 {
2547 case GE_EXPR:
5af6001b
RK
2548 /* All unsigned values are >= 0, so we warn if extra warnings
2549 are requested. However, if OP0 is a constant that is
2550 >= 0, the signedness of the comparison isn't an issue,
2551 so suppress the warning. */
2c492eef 2552 if (extra_warnings && !in_system_header
3f75a254
JM
2553 && !(TREE_CODE (primop0) == INTEGER_CST
2554 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2555 primop0))))
d4ee4d25 2556 warning (0, "comparison of unsigned expression >= 0 is always true");
de7df9eb 2557 value = truthvalue_true_node;
b30f223b
RS
2558 break;
2559
2560 case LT_EXPR:
2c492eef 2561 if (extra_warnings && !in_system_header
3f75a254
JM
2562 && !(TREE_CODE (primop0) == INTEGER_CST
2563 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2564 primop0))))
d4ee4d25 2565 warning (0, "comparison of unsigned expression < 0 is always false");
de7df9eb 2566 value = truthvalue_false_node;
6d819282
MK
2567 break;
2568
2569 default:
2570 break;
b30f223b
RS
2571 }
2572
2573 if (value != 0)
2574 {
2575 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2576 if (TREE_SIDE_EFFECTS (primop0))
53fb4de3
RS
2577 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
2578 primop0, value);
b30f223b
RS
2579 return value;
2580 }
2581 }
2582 }
2583
2584 *op0_ptr = convert (type, primop0);
2585 *op1_ptr = convert (type, primop1);
2586
de7df9eb 2587 *restype_ptr = truthvalue_type_node;
b30f223b
RS
2588
2589 return 0;
2590}
2591\f
7552da58
JJ
2592/* Return a tree for the sum or difference (RESULTCODE says which)
2593 of pointer PTROP and integer INTOP. */
2594
2595tree
35b1a6fa 2596pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
7552da58 2597{
6ac01510 2598 tree size_exp, ret;
7552da58 2599
7552da58
JJ
2600 /* The result is a pointer of the same type that is being added. */
2601
2602 tree result_type = TREE_TYPE (ptrop);
2603
2604 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2605 {
2606 if (pedantic || warn_pointer_arith)
bda67431 2607 pedwarn ("pointer of type %<void *%> used in arithmetic");
7552da58
JJ
2608 size_exp = integer_one_node;
2609 }
2610 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2611 {
2612 if (pedantic || warn_pointer_arith)
2613 pedwarn ("pointer to a function used in arithmetic");
2614 size_exp = integer_one_node;
2615 }
2616 else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
2617 {
2618 if (pedantic || warn_pointer_arith)
2619 pedwarn ("pointer to member function used in arithmetic");
2620 size_exp = integer_one_node;
2621 }
7552da58
JJ
2622 else
2623 size_exp = size_in_bytes (TREE_TYPE (result_type));
2624
6ac01510
ILT
2625 /* We are manipulating pointer values, so we don't need to warn
2626 about relying on undefined signed overflow. We disable the
2627 warning here because we use integer types so fold won't know that
2628 they are really pointers. */
2629 fold_defer_overflow_warnings ();
2630
7552da58
JJ
2631 /* If what we are about to multiply by the size of the elements
2632 contains a constant term, apply distributive law
2633 and multiply that constant term separately.
2634 This helps produce common subexpressions. */
2635
2636 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
3f75a254 2637 && !TREE_CONSTANT (intop)
7552da58
JJ
2638 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2639 && TREE_CONSTANT (size_exp)
2640 /* If the constant comes from pointer subtraction,
2641 skip this optimization--it would cause an error. */
2642 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2643 /* If the constant is unsigned, and smaller than the pointer size,
2644 then we must skip this optimization. This is because it could cause
2645 an overflow error if the constant is negative but INTOP is not. */
3f75a254 2646 && (!TYPE_UNSIGNED (TREE_TYPE (intop))
7552da58
JJ
2647 || (TYPE_PRECISION (TREE_TYPE (intop))
2648 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2649 {
2650 enum tree_code subcode = resultcode;
2651 tree int_type = TREE_TYPE (intop);
2652 if (TREE_CODE (intop) == MINUS_EXPR)
2653 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2654 /* Convert both subexpression types to the type of intop,
2655 because weird cases involving pointer arithmetic
2656 can result in a sum or difference with different type args. */
2657 ptrop = build_binary_op (subcode, ptrop,
2658 convert (int_type, TREE_OPERAND (intop, 1)), 1);
2659 intop = convert (int_type, TREE_OPERAND (intop, 0));
2660 }
2661
2662 /* Convert the integer argument to a type the same size as sizetype
2663 so the multiply won't overflow spuriously. */
2664
2665 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
8df83eae 2666 || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
35b1a6fa 2667 intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
8df83eae 2668 TYPE_UNSIGNED (sizetype)), intop);
7552da58
JJ
2669
2670 /* Replace the integer argument with a suitable product by the object size.
2671 Do this multiplication as signed, then convert to the appropriate
2672 pointer type (actually unsigned integral). */
2673
2674 intop = convert (result_type,
2675 build_binary_op (MULT_EXPR, intop,
2676 convert (TREE_TYPE (intop), size_exp), 1));
2677
2678 /* Create the sum or difference. */
6ac01510
ILT
2679 ret = fold_build2 (resultcode, result_type, ptrop, intop);
2680
2681 fold_undefer_and_ignore_overflow_warnings ();
2682
2683 return ret;
7552da58
JJ
2684}
2685\f
b3c6d2ea
ILT
2686/* Return whether EXPR is a declaration whose address can never be
2687 NULL. */
2688
2689bool
2690decl_with_nonnull_addr_p (tree expr)
2691{
2692 return (DECL_P (expr)
2693 && (TREE_CODE (expr) == PARM_DECL
2694 || TREE_CODE (expr) == LABEL_DECL
2695 || !DECL_WEAK (expr)));
2696}
2697
b30f223b 2698/* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
85498824
JM
2699 or for an `if' or `while' statement or ?..: exp. It should already
2700 have been validated to be of suitable type; otherwise, a bad
2701 diagnostic may result.
b30f223b
RS
2702
2703 This preparation consists of taking the ordinary
2704 representation of an expression expr and producing a valid tree
2705 boolean expression describing whether expr is nonzero. We could
de7df9eb 2706 simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
b30f223b
RS
2707 but we optimize comparisons, &&, ||, and !.
2708
de7df9eb 2709 The resulting type should always be `truthvalue_type_node'. */
b30f223b
RS
2710
2711tree
35b1a6fa 2712c_common_truthvalue_conversion (tree expr)
b30f223b 2713{
b30f223b
RS
2714 switch (TREE_CODE (expr))
2715 {
d1a7edaf 2716 case EQ_EXPR: case NE_EXPR: case UNEQ_EXPR: case LTGT_EXPR:
6f312d18
ZW
2717 case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
2718 case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
2719 case ORDERED_EXPR: case UNORDERED_EXPR:
90ec750d
RS
2720 if (TREE_TYPE (expr) == truthvalue_type_node)
2721 return expr;
2722 return build2 (TREE_CODE (expr), truthvalue_type_node,
2723 TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
2724
b30f223b
RS
2725 case TRUTH_ANDIF_EXPR:
2726 case TRUTH_ORIF_EXPR:
2727 case TRUTH_AND_EXPR:
2728 case TRUTH_OR_EXPR:
9379fac9 2729 case TRUTH_XOR_EXPR:
90ec750d
RS
2730 if (TREE_TYPE (expr) == truthvalue_type_node)
2731 return expr;
2732 return build2 (TREE_CODE (expr), truthvalue_type_node,
85498824
JM
2733 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2734 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)));
18c0f675 2735
18d00205 2736 case TRUTH_NOT_EXPR:
90ec750d
RS
2737 if (TREE_TYPE (expr) == truthvalue_type_node)
2738 return expr;
2739 return build1 (TREE_CODE (expr), truthvalue_type_node,
85498824 2740 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
18d00205 2741
b30f223b
RS
2742 case ERROR_MARK:
2743 return expr;
2744
2745 case INTEGER_CST:
d95787e6
RS
2746 return integer_zerop (expr) ? truthvalue_false_node
2747 : truthvalue_true_node;
b30f223b
RS
2748
2749 case REAL_CST:
010c4d9c
RS
2750 return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
2751 ? truthvalue_true_node
2752 : truthvalue_false_node;
b30f223b 2753
90ec750d
RS
2754 case FUNCTION_DECL:
2755 expr = build_unary_op (ADDR_EXPR, expr, 0);
2756 /* Fall through. */
2757
b30f223b 2758 case ADDR_EXPR:
1998463c 2759 {
f6f08360 2760 tree inner = TREE_OPERAND (expr, 0);
b3c6d2ea 2761 if (decl_with_nonnull_addr_p (inner))
1998463c 2762 {
b3c6d2ea 2763 /* Common Ada/Pascal programmer's mistake. */
c116cd05 2764 warning (OPT_Waddress,
b3c6d2ea 2765 "the address of %qD will always evaluate as %<true%>",
f6f08360 2766 inner);
1998463c
SB
2767 return truthvalue_true_node;
2768 }
fc0c675f 2769
b3c6d2ea
ILT
2770 /* If we still have a decl, it is possible for its address to
2771 be NULL, so we cannot optimize. */
2772 if (DECL_P (inner))
2773 {
2774 gcc_assert (DECL_WEAK (inner));
2775 break;
2776 }
1998463c 2777
f6f08360 2778 if (TREE_SIDE_EFFECTS (inner))
53fb4de3 2779 return build2 (COMPOUND_EXPR, truthvalue_type_node,
f6f08360 2780 inner, truthvalue_true_node);
1998463c
SB
2781 else
2782 return truthvalue_true_node;
2783 }
b30f223b 2784
766f6c30 2785 case COMPLEX_EXPR:
f0b996c5 2786 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
b839fb3f 2787 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
85498824
JM
2788 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2789 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
766f6c30
RS
2790 0);
2791
b30f223b
RS
2792 case NEGATE_EXPR:
2793 case ABS_EXPR:
2794 case FLOAT_EXPR:
da7d8304 2795 /* These don't change whether an object is nonzero or zero. */
85498824 2796 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
b30f223b
RS
2797
2798 case LROTATE_EXPR:
2799 case RROTATE_EXPR:
da7d8304 2800 /* These don't change whether an object is zero or nonzero, but
b30f223b
RS
2801 we can't ignore them if their second arg has side-effects. */
2802 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
53fb4de3
RS
2803 return build2 (COMPOUND_EXPR, truthvalue_type_node,
2804 TREE_OPERAND (expr, 1),
85498824 2805 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
b30f223b 2806 else
85498824 2807 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
b57062ca 2808
b30f223b
RS
2809 case COND_EXPR:
2810 /* Distribute the conversion into the arms of a COND_EXPR. */
987b67bc 2811 return fold_build3 (COND_EXPR, truthvalue_type_node,
53fb4de3 2812 TREE_OPERAND (expr, 0),
85498824 2813 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
987b67bc 2814 c_common_truthvalue_conversion (TREE_OPERAND (expr, 2)));
b30f223b
RS
2815
2816 case CONVERT_EXPR:
1344f9a3 2817 case NOP_EXPR:
b30f223b
RS
2818 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2819 since that affects how `default_conversion' will behave. */
2820 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
2821 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2822 break;
b30f223b
RS
2823 /* If this is widening the argument, we can ignore it. */
2824 if (TYPE_PRECISION (TREE_TYPE (expr))
2825 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
85498824 2826 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
b30f223b
RS
2827 break;
2828
e2aab13d 2829 case MODIFY_EXPR:
fbc8d2d3
ILT
2830 if (!TREE_NO_WARNING (expr)
2831 && warn_parentheses)
2832 {
2833 warning (OPT_Wparentheses,
2834 "suggest parentheses around assignment used as truth value");
2835 TREE_NO_WARNING (expr) = 1;
2836 }
e2aab13d 2837 break;
b57062ca 2838
6d819282
MK
2839 default:
2840 break;
b30f223b
RS
2841 }
2842
f0b996c5 2843 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
f0b8d9aa 2844 {
78ef5b89 2845 tree t = save_expr (expr);
f0b8d9aa
AS
2846 return (build_binary_op
2847 ((TREE_SIDE_EFFECTS (expr)
2848 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
85498824
JM
2849 c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
2850 c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
f0b8d9aa
AS
2851 0));
2852 }
f0b996c5 2853
b30f223b
RS
2854 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
2855}
2856\f
9bc15050
RG
2857static void def_builtin_1 (enum built_in_function fncode,
2858 const char *name,
2859 enum built_in_class fnclass,
2860 tree fntype, tree libtype,
2861 bool both_p, bool fallback_p, bool nonansi_p,
2862 tree fnattrs, bool implicit_p);
fc2aaf30 2863
0b73773c
NH
2864/* Make a variant type in the proper way for C/C++, propagating qualifiers
2865 down to the element type of an array. */
2866
2867tree
35b1a6fa 2868c_build_qualified_type (tree type, int type_quals)
0b73773c 2869{
5a6159dd
AP
2870 if (type == error_mark_node)
2871 return type;
9f63daea 2872
4b011bbf 2873 if (TREE_CODE (type) == ARRAY_TYPE)
46df2823
JM
2874 {
2875 tree t;
2876 tree element_type = c_build_qualified_type (TREE_TYPE (type),
2877 type_quals);
2878
2879 /* See if we already have an identically qualified type. */
2880 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
2881 {
2882 if (TYPE_QUALS (strip_array_types (t)) == type_quals
2883 && TYPE_NAME (t) == TYPE_NAME (type)
2884 && TYPE_CONTEXT (t) == TYPE_CONTEXT (type)
2885 && attribute_list_equal (TYPE_ATTRIBUTES (t),
2886 TYPE_ATTRIBUTES (type)))
2887 break;
2888 }
2889 if (!t)
2890 {
2891 t = build_variant_type_copy (type);
2892 TREE_TYPE (t) = element_type;
2893 }
2894 return t;
2895 }
4b011bbf 2896
3932261a
MM
2897 /* A restrict-qualified pointer type must be a pointer to object or
2898 incomplete type. Note that the use of POINTER_TYPE_P also allows
4b011bbf 2899 REFERENCE_TYPEs, which is appropriate for C++. */
3932261a
MM
2900 if ((type_quals & TYPE_QUAL_RESTRICT)
2901 && (!POINTER_TYPE_P (type)
2902 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
2903 {
bda67431 2904 error ("invalid use of %<restrict%>");
3932261a
MM
2905 type_quals &= ~TYPE_QUAL_RESTRICT;
2906 }
2907
3932261a
MM
2908 return build_qualified_type (type, type_quals);
2909}
2910
2911/* Apply the TYPE_QUALS to the new DECL. */
2912
2913void
35b1a6fa 2914c_apply_type_quals_to_decl (int type_quals, tree decl)
3932261a 2915{
4b011bbf 2916 tree type = TREE_TYPE (decl);
9f63daea 2917
5a6159dd
AP
2918 if (type == error_mark_node)
2919 return;
4b011bbf
JM
2920
2921 if (((type_quals & TYPE_QUAL_CONST)
2922 || (type && TREE_CODE (type) == REFERENCE_TYPE))
2923 /* An object declared 'const' is only readonly after it is
2924 initialized. We don't have any way of expressing this currently,
2925 so we need to be conservative and unset TREE_READONLY for types
2926 with constructors. Otherwise aliasing code will ignore stores in
2927 an inline constructor. */
2928 && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
3932261a
MM
2929 TREE_READONLY (decl) = 1;
2930 if (type_quals & TYPE_QUAL_VOLATILE)
2931 {
2932 TREE_SIDE_EFFECTS (decl) = 1;
2933 TREE_THIS_VOLATILE (decl) = 1;
2934 }
6946bc60 2935 if (type_quals & TYPE_QUAL_RESTRICT)
3932261a 2936 {
4b011bbf
JM
2937 while (type && TREE_CODE (type) == ARRAY_TYPE)
2938 /* Allow 'restrict' on arrays of pointers.
2939 FIXME currently we just ignore it. */
2940 type = TREE_TYPE (type);
2941 if (!type
2942 || !POINTER_TYPE_P (type)
2943 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
bda67431 2944 error ("invalid use of %<restrict%>");
4b011bbf 2945 else if (flag_strict_aliasing && type == TREE_TYPE (decl))
3c5ad1ff
RK
2946 /* Indicate we need to make a unique alias set for this pointer.
2947 We can't do it here because it might be pointing to an
2948 incomplete type. */
2949 DECL_POINTER_ALIAS_SET (decl) = -2;
3932261a
MM
2950 }
2951}
2952
6de9cd9a
DN
2953/* Hash function for the problem of multiple type definitions in
2954 different files. This must hash all types that will compare
2955 equal via comptypes to the same value. In practice it hashes
9cf737f8 2956 on some of the simple stuff and leaves the details to comptypes. */
6de9cd9a
DN
2957
2958static hashval_t
2959c_type_hash (const void *p)
2960{
2961 int i = 0;
2962 int shift, size;
3f75a254 2963 tree t = (tree) p;
6de9cd9a
DN
2964 tree t2;
2965 switch (TREE_CODE (t))
2966 {
8c27b7d4 2967 /* For pointers, hash on pointee type plus some swizzling. */
325c3691
RH
2968 case POINTER_TYPE:
2969 return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
2970 /* Hash on number of elements and total size. */
2971 case ENUMERAL_TYPE:
2972 shift = 3;
2973 t2 = TYPE_VALUES (t);
2974 break;
2975 case RECORD_TYPE:
2976 shift = 0;
2977 t2 = TYPE_FIELDS (t);
2978 break;
2979 case QUAL_UNION_TYPE:
2980 shift = 1;
2981 t2 = TYPE_FIELDS (t);
2982 break;
2983 case UNION_TYPE:
2984 shift = 2;
2985 t2 = TYPE_FIELDS (t);
2986 break;
2987 default:
366de0ce 2988 gcc_unreachable ();
6de9cd9a
DN
2989 }
2990 for (; t2; t2 = TREE_CHAIN (t2))
2991 i++;
2992 size = TREE_INT_CST_LOW (TYPE_SIZE (t));
2993 return ((size << 24) | (i << shift));
2994}
2995
4fe52ce9
DJ
2996static GTY((param_is (union tree_node))) htab_t type_hash_table;
2997
41472af8 2998/* Return the typed-based alias set for T, which may be an expression
3bdf5ad1 2999 or a type. Return -1 if we don't do anything special. */
41472af8 3000
3bdf5ad1 3001HOST_WIDE_INT
35b1a6fa 3002c_common_get_alias_set (tree t)
41472af8 3003{
08bc2431 3004 tree u;
6de9cd9a 3005 PTR *slot;
35b1a6fa 3006
08bc2431
MM
3007 /* Permit type-punning when accessing a union, provided the access
3008 is directly through the union. For example, this code does not
3009 permit taking the address of a union member and then storing
3010 through it. Even the type-punning allowed here is a GCC
3011 extension, albeit a common and useful one; the C standard says
3012 that such accesses have implementation-defined behavior. */
3013 for (u = t;
3014 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
3015 u = TREE_OPERAND (u, 0))
3016 if (TREE_CODE (u) == COMPONENT_REF
3017 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
3018 return 0;
ece32014 3019
74d86f4f 3020 /* That's all the expressions we handle specially. */
3f75a254 3021 if (!TYPE_P (t))
74d86f4f
RH
3022 return -1;
3023
95bd1dd7 3024 /* The C standard guarantees that any object may be accessed via an
74d86f4f
RH
3025 lvalue that has character type. */
3026 if (t == char_type_node
3027 || t == signed_char_type_node
3028 || t == unsigned_char_type_node)
3bdf5ad1 3029 return 0;
3932261a 3030
d18b1ed8 3031 /* If it has the may_alias attribute, it can alias anything. */
74d86f4f 3032 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t)))
d18b1ed8
OS
3033 return 0;
3034
f824e5c3
RK
3035 /* The C standard specifically allows aliasing between signed and
3036 unsigned variants of the same type. We treat the signed
3037 variant as canonical. */
8df83eae 3038 if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
8f215dce 3039 {
ceef8ce4 3040 tree t1 = c_common_signed_type (t);
f824e5c3 3041
8f215dce
JJ
3042 /* t1 == t can happen for boolean nodes which are always unsigned. */
3043 if (t1 != t)
3044 return get_alias_set (t1);
3045 }
3bdf5ad1 3046 else if (POINTER_TYPE_P (t))
02af3af6 3047 {
3bdf5ad1 3048 tree t1;
02af3af6
MS
3049
3050 /* Unfortunately, there is no canonical form of a pointer type.
3051 In particular, if we have `typedef int I', then `int *', and
3052 `I *' are different types. So, we have to pick a canonical
3053 representative. We do this below.
d125d268 3054
b61148dd
MM
3055 Technically, this approach is actually more conservative that
3056 it needs to be. In particular, `const int *' and `int *'
684d9f3b 3057 should be in different alias sets, according to the C and C++
b61148dd
MM
3058 standard, since their types are not the same, and so,
3059 technically, an `int **' and `const int **' cannot point at
3060 the same thing.
3061
6de9cd9a 3062 But, the standard is wrong. In particular, this code is
b61148dd
MM
3063 legal C++:
3064
c22cacf3
MS
3065 int *ip;
3066 int **ipp = &ip;
3067 const int* const* cipp = ipp;
b61148dd 3068
6de9cd9a 3069 And, it doesn't make sense for that to be legal unless you
b61148dd
MM
3070 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
3071 the pointed-to types. This issue has been reported to the
3072 C++ committee. */
12e1243e 3073 t1 = build_type_no_quals (t);
3bdf5ad1
RK
3074 if (t1 != t)
3075 return get_alias_set (t1);
02af3af6 3076 }
ece32014 3077
6de9cd9a
DN
3078 /* Handle the case of multiple type nodes referring to "the same" type,
3079 which occurs with IMA. These share an alias set. FIXME: Currently only
3080 C90 is handled. (In C99 type compatibility is not transitive, which
3081 complicates things mightily. The alias set splay trees can theoretically
3082 represent this, but insertion is tricky when you consider all the
3083 different orders things might arrive in.) */
3084
3085 if (c_language != clk_c || flag_isoc99)
3086 return -1;
3087
9cf737f8 3088 /* Save time if there's only one input file. */
d974312d 3089 if (num_in_fnames == 1)
6de9cd9a
DN
3090 return -1;
3091
3092 /* Pointers need special handling if they point to any type that
3093 needs special handling (below). */
3094 if (TREE_CODE (t) == POINTER_TYPE)
3095 {
3096 tree t2;
3097 /* Find bottom type under any nested POINTERs. */
9f63daea 3098 for (t2 = TREE_TYPE (t);
6de9cd9a
DN
3099 TREE_CODE (t2) == POINTER_TYPE;
3100 t2 = TREE_TYPE (t2))
3101 ;
9f63daea 3102 if (TREE_CODE (t2) != RECORD_TYPE
6de9cd9a
DN
3103 && TREE_CODE (t2) != ENUMERAL_TYPE
3104 && TREE_CODE (t2) != QUAL_UNION_TYPE
3105 && TREE_CODE (t2) != UNION_TYPE)
3106 return -1;
3107 if (TYPE_SIZE (t2) == 0)
3108 return -1;
3109 }
3110 /* These are the only cases that need special handling. */
9f63daea 3111 if (TREE_CODE (t) != RECORD_TYPE
6de9cd9a
DN
3112 && TREE_CODE (t) != ENUMERAL_TYPE
3113 && TREE_CODE (t) != QUAL_UNION_TYPE
3114 && TREE_CODE (t) != UNION_TYPE
3115 && TREE_CODE (t) != POINTER_TYPE)
3116 return -1;
3117 /* Undefined? */
3118 if (TYPE_SIZE (t) == 0)
3119 return -1;
3120
9f63daea 3121 /* Look up t in hash table. Only one of the compatible types within each
6de9cd9a
DN
3122 alias set is recorded in the table. */
3123 if (!type_hash_table)
4fe52ce9 3124 type_hash_table = htab_create_ggc (1021, c_type_hash,
6de9cd9a
DN
3125 (htab_eq) lang_hooks.types_compatible_p,
3126 NULL);
3127 slot = htab_find_slot (type_hash_table, t, INSERT);
3128 if (*slot != NULL)
6a3203c8
AP
3129 {
3130 TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
3131 return TYPE_ALIAS_SET ((tree)*slot);
3132 }
6de9cd9a
DN
3133 else
3134 /* Our caller will assign and record (in t) a new alias set; all we need
3135 to do is remember t in the hash table. */
3136 *slot = t;
3137
3bdf5ad1 3138 return -1;
41472af8 3139}
0213a355 3140\f
fa72b064 3141/* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
ea793912
GDR
3142 second parameter indicates which OPERATOR is being applied. The COMPLAIN
3143 flag controls whether we should diagnose possibly ill-formed
3144 constructs or not. */
03a08664 3145
0213a355 3146tree
03a08664 3147c_sizeof_or_alignof_type (tree type, bool is_sizeof, int complain)
0213a355 3148{
fa72b064
GDR
3149 const char *op_name;
3150 tree value = NULL;
3151 enum tree_code type_code = TREE_CODE (type);
35b1a6fa 3152
03a08664 3153 op_name = is_sizeof ? "sizeof" : "__alignof__";
35b1a6fa 3154
fa72b064 3155 if (type_code == FUNCTION_TYPE)
0213a355 3156 {
03a08664 3157 if (is_sizeof)
fa72b064 3158 {
ea793912 3159 if (complain && (pedantic || warn_pointer_arith))
bda67431 3160 pedwarn ("invalid application of %<sizeof%> to a function type");
fa72b064
GDR
3161 value = size_one_node;
3162 }
3163 else
3164 value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
3165 }
3166 else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
3167 {
35b1a6fa 3168 if (type_code == VOID_TYPE
ea793912 3169 && complain && (pedantic || warn_pointer_arith))
bda67431 3170 pedwarn ("invalid application of %qs to a void type", op_name);
fa72b064 3171 value = size_one_node;
0213a355 3172 }
0213a355
JM
3173 else if (!COMPLETE_TYPE_P (type))
3174 {
ea793912 3175 if (complain)
bda67431 3176 error ("invalid application of %qs to incomplete type %qT ",
d5a10cf0 3177 op_name, type);
fa72b064 3178 value = size_zero_node;
0213a355
JM
3179 }
3180 else
fa72b064 3181 {
03a08664 3182 if (is_sizeof)
fa72b064
GDR
3183 /* Convert in case a char is more than one unit. */
3184 value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
3185 size_int (TYPE_PRECISION (char_type_node)
3186 / BITS_PER_UNIT));
3187 else
a4e9ffe5 3188 value = size_int (TYPE_ALIGN_UNIT (type));
fa72b064 3189 }
0213a355 3190
fa72b064
GDR
3191 /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
3192 TYPE_IS_SIZETYPE means that certain things (like overflow) will
3193 never happen. However, this node should really have type
3194 `size_t', which is just a typedef for an ordinary integer type. */
4c7a6c1b 3195 value = fold_convert (size_type_node, value);
4094f4d2 3196 gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
35b1a6fa 3197
fa72b064 3198 return value;
0213a355
JM
3199}
3200
3201/* Implement the __alignof keyword: Return the minimum required
3202 alignment of EXPR, measured in bytes. For VAR_DECL's and
3203 FIELD_DECL's return DECL_ALIGN (which can be set from an
3204 "aligned" __attribute__ specification). */
7f4edbcb 3205
0213a355 3206tree
35b1a6fa 3207c_alignof_expr (tree expr)
0213a355
JM
3208{
3209 tree t;
3210
3211 if (TREE_CODE (expr) == VAR_DECL)
a4e9ffe5 3212 t = size_int (DECL_ALIGN_UNIT (expr));
35b1a6fa 3213
0213a355
JM
3214 else if (TREE_CODE (expr) == COMPONENT_REF
3215 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
3216 {
bda67431 3217 error ("%<__alignof%> applied to a bit-field");
0213a355
JM
3218 t = size_one_node;
3219 }
3220 else if (TREE_CODE (expr) == COMPONENT_REF
173bf5be 3221 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
a4e9ffe5 3222 t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
35b1a6fa 3223
0213a355
JM
3224 else if (TREE_CODE (expr) == INDIRECT_REF)
3225 {
3226 tree t = TREE_OPERAND (expr, 0);
3227 tree best = t;
3228 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
35b1a6fa 3229
4c7a6c1b 3230 while ((TREE_CODE (t) == NOP_EXPR || TREE_CODE (t) == CONVERT_EXPR)
173bf5be 3231 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
0213a355
JM
3232 {
3233 int thisalign;
3234
3235 t = TREE_OPERAND (t, 0);
3236 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3237 if (thisalign > bestalign)
3238 best = t, bestalign = thisalign;
3239 }
3240 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
3241 }
3242 else
3243 return c_alignof (TREE_TYPE (expr));
3244
4c7a6c1b 3245 return fold_convert (size_type_node, t);
0213a355
JM
3246}
3247\f
df061a43
RS
3248/* Handle C and C++ default attributes. */
3249
3250enum built_in_attribute
3251{
3252#define DEF_ATTR_NULL_TREE(ENUM) ENUM,
3253#define DEF_ATTR_INT(ENUM, VALUE) ENUM,
3254#define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
3255#define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
df061a43
RS
3256#include "builtin-attrs.def"
3257#undef DEF_ATTR_NULL_TREE
3258#undef DEF_ATTR_INT
3259#undef DEF_ATTR_IDENT
3260#undef DEF_ATTR_TREE_LIST
df061a43
RS
3261 ATTR_LAST
3262};
3263
3264static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
3265
35b1a6fa 3266static void c_init_attributes (void);
df061a43 3267
a0274e3e 3268enum c_builtin_type
7f4edbcb 3269{
10841285
MM
3270#define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
3271#define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
3272#define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
3273#define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
3274#define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3275#define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
10a0d495 3276#define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
a0274e3e
JJ
3277#define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME,
3278#define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME,
10841285
MM
3279#define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
3280#define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
3281#define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
08291658 3282#define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
10a0d495
JJ
3283#define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3284#define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
3285 NAME,
10841285
MM
3286#define DEF_POINTER_TYPE(NAME, TYPE) NAME,
3287#include "builtin-types.def"
3288#undef DEF_PRIMITIVE_TYPE
3289#undef DEF_FUNCTION_TYPE_0
3290#undef DEF_FUNCTION_TYPE_1
3291#undef DEF_FUNCTION_TYPE_2
3292#undef DEF_FUNCTION_TYPE_3
3293#undef DEF_FUNCTION_TYPE_4
10a0d495
JJ
3294#undef DEF_FUNCTION_TYPE_5
3295#undef DEF_FUNCTION_TYPE_6
a0274e3e 3296#undef DEF_FUNCTION_TYPE_7
10841285
MM
3297#undef DEF_FUNCTION_TYPE_VAR_0
3298#undef DEF_FUNCTION_TYPE_VAR_1
3299#undef DEF_FUNCTION_TYPE_VAR_2
08291658 3300#undef DEF_FUNCTION_TYPE_VAR_3
10a0d495
JJ
3301#undef DEF_FUNCTION_TYPE_VAR_4
3302#undef DEF_FUNCTION_TYPE_VAR_5
10841285 3303#undef DEF_POINTER_TYPE
a0274e3e
JJ
3304 BT_LAST
3305};
3306
3307typedef enum c_builtin_type builtin_type;
10841285 3308
a0274e3e
JJ
3309/* A temporary array for c_common_nodes_and_builtins. Used in
3310 communication with def_fn_type. */
3311static tree builtin_types[(int) BT_LAST + 1];
10841285 3312
a0274e3e
JJ
3313/* A helper function for c_common_nodes_and_builtins. Build function type
3314 for DEF with return type RET and N arguments. If VAR is true, then the
3315 function should be variadic after those N arguments.
3316
3317 Takes special care not to ICE if any of the types involved are
3318 error_mark_node, which indicates that said type is not in fact available
3319 (see builtin_type_for_size). In which case the function type as a whole
3320 should be error_mark_node. */
3321
3322static void
3323def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
3324{
3325 tree args = NULL, t;
3326 va_list list;
3327 int i;
3328
3329 va_start (list, n);
3330 for (i = 0; i < n; ++i)
3331 {
3332 builtin_type a = va_arg (list, builtin_type);
3333 t = builtin_types[a];
3334 if (t == error_mark_node)
3335 goto egress;
3336 args = tree_cons (NULL_TREE, t, args);
3337 }
3338 va_end (list);
3339
3340 args = nreverse (args);
3341 if (!var)
3342 args = chainon (args, void_list_node);
3343
3344 t = builtin_types[ret];
3345 if (t == error_mark_node)
3346 goto egress;
3347 t = build_function_type (t, args);
3348
3349 egress:
3350 builtin_types[def] = t;
3351}
3352
c6d86fce
ILT
3353/* Build builtin functions common to both C and C++ language
3354 frontends. */
3355
3356static void
3357c_define_builtins (tree va_list_ref_type_node, tree va_list_arg_type_node)
3358{
3359#define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
3360 builtin_types[ENUM] = VALUE;
3361#define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
3362 def_fn_type (ENUM, RETURN, 0, 0);
3363#define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
3364 def_fn_type (ENUM, RETURN, 0, 1, ARG1);
3365#define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
3366 def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
3367#define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3368 def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
3369#define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3370 def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4);
3371#define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3372 def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3373#define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3374 ARG6) \
3375 def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
3376#define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3377 ARG6, ARG7) \
3378 def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
3379#define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
3380 def_fn_type (ENUM, RETURN, 1, 0);
3381#define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
3382 def_fn_type (ENUM, RETURN, 1, 1, ARG1);
3383#define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
3384 def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
3385#define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3386 def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
3387#define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3388 def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4);
3389#define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3390 def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3391#define DEF_POINTER_TYPE(ENUM, TYPE) \
3392 builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]);
3393
3394#include "builtin-types.def"
3395
3396#undef DEF_PRIMITIVE_TYPE
3397#undef DEF_FUNCTION_TYPE_1
3398#undef DEF_FUNCTION_TYPE_2
3399#undef DEF_FUNCTION_TYPE_3
3400#undef DEF_FUNCTION_TYPE_4
3401#undef DEF_FUNCTION_TYPE_5
3402#undef DEF_FUNCTION_TYPE_6
3403#undef DEF_FUNCTION_TYPE_VAR_0
3404#undef DEF_FUNCTION_TYPE_VAR_1
3405#undef DEF_FUNCTION_TYPE_VAR_2
3406#undef DEF_FUNCTION_TYPE_VAR_3
3407#undef DEF_FUNCTION_TYPE_VAR_4
3408#undef DEF_FUNCTION_TYPE_VAR_5
3409#undef DEF_POINTER_TYPE
3410 builtin_types[(int) BT_LAST] = NULL_TREE;
3411
3412 c_init_attributes ();
3413
3414#define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
3415 NONANSI_P, ATTRS, IMPLICIT, COND) \
3416 if (NAME && COND) \
3417 def_builtin_1 (ENUM, NAME, CLASS, \
3418 builtin_types[(int) TYPE], \
3419 builtin_types[(int) LIBTYPE], \
3420 BOTH_P, FALLBACK_P, NONANSI_P, \
3421 built_in_attributes[(int) ATTRS], IMPLICIT);
3422#include "builtins.def"
3423#undef DEF_BUILTIN
3424
3425 build_common_builtin_nodes ();
3426
3427 targetm.init_builtins ();
3428 if (flag_mudflap)
3429 mudflap_init ();
3430}
3431
a0274e3e
JJ
3432/* Build tree nodes and builtin functions common to both C and C++ language
3433 frontends. */
3434
3435void
3436c_common_nodes_and_builtins (void)
3437{
eaa7c03f
JM
3438 int wchar_type_size;
3439 tree array_domain_type;
9f720c3e 3440 tree va_list_ref_type_node;
daf68dd7 3441 tree va_list_arg_type_node;
d3707adb 3442
eaa7c03f 3443 /* Define `int' and `char' first so that dbx will output them first. */
6496a589 3444 record_builtin_type (RID_INT, NULL, integer_type_node);
eaa7c03f
JM
3445 record_builtin_type (RID_CHAR, "char", char_type_node);
3446
3447 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
3448 "unsigned long", "long long unsigned" and "unsigned short" were in C++
3449 but not C. Are the conditionals here needed? */
37fa72e9 3450 if (c_dialect_cxx ())
6496a589 3451 record_builtin_type (RID_SIGNED, NULL, integer_type_node);
eaa7c03f
JM
3452 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
3453 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
3454 record_builtin_type (RID_MAX, "long unsigned int",
3455 long_unsigned_type_node);
37fa72e9 3456 if (c_dialect_cxx ())
eaa7c03f
JM
3457 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
3458 record_builtin_type (RID_MAX, "long long int",
3459 long_long_integer_type_node);
3460 record_builtin_type (RID_MAX, "long long unsigned int",
3461 long_long_unsigned_type_node);
37fa72e9 3462 if (c_dialect_cxx ())
eaa7c03f
JM
3463 record_builtin_type (RID_MAX, "long long unsigned",
3464 long_long_unsigned_type_node);
3465 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
3466 record_builtin_type (RID_MAX, "short unsigned int",
3467 short_unsigned_type_node);
37fa72e9 3468 if (c_dialect_cxx ())
eaa7c03f
JM
3469 record_builtin_type (RID_MAX, "unsigned short",
3470 short_unsigned_type_node);
3471
3472 /* Define both `signed char' and `unsigned char'. */
3473 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
3474 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
3475
b0c48229
NB
3476 /* These are types that c_common_type_for_size and
3477 c_common_type_for_mode use. */
ae2bcd98
RS
3478 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3479 intQI_type_node));
3480 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3481 intHI_type_node));
3482 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3483 intSI_type_node));
3484 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3485 intDI_type_node));
eaa7c03f 3486#if HOST_BITS_PER_WIDE_INT >= 64
1e1b8649
AP
3487 if (targetm.scalar_mode_supported_p (TImode))
3488 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3489 get_identifier ("__int128_t"),
3490 intTI_type_node));
eaa7c03f 3491#endif
ae2bcd98
RS
3492 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3493 unsigned_intQI_type_node));
3494 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3495 unsigned_intHI_type_node));
3496 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3497 unsigned_intSI_type_node));
3498 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3499 unsigned_intDI_type_node));
eaa7c03f 3500#if HOST_BITS_PER_WIDE_INT >= 64
1e1b8649
AP
3501 if (targetm.scalar_mode_supported_p (TImode))
3502 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3503 get_identifier ("__uint128_t"),
3504 unsigned_intTI_type_node));
eaa7c03f
JM
3505#endif
3506
3507 /* Create the widest literal types. */
3508 widest_integer_literal_type_node
3509 = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
ae2bcd98
RS
3510 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3511 widest_integer_literal_type_node));
eaa7c03f
JM
3512
3513 widest_unsigned_literal_type_node
3514 = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
ae2bcd98
RS
3515 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3516 widest_unsigned_literal_type_node));
eaa7c03f
JM
3517
3518 /* `unsigned long' is the standard type for sizeof.
3519 Note that stddef.h uses `unsigned long',
3520 and this must agree, even if long and int are the same size. */
c9f8536c 3521 size_type_node =
eaa7c03f 3522 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
c9f8536c
MM
3523 signed_size_type_node = c_common_signed_type (size_type_node);
3524 set_sizetype (size_type_node);
eaa7c03f 3525
d1c38823
ZD
3526 pid_type_node =
3527 TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
3528
eaa7c03f
JM
3529 build_common_tree_nodes_2 (flag_short_double);
3530
6496a589
KG
3531 record_builtin_type (RID_FLOAT, NULL, float_type_node);
3532 record_builtin_type (RID_DOUBLE, NULL, double_type_node);
eaa7c03f
JM
3533 record_builtin_type (RID_MAX, "long double", long_double_type_node);
3534
9a8ce21f
JG
3535 /* Only supported decimal floating point extension if the target
3536 actually supports underlying modes. */
3537 if (targetm.scalar_mode_supported_p (SDmode)
3538 && targetm.scalar_mode_supported_p (DDmode)
3539 && targetm.scalar_mode_supported_p (TDmode))
3540 {
3541 record_builtin_type (RID_DFLOAT32, NULL, dfloat32_type_node);
3542 record_builtin_type (RID_DFLOAT64, NULL, dfloat64_type_node);
3543 record_builtin_type (RID_DFLOAT128, NULL, dfloat128_type_node);
3544 }
3545
ae2bcd98
RS
3546 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3547 get_identifier ("complex int"),
3548 complex_integer_type_node));
3549 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3550 get_identifier ("complex float"),
3551 complex_float_type_node));
3552 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3553 get_identifier ("complex double"),
3554 complex_double_type_node));
3555 lang_hooks.decls.pushdecl
43577e6b
NB
3556 (build_decl (TYPE_DECL, get_identifier ("complex long double"),
3557 complex_long_double_type_node));
eaa7c03f 3558
498c0f27
JJ
3559 if (c_dialect_cxx ())
3560 /* For C++, make fileptr_type_node a distinct void * type until
3561 FILE type is defined. */
8dd16ecc 3562 fileptr_type_node = build_variant_type_copy (ptr_type_node);
498c0f27 3563
6496a589 3564 record_builtin_type (RID_VOID, NULL, void_type_node);
eaa7c03f 3565
06d40de8
DG
3566 /* Set the TYPE_NAME for any variants that were built before
3567 record_builtin_type gave names to the built-in types. */
3568 {
3569 tree void_name = TYPE_NAME (void_type_node);
3570 TYPE_NAME (void_type_node) = NULL_TREE;
3571 TYPE_NAME (build_qualified_type (void_type_node, TYPE_QUAL_CONST))
3572 = void_name;
3573 TYPE_NAME (void_type_node) = void_name;
3574 }
3575
8c27b7d4 3576 /* This node must not be shared. */
4a90aeeb 3577 void_zero_node = make_node (INTEGER_CST);
10841285
MM
3578 TREE_TYPE (void_zero_node) = void_type_node;
3579
eaa7c03f
JM
3580 void_list_node = build_void_list_node ();
3581
3582 /* Make a type to be the domain of a few array types
3583 whose domains don't really matter.
3584 200 is small enough that it always fits in size_t
3585 and large enough that it can hold most function names for the
3586 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
3587 array_domain_type = build_index_type (size_int (200));
3588
3589 /* Make a type for arrays of characters.
3590 With luck nothing will ever really depend on the length of this
3591 array type. */
3592 char_array_type_node
3593 = build_array_type (char_type_node, array_domain_type);
3594
3595 /* Likewise for arrays of ints. */
3596 int_array_type_node
3597 = build_array_type (integer_type_node, array_domain_type);
3598
10841285
MM
3599 string_type_node = build_pointer_type (char_type_node);
3600 const_string_type_node
3601 = build_pointer_type (build_qualified_type
3602 (char_type_node, TYPE_QUAL_CONST));
3603
eaa7c03f 3604 /* This is special for C++ so functions can be overloaded. */
a11eba95 3605 wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
eaa7c03f
JM
3606 wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
3607 wchar_type_size = TYPE_PRECISION (wchar_type_node);
37fa72e9 3608 if (c_dialect_cxx ())
eaa7c03f 3609 {
8df83eae 3610 if (TYPE_UNSIGNED (wchar_type_node))
eaa7c03f
JM
3611 wchar_type_node = make_unsigned_type (wchar_type_size);
3612 else
3613 wchar_type_node = make_signed_type (wchar_type_size);
3614 record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
3615 }
3616 else
3617 {
ceef8ce4
NB
3618 signed_wchar_type_node = c_common_signed_type (wchar_type_node);
3619 unsigned_wchar_type_node = c_common_unsigned_type (wchar_type_node);
eaa7c03f
JM
3620 }
3621
3622 /* This is for wide string constants. */
3623 wchar_array_type_node
3624 = build_array_type (wchar_type_node, array_domain_type);
3625
5fd8e536
JM
3626 wint_type_node =
3627 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
3628
3629 intmax_type_node =
3630 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
3631 uintmax_type_node =
3632 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
3633
3634 default_function_type = build_function_type (integer_type_node, NULL_TREE);
3635 ptrdiff_type_node
3636 = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
ceef8ce4 3637 unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
5fd8e536 3638
ae2bcd98 3639 lang_hooks.decls.pushdecl
43577e6b
NB
3640 (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
3641 va_list_type_node));
daf68dd7 3642
daf68dd7 3643 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
9f720c3e
GK
3644 {
3645 va_list_arg_type_node = va_list_ref_type_node =
3646 build_pointer_type (TREE_TYPE (va_list_type_node));
3647 }
daf68dd7 3648 else
9f720c3e
GK
3649 {
3650 va_list_arg_type_node = va_list_type_node;
3651 va_list_ref_type_node = build_reference_type (va_list_type_node);
3652 }
35b1a6fa 3653
c6d86fce
ILT
3654 if (!flag_preprocess_only)
3655 c_define_builtins (va_list_ref_type_node, va_list_arg_type_node);
4677862a 3656
5b47282c 3657 main_identifier_node = get_identifier ("main");
b2f97e4a
MM
3658
3659 /* Create the built-in __null node. It is important that this is
3660 not shared. */
3661 null_node = make_node (INTEGER_CST);
3662 TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
a0274e3e
JJ
3663
3664 /* Since builtin_types isn't gc'ed, don't export these nodes. */
3665 memset (builtin_types, 0, sizeof (builtin_types));
7f4edbcb 3666}
d3707adb 3667
b482789c
MA
3668/* Look up the function in built_in_decls that corresponds to DECL
3669 and set ASMSPEC as its user assembler name. DECL must be a
6c6cfbfd 3670 function decl that declares a builtin. */
b482789c
MA
3671
3672void
3673set_builtin_user_assembler_name (tree decl, const char *asmspec)
3674{
3675 tree builtin;
3676 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
3677 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
3678 && asmspec != 0);
3679
3680 builtin = built_in_decls [DECL_FUNCTION_CODE (decl)];
3681 set_user_assembler_name (builtin, asmspec);
3682 if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMCPY)
3683 init_block_move_fn (asmspec);
3684 else if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMSET)
3685 init_block_clear_fn (asmspec);
3686}
3687
3b2db49f
MM
3688/* The number of named compound-literals generated thus far. */
3689static GTY(()) int compound_literal_number;
3690
3691/* Set DECL_NAME for DECL, a VAR_DECL for a compound-literal. */
3692
3693void
3694set_compound_literal_name (tree decl)
3695{
3696 char *name;
3697 ASM_FORMAT_PRIVATE_NAME (name, "__compound_literal",
3698 compound_literal_number);
3699 compound_literal_number++;
3700 DECL_NAME (decl) = get_identifier (name);
3701}
3702
d3707adb 3703tree
35b1a6fa 3704build_va_arg (tree expr, tree type)
d3707adb
RH
3705{
3706 return build1 (VA_ARG_EXPR, type, expr);
3707}
fc2aaf30
JM
3708
3709
7d14c755
JM
3710/* Linked list of disabled built-in functions. */
3711
3712typedef struct disabled_builtin
3713{
3714 const char *name;
3715 struct disabled_builtin *next;
3716} disabled_builtin;
3717static disabled_builtin *disabled_builtins = NULL;
3718
35b1a6fa 3719static bool builtin_function_disabled_p (const char *);
7d14c755
JM
3720
3721/* Disable a built-in function specified by -fno-builtin-NAME. If NAME
3722 begins with "__builtin_", give an error. */
3723
3724void
35b1a6fa 3725disable_builtin_function (const char *name)
7d14c755
JM
3726{
3727 if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
bda67431 3728 error ("cannot disable built-in function %qs", name);
7d14c755
JM
3729 else
3730 {
1ad463f4
BI
3731 disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
3732 new_disabled_builtin->name = name;
3733 new_disabled_builtin->next = disabled_builtins;
3734 disabled_builtins = new_disabled_builtin;
7d14c755
JM
3735 }
3736}
3737
3738
3739/* Return true if the built-in function NAME has been disabled, false
3740 otherwise. */
3741
3742static bool
35b1a6fa 3743builtin_function_disabled_p (const char *name)
7d14c755
JM
3744{
3745 disabled_builtin *p;
3746 for (p = disabled_builtins; p != NULL; p = p->next)
3747 {
3748 if (strcmp (name, p->name) == 0)
3749 return true;
3750 }
3751 return false;
3752}
3753
3754
9bc15050
RG
3755/* Worker for DEF_BUILTIN.
3756 Possibly define a builtin function with one or two names.
3757 Does not declare a non-__builtin_ function if flag_no_builtin, or if
3758 nonansi_p and flag_no_nonansi_builtin. */
fc2aaf30 3759
9bc15050
RG
3760static void
3761def_builtin_1 (enum built_in_function fncode,
3762 const char *name,
3763 enum built_in_class fnclass,
3764 tree fntype, tree libtype,
3765 bool both_p, bool fallback_p, bool nonansi_p,
3766 tree fnattrs, bool implicit_p)
fc2aaf30 3767{
9bc15050
RG
3768 tree decl;
3769 const char *libname;
3770
a0274e3e
JJ
3771 if (fntype == error_mark_node)
3772 return;
3773
9bc15050
RG
3774 gcc_assert ((!both_p && !fallback_p)
3775 || !strncmp (name, "__builtin_",
3776 strlen ("__builtin_")));
3777
3778 libname = name + strlen ("__builtin_");
c79efc4d
RÁE
3779 decl = add_builtin_function (name, fntype, fncode, fnclass,
3780 (fallback_p ? libname : NULL),
3781 fnattrs);
9bc15050
RG
3782 if (both_p
3783 && !flag_no_builtin && !builtin_function_disabled_p (libname)
7d14c755 3784 && !(nonansi_p && flag_no_nonansi_builtin))
c79efc4d
RÁE
3785 add_builtin_function (libname, libtype, fncode, fnclass,
3786 NULL, fnattrs);
7f685e17 3787
9bc15050
RG
3788 built_in_decls[(int) fncode] = decl;
3789 if (implicit_p)
3790 implicit_built_in_decls[(int) fncode] = decl;
fc2aaf30 3791}
c530479e 3792\f
d72040f5
RH
3793/* Nonzero if the type T promotes to int. This is (nearly) the
3794 integral promotions defined in ISO C99 6.3.1.1/2. */
3795
3796bool
35b1a6fa 3797c_promoting_integer_type_p (tree t)
d72040f5
RH
3798{
3799 switch (TREE_CODE (t))
3800 {
3801 case INTEGER_TYPE:
3802 return (TYPE_MAIN_VARIANT (t) == char_type_node
3803 || TYPE_MAIN_VARIANT (t) == signed_char_type_node
3804 || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
3805 || TYPE_MAIN_VARIANT (t) == short_integer_type_node
c6c04fca
RL
3806 || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
3807 || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
d72040f5
RH
3808
3809 case ENUMERAL_TYPE:
3810 /* ??? Technically all enumerations not larger than an int
3811 promote to an int. But this is used along code paths
3812 that only want to notice a size change. */
3813 return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
3814
3815 case BOOLEAN_TYPE:
3816 return 1;
3817
3818 default:
3819 return 0;
3820 }
3821}
3822
c530479e
RH
3823/* Return 1 if PARMS specifies a fixed number of parameters
3824 and none of their types is affected by default promotions. */
3825
3826int
35b1a6fa 3827self_promoting_args_p (tree parms)
c530479e 3828{
b3694847 3829 tree t;
c530479e
RH
3830 for (t = parms; t; t = TREE_CHAIN (t))
3831 {
b3694847 3832 tree type = TREE_VALUE (t);
7e8176d7 3833
694fea20
VR
3834 if (type == error_mark_node)
3835 continue;
3836
c530479e
RH
3837 if (TREE_CHAIN (t) == 0 && type != void_type_node)
3838 return 0;
3839
3840 if (type == 0)
3841 return 0;
3842
3843 if (TYPE_MAIN_VARIANT (type) == float_type_node)
3844 return 0;
3845
d72040f5 3846 if (c_promoting_integer_type_p (type))
c530479e
RH
3847 return 0;
3848 }
3849 return 1;
3850}
5eda3d66 3851
0a7394bc
MM
3852/* Recursively examines the array elements of TYPE, until a non-array
3853 element type is found. */
3854
3855tree
35b1a6fa 3856strip_array_types (tree type)
0a7394bc
MM
3857{
3858 while (TREE_CODE (type) == ARRAY_TYPE)
3859 type = TREE_TYPE (type);
3860
3861 return type;
3862}
3863
12ea3302
GDR
3864/* Recursively remove any '*' or '&' operator from TYPE. */
3865tree
3866strip_pointer_operator (tree t)
3867{
3868 while (POINTER_TYPE_P (t))
3869 t = TREE_TYPE (t);
3870 return t;
3871}
3872
8f17b5c5
MM
3873/* Used to compare case labels. K1 and K2 are actually tree nodes
3874 representing case labels, or NULL_TREE for a `default' label.
3875 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
3876 K2, and 0 if K1 and K2 are equal. */
3877
3878int
35b1a6fa 3879case_compare (splay_tree_key k1, splay_tree_key k2)
8f17b5c5
MM
3880{
3881 /* Consider a NULL key (such as arises with a `default' label) to be
3882 smaller than anything else. */
3883 if (!k1)
3884 return k2 ? -1 : 0;
3885 else if (!k2)
3886 return k1 ? 1 : 0;
3887
3888 return tree_int_cst_compare ((tree) k1, (tree) k2);
3889}
3890
3891/* Process a case label for the range LOW_VALUE ... HIGH_VALUE. If
3892 LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
3893 actually a `default' label. If only HIGH_VALUE is NULL_TREE, then
3894 case label was declared using the usual C/C++ syntax, rather than
3895 the GNU case range extension. CASES is a tree containing all the
3896 case ranges processed so far; COND is the condition for the
8c161995
RH
3897 switch-statement itself. Returns the CASE_LABEL_EXPR created, or
3898 ERROR_MARK_NODE if no CASE_LABEL_EXPR is created. */
8f17b5c5
MM
3899
3900tree
a6c0a76c
SB
3901c_add_case_label (splay_tree cases, tree cond, tree orig_type,
3902 tree low_value, tree high_value)
8f17b5c5
MM
3903{
3904 tree type;
3905 tree label;
3906 tree case_label;
3907 splay_tree_node node;
3908
3909 /* Create the LABEL_DECL itself. */
6de9cd9a 3910 label = create_artificial_label ();
8f17b5c5
MM
3911
3912 /* If there was an error processing the switch condition, bail now
3913 before we get more confused. */
3914 if (!cond || cond == error_mark_node)
6de9cd9a 3915 goto error_out;
8f17b5c5 3916
35b1a6fa
AJ
3917 if ((low_value && TREE_TYPE (low_value)
3918 && POINTER_TYPE_P (TREE_TYPE (low_value)))
8f17b5c5
MM
3919 || (high_value && TREE_TYPE (high_value)
3920 && POINTER_TYPE_P (TREE_TYPE (high_value))))
522ddfa2
JM
3921 {
3922 error ("pointers are not permitted as case values");
3923 goto error_out;
3924 }
8f17b5c5
MM
3925
3926 /* Case ranges are a GNU extension. */
3927 if (high_value && pedantic)
37fa72e9 3928 pedwarn ("range expressions in switch statements are non-standard");
8f17b5c5
MM
3929
3930 type = TREE_TYPE (cond);
3931 if (low_value)
3932 {
3933 low_value = check_case_value (low_value);
3934 low_value = convert_and_check (type, low_value);
c0e22534
NS
3935 if (low_value == error_mark_node)
3936 goto error_out;
8f17b5c5
MM
3937 }
3938 if (high_value)
3939 {
3940 high_value = check_case_value (high_value);
3941 high_value = convert_and_check (type, high_value);
c0e22534
NS
3942 if (high_value == error_mark_node)
3943 goto error_out;
8f17b5c5
MM
3944 }
3945
c0e22534
NS
3946 if (low_value && high_value)
3947 {
3948 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
c22cacf3
MS
3949 really a case range, even though it was written that way.
3950 Remove the HIGH_VALUE to simplify later processing. */
c0e22534
NS
3951 if (tree_int_cst_equal (low_value, high_value))
3952 high_value = NULL_TREE;
3953 else if (!tree_int_cst_lt (low_value, high_value))
3954 warning (0, "empty range specified");
3955 }
8f17b5c5 3956
a6c0a76c
SB
3957 /* See if the case is in range of the type of the original testing
3958 expression. If both low_value and high_value are out of range,
3959 don't insert the case label and return NULL_TREE. */
3960 if (low_value
3f75a254
JM
3961 && !check_case_bounds (type, orig_type,
3962 &low_value, high_value ? &high_value : NULL))
a6c0a76c
SB
3963 return NULL_TREE;
3964
8f17b5c5
MM
3965 /* Look up the LOW_VALUE in the table of case labels we already
3966 have. */
3967 node = splay_tree_lookup (cases, (splay_tree_key) low_value);
3968 /* If there was not an exact match, check for overlapping ranges.
3969 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
3970 that's a `default' label and the only overlap is an exact match. */
3971 if (!node && (low_value || high_value))
3972 {
3973 splay_tree_node low_bound;
3974 splay_tree_node high_bound;
3975
3976 /* Even though there wasn't an exact match, there might be an
3977 overlap between this case range and another case range.
3978 Since we've (inductively) not allowed any overlapping case
3979 ranges, we simply need to find the greatest low case label
3980 that is smaller that LOW_VALUE, and the smallest low case
3981 label that is greater than LOW_VALUE. If there is an overlap
3982 it will occur in one of these two ranges. */
3983 low_bound = splay_tree_predecessor (cases,
3984 (splay_tree_key) low_value);
3985 high_bound = splay_tree_successor (cases,
3986 (splay_tree_key) low_value);
3987
3988 /* Check to see if the LOW_BOUND overlaps. It is smaller than
3989 the LOW_VALUE, so there is no need to check unless the
3990 LOW_BOUND is in fact itself a case range. */
3991 if (low_bound
3992 && CASE_HIGH ((tree) low_bound->value)
3993 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
3994 low_value) >= 0)
3995 node = low_bound;
3996 /* Check to see if the HIGH_BOUND overlaps. The low end of that
3997 range is bigger than the low end of the current range, so we
3998 are only interested if the current range is a real range, and
3999 not an ordinary case label. */
35b1a6fa 4000 else if (high_bound
8f17b5c5
MM
4001 && high_value
4002 && (tree_int_cst_compare ((tree) high_bound->key,
4003 high_value)
4004 <= 0))
4005 node = high_bound;
4006 }
4007 /* If there was an overlap, issue an error. */
4008 if (node)
4009 {
8c161995 4010 tree duplicate = CASE_LABEL ((tree) node->value);
8f17b5c5
MM
4011
4012 if (high_value)
4013 {
4014 error ("duplicate (or overlapping) case value");
ddd2d57e 4015 error ("%Jthis is the first entry overlapping that value", duplicate);
8f17b5c5
MM
4016 }
4017 else if (low_value)
4018 {
4019 error ("duplicate case value") ;
ddd2d57e 4020 error ("%Jpreviously used here", duplicate);
8f17b5c5
MM
4021 }
4022 else
4023 {
4024 error ("multiple default labels in one switch");
ddd2d57e 4025 error ("%Jthis is the first default label", duplicate);
8f17b5c5 4026 }
6de9cd9a 4027 goto error_out;
8f17b5c5
MM
4028 }
4029
4030 /* Add a CASE_LABEL to the statement-tree. */
4031 case_label = add_stmt (build_case_label (low_value, high_value, label));
4032 /* Register this case label in the splay tree. */
35b1a6fa 4033 splay_tree_insert (cases,
8f17b5c5
MM
4034 (splay_tree_key) low_value,
4035 (splay_tree_value) case_label);
4036
4037 return case_label;
6de9cd9a
DN
4038
4039 error_out:
9e14e18f 4040 /* Add a label so that the back-end doesn't think that the beginning of
6de9cd9a 4041 the switch is unreachable. Note that we do not add a case label, as
41806d92 4042 that just leads to duplicates and thence to failure later on. */
6de9cd9a
DN
4043 if (!cases->root)
4044 {
4045 tree t = create_artificial_label ();
9e14e18f 4046 add_stmt (build_stmt (LABEL_EXPR, t));
6de9cd9a
DN
4047 }
4048 return error_mark_node;
4049}
4050
4051/* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
4052 Used to verify that case values match up with enumerator values. */
4053
4054static void
4055match_case_to_enum_1 (tree key, tree type, tree label)
4056{
4057 char buf[2 + 2*HOST_BITS_PER_WIDE_INT/4 + 1];
4058
4059 /* ??? Not working too hard to print the double-word value.
4060 Should perhaps be done with %lwd in the diagnostic routines? */
4061 if (TREE_INT_CST_HIGH (key) == 0)
4062 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_UNSIGNED,
4063 TREE_INT_CST_LOW (key));
4064 else if (!TYPE_UNSIGNED (type)
4065 && TREE_INT_CST_HIGH (key) == -1
4066 && TREE_INT_CST_LOW (key) != 0)
4067 snprintf (buf, sizeof (buf), "-" HOST_WIDE_INT_PRINT_UNSIGNED,
4068 -TREE_INT_CST_LOW (key));
4069 else
4070 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_DOUBLE_HEX,
4071 TREE_INT_CST_HIGH (key), TREE_INT_CST_LOW (key));
4072
4073 if (TYPE_NAME (type) == 0)
d4ee4d25 4074 warning (0, "%Jcase value %qs not in enumerated type",
8c161995 4075 CASE_LABEL (label), buf);
6de9cd9a 4076 else
d4ee4d25 4077 warning (0, "%Jcase value %qs not in enumerated type %qT",
8c161995 4078 CASE_LABEL (label), buf, type);
6de9cd9a
DN
4079}
4080
c782c2fe
RS
4081/* Subroutine of c_do_switch_warnings, called via splay_tree_foreach.
4082 Used to verify that case values match up with enumerator values. */
4083
6de9cd9a
DN
4084static int
4085match_case_to_enum (splay_tree_node node, void *data)
4086{
4087 tree label = (tree) node->value;
28dab132 4088 tree type = (tree) data;
6de9cd9a
DN
4089
4090 /* Skip default case. */
4091 if (!CASE_LOW (label))
4092 return 0;
4093
c782c2fe 4094 /* If CASE_LOW_SEEN is not set, that means CASE_LOW did not appear
6de9cd9a 4095 when we did our enum->case scan. Reset our scratch bit after. */
c782c2fe 4096 if (!CASE_LOW_SEEN (label))
6de9cd9a
DN
4097 match_case_to_enum_1 (CASE_LOW (label), type, label);
4098 else
c782c2fe 4099 CASE_LOW_SEEN (label) = 0;
6de9cd9a 4100
c782c2fe
RS
4101 /* If CASE_HIGH is non-null, we have a range. If CASE_HIGH_SEEN is
4102 not set, that means that CASE_HIGH did not appear when we did our
4103 enum->case scan. Reset our scratch bit after. */
6de9cd9a
DN
4104 if (CASE_HIGH (label))
4105 {
c782c2fe
RS
4106 if (!CASE_HIGH_SEEN (label))
4107 match_case_to_enum_1 (CASE_HIGH (label), type, label);
4108 else
4109 CASE_HIGH_SEEN (label) = 0;
6de9cd9a
DN
4110 }
4111
4112 return 0;
4113}
4114
fbc315db
ILT
4115/* Handle -Wswitch*. Called from the front end after parsing the
4116 switch construct. */
4117/* ??? Should probably be somewhere generic, since other languages
4118 besides C and C++ would want this. At the moment, however, C/C++
4119 are the only tree-ssa languages that support enumerations at all,
4120 so the point is moot. */
6de9cd9a 4121
fbc315db
ILT
4122void
4123c_do_switch_warnings (splay_tree cases, location_t switch_location,
4124 tree type, tree cond)
6de9cd9a 4125{
9f63daea 4126 splay_tree_node default_node;
c782c2fe
RS
4127 splay_tree_node node;
4128 tree chain;
6de9cd9a
DN
4129
4130 if (!warn_switch && !warn_switch_enum && !warn_switch_default)
4131 return;
4132
6de9cd9a 4133 default_node = splay_tree_lookup (cases, (splay_tree_key) NULL);
44c21c7f
DD
4134 if (!default_node)
4135 warning (OPT_Wswitch_default, "%Hswitch missing default case",
4136 &switch_location);
6de9cd9a 4137
c782c2fe
RS
4138 /* From here on, we only care about about enumerated types. */
4139 if (!type || TREE_CODE (type) != ENUMERAL_TYPE)
4140 return;
4141
6de9cd9a
DN
4142 /* If the switch expression was an enumerated type, check that
4143 exactly all enumeration literals are covered by the cases.
4144 The check is made when -Wswitch was specified and there is no
4145 default case, or when -Wswitch-enum was specified. */
6de9cd9a 4146
c782c2fe
RS
4147 if (!warn_switch_enum
4148 && !(warn_switch && !default_node))
4149 return;
4150
4151 /* Clearing COND if it is not an integer constant simplifies
4152 the tests inside the loop below. */
4153 if (TREE_CODE (cond) != INTEGER_CST)
4154 cond = NULL_TREE;
4155
4156 /* The time complexity here is O(N*lg(N)) worst case, but for the
4157 common case of monotonically increasing enumerators, it is
4158 O(N), since the nature of the splay tree will keep the next
4159 element adjacent to the root at all times. */
6de9cd9a 4160
c782c2fe
RS
4161 for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain))
4162 {
4163 tree value = TREE_VALUE (chain);
4164 node = splay_tree_lookup (cases, (splay_tree_key) value);
4165 if (node)
6de9cd9a 4166 {
c782c2fe
RS
4167 /* Mark the CASE_LOW part of the case entry as seen. */
4168 tree label = (tree) node->value;
4169 CASE_LOW_SEEN (label) = 1;
4170 continue;
4171 }
4172
4173 /* Even though there wasn't an exact match, there might be a
4174 case range which includes the enumator's value. */
4175 node = splay_tree_predecessor (cases, (splay_tree_key) value);
4176 if (node && CASE_HIGH ((tree) node->value))
4177 {
4178 tree label = (tree) node->value;
4179 int cmp = tree_int_cst_compare (CASE_HIGH (label), value);
4180 if (cmp >= 0)
6de9cd9a 4181 {
c782c2fe
RS
4182 /* If we match the upper bound exactly, mark the CASE_HIGH
4183 part of the case entry as seen. */
4184 if (cmp == 0)
4185 CASE_HIGH_SEEN (label) = 1;
4186 continue;
6de9cd9a
DN
4187 }
4188 }
4189
c782c2fe
RS
4190 /* We've now determined that this enumerated literal isn't
4191 handled by the case labels of the switch statement. */
6de9cd9a 4192
c782c2fe
RS
4193 /* If the switch expression is a constant, we only really care
4194 about whether that constant is handled by the switch. */
4195 if (cond && tree_int_cst_compare (cond, value))
4196 continue;
6de9cd9a 4197
c782c2fe
RS
4198 warning (0, "%Henumeration value %qE not handled in switch",
4199 &switch_location, TREE_PURPOSE (chain));
6de9cd9a 4200 }
c782c2fe
RS
4201
4202 /* Warn if there are case expressions that don't correspond to
4203 enumerators. This can occur since C and C++ don't enforce
4204 type-checking of assignments to enumeration variables.
4205
4206 The time complexity here is now always O(N) worst case, since
4207 we should have marked both the lower bound and upper bound of
4208 every disjoint case label, with CASE_LOW_SEEN and CASE_HIGH_SEEN
4209 above. This scan also resets those fields. */
4210 splay_tree_foreach (cases, match_case_to_enum, type);
8f17b5c5
MM
4211}
4212
6b665219
MM
4213/* Finish an expression taking the address of LABEL (an
4214 IDENTIFIER_NODE). Returns an expression for the address. */
15b732b2 4215
35b1a6fa
AJ
4216tree
4217finish_label_address_expr (tree label)
15b732b2
NB
4218{
4219 tree result;
4220
4221 if (pedantic)
37fa72e9 4222 pedwarn ("taking the address of a label is non-standard");
15b732b2 4223
6b665219
MM
4224 if (label == error_mark_node)
4225 return error_mark_node;
4226
15b732b2
NB
4227 label = lookup_label (label);
4228 if (label == NULL_TREE)
4229 result = null_pointer_node;
4230 else
4231 {
4232 TREE_USED (label) = 1;
4233 result = build1 (ADDR_EXPR, ptr_type_node, label);
15b732b2
NB
4234 /* The current function in not necessarily uninlinable.
4235 Computed gotos are incompatible with inlining, but the value
4236 here could be used only in a diagnostic, for example. */
4237 }
4238
4239 return result;
4240}
4241
8f17b5c5 4242/* Hook used by expand_expr to expand language-specific tree codes. */
9f63daea 4243/* The only things that should go here are bits needed to expand
1ea7e6ad 4244 constant initializers. Everything else should be handled by the
6de9cd9a 4245 gimplification routines. */
8f17b5c5
MM
4246
4247rtx
9f63daea 4248c_expand_expr (tree exp, rtx target, enum machine_mode tmode,
0fab64a3
MM
4249 int modifier /* Actually enum_modifier. */,
4250 rtx *alt_rtl)
8f17b5c5
MM
4251{
4252 switch (TREE_CODE (exp))
4253 {
db3acfa5
JM
4254 case COMPOUND_LITERAL_EXPR:
4255 {
4256 /* Initialize the anonymous variable declared in the compound
4257 literal, then return the variable. */
4258 tree decl = COMPOUND_LITERAL_EXPR_DECL (exp);
4259 emit_local_var (decl);
0fab64a3 4260 return expand_expr_real (decl, target, tmode, modifier, alt_rtl);
db3acfa5
JM
4261 }
4262
8f17b5c5 4263 default:
366de0ce 4264 gcc_unreachable ();
8f17b5c5 4265 }
8f17b5c5
MM
4266}
4267
fc8600f9
MM
4268
4269/* Generate the RTL for the body of FNDECL. */
4270
4271void
4272c_expand_body (tree fndecl)
4273{
4274
4275 if (!DECL_INITIAL (fndecl)
4276 || DECL_INITIAL (fndecl) == error_mark_node)
4277 return;
4278
4279 tree_rest_of_compilation (fndecl);
4280
4281 if (DECL_STATIC_CONSTRUCTOR (fndecl)
4282 && targetm.have_ctors_dtors)
4283 targetm.asm_out.constructor (XEXP (DECL_RTL (fndecl), 0),
4284 decl_init_priority_lookup (fndecl));
4285 if (DECL_STATIC_DESTRUCTOR (fndecl)
4286 && targetm.have_ctors_dtors)
4287 targetm.asm_out.destructor (XEXP (DECL_RTL (fndecl), 0),
4288 decl_fini_priority_lookup (fndecl));
4289}
4290
db3acfa5
JM
4291/* Hook used by staticp to handle language-specific tree codes. */
4292
525c6bf5 4293tree
35b1a6fa 4294c_staticp (tree exp)
db3acfa5 4295{
525c6bf5
RH
4296 return (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
4297 && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp))
4298 ? exp : NULL);
db3acfa5 4299}
19552aa5
JM
4300\f
4301
4302/* Given a boolean expression ARG, return a tree representing an increment
4303 or decrement (as indicated by CODE) of ARG. The front end must check for
4304 invalid cases (e.g., decrement in C++). */
4305tree
35b1a6fa 4306boolean_increment (enum tree_code code, tree arg)
19552aa5
JM
4307{
4308 tree val;
de7df9eb 4309 tree true_res = boolean_true_node;
37fa72e9 4310
19552aa5
JM
4311 arg = stabilize_reference (arg);
4312 switch (code)
4313 {
4314 case PREINCREMENT_EXPR:
53fb4de3 4315 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
19552aa5
JM
4316 break;
4317 case POSTINCREMENT_EXPR:
53fb4de3 4318 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
19552aa5 4319 arg = save_expr (arg);
53fb4de3
RS
4320 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4321 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
19552aa5
JM
4322 break;
4323 case PREDECREMENT_EXPR:
53fb4de3
RS
4324 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
4325 invert_truthvalue (arg));
19552aa5
JM
4326 break;
4327 case POSTDECREMENT_EXPR:
53fb4de3
RS
4328 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
4329 invert_truthvalue (arg));
19552aa5 4330 arg = save_expr (arg);
53fb4de3
RS
4331 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4332 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
19552aa5
JM
4333 break;
4334 default:
366de0ce 4335 gcc_unreachable ();
19552aa5
JM
4336 }
4337 TREE_SIDE_EFFECTS (val) = 1;
4338 return val;
4339}
03dc0325 4340\f
cb60f38d
NB
4341/* Built-in macros for stddef.h, that require macros defined in this
4342 file. */
460bd0e3 4343void
35b1a6fa 4344c_stddef_cpp_builtins(void)
3df89291 4345{
5279d739
ZW
4346 builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
4347 builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
4348 builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
4349 builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
85291069
JM
4350 builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE, 0);
4351 builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE, 0);
676997cf
RH
4352}
4353
6431177a 4354static void
35b1a6fa 4355c_init_attributes (void)
6431177a
JM
4356{
4357 /* Fill in the built_in_attributes array. */
4a90aeeb 4358#define DEF_ATTR_NULL_TREE(ENUM) \
6431177a 4359 built_in_attributes[(int) ENUM] = NULL_TREE;
4a90aeeb 4360#define DEF_ATTR_INT(ENUM, VALUE) \
7d60be94 4361 built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
6431177a
JM
4362#define DEF_ATTR_IDENT(ENUM, STRING) \
4363 built_in_attributes[(int) ENUM] = get_identifier (STRING);
4364#define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
4365 built_in_attributes[(int) ENUM] \
4366 = tree_cons (built_in_attributes[(int) PURPOSE], \
4367 built_in_attributes[(int) VALUE], \
4368 built_in_attributes[(int) CHAIN]);
6431177a
JM
4369#include "builtin-attrs.def"
4370#undef DEF_ATTR_NULL_TREE
4371#undef DEF_ATTR_INT
4372#undef DEF_ATTR_IDENT
4373#undef DEF_ATTR_TREE_LIST
03dc0325 4374}
26f943fd 4375
349ae713
NB
4376/* Attribute handlers common to C front ends. */
4377
4378/* Handle a "packed" attribute; arguments as in
4379 struct attribute_spec.handler. */
4380
4381static tree
e18476eb 4382handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args),
a742c759 4383 int flags, bool *no_add_attrs)
349ae713 4384{
c6e4cc53 4385 if (TYPE_P (*node))
349ae713
NB
4386 {
4387 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
8dd16ecc 4388 *node = build_variant_type_copy (*node);
c6e4cc53 4389 TYPE_PACKED (*node) = 1;
349ae713
NB
4390 }
4391 else if (TREE_CODE (*node) == FIELD_DECL)
646c0835
NS
4392 {
4393 if (TYPE_ALIGN (TREE_TYPE (*node)) <= BITS_PER_UNIT)
4394 warning (OPT_Wattributes,
4395 "%qE attribute ignored for field of type %qT",
4396 name, TREE_TYPE (*node));
4397 else
4398 DECL_PACKED (*node) = 1;
4399 }
349ae713 4400 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
c6e4cc53
NS
4401 used for DECL_REGISTER. It wouldn't mean anything anyway.
4402 We can't set DECL_PACKED on the type of a TYPE_DECL, because
4403 that changes what the typedef is typing. */
349ae713
NB
4404 else
4405 {
5c498b10 4406 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4407 *no_add_attrs = true;
4408 }
4409
4410 return NULL_TREE;
4411}
4412
4413/* Handle a "nocommon" attribute; arguments as in
4414 struct attribute_spec.handler. */
4415
4416static tree
35b1a6fa 4417handle_nocommon_attribute (tree *node, tree name,
e18476eb
BI
4418 tree ARG_UNUSED (args),
4419 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713
NB
4420{
4421 if (TREE_CODE (*node) == VAR_DECL)
4422 DECL_COMMON (*node) = 0;
4423 else
4424 {
5c498b10 4425 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4426 *no_add_attrs = true;
4427 }
4428
4429 return NULL_TREE;
4430}
4431
4432/* Handle a "common" attribute; arguments as in
4433 struct attribute_spec.handler. */
4434
4435static tree
e18476eb
BI
4436handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4437 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713
NB
4438{
4439 if (TREE_CODE (*node) == VAR_DECL)
4440 DECL_COMMON (*node) = 1;
4441 else
4442 {
5c498b10 4443 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4444 *no_add_attrs = true;
4445 }
4446
4447 return NULL_TREE;
4448}
4449
4450/* Handle a "noreturn" attribute; arguments as in
4451 struct attribute_spec.handler. */
4452
4453static tree
e18476eb
BI
4454handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4455 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713
NB
4456{
4457 tree type = TREE_TYPE (*node);
4458
4459 /* See FIXME comment in c_common_attribute_table. */
4460 if (TREE_CODE (*node) == FUNCTION_DECL)
4461 TREE_THIS_VOLATILE (*node) = 1;
4462 else if (TREE_CODE (type) == POINTER_TYPE
4463 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4464 TREE_TYPE (*node)
4465 = build_pointer_type
4466 (build_type_variant (TREE_TYPE (type),
c29726e2 4467 TYPE_READONLY (TREE_TYPE (type)), 1));
349ae713
NB
4468 else
4469 {
5c498b10 4470 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4471 *no_add_attrs = true;
4472 }
4473
4474 return NULL_TREE;
4475}
4476
52bf96d2
JH
4477/* Handle a "hot" and attribute; arguments as in
4478 struct attribute_spec.handler. */
4479
4480static tree
4481handle_hot_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4482 int ARG_UNUSED (flags), bool *no_add_attrs)
4483{
4484 if (TREE_CODE (*node) == FUNCTION_DECL)
4485 {
4486 if (lookup_attribute ("cold", DECL_ATTRIBUTES (*node)) != NULL)
4487 {
4488 warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
4489 name, "cold");
4490 *no_add_attrs = true;
4491 }
4492 /* Do nothing else, just set the attribute. We'll get at
4493 it later with lookup_attribute. */
4494 }
4495 else
4496 {
4497 warning (OPT_Wattributes, "%qE attribute ignored", name);
4498 *no_add_attrs = true;
4499 }
4500
4501 return NULL_TREE;
4502}
4503/* Handle a "cold" and attribute; arguments as in
4504 struct attribute_spec.handler. */
4505
4506static tree
4507handle_cold_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4508 int ARG_UNUSED (flags), bool *no_add_attrs)
4509{
4510 if (TREE_CODE (*node) == FUNCTION_DECL)
4511 {
4512 if (lookup_attribute ("hot", DECL_ATTRIBUTES (*node)) != NULL)
4513 {
4514 warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
4515 name, "hot");
4516 *no_add_attrs = true;
4517 }
4518 /* Do nothing else, just set the attribute. We'll get at
4519 it later with lookup_attribute. */
4520 }
4521 else
4522 {
4523 warning (OPT_Wattributes, "%qE attribute ignored", name);
4524 *no_add_attrs = true;
4525 }
4526
4527 return NULL_TREE;
4528}
4529
349ae713
NB
4530/* Handle a "noinline" attribute; arguments as in
4531 struct attribute_spec.handler. */
4532
4533static tree
35b1a6fa 4534handle_noinline_attribute (tree *node, tree name,
e18476eb
BI
4535 tree ARG_UNUSED (args),
4536 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713
NB
4537{
4538 if (TREE_CODE (*node) == FUNCTION_DECL)
4539 DECL_UNINLINABLE (*node) = 1;
4540 else
4541 {
5c498b10 4542 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4543 *no_add_attrs = true;
4544 }
4545
4546 return NULL_TREE;
4547}
4548
4549/* Handle a "always_inline" attribute; arguments as in
4550 struct attribute_spec.handler. */
4551
4552static tree
35b1a6fa 4553handle_always_inline_attribute (tree *node, tree name,
e18476eb
BI
4554 tree ARG_UNUSED (args),
4555 int ARG_UNUSED (flags),
a742c759 4556 bool *no_add_attrs)
349ae713
NB
4557{
4558 if (TREE_CODE (*node) == FUNCTION_DECL)
4559 {
4560 /* Do nothing else, just set the attribute. We'll get at
4561 it later with lookup_attribute. */
4562 }
4563 else
4564 {
5c498b10 4565 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713 4566 *no_add_attrs = true;
4eb7fd83
JJ
4567 }
4568
4569 return NULL_TREE;
4570}
4571
4572/* Handle a "gnu_inline" attribute; arguments as in
4573 struct attribute_spec.handler. */
4574
4575static tree
4576handle_gnu_inline_attribute (tree *node, tree name,
4577 tree ARG_UNUSED (args),
4578 int ARG_UNUSED (flags),
4579 bool *no_add_attrs)
4580{
4581 if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
4582 {
4583 /* Do nothing else, just set the attribute. We'll get at
4584 it later with lookup_attribute. */
4585 }
4586 else
4587 {
4588 warning (OPT_Wattributes, "%qE attribute ignored", name);
4589 *no_add_attrs = true;
349ae713
NB
4590 }
4591
4592 return NULL_TREE;
4593}
4594
0691d1d4
RG
4595/* Handle a "flatten" attribute; arguments as in
4596 struct attribute_spec.handler. */
4597
4598static tree
4599handle_flatten_attribute (tree *node, tree name,
c22cacf3
MS
4600 tree args ATTRIBUTE_UNUSED,
4601 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
0691d1d4
RG
4602{
4603 if (TREE_CODE (*node) == FUNCTION_DECL)
4604 /* Do nothing else, just set the attribute. We'll get at
4605 it later with lookup_attribute. */
4606 ;
4607 else
4608 {
4609 warning (OPT_Wattributes, "%qE attribute ignored", name);
4610 *no_add_attrs = true;
4611 }
4612
4613 return NULL_TREE;
4614}
4615
4616
349ae713
NB
4617/* Handle a "used" attribute; arguments as in
4618 struct attribute_spec.handler. */
4619
4620static tree
e18476eb
BI
4621handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
4622 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713 4623{
d7ddbe24
RH
4624 tree node = *pnode;
4625
4626 if (TREE_CODE (node) == FUNCTION_DECL
4627 || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
4d7d0451 4628 {
4d7d0451 4629 TREE_USED (node) = 1;
8e3e233b 4630 DECL_PRESERVE_P (node) = 1;
4d7d0451 4631 }
349ae713
NB
4632 else
4633 {
5c498b10 4634 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4635 *no_add_attrs = true;
4636 }
4637
4638 return NULL_TREE;
4639}
4640
4641/* Handle a "unused" attribute; arguments as in
4642 struct attribute_spec.handler. */
4643
4644static tree
e18476eb
BI
4645handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4646 int flags, bool *no_add_attrs)
349ae713
NB
4647{
4648 if (DECL_P (*node))
4649 {
4650 tree decl = *node;
4651
4652 if (TREE_CODE (decl) == PARM_DECL
4653 || TREE_CODE (decl) == VAR_DECL
4654 || TREE_CODE (decl) == FUNCTION_DECL
4655 || TREE_CODE (decl) == LABEL_DECL
4656 || TREE_CODE (decl) == TYPE_DECL)
4657 TREE_USED (decl) = 1;
4658 else
4659 {
5c498b10 4660 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4661 *no_add_attrs = true;
4662 }
4663 }
4664 else
4665 {
4666 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
8dd16ecc 4667 *node = build_variant_type_copy (*node);
349ae713
NB
4668 TREE_USED (*node) = 1;
4669 }
4670
4671 return NULL_TREE;
4672}
4673
ce91e74c
JH
4674/* Handle a "externally_visible" attribute; arguments as in
4675 struct attribute_spec.handler. */
4676
4677static tree
4678handle_externally_visible_attribute (tree *pnode, tree name,
4679 tree ARG_UNUSED (args),
4680 int ARG_UNUSED (flags),
4681 bool *no_add_attrs)
4682{
4683 tree node = *pnode;
4684
343d4b27 4685 if (TREE_CODE (node) == FUNCTION_DECL || TREE_CODE (node) == VAR_DECL)
ce91e74c 4686 {
343d4b27
JJ
4687 if ((!TREE_STATIC (node) && TREE_CODE (node) != FUNCTION_DECL
4688 && !DECL_EXTERNAL (node)) || !TREE_PUBLIC (node))
4689 {
4690 warning (OPT_Wattributes,
4691 "%qE attribute have effect only on public objects", name);
4692 *no_add_attrs = true;
4693 }
ce91e74c 4694 }
ce91e74c
JH
4695 else
4696 {
4697 warning (OPT_Wattributes, "%qE attribute ignored", name);
4698 *no_add_attrs = true;
4699 }
4700
4701 return NULL_TREE;
4702}
4703
349ae713
NB
4704/* Handle a "const" attribute; arguments as in
4705 struct attribute_spec.handler. */
4706
4707static tree
e18476eb
BI
4708handle_const_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4709 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713
NB
4710{
4711 tree type = TREE_TYPE (*node);
4712
4713 /* See FIXME comment on noreturn in c_common_attribute_table. */
4714 if (TREE_CODE (*node) == FUNCTION_DECL)
4715 TREE_READONLY (*node) = 1;
4716 else if (TREE_CODE (type) == POINTER_TYPE
4717 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4718 TREE_TYPE (*node)
4719 = build_pointer_type
4720 (build_type_variant (TREE_TYPE (type), 1,
4721 TREE_THIS_VOLATILE (TREE_TYPE (type))));
4722 else
4723 {
5c498b10 4724 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4725 *no_add_attrs = true;
4726 }
4727
4728 return NULL_TREE;
4729}
4730
4731/* Handle a "transparent_union" attribute; arguments as in
4732 struct attribute_spec.handler. */
4733
4734static tree
35b1a6fa 4735handle_transparent_union_attribute (tree *node, tree name,
e18476eb 4736 tree ARG_UNUSED (args), int flags,
a742c759 4737 bool *no_add_attrs)
349ae713 4738{
52dd234b
RH
4739 tree type = NULL;
4740
4741 *no_add_attrs = true;
349ae713
NB
4742
4743 if (DECL_P (*node))
4744 {
52dd234b
RH
4745 if (TREE_CODE (*node) != TYPE_DECL)
4746 goto ignored;
4747 node = &TREE_TYPE (*node);
4748 type = *node;
349ae713
NB
4749 }
4750 else if (TYPE_P (*node))
52dd234b
RH
4751 type = *node;
4752 else
4753 goto ignored;
349ae713 4754
52dd234b 4755 if (TREE_CODE (type) == UNION_TYPE)
349ae713 4756 {
52dd234b
RH
4757 /* When IN_PLACE is set, leave the check for FIELDS and MODE to
4758 the code in finish_struct. */
349ae713 4759 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
52dd234b
RH
4760 {
4761 if (TYPE_FIELDS (type) == NULL_TREE
4762 || TYPE_MODE (type) != DECL_MODE (TYPE_FIELDS (type)))
4763 goto ignored;
4764
4765 /* A type variant isn't good enough, since we don't a cast
4766 to such a type removed as a no-op. */
4767 *node = type = build_duplicate_type (type);
4768 }
4769
4770 TYPE_TRANSPARENT_UNION (type) = 1;
4771 return NULL_TREE;
349ae713
NB
4772 }
4773
52dd234b
RH
4774 ignored:
4775 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4776 return NULL_TREE;
4777}
4778
fc8600f9
MM
4779/* Subroutine of handle_{con,de}structor_attribute. Evaluate ARGS to
4780 get the requested priority for a constructor or destructor,
4781 possibly issuing diagnostics for invalid or reserved
4782 priorities. */
4783
4784static priority_type
4785get_priority (tree args, bool is_destructor)
4786{
4787 HOST_WIDE_INT pri;
b2f4bed8 4788 tree arg;
fc8600f9
MM
4789
4790 if (!args)
4791 return DEFAULT_INIT_PRIORITY;
b2f4bed8 4792
f6fc5c86
MM
4793 if (!SUPPORTS_INIT_PRIORITY)
4794 {
4795 if (is_destructor)
4796 error ("destructor priorities are not supported");
4797 else
4798 error ("constructor priorities are not supported");
4799 return DEFAULT_INIT_PRIORITY;
4800 }
4801
b2f4bed8
MM
4802 arg = TREE_VALUE (args);
4803 if (!host_integerp (arg, /*pos=*/0)
4804 || !INTEGRAL_TYPE_P (TREE_TYPE (arg)))
fc8600f9
MM
4805 goto invalid;
4806
4807 pri = tree_low_cst (TREE_VALUE (args), /*pos=*/0);
4808 if (pri < 0 || pri > MAX_INIT_PRIORITY)
4809 goto invalid;
4810
4811 if (pri <= MAX_RESERVED_INIT_PRIORITY)
4812 {
4813 if (is_destructor)
4814 warning (0,
4815 "destructor priorities from 0 to %d are reserved "
4816 "for the implementation",
4817 MAX_RESERVED_INIT_PRIORITY);
4818 else
4819 warning (0,
4820 "constructor priorities from 0 to %d are reserved "
4821 "for the implementation",
4822 MAX_RESERVED_INIT_PRIORITY);
4823 }
4824 return pri;
4825
4826 invalid:
4827 if (is_destructor)
4828 error ("destructor priorities must be integers from 0 to %d inclusive",
4829 MAX_INIT_PRIORITY);
4830 else
4831 error ("constructor priorities must be integers from 0 to %d inclusive",
4832 MAX_INIT_PRIORITY);
4833 return DEFAULT_INIT_PRIORITY;
4834}
4835
349ae713
NB
4836/* Handle a "constructor" attribute; arguments as in
4837 struct attribute_spec.handler. */
4838
4839static tree
fc8600f9 4840handle_constructor_attribute (tree *node, tree name, tree args,
e18476eb 4841 int ARG_UNUSED (flags),
a742c759 4842 bool *no_add_attrs)
349ae713
NB
4843{
4844 tree decl = *node;
4845 tree type = TREE_TYPE (decl);
4846
4847 if (TREE_CODE (decl) == FUNCTION_DECL
4848 && TREE_CODE (type) == FUNCTION_TYPE
4849 && decl_function_context (decl) == 0)
4850 {
fc8600f9 4851 priority_type priority;
349ae713 4852 DECL_STATIC_CONSTRUCTOR (decl) = 1;
fc8600f9
MM
4853 priority = get_priority (args, /*is_destructor=*/false);
4854 SET_DECL_INIT_PRIORITY (decl, priority);
349ae713
NB
4855 TREE_USED (decl) = 1;
4856 }
4857 else
4858 {
5c498b10 4859 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4860 *no_add_attrs = true;
4861 }
4862
4863 return NULL_TREE;
4864}
4865
4866/* Handle a "destructor" attribute; arguments as in
4867 struct attribute_spec.handler. */
4868
4869static tree
fc8600f9 4870handle_destructor_attribute (tree *node, tree name, tree args,
e18476eb 4871 int ARG_UNUSED (flags),
a742c759 4872 bool *no_add_attrs)
349ae713
NB
4873{
4874 tree decl = *node;
4875 tree type = TREE_TYPE (decl);
4876
4877 if (TREE_CODE (decl) == FUNCTION_DECL
4878 && TREE_CODE (type) == FUNCTION_TYPE
4879 && decl_function_context (decl) == 0)
4880 {
fc8600f9 4881 priority_type priority;
349ae713 4882 DECL_STATIC_DESTRUCTOR (decl) = 1;
fc8600f9
MM
4883 priority = get_priority (args, /*is_destructor=*/true);
4884 SET_DECL_FINI_PRIORITY (decl, priority);
349ae713
NB
4885 TREE_USED (decl) = 1;
4886 }
4887 else
4888 {
5c498b10 4889 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4890 *no_add_attrs = true;
4891 }
4892
4893 return NULL_TREE;
4894}
4895
4896/* Handle a "mode" attribute; arguments as in
4897 struct attribute_spec.handler. */
4898
4899static tree
e18476eb
BI
4900handle_mode_attribute (tree *node, tree name, tree args,
4901 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713
NB
4902{
4903 tree type = *node;
4904
4905 *no_add_attrs = true;
4906
4907 if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
5c498b10 4908 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4909 else
4910 {
4911 int j;
4912 const char *p = IDENTIFIER_POINTER (TREE_VALUE (args));
4913 int len = strlen (p);
4914 enum machine_mode mode = VOIDmode;
4915 tree typefm;
6dd53648 4916 bool valid_mode;
349ae713
NB
4917
4918 if (len > 4 && p[0] == '_' && p[1] == '_'
4919 && p[len - 1] == '_' && p[len - 2] == '_')
4920 {
28dab132 4921 char *newp = (char *) alloca (len - 1);
349ae713
NB
4922
4923 strcpy (newp, &p[2]);
4924 newp[len - 4] = '\0';
4925 p = newp;
4926 }
4927
4928 /* Change this type to have a type with the specified mode.
4929 First check for the special modes. */
3f75a254 4930 if (!strcmp (p, "byte"))
349ae713
NB
4931 mode = byte_mode;
4932 else if (!strcmp (p, "word"))
4933 mode = word_mode;
3f75a254 4934 else if (!strcmp (p, "pointer"))
349ae713
NB
4935 mode = ptr_mode;
4936 else
4937 for (j = 0; j < NUM_MACHINE_MODES; j++)
4938 if (!strcmp (p, GET_MODE_NAME (j)))
61f03aba
RH
4939 {
4940 mode = (enum machine_mode) j;
4941 break;
4942 }
349ae713
NB
4943
4944 if (mode == VOIDmode)
4a5eab38 4945 {
9e637a26 4946 error ("unknown machine mode %qs", p);
4a5eab38
PB
4947 return NULL_TREE;
4948 }
4949
6dd53648
RH
4950 valid_mode = false;
4951 switch (GET_MODE_CLASS (mode))
4a5eab38 4952 {
6dd53648
RH
4953 case MODE_INT:
4954 case MODE_PARTIAL_INT:
4955 case MODE_FLOAT:
9a8ce21f 4956 case MODE_DECIMAL_FLOAT:
6dd53648
RH
4957 valid_mode = targetm.scalar_mode_supported_p (mode);
4958 break;
4959
4960 case MODE_COMPLEX_INT:
4961 case MODE_COMPLEX_FLOAT:
4962 valid_mode = targetm.scalar_mode_supported_p (GET_MODE_INNER (mode));
4963 break;
4964
4965 case MODE_VECTOR_INT:
4966 case MODE_VECTOR_FLOAT:
5c498b10
DD
4967 warning (OPT_Wattributes, "specifying vector types with "
4968 "__attribute__ ((mode)) is deprecated");
4969 warning (OPT_Wattributes,
4970 "use __attribute__ ((vector_size)) instead");
6dd53648
RH
4971 valid_mode = vector_mode_valid_p (mode);
4972 break;
4a5eab38 4973
6dd53648
RH
4974 default:
4975 break;
4976 }
4977 if (!valid_mode)
4978 {
9e637a26 4979 error ("unable to emulate %qs", p);
6dd53648
RH
4980 return NULL_TREE;
4981 }
4a5eab38 4982
6dd53648 4983 if (POINTER_TYPE_P (type))
cb2a532e 4984 {
6dd53648
RH
4985 tree (*fn)(tree, enum machine_mode, bool);
4986
4987 if (!targetm.valid_pointer_mode (mode))
cb2a532e 4988 {
9e637a26 4989 error ("invalid pointer mode %qs", p);
cb2a532e
AH
4990 return NULL_TREE;
4991 }
4992
c22cacf3 4993 if (TREE_CODE (type) == POINTER_TYPE)
6dd53648 4994 fn = build_pointer_type_for_mode;
4977bab6 4995 else
6dd53648
RH
4996 fn = build_reference_type_for_mode;
4997 typefm = fn (TREE_TYPE (type), mode, false);
cb2a532e 4998 }
6dd53648 4999 else
c22cacf3 5000 typefm = lang_hooks.types.type_for_mode (mode, TYPE_UNSIGNED (type));
ec8465a5 5001
6dd53648
RH
5002 if (typefm == NULL_TREE)
5003 {
61f03aba 5004 error ("no data type for mode %qs", p);
6dd53648
RH
5005 return NULL_TREE;
5006 }
ec8465a5
RK
5007 else if (TREE_CODE (type) == ENUMERAL_TYPE)
5008 {
5009 /* For enumeral types, copy the precision from the integer
5010 type returned above. If not an INTEGER_TYPE, we can't use
5011 this mode for this type. */
5012 if (TREE_CODE (typefm) != INTEGER_TYPE)
5013 {
61f03aba 5014 error ("cannot use mode %qs for enumeral types", p);
ec8465a5
RK
5015 return NULL_TREE;
5016 }
5017
99db1ef0
RH
5018 if (flags & ATTR_FLAG_TYPE_IN_PLACE)
5019 {
5020 TYPE_PRECISION (type) = TYPE_PRECISION (typefm);
5021 typefm = type;
5022 }
5023 else
5024 {
5025 /* We cannot build a type variant, as there's code that assumes
5026 that TYPE_MAIN_VARIANT has the same mode. This includes the
5027 debug generators. Instead, create a subrange type. This
5028 results in all of the enumeral values being emitted only once
5029 in the original, and the subtype gets them by reference. */
5030 if (TYPE_UNSIGNED (type))
5031 typefm = make_unsigned_type (TYPE_PRECISION (typefm));
5032 else
5033 typefm = make_signed_type (TYPE_PRECISION (typefm));
5034 TREE_TYPE (typefm) = type;
5035 }
ec8465a5 5036 }
a2d36602
RH
5037 else if (VECTOR_MODE_P (mode)
5038 ? TREE_CODE (type) != TREE_CODE (TREE_TYPE (typefm))
5039 : TREE_CODE (type) != TREE_CODE (typefm))
61f03aba
RH
5040 {
5041 error ("mode %qs applied to inappropriate type", p);
5042 return NULL_TREE;
5043 }
5044
6dd53648 5045 *node = typefm;
349ae713
NB
5046 }
5047
5048 return NULL_TREE;
5049}
5050
5051/* Handle a "section" attribute; arguments as in
5052 struct attribute_spec.handler. */
5053
5054static tree
e18476eb
BI
5055handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5056 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713
NB
5057{
5058 tree decl = *node;
5059
5060 if (targetm.have_named_sections)
5061 {
9fb32434
CT
5062 user_defined_section_attribute = true;
5063
349ae713
NB
5064 if ((TREE_CODE (decl) == FUNCTION_DECL
5065 || TREE_CODE (decl) == VAR_DECL)
5066 && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
5067 {
5068 if (TREE_CODE (decl) == VAR_DECL
5069 && current_function_decl != NULL_TREE
3f75a254 5070 && !TREE_STATIC (decl))
349ae713 5071 {
ddd2d57e 5072 error ("%Jsection attribute cannot be specified for "
6de9cd9a 5073 "local variables", decl);
349ae713
NB
5074 *no_add_attrs = true;
5075 }
5076
5077 /* The decl may have already been given a section attribute
5078 from a previous declaration. Ensure they match. */
5079 else if (DECL_SECTION_NAME (decl) != NULL_TREE
5080 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
5081 TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
5082 {
dee15844
JM
5083 error ("section of %q+D conflicts with previous declaration",
5084 *node);
349ae713
NB
5085 *no_add_attrs = true;
5086 }
5087 else
5088 DECL_SECTION_NAME (decl) = TREE_VALUE (args);
5089 }
5090 else
5091 {
dee15844 5092 error ("section attribute not allowed for %q+D", *node);
349ae713
NB
5093 *no_add_attrs = true;
5094 }
5095 }
5096 else
5097 {
ddd2d57e 5098 error ("%Jsection attributes are not supported for this target", *node);
349ae713
NB
5099 *no_add_attrs = true;
5100 }
5101
5102 return NULL_TREE;
5103}
5104
5105/* Handle a "aligned" attribute; arguments as in
5106 struct attribute_spec.handler. */
5107
5108static tree
e18476eb 5109handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
a742c759 5110 int flags, bool *no_add_attrs)
349ae713
NB
5111{
5112 tree decl = NULL_TREE;
5113 tree *type = NULL;
5114 int is_type = 0;
5115 tree align_expr = (args ? TREE_VALUE (args)
5116 : size_int (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
5117 int i;
5118
5119 if (DECL_P (*node))
5120 {
5121 decl = *node;
5122 type = &TREE_TYPE (decl);
5123 is_type = TREE_CODE (*node) == TYPE_DECL;
5124 }
5125 else if (TYPE_P (*node))
5126 type = node, is_type = 1;
5127
349ae713
NB
5128 if (TREE_CODE (align_expr) != INTEGER_CST)
5129 {
5130 error ("requested alignment is not a constant");
5131 *no_add_attrs = true;
5132 }
5133 else if ((i = tree_log2 (align_expr)) == -1)
5134 {
5135 error ("requested alignment is not a power of 2");
5136 *no_add_attrs = true;
5137 }
5138 else if (i > HOST_BITS_PER_INT - 2)
5139 {
5140 error ("requested alignment is too large");
5141 *no_add_attrs = true;
5142 }
5143 else if (is_type)
5144 {
5145 /* If we have a TYPE_DECL, then copy the type, so that we
5146 don't accidentally modify a builtin type. See pushdecl. */
5147 if (decl && TREE_TYPE (decl) != error_mark_node
5148 && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
5149 {
5150 tree tt = TREE_TYPE (decl);
8dd16ecc 5151 *type = build_variant_type_copy (*type);
349ae713
NB
5152 DECL_ORIGINAL_TYPE (decl) = tt;
5153 TYPE_NAME (*type) = decl;
5154 TREE_USED (*type) = TREE_USED (decl);
5155 TREE_TYPE (decl) = *type;
5156 }
5157 else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
8dd16ecc 5158 *type = build_variant_type_copy (*type);
349ae713
NB
5159
5160 TYPE_ALIGN (*type) = (1 << i) * BITS_PER_UNIT;
5161 TYPE_USER_ALIGN (*type) = 1;
5162 }
5163 else if (TREE_CODE (decl) != VAR_DECL
5164 && TREE_CODE (decl) != FIELD_DECL)
5165 {
dee15844 5166 error ("alignment may not be specified for %q+D", decl);
349ae713
NB
5167 *no_add_attrs = true;
5168 }
5169 else
5170 {
5171 DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT;
5172 DECL_USER_ALIGN (decl) = 1;
5173 }
5174
5175 return NULL_TREE;
5176}
5177
5178/* Handle a "weak" attribute; arguments as in
5179 struct attribute_spec.handler. */
5180
5181static tree
55af93a8 5182handle_weak_attribute (tree *node, tree name,
e18476eb
BI
5183 tree ARG_UNUSED (args),
5184 int ARG_UNUSED (flags),
5185 bool * ARG_UNUSED (no_add_attrs))
349ae713 5186{
55af93a8
DS
5187 if (TREE_CODE (*node) == FUNCTION_DECL
5188 || TREE_CODE (*node) == VAR_DECL)
5189 declare_weak (*node);
5190 else
5191 warning (OPT_Wattributes, "%qE attribute ignored", name);
5192
349ae713
NB
5193
5194 return NULL_TREE;
5195}
5196
5197/* Handle an "alias" attribute; arguments as in
5198 struct attribute_spec.handler. */
5199
5200static tree
35b1a6fa 5201handle_alias_attribute (tree *node, tree name, tree args,
e18476eb 5202 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713
NB
5203{
5204 tree decl = *node;
5205
5206 if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
a9b0b825
GK
5207 || (TREE_CODE (decl) != FUNCTION_DECL
5208 && TREE_PUBLIC (decl) && !DECL_EXTERNAL (decl))
5209 /* A static variable declaration is always a tentative definition,
5210 but the alias is a non-tentative definition which overrides. */
5211 || (TREE_CODE (decl) != FUNCTION_DECL
5212 && ! TREE_PUBLIC (decl) && DECL_INITIAL (decl)))
349ae713 5213 {
dee15844 5214 error ("%q+D defined both normally and as an alias", decl);
349ae713
NB
5215 *no_add_attrs = true;
5216 }
f6a76b9f
RH
5217
5218 /* Note that the very first time we process a nested declaration,
5219 decl_function_context will not be set. Indeed, *would* never
5220 be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
5221 we do below. After such frobbery, pushdecl would set the context.
5222 In any case, this is never what we want. */
5223 else if (decl_function_context (decl) == 0 && current_function_decl == NULL)
349ae713
NB
5224 {
5225 tree id;
5226
5227 id = TREE_VALUE (args);
5228 if (TREE_CODE (id) != STRING_CST)
5229 {
40b97a2e 5230 error ("alias argument not a string");
349ae713
NB
5231 *no_add_attrs = true;
5232 return NULL_TREE;
5233 }
5234 id = get_identifier (TREE_STRING_POINTER (id));
5235 /* This counts as a use of the object pointed to. */
5236 TREE_USED (id) = 1;
5237
5238 if (TREE_CODE (decl) == FUNCTION_DECL)
5239 DECL_INITIAL (decl) = error_mark_node;
5240 else
6de9cd9a 5241 {
a0203ca7
AO
5242 if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
5243 DECL_EXTERNAL (decl) = 1;
5244 else
5245 DECL_EXTERNAL (decl) = 0;
6de9cd9a
DN
5246 TREE_STATIC (decl) = 1;
5247 }
349ae713
NB
5248 }
5249 else
5250 {
5c498b10 5251 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
5252 *no_add_attrs = true;
5253 }
5254
5255 return NULL_TREE;
5256}
5257
a0203ca7
AO
5258/* Handle a "weakref" attribute; arguments as in struct
5259 attribute_spec.handler. */
5260
5261static tree
5262handle_weakref_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5263 int flags, bool *no_add_attrs)
5264{
5265 tree attr = NULL_TREE;
5266
e1cf56b1
AO
5267 /* We must ignore the attribute when it is associated with
5268 local-scoped decls, since attribute alias is ignored and many
5269 such symbols do not even have a DECL_WEAK field. */
5270 if (decl_function_context (*node) || current_function_decl)
5271 {
5272 warning (OPT_Wattributes, "%qE attribute ignored", name);
5273 *no_add_attrs = true;
5274 return NULL_TREE;
5275 }
5276
a0203ca7
AO
5277 /* The idea here is that `weakref("name")' mutates into `weakref,
5278 alias("name")', and weakref without arguments, in turn,
5279 implicitly adds weak. */
5280
5281 if (args)
5282 {
5283 attr = tree_cons (get_identifier ("alias"), args, attr);
5284 attr = tree_cons (get_identifier ("weakref"), NULL_TREE, attr);
5285
5286 *no_add_attrs = true;
a9b0b825
GK
5287
5288 decl_attributes (node, attr, flags);
a0203ca7
AO
5289 }
5290 else
5291 {
5292 if (lookup_attribute ("alias", DECL_ATTRIBUTES (*node)))
5293 error ("%Jweakref attribute must appear before alias attribute",
5294 *node);
5295
a9b0b825
GK
5296 /* Can't call declare_weak because it wants this to be TREE_PUBLIC,
5297 and that isn't supported; and because it wants to add it to
5298 the list of weak decls, which isn't helpful. */
5299 DECL_WEAK (*node) = 1;
a0203ca7
AO
5300 }
5301
a0203ca7
AO
5302 return NULL_TREE;
5303}
5304
349ae713
NB
5305/* Handle an "visibility" attribute; arguments as in
5306 struct attribute_spec.handler. */
5307
5308static tree
35b1a6fa 5309handle_visibility_attribute (tree *node, tree name, tree args,
e18476eb 5310 int ARG_UNUSED (flags),
b9e75696 5311 bool *ARG_UNUSED (no_add_attrs))
349ae713
NB
5312{
5313 tree decl = *node;
968b41a1 5314 tree id = TREE_VALUE (args);
b9e75696 5315 enum symbol_visibility vis;
349ae713 5316
d7afec4b
ND
5317 if (TYPE_P (*node))
5318 {
b9e75696
JM
5319 if (TREE_CODE (*node) == ENUMERAL_TYPE)
5320 /* OK */;
5321 else if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE)
5322 {
5323 warning (OPT_Wattributes, "%qE attribute ignored on non-class types",
5324 name);
5325 return NULL_TREE;
5326 }
5327 else if (TYPE_FIELDS (*node))
5328 {
5329 error ("%qE attribute ignored because %qT is already defined",
5330 name, *node);
5331 return NULL_TREE;
5332 }
d7afec4b 5333 }
3f75a254 5334 else if (decl_function_context (decl) != 0 || !TREE_PUBLIC (decl))
349ae713 5335 {
5c498b10 5336 warning (OPT_Wattributes, "%qE attribute ignored", name);
968b41a1 5337 return NULL_TREE;
349ae713 5338 }
349ae713 5339
968b41a1
MA
5340 if (TREE_CODE (id) != STRING_CST)
5341 {
40b97a2e 5342 error ("visibility argument not a string");
968b41a1 5343 return NULL_TREE;
349ae713 5344 }
9f63daea 5345
d7afec4b
ND
5346 /* If this is a type, set the visibility on the type decl. */
5347 if (TYPE_P (decl))
5348 {
5349 decl = TYPE_NAME (decl);
3f75a254 5350 if (!decl)
c22cacf3 5351 return NULL_TREE;
e8233ac2
AP
5352 if (TREE_CODE (decl) == IDENTIFIER_NODE)
5353 {
5c498b10 5354 warning (OPT_Wattributes, "%qE attribute ignored on types",
e8233ac2
AP
5355 name);
5356 return NULL_TREE;
5357 }
d7afec4b 5358 }
349ae713 5359
968b41a1 5360 if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
b9e75696 5361 vis = VISIBILITY_DEFAULT;
968b41a1 5362 else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
b9e75696 5363 vis = VISIBILITY_INTERNAL;
968b41a1 5364 else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
b9e75696 5365 vis = VISIBILITY_HIDDEN;
968b41a1 5366 else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
b9e75696 5367 vis = VISIBILITY_PROTECTED;
968b41a1 5368 else
b9e75696
JM
5369 {
5370 error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
5371 vis = VISIBILITY_DEFAULT;
5372 }
5373
5374 if (DECL_VISIBILITY_SPECIFIED (decl)
5375 && vis != DECL_VISIBILITY (decl)
5376 && lookup_attribute ("visibility", (TYPE_P (*node)
5377 ? TYPE_ATTRIBUTES (*node)
5378 : DECL_ATTRIBUTES (decl))))
5379 error ("%qD redeclared with different visibility", decl);
5380
5381 DECL_VISIBILITY (decl) = vis;
d7afec4b
ND
5382 DECL_VISIBILITY_SPECIFIED (decl) = 1;
5383
b9e75696
JM
5384 /* Go ahead and attach the attribute to the node as well. This is needed
5385 so we can determine whether we have VISIBILITY_DEFAULT because the
5386 visibility was not specified, or because it was explicitly overridden
5387 from the containing scope. */
968b41a1 5388
349ae713
NB
5389 return NULL_TREE;
5390}
5391
b2ca3702
MM
5392/* Determine the ELF symbol visibility for DECL, which is either a
5393 variable or a function. It is an error to use this function if a
5394 definition of DECL is not available in this translation unit.
5395 Returns true if the final visibility has been determined by this
5396 function; false if the caller is free to make additional
5397 modifications. */
5398
5399bool
5400c_determine_visibility (tree decl)
5401{
4094f4d2
NS
5402 gcc_assert (TREE_CODE (decl) == VAR_DECL
5403 || TREE_CODE (decl) == FUNCTION_DECL);
b2ca3702
MM
5404
5405 /* If the user explicitly specified the visibility with an
5406 attribute, honor that. DECL_VISIBILITY will have been set during
5407 the processing of the attribute. We check for an explicit
5408 attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
5409 to distinguish the use of an attribute from the use of a "#pragma
5410 GCC visibility push(...)"; in the latter case we still want other
5411 considerations to be able to overrule the #pragma. */
5412 if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl)))
5413 return true;
5414
5415 /* Anything that is exported must have default visibility. */
5416 if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
5417 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
5418 {
5419 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
5420 DECL_VISIBILITY_SPECIFIED (decl) = 1;
5421 return true;
5422 }
5423
b9e75696
JM
5424 /* Set default visibility to whatever the user supplied with
5425 visibility_specified depending on #pragma GCC visibility. */
5426 if (!DECL_VISIBILITY_SPECIFIED (decl))
5427 {
5428 DECL_VISIBILITY (decl) = default_visibility;
5429 DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
5430 }
b2ca3702
MM
5431 return false;
5432}
5433
dce81a1a
JJ
5434/* Handle an "tls_model" attribute; arguments as in
5435 struct attribute_spec.handler. */
5436
5437static tree
35b1a6fa 5438handle_tls_model_attribute (tree *node, tree name, tree args,
e18476eb 5439 int ARG_UNUSED (flags), bool *no_add_attrs)
dce81a1a 5440{
c2f7fa15 5441 tree id;
dce81a1a 5442 tree decl = *node;
c2f7fa15 5443 enum tls_model kind;
dce81a1a 5444
c2f7fa15
SB
5445 *no_add_attrs = true;
5446
5447 if (!DECL_THREAD_LOCAL_P (decl))
dce81a1a 5448 {
5c498b10 5449 warning (OPT_Wattributes, "%qE attribute ignored", name);
c2f7fa15 5450 return NULL_TREE;
dce81a1a 5451 }
dce81a1a 5452
c2f7fa15
SB
5453 kind = DECL_TLS_MODEL (decl);
5454 id = TREE_VALUE (args);
5455 if (TREE_CODE (id) != STRING_CST)
5456 {
5457 error ("tls_model argument not a string");
5458 return NULL_TREE;
dce81a1a
JJ
5459 }
5460
c2f7fa15
SB
5461 if (!strcmp (TREE_STRING_POINTER (id), "local-exec"))
5462 kind = TLS_MODEL_LOCAL_EXEC;
5463 else if (!strcmp (TREE_STRING_POINTER (id), "initial-exec"))
5464 kind = TLS_MODEL_INITIAL_EXEC;
5465 else if (!strcmp (TREE_STRING_POINTER (id), "local-dynamic"))
5466 kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
5467 else if (!strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
5468 kind = TLS_MODEL_GLOBAL_DYNAMIC;
5469 else
5470 error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
5471
5472 DECL_TLS_MODEL (decl) = kind;
dce81a1a
JJ
5473 return NULL_TREE;
5474}
5475
349ae713
NB
5476/* Handle a "no_instrument_function" attribute; arguments as in
5477 struct attribute_spec.handler. */
5478
5479static tree
35b1a6fa 5480handle_no_instrument_function_attribute (tree *node, tree name,
e18476eb
BI
5481 tree ARG_UNUSED (args),
5482 int ARG_UNUSED (flags),
a742c759 5483 bool *no_add_attrs)
349ae713
NB
5484{
5485 tree decl = *node;
5486
5487 if (TREE_CODE (decl) != FUNCTION_DECL)
5488 {
bda67431 5489 error ("%J%qE attribute applies only to functions", decl, name);
349ae713
NB
5490 *no_add_attrs = true;
5491 }
5492 else if (DECL_INITIAL (decl))
5493 {
bda67431 5494 error ("%Jcan%'t set %qE attribute after definition", decl, name);
349ae713
NB
5495 *no_add_attrs = true;
5496 }
5497 else
5498 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
5499
5500 return NULL_TREE;
5501}
5502
5503/* Handle a "malloc" attribute; arguments as in
5504 struct attribute_spec.handler. */
5505
5506static tree
e18476eb
BI
5507handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5508 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713 5509{
3425638a
JM
5510 if (TREE_CODE (*node) == FUNCTION_DECL
5511 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
349ae713 5512 DECL_IS_MALLOC (*node) = 1;
349ae713
NB
5513 else
5514 {
5c498b10 5515 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
5516 *no_add_attrs = true;
5517 }
5518
5519 return NULL_TREE;
5520}
5521
6e9a3221
AN
5522/* Handle a "returns_twice" attribute; arguments as in
5523 struct attribute_spec.handler. */
5524
5525static tree
5526handle_returns_twice_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5527 int ARG_UNUSED (flags), bool *no_add_attrs)
5528{
5529 if (TREE_CODE (*node) == FUNCTION_DECL)
5530 DECL_IS_RETURNS_TWICE (*node) = 1;
5531 else
5532 {
5c498b10 5533 warning (OPT_Wattributes, "%qE attribute ignored", name);
6e9a3221
AN
5534 *no_add_attrs = true;
5535 }
5536
5537 return NULL_TREE;
5538}
5539
349ae713
NB
5540/* Handle a "no_limit_stack" attribute; arguments as in
5541 struct attribute_spec.handler. */
5542
5543static tree
35b1a6fa 5544handle_no_limit_stack_attribute (tree *node, tree name,
e18476eb
BI
5545 tree ARG_UNUSED (args),
5546 int ARG_UNUSED (flags),
a742c759 5547 bool *no_add_attrs)
349ae713
NB
5548{
5549 tree decl = *node;
5550
5551 if (TREE_CODE (decl) != FUNCTION_DECL)
5552 {
bda67431 5553 error ("%J%qE attribute applies only to functions", decl, name);
349ae713
NB
5554 *no_add_attrs = true;
5555 }
5556 else if (DECL_INITIAL (decl))
5557 {
bda67431 5558 error ("%Jcan%'t set %qE attribute after definition", decl, name);
349ae713
NB
5559 *no_add_attrs = true;
5560 }
5561 else
5562 DECL_NO_LIMIT_STACK (decl) = 1;
5563
5564 return NULL_TREE;
5565}
5566
5567/* Handle a "pure" attribute; arguments as in
5568 struct attribute_spec.handler. */
5569
5570static tree
e18476eb
BI
5571handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5572 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713
NB
5573{
5574 if (TREE_CODE (*node) == FUNCTION_DECL)
5575 DECL_IS_PURE (*node) = 1;
5576 /* ??? TODO: Support types. */
5577 else
5578 {
5c498b10 5579 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
5580 *no_add_attrs = true;
5581 }
5582
5583 return NULL_TREE;
5584}
5585
dcd6de6d
ZD
5586/* Handle a "no vops" attribute; arguments as in
5587 struct attribute_spec.handler. */
5588
5589static tree
5590handle_novops_attribute (tree *node, tree ARG_UNUSED (name),
5591 tree ARG_UNUSED (args), int ARG_UNUSED (flags),
5592 bool *ARG_UNUSED (no_add_attrs))
5593{
5594 gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
5595 DECL_IS_NOVOPS (*node) = 1;
5596 return NULL_TREE;
5597}
5598
349ae713
NB
5599/* Handle a "deprecated" attribute; arguments as in
5600 struct attribute_spec.handler. */
35b1a6fa 5601
349ae713 5602static tree
35b1a6fa 5603handle_deprecated_attribute (tree *node, tree name,
e18476eb 5604 tree ARG_UNUSED (args), int flags,
a742c759 5605 bool *no_add_attrs)
349ae713
NB
5606{
5607 tree type = NULL_TREE;
5608 int warn = 0;
c51a1ba9 5609 tree what = NULL_TREE;
35b1a6fa 5610
349ae713
NB
5611 if (DECL_P (*node))
5612 {
5613 tree decl = *node;
5614 type = TREE_TYPE (decl);
35b1a6fa 5615
349ae713
NB
5616 if (TREE_CODE (decl) == TYPE_DECL
5617 || TREE_CODE (decl) == PARM_DECL
5618 || TREE_CODE (decl) == VAR_DECL
5619 || TREE_CODE (decl) == FUNCTION_DECL
5620 || TREE_CODE (decl) == FIELD_DECL)
5621 TREE_DEPRECATED (decl) = 1;
5622 else
5623 warn = 1;
5624 }
5625 else if (TYPE_P (*node))
5626 {
5627 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
8dd16ecc 5628 *node = build_variant_type_copy (*node);
349ae713
NB
5629 TREE_DEPRECATED (*node) = 1;
5630 type = *node;
5631 }
5632 else
5633 warn = 1;
35b1a6fa 5634
349ae713
NB
5635 if (warn)
5636 {
5637 *no_add_attrs = true;
5638 if (type && TYPE_NAME (type))
5639 {
5640 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
c51a1ba9 5641 what = TYPE_NAME (*node);
349ae713
NB
5642 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
5643 && DECL_NAME (TYPE_NAME (type)))
c51a1ba9 5644 what = DECL_NAME (TYPE_NAME (type));
349ae713
NB
5645 }
5646 if (what)
5c498b10 5647 warning (OPT_Wattributes, "%qE attribute ignored for %qE", name, what);
349ae713 5648 else
5c498b10 5649 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
5650 }
5651
5652 return NULL_TREE;
5653}
5654
349ae713
NB
5655/* Handle a "vector_size" attribute; arguments as in
5656 struct attribute_spec.handler. */
5657
5658static tree
35b1a6fa 5659handle_vector_size_attribute (tree *node, tree name, tree args,
e18476eb 5660 int ARG_UNUSED (flags),
a742c759 5661 bool *no_add_attrs)
349ae713
NB
5662{
5663 unsigned HOST_WIDE_INT vecsize, nunits;
26277d41 5664 enum machine_mode orig_mode;
4a5eab38 5665 tree type = *node, new_type, size;
349ae713
NB
5666
5667 *no_add_attrs = true;
5668
4a5eab38 5669 size = TREE_VALUE (args);
4a5eab38 5670
3f75a254 5671 if (!host_integerp (size, 1))
349ae713 5672 {
5c498b10 5673 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
5674 return NULL_TREE;
5675 }
5676
5677 /* Get the vector size (in bytes). */
4a5eab38 5678 vecsize = tree_low_cst (size, 1);
349ae713
NB
5679
5680 /* We need to provide for vector pointers, vector arrays, and
5681 functions returning vectors. For example:
5682
5683 __attribute__((vector_size(16))) short *foo;
5684
5685 In this case, the mode is SI, but the type being modified is
5686 HI, so we need to look further. */
5687
5688 while (POINTER_TYPE_P (type)
5689 || TREE_CODE (type) == FUNCTION_TYPE
43dc123f 5690 || TREE_CODE (type) == METHOD_TYPE
349ae713
NB
5691 || TREE_CODE (type) == ARRAY_TYPE)
5692 type = TREE_TYPE (type);
5693
5694 /* Get the mode of the type being modified. */
5695 orig_mode = TYPE_MODE (type);
5696
5697 if (TREE_CODE (type) == RECORD_TYPE
23856459
JJ
5698 || TREE_CODE (type) == UNION_TYPE
5699 || TREE_CODE (type) == VECTOR_TYPE
3d8bf70f 5700 || (!SCALAR_FLOAT_MODE_P (orig_mode)
349ae713 5701 && GET_MODE_CLASS (orig_mode) != MODE_INT)
3f75a254 5702 || !host_integerp (TYPE_SIZE_UNIT (type), 1))
349ae713 5703 {
c51a1ba9 5704 error ("invalid vector type for attribute %qE", name);
349ae713
NB
5705 return NULL_TREE;
5706 }
5707
ee8960e5
JJ
5708 if (vecsize % tree_low_cst (TYPE_SIZE_UNIT (type), 1))
5709 {
5710 error ("vector size not an integral multiple of component size");
5711 return NULL;
5712 }
5713
5714 if (vecsize == 0)
5715 {
5716 error ("zero vector size");
5717 return NULL;
5718 }
5719
349ae713
NB
5720 /* Calculate how many units fit in the vector. */
5721 nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
26277d41 5722 if (nunits & (nunits - 1))
349ae713 5723 {
26277d41 5724 error ("number of components of the vector not a power of two");
349ae713
NB
5725 return NULL_TREE;
5726 }
5727
26277d41 5728 new_type = build_vector_type (type, nunits);
349ae713
NB
5729
5730 /* Build back pointers if needed. */
b34417a4 5731 *node = reconstruct_complex_type (*node, new_type);
349ae713
NB
5732
5733 return NULL_TREE;
5734}
5735
b34c7881
JT
5736/* Handle the "nonnull" attribute. */
5737static tree
e18476eb
BI
5738handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
5739 tree args, int ARG_UNUSED (flags),
a742c759 5740 bool *no_add_attrs)
b34c7881
JT
5741{
5742 tree type = *node;
5743 unsigned HOST_WIDE_INT attr_arg_num;
5744
5745 /* If no arguments are specified, all pointer arguments should be
95bd1dd7 5746 non-null. Verify a full prototype is given so that the arguments
b34c7881 5747 will have the correct types when we actually check them later. */
3f75a254 5748 if (!args)
b34c7881 5749 {
3f75a254 5750 if (!TYPE_ARG_TYPES (type))
b34c7881
JT
5751 {
5752 error ("nonnull attribute without arguments on a non-prototype");
6de9cd9a 5753 *no_add_attrs = true;
b34c7881
JT
5754 }
5755 return NULL_TREE;
5756 }
5757
5758 /* Argument list specified. Verify that each argument number references
5759 a pointer argument. */
5760 for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
5761 {
5762 tree argument;
6de9cd9a 5763 unsigned HOST_WIDE_INT arg_num = 0, ck_num;
b34c7881 5764
3f75a254 5765 if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
b34c7881 5766 {
40b97a2e 5767 error ("nonnull argument has invalid operand number (argument %lu)",
b34c7881
JT
5768 (unsigned long) attr_arg_num);
5769 *no_add_attrs = true;
5770 return NULL_TREE;
5771 }
5772
5773 argument = TYPE_ARG_TYPES (type);
5774 if (argument)
5775 {
5776 for (ck_num = 1; ; ck_num++)
5777 {
3f75a254 5778 if (!argument || ck_num == arg_num)
b34c7881
JT
5779 break;
5780 argument = TREE_CHAIN (argument);
5781 }
5782
3f75a254 5783 if (!argument
b34c7881
JT
5784 || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
5785 {
40b97a2e 5786 error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
b34c7881
JT
5787 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5788 *no_add_attrs = true;
5789 return NULL_TREE;
5790 }
5791
6de9cd9a 5792 if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
b34c7881 5793 {
40b97a2e 5794 error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
b34c7881
JT
5795 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5796 *no_add_attrs = true;
5797 return NULL_TREE;
5798 }
5799 }
5800 }
5801
5802 return NULL_TREE;
5803}
5804
5805/* Check the argument list of a function call for null in argument slots
94a0dd7b
SL
5806 that are marked as requiring a non-null pointer argument. The NARGS
5807 arguments are passed in the array ARGARRAY.
5808*/
b34c7881
JT
5809
5810static void
94a0dd7b 5811check_function_nonnull (tree attrs, int nargs, tree *argarray)
b34c7881 5812{
94a0dd7b
SL
5813 tree a, args;
5814 int i;
b34c7881
JT
5815
5816 for (a = attrs; a; a = TREE_CHAIN (a))
5817 {
5818 if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
5819 {
6de9cd9a 5820 args = TREE_VALUE (a);
b34c7881 5821
6de9cd9a
DN
5822 /* Walk the argument list. If we encounter an argument number we
5823 should check for non-null, do it. If the attribute has no args,
5824 then every pointer argument is checked (in which case the check
b34c7881 5825 for pointer type is done in check_nonnull_arg). */
94a0dd7b 5826 for (i = 0; i < nargs; i++)
6de9cd9a 5827 {
94a0dd7b 5828 if (!args || nonnull_check_p (args, i + 1))
dfd0a3de 5829 check_function_arguments_recurse (check_nonnull_arg, NULL,
94a0dd7b
SL
5830 argarray[i],
5831 i + 1);
6de9cd9a 5832 }
b34c7881
JT
5833 }
5834 }
5835}
5836
254986c7 5837/* Check that the Nth argument of a function call (counting backwards
94a0dd7b
SL
5838 from the end) is a (pointer)0. The NARGS arguments are passed in the
5839 array ARGARRAY. */
3d091dac
KG
5840
5841static void
94a0dd7b 5842check_function_sentinel (tree attrs, int nargs, tree *argarray, tree typelist)
3d091dac
KG
5843{
5844 tree attr = lookup_attribute ("sentinel", attrs);
5845
5846 if (attr)
5847 {
94a0dd7b
SL
5848 int len = 0;
5849 int pos = 0;
5850 tree sentinel;
c22cacf3 5851
94a0dd7b
SL
5852 /* Skip over the named arguments. */
5853 while (typelist && len < nargs)
c22cacf3 5854 {
94a0dd7b
SL
5855 typelist = TREE_CHAIN (typelist);
5856 len++;
5857 }
254986c7 5858
94a0dd7b
SL
5859 if (TREE_VALUE (attr))
5860 {
5861 tree p = TREE_VALUE (TREE_VALUE (attr));
5862 pos = TREE_INT_CST_LOW (p);
5863 }
254986c7 5864
94a0dd7b
SL
5865 /* The sentinel must be one of the varargs, i.e.
5866 in position >= the number of fixed arguments. */
5867 if ((nargs - 1 - pos) < len)
5868 {
5869 warning (OPT_Wformat,
5870 "not enough variable arguments to fit a sentinel");
5871 return;
3d091dac 5872 }
94a0dd7b
SL
5873
5874 /* Validate the sentinel. */
5875 sentinel = argarray[nargs - 1 - pos];
5876 if ((!POINTER_TYPE_P (TREE_TYPE (sentinel))
5877 || !integer_zerop (sentinel))
5878 /* Although __null (in C++) is only an integer we allow it
5879 nevertheless, as we are guaranteed that it's exactly
5880 as wide as a pointer, and we don't want to force
5881 users to cast the NULL they have written there.
5882 We warn with -Wstrict-null-sentinel, though. */
5883 && (warn_strict_null_sentinel || null_node != sentinel))
5884 warning (OPT_Wformat, "missing sentinel in function call");
3d091dac
KG
5885 }
5886}
5887
b34c7881
JT
5888/* Helper for check_function_nonnull; given a list of operands which
5889 must be non-null in ARGS, determine if operand PARAM_NUM should be
5890 checked. */
5891
5892static bool
35b1a6fa 5893nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
b34c7881 5894{
6de9cd9a 5895 unsigned HOST_WIDE_INT arg_num = 0;
b34c7881
JT
5896
5897 for (; args; args = TREE_CHAIN (args))
5898 {
366de0ce
NS
5899 bool found = get_nonnull_operand (TREE_VALUE (args), &arg_num);
5900
5901 gcc_assert (found);
b34c7881
JT
5902
5903 if (arg_num == param_num)
5904 return true;
5905 }
5906 return false;
5907}
5908
5909/* Check that the function argument PARAM (which is operand number
5910 PARAM_NUM) is non-null. This is called by check_function_nonnull
5911 via check_function_arguments_recurse. */
5912
5913static void
e18476eb 5914check_nonnull_arg (void * ARG_UNUSED (ctx), tree param,
35b1a6fa 5915 unsigned HOST_WIDE_INT param_num)
b34c7881
JT
5916{
5917 /* Just skip checking the argument if it's not a pointer. This can
5918 happen if the "nonnull" attribute was given without an operand
5919 list (which means to check every pointer argument). */
5920
5921 if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
5922 return;
5923
5924 if (integer_zerop (param))
30480ec4
DD
5925 warning (OPT_Wnonnull, "null argument where non-null required "
5926 "(argument %lu)", (unsigned long) param_num);
b34c7881
JT
5927}
5928
5929/* Helper for nonnull attribute handling; fetch the operand number
5930 from the attribute argument list. */
5931
5932static bool
35b1a6fa 5933get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
b34c7881 5934{
f6d1c3a6 5935 /* Verify the arg number is a constant. */
b34c7881
JT
5936 if (TREE_CODE (arg_num_expr) != INTEGER_CST
5937 || TREE_INT_CST_HIGH (arg_num_expr) != 0)
5938 return false;
5939
5940 *valp = TREE_INT_CST_LOW (arg_num_expr);
5941 return true;
5942}
39f2f3c8
RS
5943
5944/* Handle a "nothrow" attribute; arguments as in
5945 struct attribute_spec.handler. */
5946
5947static tree
e18476eb
BI
5948handle_nothrow_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5949 int ARG_UNUSED (flags), bool *no_add_attrs)
39f2f3c8
RS
5950{
5951 if (TREE_CODE (*node) == FUNCTION_DECL)
5952 TREE_NOTHROW (*node) = 1;
5953 /* ??? TODO: Support types. */
5954 else
5955 {
5c498b10 5956 warning (OPT_Wattributes, "%qE attribute ignored", name);
39f2f3c8
RS
5957 *no_add_attrs = true;
5958 }
5959
5960 return NULL_TREE;
5961}
0bfa5f65
RH
5962
5963/* Handle a "cleanup" attribute; arguments as in
5964 struct attribute_spec.handler. */
5965
5966static tree
35b1a6fa 5967handle_cleanup_attribute (tree *node, tree name, tree args,
e18476eb 5968 int ARG_UNUSED (flags), bool *no_add_attrs)
0bfa5f65
RH
5969{
5970 tree decl = *node;
5971 tree cleanup_id, cleanup_decl;
5972
5973 /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
5974 for global destructors in C++. This requires infrastructure that
5975 we don't have generically at the moment. It's also not a feature
5976 we'd be missing too much, since we do have attribute constructor. */
5977 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
5978 {
5c498b10 5979 warning (OPT_Wattributes, "%qE attribute ignored", name);
0bfa5f65
RH
5980 *no_add_attrs = true;
5981 return NULL_TREE;
5982 }
5983
5984 /* Verify that the argument is a function in scope. */
5985 /* ??? We could support pointers to functions here as well, if
5986 that was considered desirable. */
5987 cleanup_id = TREE_VALUE (args);
5988 if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
5989 {
40b97a2e 5990 error ("cleanup argument not an identifier");
0bfa5f65
RH
5991 *no_add_attrs = true;
5992 return NULL_TREE;
5993 }
10e6657a 5994 cleanup_decl = lookup_name (cleanup_id);
0bfa5f65
RH
5995 if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
5996 {
40b97a2e 5997 error ("cleanup argument not a function");
0bfa5f65
RH
5998 *no_add_attrs = true;
5999 return NULL_TREE;
6000 }
6001
35b1a6fa 6002 /* That the function has proper type is checked with the
0bfa5f65
RH
6003 eventual call to build_function_call. */
6004
6005 return NULL_TREE;
6006}
72954a4f
JM
6007
6008/* Handle a "warn_unused_result" attribute. No special handling. */
6009
6010static tree
6011handle_warn_unused_result_attribute (tree *node, tree name,
e18476eb
BI
6012 tree ARG_UNUSED (args),
6013 int ARG_UNUSED (flags), bool *no_add_attrs)
72954a4f
JM
6014{
6015 /* Ignore the attribute for functions not returning any value. */
6016 if (VOID_TYPE_P (TREE_TYPE (*node)))
6017 {
5c498b10 6018 warning (OPT_Wattributes, "%qE attribute ignored", name);
72954a4f
JM
6019 *no_add_attrs = true;
6020 }
6021
6022 return NULL_TREE;
6023}
3d091dac
KG
6024
6025/* Handle a "sentinel" attribute. */
6026
6027static tree
254986c7 6028handle_sentinel_attribute (tree *node, tree name, tree args,
3d091dac
KG
6029 int ARG_UNUSED (flags), bool *no_add_attrs)
6030{
6031 tree params = TYPE_ARG_TYPES (*node);
6032
6033 if (!params)
6034 {
5c498b10
DD
6035 warning (OPT_Wattributes,
6036 "%qE attribute requires prototypes with named arguments", name);
3d091dac 6037 *no_add_attrs = true;
3d091dac 6038 }
254986c7
KG
6039 else
6040 {
6041 while (TREE_CHAIN (params))
6042 params = TREE_CHAIN (params);
3d091dac 6043
254986c7 6044 if (VOID_TYPE_P (TREE_VALUE (params)))
c22cacf3 6045 {
5c498b10
DD
6046 warning (OPT_Wattributes,
6047 "%qE attribute only applies to variadic functions", name);
254986c7
KG
6048 *no_add_attrs = true;
6049 }
6050 }
c22cacf3 6051
254986c7 6052 if (args)
3d091dac 6053 {
254986c7
KG
6054 tree position = TREE_VALUE (args);
6055
254986c7 6056 if (TREE_CODE (position) != INTEGER_CST)
c22cacf3 6057 {
d4ee4d25 6058 warning (0, "requested position is not an integer constant");
254986c7
KG
6059 *no_add_attrs = true;
6060 }
6061 else
c22cacf3 6062 {
254986c7
KG
6063 if (tree_int_cst_lt (position, integer_zero_node))
6064 {
d4ee4d25 6065 warning (0, "requested position is less than zero");
254986c7
KG
6066 *no_add_attrs = true;
6067 }
6068 }
3d091dac 6069 }
c22cacf3 6070
3d091dac
KG
6071 return NULL_TREE;
6072}
b34c7881 6073\f
94a0dd7b
SL
6074/* Check for valid arguments being passed to a function.
6075 ATTRS is a list of attributes. There are NARGS arguments in the array
6076 ARGARRAY. TYPELIST is the list of argument types for the function.
6077 */
b34c7881 6078void
94a0dd7b 6079check_function_arguments (tree attrs, int nargs, tree *argarray, tree typelist)
b34c7881
JT
6080{
6081 /* Check for null being passed in a pointer argument that must be
6082 non-null. We also need to do this if format checking is enabled. */
6083
6084 if (warn_nonnull)
94a0dd7b 6085 check_function_nonnull (attrs, nargs, argarray);
b34c7881
JT
6086
6087 /* Check for errors in format strings. */
6088
7876a414 6089 if (warn_format || warn_missing_format_attribute)
94a0dd7b 6090 check_function_format (attrs, nargs, argarray);
7876a414
KG
6091
6092 if (warn_format)
94a0dd7b 6093 check_function_sentinel (attrs, nargs, argarray, typelist);
b34c7881
JT
6094}
6095
6096/* Generic argument checking recursion routine. PARAM is the argument to
6097 be checked. PARAM_NUM is the number of the argument. CALLBACK is invoked
6098 once the argument is resolved. CTX is context for the callback. */
6099void
35b1a6fa
AJ
6100check_function_arguments_recurse (void (*callback)
6101 (void *, tree, unsigned HOST_WIDE_INT),
6102 void *ctx, tree param,
6103 unsigned HOST_WIDE_INT param_num)
b34c7881 6104{
1344f9a3
JM
6105 if ((TREE_CODE (param) == NOP_EXPR || TREE_CODE (param) == CONVERT_EXPR)
6106 && (TYPE_PRECISION (TREE_TYPE (param))
6107 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (param, 0)))))
b34c7881
JT
6108 {
6109 /* Strip coercion. */
6110 check_function_arguments_recurse (callback, ctx,
6de9cd9a 6111 TREE_OPERAND (param, 0), param_num);
b34c7881
JT
6112 return;
6113 }
6114
6115 if (TREE_CODE (param) == CALL_EXPR)
6116 {
5039610b 6117 tree type = TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (param)));
b34c7881
JT
6118 tree attrs;
6119 bool found_format_arg = false;
6120
6121 /* See if this is a call to a known internationalization function
6122 that modifies a format arg. Such a function may have multiple
6123 format_arg attributes (for example, ngettext). */
6124
6125 for (attrs = TYPE_ATTRIBUTES (type);
6126 attrs;
6127 attrs = TREE_CHAIN (attrs))
6128 if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
6129 {
5039610b 6130 tree inner_arg;
b34c7881
JT
6131 tree format_num_expr;
6132 int format_num;
6133 int i;
5039610b 6134 call_expr_arg_iterator iter;
b34c7881
JT
6135
6136 /* Extract the argument number, which was previously checked
6137 to be valid. */
6138 format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
b34c7881 6139
366de0ce
NS
6140 gcc_assert (TREE_CODE (format_num_expr) == INTEGER_CST
6141 && !TREE_INT_CST_HIGH (format_num_expr));
b34c7881
JT
6142
6143 format_num = TREE_INT_CST_LOW (format_num_expr);
6144
5039610b
SL
6145 for (inner_arg = first_call_expr_arg (param, &iter), i = 1;
6146 inner_arg != 0;
6147 inner_arg = next_call_expr_arg (&iter), i++)
b34c7881
JT
6148 if (i == format_num)
6149 {
6150 check_function_arguments_recurse (callback, ctx,
5039610b 6151 inner_arg, param_num);
b34c7881
JT
6152 found_format_arg = true;
6153 break;
6154 }
6155 }
6156
6157 /* If we found a format_arg attribute and did a recursive check,
6158 we are done with checking this argument. Otherwise, we continue
6159 and this will be considered a non-literal. */
6160 if (found_format_arg)
6161 return;
6162 }
6163
6164 if (TREE_CODE (param) == COND_EXPR)
6165 {
6166 /* Check both halves of the conditional expression. */
6167 check_function_arguments_recurse (callback, ctx,
6de9cd9a 6168 TREE_OPERAND (param, 1), param_num);
b34c7881 6169 check_function_arguments_recurse (callback, ctx,
6de9cd9a 6170 TREE_OPERAND (param, 2), param_num);
b34c7881
JT
6171 return;
6172 }
6173
6174 (*callback) (ctx, param, param_num);
6175}
e2500fed 6176
d07605f5
AP
6177/* Function to help qsort sort FIELD_DECLs by name order. */
6178
6179int
6180field_decl_cmp (const void *x_p, const void *y_p)
6181{
28dab132
BI
6182 const tree *const x = (const tree *const) x_p;
6183 const tree *const y = (const tree *const) y_p;
6184
d07605f5
AP
6185 if (DECL_NAME (*x) == DECL_NAME (*y))
6186 /* A nontype is "greater" than a type. */
6187 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
6188 if (DECL_NAME (*x) == NULL_TREE)
6189 return -1;
6190 if (DECL_NAME (*y) == NULL_TREE)
6191 return 1;
6192 if (DECL_NAME (*x) < DECL_NAME (*y))
6193 return -1;
6194 return 1;
6195}
6196
6197static struct {
6198 gt_pointer_operator new_value;
6199 void *cookie;
6200} resort_data;
6201
6202/* This routine compares two fields like field_decl_cmp but using the
6203pointer operator in resort_data. */
6204
6205static int
6206resort_field_decl_cmp (const void *x_p, const void *y_p)
6207{
28dab132
BI
6208 const tree *const x = (const tree *const) x_p;
6209 const tree *const y = (const tree *const) y_p;
d07605f5
AP
6210
6211 if (DECL_NAME (*x) == DECL_NAME (*y))
6212 /* A nontype is "greater" than a type. */
6213 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
6214 if (DECL_NAME (*x) == NULL_TREE)
6215 return -1;
6216 if (DECL_NAME (*y) == NULL_TREE)
6217 return 1;
6218 {
6219 tree d1 = DECL_NAME (*x);
6220 tree d2 = DECL_NAME (*y);
6221 resort_data.new_value (&d1, resort_data.cookie);
6222 resort_data.new_value (&d2, resort_data.cookie);
6223 if (d1 < d2)
6224 return -1;
6225 }
6226 return 1;
6227}
6228
6229/* Resort DECL_SORTED_FIELDS because pointers have been reordered. */
6230
6231void
6232resort_sorted_fields (void *obj,
e18476eb 6233 void * ARG_UNUSED (orig_obj),
6de9cd9a
DN
6234 gt_pointer_operator new_value,
6235 void *cookie)
d07605f5 6236{
e18476eb 6237 struct sorted_fields_type *sf = (struct sorted_fields_type *) obj;
d07605f5
AP
6238 resort_data.new_value = new_value;
6239 resort_data.cookie = cookie;
6240 qsort (&sf->elts[0], sf->len, sizeof (tree),
6de9cd9a 6241 resort_field_decl_cmp);
d07605f5
AP
6242}
6243
0a3ee0fd
GDR
6244/* Subroutine of c_parse_error.
6245 Return the result of concatenating LHS and RHS. RHS is really
6246 a string literal, its first character is indicated by RHS_START and
3292fb42 6247 RHS_SIZE is its length (including the terminating NUL character).
0a3ee0fd
GDR
6248
6249 The caller is responsible for deleting the returned pointer. */
6250
6251static char *
6252catenate_strings (const char *lhs, const char *rhs_start, int rhs_size)
6253{
6254 const int lhs_size = strlen (lhs);
6255 char *result = XNEWVEC (char, lhs_size + rhs_size);
6256 strncpy (result, lhs, lhs_size);
6257 strncpy (result + lhs_size, rhs_start, rhs_size);
6258 return result;
6259}
6260
4b794eaf 6261/* Issue the error given by GMSGID, indicating that it occurred before
4bb8ca28
MM
6262 TOKEN, which had the associated VALUE. */
6263
6264void
4b794eaf 6265c_parse_error (const char *gmsgid, enum cpp_ttype token, tree value)
4bb8ca28 6266{
0a3ee0fd
GDR
6267#define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
6268
6269 char *message = NULL;
4bb8ca28
MM
6270
6271 if (token == CPP_EOF)
4b794eaf 6272 message = catenate_messages (gmsgid, " at end of input");
4bb8ca28
MM
6273 else if (token == CPP_CHAR || token == CPP_WCHAR)
6274 {
6275 unsigned int val = TREE_INT_CST_LOW (value);
6276 const char *const ell = (token == CPP_CHAR) ? "" : "L";
6277 if (val <= UCHAR_MAX && ISGRAPH (val))
c22cacf3 6278 message = catenate_messages (gmsgid, " before %s'%c'");
4bb8ca28 6279 else
c22cacf3 6280 message = catenate_messages (gmsgid, " before %s'\\x%x'");
0a3ee0fd
GDR
6281
6282 error (message, ell, val);
6283 free (message);
6284 message = NULL;
4bb8ca28 6285 }
0a3ee0fd 6286 else if (token == CPP_STRING || token == CPP_WSTRING)
4b794eaf 6287 message = catenate_messages (gmsgid, " before string constant");
4bb8ca28 6288 else if (token == CPP_NUMBER)
4b794eaf 6289 message = catenate_messages (gmsgid, " before numeric constant");
4bb8ca28 6290 else if (token == CPP_NAME)
0a3ee0fd 6291 {
4b794eaf 6292 message = catenate_messages (gmsgid, " before %qE");
c51a1ba9 6293 error (message, value);
0a3ee0fd
GDR
6294 free (message);
6295 message = NULL;
6296 }
bc4071dd
RH
6297 else if (token == CPP_PRAGMA)
6298 message = catenate_messages (gmsgid, " before %<#pragma%>");
6299 else if (token == CPP_PRAGMA_EOL)
6300 message = catenate_messages (gmsgid, " before end of line");
4bb8ca28 6301 else if (token < N_TTYPES)
0a3ee0fd 6302 {
4b794eaf 6303 message = catenate_messages (gmsgid, " before %qs token");
0a3ee0fd
GDR
6304 error (message, cpp_type2name (token));
6305 free (message);
6306 message = NULL;
6307 }
4bb8ca28 6308 else
4b794eaf 6309 error (gmsgid);
0a3ee0fd
GDR
6310
6311 if (message)
6312 {
6313 error (message);
6314 free (message);
6315 }
c22cacf3 6316#undef catenate_messages
4bb8ca28
MM
6317}
6318
6de9cd9a
DN
6319/* Walk a gimplified function and warn for functions whose return value is
6320 ignored and attribute((warn_unused_result)) is set. This is done before
9f63daea
EC
6321 inlining, so we don't have to worry about that. */
6322
6de9cd9a
DN
6323void
6324c_warn_unused_result (tree *top_p)
6325{
6326 tree t = *top_p;
6327 tree_stmt_iterator i;
6328 tree fdecl, ftype;
6329
6330 switch (TREE_CODE (t))
6331 {
6332 case STATEMENT_LIST:
6333 for (i = tsi_start (*top_p); !tsi_end_p (i); tsi_next (&i))
6334 c_warn_unused_result (tsi_stmt_ptr (i));
6335 break;
6336
6337 case COND_EXPR:
6338 c_warn_unused_result (&COND_EXPR_THEN (t));
6339 c_warn_unused_result (&COND_EXPR_ELSE (t));
6340 break;
6341 case BIND_EXPR:
6342 c_warn_unused_result (&BIND_EXPR_BODY (t));
6343 break;
6344 case TRY_FINALLY_EXPR:
6345 case TRY_CATCH_EXPR:
6346 c_warn_unused_result (&TREE_OPERAND (t, 0));
6347 c_warn_unused_result (&TREE_OPERAND (t, 1));
6348 break;
6349 case CATCH_EXPR:
6350 c_warn_unused_result (&CATCH_BODY (t));
6351 break;
6352 case EH_FILTER_EXPR:
6353 c_warn_unused_result (&EH_FILTER_FAILURE (t));
6354 break;
6355
6356 case CALL_EXPR:
5201931e
JM
6357 if (TREE_USED (t))
6358 break;
6359
6de9cd9a
DN
6360 /* This is a naked call, as opposed to a CALL_EXPR nested inside
6361 a MODIFY_EXPR. All calls whose value is ignored should be
6362 represented like this. Look for the attribute. */
6363 fdecl = get_callee_fndecl (t);
6364 if (fdecl)
6365 ftype = TREE_TYPE (fdecl);
6366 else
6367 {
5039610b 6368 ftype = TREE_TYPE (CALL_EXPR_FN (t));
6de9cd9a
DN
6369 /* Look past pointer-to-function to the function type itself. */
6370 ftype = TREE_TYPE (ftype);
6371 }
6372
6373 if (lookup_attribute ("warn_unused_result", TYPE_ATTRIBUTES (ftype)))
6374 {
6375 if (fdecl)
d4ee4d25 6376 warning (0, "%Hignoring return value of %qD, "
6de9cd9a
DN
6377 "declared with attribute warn_unused_result",
6378 EXPR_LOCUS (t), fdecl);
6379 else
d4ee4d25 6380 warning (0, "%Hignoring return value of function "
6de9cd9a
DN
6381 "declared with attribute warn_unused_result",
6382 EXPR_LOCUS (t));
6383 }
6384 break;
6385
6386 default:
6387 /* Not a container, not a call, or a call whose value is used. */
6388 break;
6389 }
6390}
6391
c5ff069d
ZW
6392/* Convert a character from the host to the target execution character
6393 set. cpplib handles this, mostly. */
6394
6395HOST_WIDE_INT
6396c_common_to_target_charset (HOST_WIDE_INT c)
6397{
6398 /* Character constants in GCC proper are sign-extended under -fsigned-char,
6399 zero-extended under -fno-signed-char. cpplib insists that characters
6400 and character constants are always unsigned. Hence we must convert
6401 back and forth. */
6402 cppchar_t uc = ((cppchar_t)c) & ((((cppchar_t)1) << CHAR_BIT)-1);
6403
6404 uc = cpp_host_to_exec_charset (parse_in, uc);
6405
6406 if (flag_signed_char)
6407 return ((HOST_WIDE_INT)uc) << (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE)
6408 >> (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE);
6409 else
6410 return uc;
6411}
6412
ee8a6a3e 6413/* Build the result of __builtin_offsetof. EXPR is a nested sequence of
6d4d7b0e
PB
6414 component references, with STOP_REF, or alternatively an INDIRECT_REF of
6415 NULL, at the bottom; much like the traditional rendering of offsetof as a
6416 macro. Returns the folded and properly cast result. */
ee8a6a3e
RH
6417
6418static tree
6d4d7b0e 6419fold_offsetof_1 (tree expr, tree stop_ref)
ee8a6a3e
RH
6420{
6421 enum tree_code code = PLUS_EXPR;
6422 tree base, off, t;
6423
6d4d7b0e
PB
6424 if (expr == stop_ref && TREE_CODE (expr) != ERROR_MARK)
6425 return size_zero_node;
6426
ee8a6a3e
RH
6427 switch (TREE_CODE (expr))
6428 {
6429 case ERROR_MARK:
6430 return expr;
6431
545b7d8c
VR
6432 case VAR_DECL:
6433 error ("cannot apply %<offsetof%> to static data member %qD", expr);
6434 return error_mark_node;
6435
6d4d7b0e
PB
6436 case CALL_EXPR:
6437 error ("cannot apply %<offsetof%> when %<operator[]%> is overloaded");
6438 return error_mark_node;
6439
6440 case INTEGER_CST:
6441 gcc_assert (integer_zerop (expr));
ee8a6a3e
RH
6442 return size_zero_node;
6443
6d4d7b0e
PB
6444 case NOP_EXPR:
6445 case INDIRECT_REF:
6446 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6447 gcc_assert (base == error_mark_node || base == size_zero_node);
6448 return base;
6449
ee8a6a3e 6450 case COMPONENT_REF:
6d4d7b0e 6451 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
ee8a6a3e
RH
6452 if (base == error_mark_node)
6453 return base;
6454
6455 t = TREE_OPERAND (expr, 1);
6456 if (DECL_C_BIT_FIELD (t))
6457 {
6458 error ("attempt to take address of bit-field structure "
c51a1ba9 6459 "member %qD", t);
ee8a6a3e
RH
6460 return error_mark_node;
6461 }
6462 off = size_binop (PLUS_EXPR, DECL_FIELD_OFFSET (t),
6463 size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t), 1)
6464 / BITS_PER_UNIT));
6465 break;
6466
6467 case ARRAY_REF:
6d4d7b0e 6468 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
ee8a6a3e
RH
6469 if (base == error_mark_node)
6470 return base;
6471
6472 t = TREE_OPERAND (expr, 1);
6473 if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
6474 {
6475 code = MINUS_EXPR;
987b67bc 6476 t = fold_build1 (NEGATE_EXPR, TREE_TYPE (t), t);
ee8a6a3e
RH
6477 }
6478 t = convert (sizetype, t);
6479 off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
6480 break;
6481
1916c916
VR
6482 case COMPOUND_EXPR:
6483 /* Handle static members of volatile structs. */
6484 t = TREE_OPERAND (expr, 1);
6485 gcc_assert (TREE_CODE (t) == VAR_DECL);
6486 return fold_offsetof_1 (t, stop_ref);
6487
ee8a6a3e 6488 default:
366de0ce 6489 gcc_unreachable ();
ee8a6a3e
RH
6490 }
6491
6492 return size_binop (code, base, off);
6493}
6494
6495tree
6d4d7b0e 6496fold_offsetof (tree expr, tree stop_ref)
ee8a6a3e
RH
6497{
6498 /* Convert back from the internal sizetype to size_t. */
6d4d7b0e 6499 return convert (size_type_node, fold_offsetof_1 (expr, stop_ref));
ee8a6a3e
RH
6500}
6501
37dc0d8d 6502/* Print an error message for an invalid lvalue. USE says
5ae9ba3e
MM
6503 how the lvalue is being used and so selects the error message. */
6504
37dc0d8d
JM
6505void
6506lvalue_error (enum lvalue_use use)
5ae9ba3e 6507{
37dc0d8d 6508 switch (use)
5ae9ba3e 6509 {
37dc0d8d 6510 case lv_assign:
5d352b2d 6511 error ("lvalue required as left operand of assignment");
37dc0d8d
JM
6512 break;
6513 case lv_increment:
5d352b2d 6514 error ("lvalue required as increment operand");
37dc0d8d
JM
6515 break;
6516 case lv_decrement:
5d352b2d 6517 error ("lvalue required as decrement operand");
37dc0d8d
JM
6518 break;
6519 case lv_addressof:
5d352b2d 6520 error ("lvalue required as unary %<&%> operand");
37dc0d8d
JM
6521 break;
6522 case lv_asm:
5d352b2d 6523 error ("lvalue required in asm statement");
37dc0d8d
JM
6524 break;
6525 default:
6526 gcc_unreachable ();
5ae9ba3e 6527 }
5ae9ba3e 6528}
aab038d5
RH
6529\f
6530/* *PTYPE is an incomplete array. Complete it with a domain based on
6531 INITIAL_VALUE. If INITIAL_VALUE is not present, use 1 if DO_DEFAULT
6532 is true. Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6533 2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty. */
6534
6535int
6536complete_array_type (tree *ptype, tree initial_value, bool do_default)
6537{
6538 tree maxindex, type, main_type, elt, unqual_elt;
6539 int failure = 0, quals;
06d40de8 6540 hashval_t hashcode = 0;
aab038d5
RH
6541
6542 maxindex = size_zero_node;
6543 if (initial_value)
6544 {
6545 if (TREE_CODE (initial_value) == STRING_CST)
6546 {
6547 int eltsize
6548 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
6549 maxindex = size_int (TREE_STRING_LENGTH (initial_value)/eltsize - 1);
6550 }
6551 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
6552 {
4038c495 6553 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
aab038d5 6554
4038c495 6555 if (VEC_empty (constructor_elt, v))
aab038d5
RH
6556 {
6557 if (pedantic)
6558 failure = 3;
6559 maxindex = integer_minus_one_node;
6560 }
6561 else
6562 {
6563 tree curindex;
4038c495
GB
6564 unsigned HOST_WIDE_INT cnt;
6565 constructor_elt *ce;
aab038d5 6566
4038c495
GB
6567 if (VEC_index (constructor_elt, v, 0)->index)
6568 maxindex = fold_convert (sizetype,
6569 VEC_index (constructor_elt,
6570 v, 0)->index);
aab038d5
RH
6571 curindex = maxindex;
6572
4038c495
GB
6573 for (cnt = 1;
6574 VEC_iterate (constructor_elt, v, cnt, ce);
6575 cnt++)
aab038d5 6576 {
4038c495
GB
6577 if (ce->index)
6578 curindex = fold_convert (sizetype, ce->index);
aab038d5
RH
6579 else
6580 curindex = size_binop (PLUS_EXPR, curindex, size_one_node);
6581
6582 if (tree_int_cst_lt (maxindex, curindex))
6583 maxindex = curindex;
6584 }
6585 }
6586 }
6587 else
6588 {
6589 /* Make an error message unless that happened already. */
6590 if (initial_value != error_mark_node)
6591 failure = 1;
6592 }
6593 }
6594 else
6595 {
6596 failure = 2;
6597 if (!do_default)
6598 return failure;
6599 }
6600
6601 type = *ptype;
6602 elt = TREE_TYPE (type);
6603 quals = TYPE_QUALS (strip_array_types (elt));
6604 if (quals == 0)
6605 unqual_elt = elt;
6606 else
6607 unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
6608
6609 /* Using build_distinct_type_copy and modifying things afterward instead
6610 of using build_array_type to create a new type preserves all of the
6611 TYPE_LANG_FLAG_? bits that the front end may have set. */
6612 main_type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
6613 TREE_TYPE (main_type) = unqual_elt;
6614 TYPE_DOMAIN (main_type) = build_index_type (maxindex);
6615 layout_type (main_type);
6616
06d40de8
DG
6617 /* Make sure we have the canonical MAIN_TYPE. */
6618 hashcode = iterative_hash_object (TYPE_HASH (unqual_elt), hashcode);
6619 hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (main_type)),
6620 hashcode);
6621 main_type = type_hash_canon (hashcode, main_type);
6622
aab038d5
RH
6623 if (quals == 0)
6624 type = main_type;
6625 else
6626 type = c_build_qualified_type (main_type, quals);
6627
6628 *ptype = type;
6629 return failure;
6630}
5ae9ba3e 6631
48ae6c13
RH
6632\f
6633/* Used to help initialize the builtin-types.def table. When a type of
6634 the correct size doesn't exist, use error_mark_node instead of NULL.
6635 The later results in segfaults even when a decl using the type doesn't
6636 get invoked. */
6637
6638tree
6639builtin_type_for_size (int size, bool unsignedp)
6640{
6641 tree type = lang_hooks.types.type_for_size (size, unsignedp);
6642 return type ? type : error_mark_node;
6643}
6644
6645/* A helper function for resolve_overloaded_builtin in resolving the
6646 overloaded __sync_ builtins. Returns a positive power of 2 if the
6647 first operand of PARAMS is a pointer to a supported data type.
6648 Returns 0 if an error is encountered. */
6649
6650static int
6651sync_resolve_size (tree function, tree params)
6652{
6653 tree type;
6654 int size;
6655
6656 if (params == NULL)
6657 {
6658 error ("too few arguments to function %qE", function);
6659 return 0;
6660 }
6661
6662 type = TREE_TYPE (TREE_VALUE (params));
6663 if (TREE_CODE (type) != POINTER_TYPE)
6664 goto incompatible;
6665
6666 type = TREE_TYPE (type);
6667 if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
6668 goto incompatible;
6669
6670 size = tree_low_cst (TYPE_SIZE_UNIT (type), 1);
a0274e3e 6671 if (size == 1 || size == 2 || size == 4 || size == 8 || size == 16)
48ae6c13
RH
6672 return size;
6673
6674 incompatible:
6675 error ("incompatible type for argument %d of %qE", 1, function);
6676 return 0;
6677}
6678
c22cacf3 6679/* A helper function for resolve_overloaded_builtin. Adds casts to
48ae6c13
RH
6680 PARAMS to make arguments match up with those of FUNCTION. Drops
6681 the variadic arguments at the end. Returns false if some error
6682 was encountered; true on success. */
6683
6684static bool
6685sync_resolve_params (tree orig_function, tree function, tree params)
6686{
6687 tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (function));
6688 tree ptype;
6689 int number;
6690
6691 /* We've declared the implementation functions to use "volatile void *"
6692 as the pointer parameter, so we shouldn't get any complaints from the
6693 call to check_function_arguments what ever type the user used. */
6694 arg_types = TREE_CHAIN (arg_types);
6695 ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
6696 number = 2;
6697
6698 /* For the rest of the values, we need to cast these to FTYPE, so that we
6699 don't get warnings for passing pointer types, etc. */
6700 while (arg_types != void_list_node)
6701 {
6702 tree val;
6703
6704 params = TREE_CHAIN (params);
6705 if (params == NULL)
6706 {
6707 error ("too few arguments to function %qE", orig_function);
6708 return false;
6709 }
6710
6711 /* ??? Ideally for the first conversion we'd use convert_for_assignment
6712 so that we get warnings for anything that doesn't match the pointer
6713 type. This isn't portable across the C and C++ front ends atm. */
6714 val = TREE_VALUE (params);
6715 val = convert (ptype, val);
6716 val = convert (TREE_VALUE (arg_types), val);
6717 TREE_VALUE (params) = val;
6718
6719 arg_types = TREE_CHAIN (arg_types);
6720 number++;
6721 }
6722
6723 /* The definition of these primitives is variadic, with the remaining
6724 being "an optional list of variables protected by the memory barrier".
6725 No clue what that's supposed to mean, precisely, but we consider all
6726 call-clobbered variables to be protected so we're safe. */
6727 TREE_CHAIN (params) = NULL;
6728
6729 return true;
6730}
6731
c22cacf3 6732/* A helper function for resolve_overloaded_builtin. Adds a cast to
48ae6c13
RH
6733 RESULT to make it match the type of the first pointer argument in
6734 PARAMS. */
6735
6736static tree
6737sync_resolve_return (tree params, tree result)
6738{
6739 tree ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
99db1ef0 6740 ptype = TYPE_MAIN_VARIANT (ptype);
48ae6c13
RH
6741 return convert (ptype, result);
6742}
6743
6744/* Some builtin functions are placeholders for other expressions. This
6745 function should be called immediately after parsing the call expression
6746 before surrounding code has committed to the type of the expression.
6747
6748 FUNCTION is the DECL that has been invoked; it is known to be a builtin.
6749 PARAMS is the argument list for the call. The return value is non-null
6750 when expansion is complete, and null if normal processing should
6751 continue. */
6752
6753tree
6754resolve_overloaded_builtin (tree function, tree params)
6755{
6756 enum built_in_function orig_code = DECL_FUNCTION_CODE (function);
58646b77
PB
6757 switch (DECL_BUILT_IN_CLASS (function))
6758 {
6759 case BUILT_IN_NORMAL:
6760 break;
6761 case BUILT_IN_MD:
6762 if (targetm.resolve_overloaded_builtin)
c22cacf3 6763 return targetm.resolve_overloaded_builtin (function, params);
58646b77 6764 else
c22cacf3 6765 return NULL_TREE;
58646b77
PB
6766 default:
6767 return NULL_TREE;
6768 }
c22cacf3 6769
58646b77 6770 /* Handle BUILT_IN_NORMAL here. */
48ae6c13
RH
6771 switch (orig_code)
6772 {
6773 case BUILT_IN_FETCH_AND_ADD_N:
6774 case BUILT_IN_FETCH_AND_SUB_N:
6775 case BUILT_IN_FETCH_AND_OR_N:
6776 case BUILT_IN_FETCH_AND_AND_N:
6777 case BUILT_IN_FETCH_AND_XOR_N:
6778 case BUILT_IN_FETCH_AND_NAND_N:
6779 case BUILT_IN_ADD_AND_FETCH_N:
6780 case BUILT_IN_SUB_AND_FETCH_N:
6781 case BUILT_IN_OR_AND_FETCH_N:
6782 case BUILT_IN_AND_AND_FETCH_N:
6783 case BUILT_IN_XOR_AND_FETCH_N:
6784 case BUILT_IN_NAND_AND_FETCH_N:
6785 case BUILT_IN_BOOL_COMPARE_AND_SWAP_N:
6786 case BUILT_IN_VAL_COMPARE_AND_SWAP_N:
6787 case BUILT_IN_LOCK_TEST_AND_SET_N:
6788 case BUILT_IN_LOCK_RELEASE_N:
6789 {
6790 int n = sync_resolve_size (function, params);
6791 tree new_function, result;
6792
6793 if (n == 0)
6794 return error_mark_node;
6795
6796 new_function = built_in_decls[orig_code + exact_log2 (n) + 1];
6797 if (!sync_resolve_params (function, new_function, params))
6798 return error_mark_node;
6799
6800 result = build_function_call (new_function, params);
6801 if (orig_code != BUILT_IN_BOOL_COMPARE_AND_SWAP_N
6802 && orig_code != BUILT_IN_LOCK_RELEASE_N)
6803 result = sync_resolve_return (params, result);
6804
6805 return result;
6806 }
6807
6808 default:
58646b77 6809 return NULL_TREE;
48ae6c13
RH
6810 }
6811}
6812
5bed876a
AH
6813/* Ignoring their sign, return true if two scalar types are the same. */
6814bool
6815same_scalar_type_ignoring_signedness (tree t1, tree t2)
6816{
6817 enum tree_code c1 = TREE_CODE (t1), c2 = TREE_CODE (t2);
6818
6819 gcc_assert ((c1 == INTEGER_TYPE || c1 == REAL_TYPE)
6820 && (c2 == INTEGER_TYPE || c2 == REAL_TYPE));
6821
6822 /* Equality works here because c_common_signed_type uses
6823 TYPE_MAIN_VARIANT. */
6824 return lang_hooks.types.signed_type (t1)
6825 == lang_hooks.types.signed_type (t2);
6826}
6827
104f8784
KG
6828/* Check for missing format attributes on function pointers. LTYPE is
6829 the new type or left-hand side type. RTYPE is the old type or
6830 right-hand side type. Returns TRUE if LTYPE is missing the desired
6831 attribute. */
6832
6833bool
6834check_missing_format_attribute (tree ltype, tree rtype)
6835{
6836 tree const ttr = TREE_TYPE (rtype), ttl = TREE_TYPE (ltype);
6837 tree ra;
6838
6839 for (ra = TYPE_ATTRIBUTES (ttr); ra; ra = TREE_CHAIN (ra))
6840 if (is_attribute_p ("format", TREE_PURPOSE (ra)))
6841 break;
6842 if (ra)
6843 {
6844 tree la;
6845 for (la = TYPE_ATTRIBUTES (ttl); la; la = TREE_CHAIN (la))
6846 if (is_attribute_p ("format", TREE_PURPOSE (la)))
6847 break;
6848 return !la;
6849 }
6850 else
6851 return false;
6852}
6853
ff6b6641
GDR
6854/* Subscripting with type char is likely to lose on a machine where
6855 chars are signed. So warn on any machine, but optionally. Don't
6856 warn for unsigned char since that type is safe. Don't warn for
6857 signed char because anyone who uses that must have done so
6858 deliberately. Furthermore, we reduce the false positive load by
6859 warning only for non-constant value of type char. */
6860
6861void
6862warn_array_subscript_with_type_char (tree index)
6863{
6864 if (TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node
6865 && TREE_CODE (index) != INTEGER_CST)
6866 warning (OPT_Wchar_subscripts, "array subscript has type %<char%>");
6867}
6868
2a67bec2
ILT
6869/* Implement -Wparentheses for the unexpected C precedence rules, to
6870 cover cases like x + y << z which readers are likely to
6871 misinterpret. We have seen an expression in which CODE is a binary
6872 operator used to combine expressions headed by CODE_LEFT and
6873 CODE_RIGHT. CODE_LEFT and CODE_RIGHT may be ERROR_MARK, which
6874 means that that side of the expression was not formed using a
6875 binary operator, or it was enclosed in parentheses. */
6876
6877void
6878warn_about_parentheses (enum tree_code code, enum tree_code code_left,
6879 enum tree_code code_right)
6880{
6881 if (!warn_parentheses)
6882 return;
6883
6884 if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
6885 {
6886 if (code_left == PLUS_EXPR || code_left == MINUS_EXPR
6887 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6888 warning (OPT_Wparentheses,
6889 "suggest parentheses around + or - inside shift");
6890 }
6891
6892 if (code == TRUTH_ORIF_EXPR)
6893 {
6894 if (code_left == TRUTH_ANDIF_EXPR
6895 || code_right == TRUTH_ANDIF_EXPR)
6896 warning (OPT_Wparentheses,
6897 "suggest parentheses around && within ||");
6898 }
6899
6900 if (code == BIT_IOR_EXPR)
6901 {
6902 if (code_left == BIT_AND_EXPR || code_left == BIT_XOR_EXPR
6903 || code_left == PLUS_EXPR || code_left == MINUS_EXPR
6904 || code_right == BIT_AND_EXPR || code_right == BIT_XOR_EXPR
6905 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6906 warning (OPT_Wparentheses,
6907 "suggest parentheses around arithmetic in operand of |");
6908 /* Check cases like x|y==z */
6909 if (TREE_CODE_CLASS (code_left) == tcc_comparison
6910 || TREE_CODE_CLASS (code_right) == tcc_comparison)
6911 warning (OPT_Wparentheses,
6912 "suggest parentheses around comparison in operand of |");
6913 }
6914
6915 if (code == BIT_XOR_EXPR)
6916 {
6917 if (code_left == BIT_AND_EXPR
6918 || code_left == PLUS_EXPR || code_left == MINUS_EXPR
6919 || code_right == BIT_AND_EXPR
6920 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6921 warning (OPT_Wparentheses,
6922 "suggest parentheses around arithmetic in operand of ^");
6923 /* Check cases like x^y==z */
6924 if (TREE_CODE_CLASS (code_left) == tcc_comparison
6925 || TREE_CODE_CLASS (code_right) == tcc_comparison)
6926 warning (OPT_Wparentheses,
6927 "suggest parentheses around comparison in operand of ^");
6928 }
6929
6930 if (code == BIT_AND_EXPR)
6931 {
6932 if (code_left == PLUS_EXPR || code_left == MINUS_EXPR
6933 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6934 warning (OPT_Wparentheses,
6935 "suggest parentheses around + or - in operand of &");
6936 /* Check cases like x&y==z */
6937 if (TREE_CODE_CLASS (code_left) == tcc_comparison
6938 || TREE_CODE_CLASS (code_right) == tcc_comparison)
6939 warning (OPT_Wparentheses,
6940 "suggest parentheses around comparison in operand of &");
6941 }
6942
e7917d06
DM
6943 if (code == EQ_EXPR || code == NE_EXPR)
6944 {
6945 if (TREE_CODE_CLASS (code_left) == tcc_comparison
6946 || TREE_CODE_CLASS (code_right) == tcc_comparison)
6947 warning (OPT_Wparentheses,
6948 "suggest parentheses around comparison in operand of %s",
6949 code == EQ_EXPR ? "==" : "!=");
6950 }
6951 else if (TREE_CODE_CLASS (code) == tcc_comparison)
6952 {
6953 if ((TREE_CODE_CLASS (code_left) == tcc_comparison
6954 && code_left != NE_EXPR && code_left != EQ_EXPR)
6955 || (TREE_CODE_CLASS (code_right) == tcc_comparison
6956 && code_right != NE_EXPR && code_right != EQ_EXPR))
6957 warning (OPT_Wparentheses, "comparisons like X<=Y<=Z do not "
6958 "have their mathematical meaning");
6959 }
2a67bec2
ILT
6960}
6961
c616e51b
MLI
6962/* If LABEL (a LABEL_DECL) has not been used, issue a warning. */
6963
6964void
6965warn_for_unused_label (tree label)
6966{
6967 if (!TREE_USED (label))
6968 {
6969 if (DECL_INITIAL (label))
6970 warning (OPT_Wunused_label, "label %q+D defined but not used", label);
6971 else
6972 warning (OPT_Wunused_label, "label %q+D declared but not defined", label);
6973 }
6974}
ff6b6641 6975
57a4c089
MM
6976/* If FNDECL is a static constructor or destructor, add it to the list
6977 of functions to be called by the file scope initialization
6978 function. */
6979
6980void
6981c_record_cdtor_fn (tree fndecl)
6982{
6983 if (targetm.have_ctors_dtors)
6984 return;
6985
6986 if (DECL_STATIC_CONSTRUCTOR (fndecl))
6987 static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
6988 if (DECL_STATIC_DESTRUCTOR (fndecl))
6989 static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
6990}
6991
6992/* Synthesize a function which calls all the global ctors or global
6993 dtors in this file. This is only used for targets which do not
6994 support .ctors/.dtors sections. FIXME: Migrate into cgraph. */
6995static void
6996build_cdtor (int method_type, tree cdtors)
6997{
6998 tree body = 0;
6999
7000 if (!cdtors)
7001 return;
7002
7003 for (; cdtors; cdtors = TREE_CHAIN (cdtors))
7004 append_to_statement_list (build_function_call (TREE_VALUE (cdtors), 0),
7005 &body);
7006
7007 cgraph_build_static_cdtor (method_type, body, DEFAULT_INIT_PRIORITY);
7008}
7009
7010/* Generate functions to call static constructors and destructors
7011 for targets that do not support .ctors/.dtors sections. These
7012 functions have magic names which are detected by collect2. */
7013
7014void
7015c_build_cdtor_fns (void)
7016{
7017 if (!targetm.have_ctors_dtors)
7018 {
7019 build_cdtor ('I', static_ctors);
7020 static_ctors = NULL_TREE;
7021 build_cdtor ('D', static_dtors);
7022 static_dtors = NULL_TREE;
7023 }
7024 else
7025 {
7026 gcc_assert (!static_ctors);
7027 gcc_assert (!static_dtors);
7028 }
7029}
7030
1f1d5130
MS
7031#ifndef TARGET_HAS_TARGETCM
7032struct gcc_targetcm targetcm = TARGETCM_INITIALIZER;
7033#endif
7034
e2500fed 7035#include "gt-c-common.h"