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