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