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