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