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