]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/c-common.c
reload.c (find_reloads): Fix comment typo.
[thirdparty/gcc.git] / gcc / c-common.c
CommitLineData
b30f223b 1/* Subroutines shared by all languages that are variants of C.
1574ef13 2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
ad616de1 3 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
b30f223b 4
1322177d 5This file is part of GCC.
b30f223b 6
1322177d
LB
7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
9Software Foundation; either version 2, or (at your option) any later
10version.
b30f223b 11
1322177d
LB
12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15for more details.
b30f223b
RS
16
17You should have received a copy of the GNU General Public License
1322177d 18along with GCC; see the file COPYING. If not, write to the Free
366ccddb
KC
19Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
2002110-1301, USA. */
b30f223b
RS
21
22#include "config.h"
670ee920 23#include "system.h"
4977bab6
ZW
24#include "coretypes.h"
25#include "tm.h"
d9b2742a 26#include "intl.h"
b30f223b 27#include "tree.h"
b30f223b 28#include "flags.h"
d6f4ec51 29#include "output.h"
e2af664c 30#include "c-pragma.h"
3932261a 31#include "rtl.h"
1526a060 32#include "ggc.h"
17211ab5 33#include "varray.h"
c6991660 34#include "expr.h"
8f17b5c5 35#include "c-common.h"
22703ccc 36#include "diagnostic.h"
7bdb32b9 37#include "tm_p.h"
235cfbc4 38#include "obstack.h"
c8724862 39#include "cpplib.h"
12a68f1f 40#include "target.h"
7afff7cf 41#include "langhooks.h"
d57a4b98 42#include "tree-inline.h"
0bfa5f65 43#include "c-tree.h"
5f1989e6 44#include "toplev.h"
6de9cd9a
DN
45#include "tree-iterator.h"
46#include "hashtab.h"
c31b8e1b 47#include "tree-mudflap.h"
d974312d 48#include "opts.h"
010c4d9c 49#include "real.h"
ce91e74c 50#include "cgraph.h"
cb60f38d 51
81a75f0f 52cpp_reader *parse_in; /* Declared in c-pragma.h. */
c8724862 53
eaa7c03f
JM
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
d1c38823
ZD
64#ifndef PID_TYPE
65#define PID_TYPE "int"
66#endif
67
eaa7c03f
JM
68#ifndef WCHAR_TYPE
69#define WCHAR_TYPE "int"
70#endif
71
a11eba95
ZW
72/* WCHAR_TYPE gets overridden by -fshort-wchar. */
73#define MODIFIED_WCHAR_TYPE \
74 (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
75
0884b60c
BS
76#ifndef PTRDIFF_TYPE
77#define PTRDIFF_TYPE "long int"
78#endif
79
5fd8e536
JM
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
7f4edbcb 100/* The following symbols are subsumed in the c_global_trees array, and
d125d268 101 listed here individually for documentation purposes.
7f4edbcb
BS
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
de7df9eb
JM
113 tree truthvalue_type_node;
114 tree truthvalue_false_node;
115 tree truthvalue_true_node;
7f4edbcb
BS
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
7f4edbcb
BS
176 A VOID_TYPE node, packaged in a TREE_LIST.
177
178 tree void_list_node;
179
684d9f3b 180 The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
0ba8a114
NS
181 and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
182 VAR_DECLS, but C++ does.)
63ad61ed 183
0ba8a114 184 tree function_name_decl_node;
684d9f3b 185 tree pretty_function_name_decl_node;
0ba8a114
NS
186 tree c99_function_name_decl_node;
187
188 Stack of nested function name VAR_DECLs.
35b1a6fa 189
0ba8a114 190 tree saved_function_name_decls;
63ad61ed 191
7f4edbcb
BS
192*/
193
194tree c_global_trees[CTI_MAX];
17211ab5 195\f
4078b403
NB
196/* Switches common to the C front ends. */
197
aaf93206 198/* Nonzero if prepreprocessing only. */
63973df3 199
aaf93206
NB
200int flag_preprocess_only;
201
63973df3
NB
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
c0d578e6
GK
219/* Nonzero means process PCH files while preprocessing. */
220
221bool flag_pch_preprocess;
222
17211ab5
GK
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
3df89291
NB
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
6bcedb4e
MM
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
eaa7c03f
JM
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
750491fc
RH
253/* Nonzero means allow Microsoft extensions without warnings or errors. */
254int flag_ms_extensions;
255
4078b403
NB
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
4078b403
NB
265/* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
266
267int flag_signed_bitfields = 1;
4078b403 268
4078b403
NB
269/* Nonzero means warn about deprecated conversion from string constant to
270 `char *'. */
271
272int warn_write_strings;
273
35b1a6fa 274/* Warn about #pragma directives that are not recognized. */
4078b403 275
35b1a6fa 276int warn_unknown_pragmas; /* Tri state variable. */
4078b403 277
4078b403
NB
278/* Warn about format/argument anomalies in calls to formatted I/O functions
279 (*printf, *scanf, strftime, strfmon, etc.). */
280
281int warn_format;
282
b2f97e4a
MM
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
264fa2db
ZL
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
264fa2db
ZL
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;
9f63daea 303
4078b403
NB
304/* C/ObjC language option variables. */
305
306
4078b403
NB
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
6614fd40 320/* Nonzero means that we have builtin functions, and main is an int. */
4078b403
NB
321
322int flag_hosted = 1;
323
4078b403
NB
324/* Warn if main is suspicious. */
325
326int warn_main;
327
4078b403
NB
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
4078b403
NB
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
2a694ec8 343/* Tells the compiler what is the constant string class for Objc. */
4078b403
NB
344
345const char *constant_string_class_name;
346
4078b403
NB
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
4078b403
NB
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
b20d9f0c
AO
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
4078b403
NB
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
4078b403
NB
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
40aac948
JM
449/* Nonzero means to generate thread-safe code for initializing local
450 statics. */
451
452int flag_threadsafe_statics = 1;
453
4078b403
NB
454/* Nonzero means warn about implicit declarations. */
455
456int warn_implicit = 1;
457
4078b403
NB
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
f09f1de5
MM
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
35b1a6fa 470tree (*make_fname_decl) (tree, int);
2ce07e2d 471
e78a3b42
RK
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
ec5c56db 476/* Information about how a function name is generated. */
0ba8a114
NS
477struct fname_var_t
478{
8b60264b
KG
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? */
0ba8a114
NS
482};
483
ec5c56db 484/* The three ways of getting then name of the current function. */
0ba8a114
NS
485
486const struct fname_var_t fname_vars[] =
487{
ec5c56db 488 /* C99 compliant __func__, must be first. */
0ba8a114 489 {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
ec5c56db 490 /* GCC __FUNCTION__ compliant. */
0ba8a114 491 {&function_name_decl_node, RID_FUNCTION_NAME, 0},
ec5c56db 492 /* GCC __PRETTY_FUNCTION__ compliant. */
0ba8a114
NS
493 {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
494 {NULL, 0, 0},
495};
496
35b1a6fa 497static int constant_fits_type_p (tree, tree);
a6c0a76c
SB
498static tree check_case_value (tree);
499static bool check_case_bounds (tree, tree, tree *, tree *);
4724b3de 500
35b1a6fa
AJ
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 *);
0691d1d4 508static tree handle_flatten_attribute (tree *, tree, tree, int, bool *);
35b1a6fa
AJ
509static tree handle_used_attribute (tree *, tree, tree, int, bool *);
510static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
ce91e74c
JH
511static tree handle_externally_visible_attribute (tree *, tree, tree, int,
512 bool *);
35b1a6fa
AJ
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 *);
a0203ca7 523static tree handle_weakref_attribute (tree *, tree, tree, int, bool *) ;
35b1a6fa
AJ
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 *);
6e9a3221 531static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
35b1a6fa
AJ
532static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
533 bool *);
534static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
dcd6de6d 535static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
35b1a6fa
AJ
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 *);
72954a4f
JM
543static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
544 bool *);
3d091dac 545static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
35b1a6fa
AJ
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 *);
d07605f5 551static int resort_field_decl_cmp (const void *, const void *);
b34c7881 552
349ae713
NB
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,
35b1a6fa 558 handle_packed_attribute },
349ae713
NB
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 },
0691d1d4
RG
576 { "flatten", 0, 0, true, false, false,
577 handle_flatten_attribute },
349ae713
NB
578 { "used", 0, 0, true, false, false,
579 handle_used_attribute },
580 { "unused", 0, 0, false, false, false,
581 handle_unused_attribute },
ce91e74c
JH
582 { "externally_visible", 0, 0, true, false, false,
583 handle_externally_visible_attribute },
349ae713
NB
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 },
a0203ca7
AO
603 { "weakref", 0, 1, true, false, false,
604 handle_weakref_attribute },
349ae713
NB
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 },
6e9a3221
AN
609 { "returns_twice", 0, 0, true, false, false,
610 handle_returns_twice_attribute },
349ae713
NB
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 },
dcd6de6d
ZD
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 },
349ae713
NB
619 { "deprecated", 0, 0, false, false, false,
620 handle_deprecated_attribute },
621 { "vector_size", 1, 1, false, true, false,
622 handle_vector_size_attribute },
d7afec4b 623 { "visibility", 1, 1, false, false, false,
349ae713 624 handle_visibility_attribute },
dce81a1a
JJ
625 { "tls_model", 1, 1, true, false, false,
626 handle_tls_model_attribute },
b34c7881
JT
627 { "nonnull", 0, -1, false, true, true,
628 handle_nonnull_attribute },
39f2f3c8
RS
629 { "nothrow", 0, 0, true, false, false,
630 handle_nothrow_attribute },
d18b1ed8 631 { "may_alias", 0, 0, false, true, false, NULL },
0bfa5f65
RH
632 { "cleanup", 1, 1, true, false, false,
633 handle_cleanup_attribute },
72954a4f
JM
634 { "warn_unused_result", 0, 0, false, true, true,
635 handle_warn_unused_result_attribute },
254986c7 636 { "sentinel", 0, 1, false, true, true,
3d091dac 637 handle_sentinel_attribute },
349ae713
NB
638 { NULL, 0, 0, false, false, false, NULL }
639};
640
641/* Give the specifications for the format attributes, used by C and all
95bd1dd7 642 descendants. */
349ae713
NB
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
ec5c56db 654/* Push current bindings for the function name VAR_DECLS. */
7da551a2
RS
655
656void
35b1a6fa 657start_fname_decls (void)
7da551a2 658{
0ba8a114
NS
659 unsigned ix;
660 tree saved = NULL_TREE;
35b1a6fa 661
0ba8a114
NS
662 for (ix = 0; fname_vars[ix].decl; ix++)
663 {
664 tree decl = *fname_vars[ix].decl;
7da551a2 665
0ba8a114
NS
666 if (decl)
667 {
7d60be94 668 saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
0ba8a114
NS
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
325c3691
RH
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. */
0ba8a114
NS
683
684void
35b1a6fa 685finish_fname_decls (void)
0ba8a114
NS
686{
687 unsigned ix;
325c3691 688 tree stmts = NULL_TREE;
0ba8a114
NS
689 tree stack = saved_function_name_decls;
690
691 for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
325c3691 692 append_to_statement_list (TREE_VALUE (stack), &stmts);
35b1a6fa 693
325c3691 694 if (stmts)
0ba8a114 695 {
325c3691 696 tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
bfaba7a9 697
325c3691
RH
698 if (TREE_CODE (*bodyp) == BIND_EXPR)
699 bodyp = &BIND_EXPR_BODY (*bodyp);
6cce57b0 700
86ad3aa9 701 append_to_statement_list_force (*bodyp, &stmts);
325c3691 702 *bodyp = stmts;
0ba8a114 703 }
35b1a6fa 704
0ba8a114
NS
705 for (ix = 0; fname_vars[ix].decl; ix++)
706 *fname_vars[ix].decl = NULL_TREE;
35b1a6fa 707
0ba8a114 708 if (stack)
7da551a2 709 {
ec5c56db 710 /* We had saved values, restore them. */
0ba8a114
NS
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));
35b1a6fa 717
0ba8a114
NS
718 *fname_vars[ix].decl = decl;
719 }
720 stack = TREE_CHAIN (stack);
7da551a2 721 }
0ba8a114
NS
722 saved_function_name_decls = stack;
723}
724
6cce57b0 725/* Return the text name of the current function, suitably prettified
0d0bc036 726 by PRETTY_P. Return string must be freed by caller. */
0ba8a114
NS
727
728const char *
35b1a6fa 729fname_as_string (int pretty_p)
0ba8a114 730{
47ab33b2 731 const char *name = "top level";
0d0bc036 732 char *namep;
47ab33b2
MA
733 int vrb = 2;
734
3f75a254 735 if (!pretty_p)
47ab33b2
MA
736 {
737 name = "";
738 vrb = 0;
739 }
740
741 if (current_function_decl)
ae2bcd98 742 name = lang_hooks.decl_printable_name (current_function_decl, vrb);
47ab33b2 743
0d0bc036
AH
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
28dab132 749 namep = XNEWVEC (char, len);
0d0bc036
AH
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))
029fc60b
KH
755 {
756 XDELETEVEC (namep);
757 return (char *) cstr.text;
758 }
0d0bc036
AH
759 }
760 else
5557d672 761 namep = xstrdup (name);
0d0bc036
AH
762
763 return namep;
0ba8a114
NS
764}
765
3c79fa86
AP
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 }
3c79fa86
AP
781 else
782 return 0;
783
784 return 1;
785}
786
787
0ba8a114
NS
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
f63d1bf7 793 this language independent code. */
0ba8a114
NS
794
795tree
35b1a6fa 796fname_decl (unsigned int rid, tree id)
0ba8a114
NS
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)
7da551a2 807 {
8d3e27d1
DJ
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
4b7e68e7 812 it from appearing in the RTL. */
325c3691 813 tree stmts;
3c20847b
PB
814 location_t saved_location = input_location;
815#ifdef USE_MAPPED_LOCATION
816 input_location = UNKNOWN_LOCATION;
817#else
d479d37f 818 input_line = 0;
3c20847b 819#endif
35b1a6fa 820
325c3691 821 stmts = push_stmt_list ();
0ba8a114 822 decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
325c3691
RH
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);
0ba8a114 827 *fname_vars[ix].decl = decl;
3c20847b 828 input_location = saved_location;
7da551a2 829 }
0ba8a114 830 if (!ix && !current_function_decl)
8b17a9d6 831 pedwarn ("%qD is not defined outside of function scope", decl);
6cce57b0 832
0ba8a114 833 return decl;
7da551a2
RS
834}
835
b84a3874 836/* Given a STRING_CST, give it a suitable array-of-chars data type. */
b30f223b
RS
837
838tree
35b1a6fa 839fix_string_type (tree value)
b30f223b 840{
b84a3874
RH
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;
1326a48b 843 const int nchars_max = flag_isoc99 ? 4095 : 509;
b84a3874
RH
844 int length = TREE_STRING_LENGTH (value);
845 int nchars;
c162c75e
MA
846 tree e_type, i_type, a_type;
847
b57062ca 848 /* Compute the number of elements, for the array type. */
b30f223b
RS
849 nchars = wide_flag ? length / wchar_bytes : length;
850
37fa72e9 851 if (pedantic && nchars - 1 > nchars_max && !c_dialect_cxx ())
bda67431 852 pedwarn ("string length %qd is greater than the length %qd ISO C%d compilers are required to support",
690c96c8 853 nchars - 1, nchars_max, flag_isoc99 ? 99 : 89);
1326a48b 854
4a90aeeb 855 e_type = wide_flag ? wchar_type_node : char_type_node;
c162c75e
MA
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. */
7d60be94 867 i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
c162c75e
MA
868 a_type = build_array_type (e_type, i_type);
869 if (flag_const_strings)
46df2823 870 a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
d9cf7c82 871
c162c75e 872 TREE_TYPE (value) = a_type;
ccd4c832 873 TREE_CONSTANT (value) = 1;
6de9cd9a 874 TREE_INVARIANT (value) = 1;
3521b33c 875 TREE_READONLY (value) = 1;
b30f223b
RS
876 TREE_STATIC (value) = 1;
877 return value;
878}
879\f
d74154d5
RS
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. */
96571883
BK
885
886void
35b1a6fa 887constant_expression_warning (tree value)
96571883 888{
c05f751c 889 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
69ef87e2 890 || TREE_CODE (value) == VECTOR_CST
c05f751c
RK
891 || TREE_CODE (value) == COMPLEX_CST)
892 && TREE_CONSTANT_OVERFLOW (value) && pedantic)
893 pedwarn ("overflow in constant expression");
d74154d5
RS
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
35b1a6fa 904overflow_warning (tree value)
d74154d5 905{
c05f751c
RK
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))
d74154d5 910 {
7193bce2 911 TREE_OVERFLOW (value) = 0;
e78a3b42 912 if (skip_evaluation == 0)
d4ee4d25 913 warning (0, "integer overflow in expression");
d74154d5 914 }
c05f751c
RK
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;
e78a3b42 921 if (skip_evaluation == 0)
d4ee4d25 922 warning (0, "floating point overflow in expression");
c05f751c 923 }
69ef87e2
AH
924 else if (TREE_CODE (value) == VECTOR_CST && TREE_OVERFLOW (value))
925 {
926 TREE_OVERFLOW (value) = 0;
927 if (skip_evaluation == 0)
d4ee4d25 928 warning (0, "vector overflow in expression");
69ef87e2 929 }
d74154d5
RS
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
35b1a6fa 938unsigned_conversion_warning (tree result, tree operand)
d74154d5 939{
ceef8ce4
NB
940 tree type = TREE_TYPE (result);
941
d74154d5 942 if (TREE_CODE (operand) == INTEGER_CST
ceef8ce4 943 && TREE_CODE (type) == INTEGER_TYPE
8df83eae 944 && TYPE_UNSIGNED (type)
e78a3b42 945 && skip_evaluation == 0
ceef8ce4 946 && !int_fits_type_p (operand, type))
d74154d5 947 {
ceef8ce4 948 if (!int_fits_type_p (operand, c_common_signed_type (type)))
d74154d5 949 /* This detects cases like converting -129 or 256 to unsigned char. */
d4ee4d25 950 warning (0, "large integer implicitly truncated to unsigned type");
44c21c7f
DD
951 else
952 warning (OPT_Wconversion,
953 "negative integer implicitly converted to unsigned type");
d74154d5
RS
954 }
955}
956
de9c56a4
RG
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))
bbee4b64 969 || handled_component_p (TREE_OPERAND (expr, 0)))
de9c56a4
RG
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
d02b54f6
JJ
993/* Nonzero if constant C has a value that is permissible
994 for type TYPE (an INTEGER_TYPE). */
995
996static int
35b1a6fa 997constant_fits_type_p (tree c, tree type)
d02b54f6
JJ
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);
35b1a6fa 1004}
d02b54f6 1005
cc27e657
PB
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)
3a021db2 1013 || (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
2c47f875 1014 && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
a04deb83 1015 TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
3a021db2
PB
1016 && INTEGRAL_TYPE_P (TREE_TYPE (t1))
1017 == INTEGRAL_TYPE_P (TREE_TYPE (t2)));
cc27e657
PB
1018}
1019
d74154d5
RS
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
35b1a6fa 1025convert_and_check (tree type, tree expr)
d74154d5
RS
1026{
1027 tree t = convert (type, expr);
1028 if (TREE_CODE (t) == INTEGER_CST)
1029 {
7193bce2 1030 if (TREE_OVERFLOW (t))
d74154d5 1031 {
7193bce2
PE
1032 TREE_OVERFLOW (t) = 0;
1033
868fc750
RK
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
7193bce2 1038 /* No warning for converting 0x80000000 to int. */
8df83eae 1039 if (!(TYPE_UNSIGNED (type) < TYPE_UNSIGNED (TREE_TYPE (expr))
7193bce2
PE
1040 && TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1041 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (expr))))
22ba338b
RS
1042 /* If EXPR fits in the unsigned version of TYPE,
1043 don't warn unless pedantic. */
e78a3b42 1044 if ((pedantic
8df83eae 1045 || TYPE_UNSIGNED (type)
3f75a254
JM
1046 || !constant_fits_type_p (expr,
1047 c_common_unsigned_type (type)))
6de9cd9a 1048 && skip_evaluation == 0)
d4ee4d25 1049 warning (0, "overflow in implicit constant conversion");
d74154d5
RS
1050 }
1051 else
1052 unsigned_conversion_warning (t, expr);
1053 }
1054 return t;
96571883
BK
1055}
1056\f
235cfbc4
BS
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;
2683ed8d
BS
1074};
1075
235cfbc4
BS
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
35b1a6fa
AJ
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);
2683ed8d 1095
235cfbc4
BS
1096/* Create a new struct tlist and fill in its fields. */
1097static struct tlist *
35b1a6fa 1098new_tlist (struct tlist *next, tree t, tree writer)
235cfbc4
BS
1099{
1100 struct tlist *l;
5d038c4c 1101 l = XOBNEW (&tlist_obstack, struct tlist);
235cfbc4
BS
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
35b1a6fa 1112add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
235cfbc4
BS
1113{
1114 while (add)
1115 {
1116 struct tlist *next = add->next;
3f75a254 1117 if (!copy)
235cfbc4 1118 add->next = *to;
3f75a254 1119 if (!exclude_writer || add->writer != exclude_writer)
235cfbc4
BS
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. */
2683ed8d
BS
1130
1131static void
35b1a6fa 1132merge_tlist (struct tlist **to, struct tlist *add, int copy)
235cfbc4
BS
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;
3f75a254 1149 if (!tmp2->writer)
235cfbc4
BS
1150 tmp2->writer = add->writer;
1151 }
3f75a254 1152 if (!found)
235cfbc4
BS
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
35b1a6fa
AJ
1167warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
1168 int only_writes)
235cfbc4
BS
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
3f75a254 1181 && (!only_writes || list->writer)
e3790655 1182 && DECL_NAME (list->expr))
235cfbc4
BS
1183 {
1184 warned_ids = new_tlist (warned_ids, written, NULL_TREE);
d4ee4d25 1185 warning (0, "operation on %qE may be undefined", list->expr);
235cfbc4
BS
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
35b1a6fa 1195warn_for_collisions (struct tlist *list)
235cfbc4
BS
1196{
1197 struct tlist *tmp;
35b1a6fa 1198
235cfbc4
BS
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
684d9f3b 1206/* Return nonzero if X is a tree that can be verified by the sequence point
235cfbc4
BS
1207 warnings. */
1208static int
35b1a6fa 1209warning_candidate_p (tree x)
2683ed8d 1210{
235cfbc4
BS
1211 return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
1212}
2683ed8d 1213
235cfbc4
BS
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. */
2683ed8d 1238
235cfbc4 1239static void
35b1a6fa
AJ
1240verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
1241 tree writer)
235cfbc4
BS
1242{
1243 struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1244 enum tree_code code;
6615c446 1245 enum tree_code_class cl;
2683ed8d 1246
f9e1917e
JM
1247 /* X may be NULL if it is the operand of an empty statement expression
1248 ({ }). */
1249 if (x == NULL)
1250 return;
1251
235cfbc4
BS
1252 restart:
1253 code = TREE_CODE (x);
e3a64162 1254 cl = TREE_CODE_CLASS (code);
2683ed8d 1255
235cfbc4 1256 if (warning_candidate_p (x))
2683ed8d 1257 {
235cfbc4
BS
1258 *pno_sp = new_tlist (*pno_sp, x, writer);
1259 return;
1260 }
1261
1262 switch (code)
1263 {
52a84e42
BS
1264 case CONSTRUCTOR:
1265 return;
1266
235cfbc4
BS
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
2683ed8d
BS
1301 case PREDECREMENT_EXPR:
1302 case PREINCREMENT_EXPR:
1303 case POSTDECREMENT_EXPR:
1304 case POSTINCREMENT_EXPR:
235cfbc4
BS
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;
2683ed8d
BS
1334
1335 case CALL_EXPR:
235cfbc4
BS
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;
2683ed8d
BS
1349
1350 case TREE_LIST:
1351 /* Scan all the list, e.g. indices of multi dimensional array. */
1352 while (x)
1353 {
235cfbc4
BS
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);
2683ed8d
BS
1358 x = TREE_CHAIN (x);
1359 }
235cfbc4 1360 return;
2683ed8d 1361
235cfbc4
BS
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;
2683ed8d 1368
3f75a254 1369 if (!t)
2683ed8d 1370 {
5d038c4c 1371 t = XOBNEW (&tlist_obstack, struct tlist_cache);
235cfbc4
BS
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;
2683ed8d 1389 }
235cfbc4
BS
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 }
2683ed8d 1394
6615c446
JO
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 {
6615c446
JO
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;
54e4aedb 1408 int max = TREE_CODE_LENGTH (TREE_CODE (x));
6615c446
JO
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;
2683ed8d 1418 }
2683ed8d
BS
1419}
1420
8d9afc4e 1421/* Try to warn for undefined behavior in EXPR due to missing sequence
2683ed8d
BS
1422 points. */
1423
3a5b9284 1424void
35b1a6fa 1425verify_sequence_points (tree expr)
2683ed8d 1426{
235cfbc4 1427 struct tlist *before_sp = 0, *after_sp = 0;
2683ed8d 1428
235cfbc4
BS
1429 warned_ids = 0;
1430 save_expr_cache = 0;
1431 if (tlist_firstobj == 0)
2683ed8d 1432 {
235cfbc4 1433 gcc_obstack_init (&tlist_obstack);
28dab132 1434 tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
2683ed8d
BS
1435 }
1436
235cfbc4
BS
1437 verify_tree (expr, &before_sp, &after_sp, 0);
1438 warn_for_collisions (after_sp);
1439 obstack_free (&tlist_obstack, tlist_firstobj);
2683ed8d 1440}
b30f223b
RS
1441\f
1442/* Validate the expression after `case' and apply default promotions. */
1443
a6c0a76c 1444static tree
35b1a6fa 1445check_case_value (tree value)
b30f223b
RS
1446{
1447 if (value == NULL_TREE)
1448 return value;
1449
ed248cf7
JM
1450 /* ??? Can we ever get nops here for a valid case value? We
1451 shouldn't for C. */
8493738b 1452 STRIP_TYPE_NOPS (value);
56cb9733
MM
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. */
37fa72e9 1459 if (c_dialect_cxx ())
56cb9733
MM
1460 {
1461 value = decl_constant_value (value);
1462 STRIP_TYPE_NOPS (value);
1463 value = fold (value);
1464 }
b30f223b 1465
522ddfa2
JM
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)
b30f223b
RS
1470 {
1471 error ("case label does not reduce to an integer constant");
1472 value = error_mark_node;
1473 }
b30f223b 1474
bc690db1
RS
1475 constant_expression_warning (value);
1476
b30f223b
RS
1477 return value;
1478}
1479\f
a6c0a76c 1480/* See if the case values LOW and HIGH are in the range of the original
89dbed81 1481 type (i.e. before the default conversion to int) of the switch testing
a6c0a76c
SB
1482 expression.
1483 TYPE is the promoted type of the testing expression, and ORIG_TYPE is
2a7e31df 1484 the type before promoting it. CASE_LOW_P is a pointer to the lower
a6c0a76c
SB
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
89dbed81 1488 CASE_LOW_P (i.e. the default case).
0fa2e4df 1489 Returns true if the case label is in range of ORIG_TYPE (saturated or
a6c0a76c
SB
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 {
d4ee4d25 1511 warning (0, "case label value is less than minimum value for type");
a6c0a76c
SB
1512 return false;
1513 }
9f63daea 1514
a6c0a76c
SB
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 {
d4ee4d25 1519 warning (0, "case label value exceeds maximum value for type");
a6c0a76c
SB
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 {
d4ee4d25 1527 warning (0, "lower value in case label range"
a6c0a76c
SB
1528 " less than minimum value for type");
1529 case_low = min_value;
1530 }
9f63daea 1531
a6c0a76c
SB
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 {
d4ee4d25 1536 warning (0, "upper value in case label range"
a6c0a76c
SB
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
b30f223b
RS
1549/* Return an integer type with BITS bits of precision,
1550 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
1551
1552tree
35b1a6fa 1553c_common_type_for_size (unsigned int bits, int unsignedp)
b30f223b 1554{
a311b52c
JM
1555 if (bits == TYPE_PRECISION (integer_type_node))
1556 return unsignedp ? unsigned_type_node : integer_type_node;
1557
3fc7e390 1558 if (bits == TYPE_PRECISION (signed_char_type_node))
b30f223b
RS
1559 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1560
3fc7e390 1561 if (bits == TYPE_PRECISION (short_integer_type_node))
b30f223b
RS
1562 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1563
3fc7e390 1564 if (bits == TYPE_PRECISION (long_integer_type_node))
b30f223b
RS
1565 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1566
3fc7e390 1567 if (bits == TYPE_PRECISION (long_long_integer_type_node))
b30f223b
RS
1568 return (unsignedp ? long_long_unsigned_type_node
1569 : long_long_integer_type_node);
1570
835f9b4d
GRK
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
3fc7e390
RS
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
b30f223b
RS
1587 return 0;
1588}
1589
d1d3865f
ZW
1590/* Used for communication between c_common_type_for_mode and
1591 c_register_builtin_type. */
1592static GTY(()) tree registered_builtin_types;
1593
b30f223b
RS
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
35b1a6fa 1599c_common_type_for_mode (enum machine_mode mode, int unsignedp)
b30f223b 1600{
d1d3865f
ZW
1601 tree t;
1602
a311b52c
JM
1603 if (mode == TYPE_MODE (integer_type_node))
1604 return unsignedp ? unsigned_type_node : integer_type_node;
1605
b30f223b
RS
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
b30f223b
RS
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
835f9b4d 1618 if (mode == TYPE_MODE (widest_integer_literal_type_node))
d125d268 1619 return unsignedp ? widest_unsigned_literal_type_node
6de9cd9a 1620 : widest_integer_literal_type_node;
835f9b4d 1621
0afeef64 1622 if (mode == QImode)
3fc7e390
RS
1623 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1624
0afeef64 1625 if (mode == HImode)
3fc7e390
RS
1626 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1627
0afeef64 1628 if (mode == SImode)
3fc7e390
RS
1629 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1630
0afeef64 1631 if (mode == DImode)
3fc7e390
RS
1632 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1633
21a9616b 1634#if HOST_BITS_PER_WIDE_INT >= 64
a6d7e156
JL
1635 if (mode == TYPE_MODE (intTI_type_node))
1636 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
21a9616b 1637#endif
a6d7e156 1638
b30f223b
RS
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
ff42324e
NS
1648 if (mode == TYPE_MODE (void_type_node))
1649 return void_type_node;
9f63daea 1650
b30f223b 1651 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
19b3ffbc
DD
1652 return (unsignedp
1653 ? make_unsigned_type (GET_MODE_PRECISION (mode))
1654 : make_signed_type (GET_MODE_PRECISION (mode)));
b30f223b
RS
1655
1656 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
19b3ffbc
DD
1657 return (unsignedp
1658 ? make_unsigned_type (GET_MODE_PRECISION (mode))
1659 : make_signed_type (GET_MODE_PRECISION (mode)));
b30f223b 1660
7e7e470f
RH
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))
4a5eab38
PB
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);
0afeef64 1687 }
4061f623 1688
d1d3865f
ZW
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
b30f223b
RS
1693 return 0;
1694}
693a6128 1695
ec5c56db 1696/* Return an unsigned type the same as TYPE in other respects. */
693a6128 1697tree
35b1a6fa 1698c_common_unsigned_type (tree type)
693a6128
GRK
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
ceef8ce4 1726 return c_common_signed_or_unsigned_type (1, type);
693a6128
GRK
1727}
1728
1729/* Return a signed type the same as TYPE in other respects. */
1730
1731tree
35b1a6fa 1732c_common_signed_type (tree type)
693a6128
GRK
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
ceef8ce4 1760 return c_common_signed_or_unsigned_type (0, type);
693a6128
GRK
1761}
1762
1763/* Return a type the same as TYPE except unsigned or
1764 signed according to UNSIGNEDP. */
1765
1766tree
35b1a6fa 1767c_common_signed_or_unsigned_type (int unsignedp, tree type)
693a6128 1768{
3f75a254 1769 if (!INTEGRAL_TYPE_P (type)
8df83eae 1770 || TYPE_UNSIGNED (type) == unsignedp)
693a6128
GRK
1771 return type;
1772
bc15d0ef
JM
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))
693a6128 1786 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
bc15d0ef 1787 if (TYPE_OK (integer_type_node))
693a6128 1788 return unsignedp ? unsigned_type_node : integer_type_node;
bc15d0ef 1789 if (TYPE_OK (short_integer_type_node))
693a6128 1790 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
bc15d0ef 1791 if (TYPE_OK (long_integer_type_node))
693a6128 1792 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
bc15d0ef 1793 if (TYPE_OK (long_long_integer_type_node))
693a6128
GRK
1794 return (unsignedp ? long_long_unsigned_type_node
1795 : long_long_integer_type_node);
bc15d0ef 1796 if (TYPE_OK (widest_integer_literal_type_node))
693a6128
GRK
1797 return (unsignedp ? widest_unsigned_literal_type_node
1798 : widest_integer_literal_type_node);
4a063bec
RH
1799
1800#if HOST_BITS_PER_WIDE_INT >= 64
bc15d0ef 1801 if (TYPE_OK (intTI_type_node))
4a063bec
RH
1802 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1803#endif
bc15d0ef 1804 if (TYPE_OK (intDI_type_node))
4a063bec 1805 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
bc15d0ef 1806 if (TYPE_OK (intSI_type_node))
4a063bec 1807 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
bc15d0ef 1808 if (TYPE_OK (intHI_type_node))
4a063bec 1809 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
bc15d0ef 1810 if (TYPE_OK (intQI_type_node))
4a063bec 1811 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
bc15d0ef 1812#undef TYPE_OK
4a063bec 1813
bc15d0ef
JM
1814 if (c_dialect_cxx ())
1815 return type;
1816 else
1817 return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
693a6128 1818}
9649812a
MM
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);
d1d3865f
ZW
1832
1833 registered_builtin_types = tree_cons (0, type, registered_builtin_types);
9649812a
MM
1834}
1835
b30f223b 1836\f
6acfe908
JM
1837/* Return the minimum number of bits needed to represent VALUE in a
1838 signed or unsigned type, UNSIGNEDP says which. */
1839
05bccae2 1840unsigned int
35b1a6fa 1841min_precision (tree value, int unsignedp)
6acfe908
JM
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)
987b67bc 1851 value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
6acfe908
JM
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;
6acfe908 1858 else
05bccae2 1859 log = tree_floor_log2 (value);
6acfe908 1860
3f75a254 1861 return log + 1 + !unsignedp;
6acfe908
JM
1862}
1863\f
78ef5b89 1864/* Print an error message for invalid operands to arith operation
1344f9a3 1865 CODE. */
b30f223b
RS
1866
1867void
35b1a6fa 1868binary_op_error (enum tree_code code)
b30f223b 1869{
b3694847 1870 const char *opname;
89c78d7d 1871
b30f223b
RS
1872 switch (code)
1873 {
b30f223b
RS
1874 case PLUS_EXPR:
1875 opname = "+"; break;
1876 case MINUS_EXPR:
1877 opname = "-"; break;
1878 case MULT_EXPR:
1879 opname = "*"; break;
1880 case MAX_EXPR:
1881 opname = "max"; break;
1882 case MIN_EXPR:
1883 opname = "min"; break;
1884 case EQ_EXPR:
1885 opname = "=="; break;
1886 case NE_EXPR:
1887 opname = "!="; break;
1888 case LE_EXPR:
1889 opname = "<="; break;
1890 case GE_EXPR:
1891 opname = ">="; break;
1892 case LT_EXPR:
1893 opname = "<"; break;
1894 case GT_EXPR:
1895 opname = ">"; break;
1896 case LSHIFT_EXPR:
1897 opname = "<<"; break;
1898 case RSHIFT_EXPR:
1899 opname = ">>"; break;
1900 case TRUNC_MOD_EXPR:
047de90b 1901 case FLOOR_MOD_EXPR:
b30f223b
RS
1902 opname = "%"; break;
1903 case TRUNC_DIV_EXPR:
047de90b 1904 case FLOOR_DIV_EXPR:
b30f223b
RS
1905 opname = "/"; break;
1906 case BIT_AND_EXPR:
1907 opname = "&"; break;
1908 case BIT_IOR_EXPR:
1909 opname = "|"; break;
1910 case TRUTH_ANDIF_EXPR:
1911 opname = "&&"; break;
1912 case TRUTH_ORIF_EXPR:
1913 opname = "||"; break;
1914 case BIT_XOR_EXPR:
1915 opname = "^"; break;
6d819282 1916 default:
37b2f290 1917 gcc_unreachable ();
b30f223b
RS
1918 }
1919 error ("invalid operands to binary %s", opname);
1920}
1921\f
1922/* Subroutine of build_binary_op, used for comparison operations.
1923 See if the operands have both been converted from subword integer types
1924 and, if so, perhaps change them both back to their original type.
94dccd9d
RS
1925 This function is also responsible for converting the two operands
1926 to the proper common type for comparison.
b30f223b
RS
1927
1928 The arguments of this function are all pointers to local variables
1929 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
1930 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
1931
1932 If this function returns nonzero, it means that the comparison has
1933 a constant value. What this function returns is an expression for
1934 that value. */
1935
1936tree
35b1a6fa
AJ
1937shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
1938 enum tree_code *rescode_ptr)
b30f223b 1939{
b3694847 1940 tree type;
b30f223b
RS
1941 tree op0 = *op0_ptr;
1942 tree op1 = *op1_ptr;
1943 int unsignedp0, unsignedp1;
1944 int real1, real2;
1945 tree primop0, primop1;
1946 enum tree_code code = *rescode_ptr;
1947
1948 /* Throw away any conversions to wider types
1949 already present in the operands. */
1950
1951 primop0 = get_narrower (op0, &unsignedp0);
1952 primop1 = get_narrower (op1, &unsignedp1);
1953
1954 /* Handle the case that OP0 does not *contain* a conversion
1955 but it *requires* conversion to FINAL_TYPE. */
1956
1957 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
8df83eae 1958 unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
b30f223b 1959 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
8df83eae 1960 unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
b30f223b
RS
1961
1962 /* If one of the operands must be floated, we cannot optimize. */
1963 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
1964 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
1965
1966 /* If first arg is constant, swap the args (changing operation
5af6001b
RK
1967 so value is preserved), for canonicalization. Don't do this if
1968 the second arg is 0. */
b30f223b 1969
5af6001b 1970 if (TREE_CONSTANT (primop0)
3f75a254 1971 && !integer_zerop (primop1) && !real_zerop (primop1))
b30f223b 1972 {
b3694847
SS
1973 tree tem = primop0;
1974 int temi = unsignedp0;
b30f223b
RS
1975 primop0 = primop1;
1976 primop1 = tem;
1977 tem = op0;
1978 op0 = op1;
1979 op1 = tem;
1980 *op0_ptr = op0;
1981 *op1_ptr = op1;
1982 unsignedp0 = unsignedp1;
1983 unsignedp1 = temi;
1984 temi = real1;
1985 real1 = real2;
1986 real2 = temi;
1987
1988 switch (code)
1989 {
1990 case LT_EXPR:
1991 code = GT_EXPR;
1992 break;
1993 case GT_EXPR:
1994 code = LT_EXPR;
1995 break;
1996 case LE_EXPR:
1997 code = GE_EXPR;
1998 break;
1999 case GE_EXPR:
2000 code = LE_EXPR;
2001 break;
6d819282
MK
2002 default:
2003 break;
b30f223b
RS
2004 }
2005 *rescode_ptr = code;
2006 }
2007
2008 /* If comparing an integer against a constant more bits wide,
2009 maybe we can deduce a value of 1 or 0 independent of the data.
2010 Or else truncate the constant now
2011 rather than extend the variable at run time.
2012
2013 This is only interesting if the constant is the wider arg.
2014 Also, it is not safe if the constant is unsigned and the
2015 variable arg is signed, since in this case the variable
2016 would be sign-extended and then regarded as unsigned.
2017 Our technique fails in this case because the lowest/highest
2018 possible unsigned results don't follow naturally from the
2019 lowest/highest possible values of the variable operand.
2020 For just EQ_EXPR and NE_EXPR there is another technique that
2021 could be used: see if the constant can be faithfully represented
2022 in the other operand's type, by truncating it and reextending it
2023 and see if that preserves the constant's value. */
2024
2025 if (!real1 && !real2
2026 && TREE_CODE (primop1) == INTEGER_CST
2027 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
2028 {
2029 int min_gt, max_gt, min_lt, max_lt;
2030 tree maxval, minval;
2031 /* 1 if comparison is nominally unsigned. */
8df83eae 2032 int unsignedp = TYPE_UNSIGNED (*restype_ptr);
b30f223b
RS
2033 tree val;
2034
ceef8ce4
NB
2035 type = c_common_signed_or_unsigned_type (unsignedp0,
2036 TREE_TYPE (primop0));
8bbd5685 2037
b30f223b
RS
2038 maxval = TYPE_MAX_VALUE (type);
2039 minval = TYPE_MIN_VALUE (type);
2040
2041 if (unsignedp && !unsignedp0)
ceef8ce4 2042 *restype_ptr = c_common_signed_type (*restype_ptr);
b30f223b
RS
2043
2044 if (TREE_TYPE (primop1) != *restype_ptr)
fae1b38d 2045 {
af9c6659
NS
2046 /* Convert primop1 to target type, but do not introduce
2047 additional overflow. We know primop1 is an int_cst. */
7d60be94
NS
2048 tree tmp = build_int_cst_wide (*restype_ptr,
2049 TREE_INT_CST_LOW (primop1),
2050 TREE_INT_CST_HIGH (primop1));
af9c6659 2051
af9c6659
NS
2052 primop1 = force_fit_type (tmp, 0, TREE_OVERFLOW (primop1),
2053 TREE_CONSTANT_OVERFLOW (primop1));
fae1b38d 2054 }
b30f223b
RS
2055 if (type != *restype_ptr)
2056 {
2057 minval = convert (*restype_ptr, minval);
2058 maxval = convert (*restype_ptr, maxval);
2059 }
2060
2061 if (unsignedp && unsignedp0)
2062 {
2063 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
2064 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
2065 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
2066 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
2067 }
2068 else
2069 {
2070 min_gt = INT_CST_LT (primop1, minval);
2071 max_gt = INT_CST_LT (primop1, maxval);
2072 min_lt = INT_CST_LT (minval, primop1);
2073 max_lt = INT_CST_LT (maxval, primop1);
2074 }
2075
2076 val = 0;
2077 /* This used to be a switch, but Genix compiler can't handle that. */
2078 if (code == NE_EXPR)
2079 {
2080 if (max_lt || min_gt)
de7df9eb 2081 val = truthvalue_true_node;
b30f223b
RS
2082 }
2083 else if (code == EQ_EXPR)
2084 {
2085 if (max_lt || min_gt)
de7df9eb 2086 val = truthvalue_false_node;
b30f223b
RS
2087 }
2088 else if (code == LT_EXPR)
2089 {
2090 if (max_lt)
de7df9eb 2091 val = truthvalue_true_node;
b30f223b 2092 if (!min_lt)
de7df9eb 2093 val = truthvalue_false_node;
b30f223b
RS
2094 }
2095 else if (code == GT_EXPR)
2096 {
2097 if (min_gt)
de7df9eb 2098 val = truthvalue_true_node;
b30f223b 2099 if (!max_gt)
de7df9eb 2100 val = truthvalue_false_node;
b30f223b
RS
2101 }
2102 else if (code == LE_EXPR)
2103 {
2104 if (!max_gt)
de7df9eb 2105 val = truthvalue_true_node;
b30f223b 2106 if (min_gt)
de7df9eb 2107 val = truthvalue_false_node;
b30f223b
RS
2108 }
2109 else if (code == GE_EXPR)
2110 {
2111 if (!min_lt)
de7df9eb 2112 val = truthvalue_true_node;
b30f223b 2113 if (max_lt)
de7df9eb 2114 val = truthvalue_false_node;
b30f223b
RS
2115 }
2116
2117 /* If primop0 was sign-extended and unsigned comparison specd,
2118 we did a signed comparison above using the signed type bounds.
2119 But the comparison we output must be unsigned.
2120
2121 Also, for inequalities, VAL is no good; but if the signed
2122 comparison had *any* fixed result, it follows that the
2123 unsigned comparison just tests the sign in reverse
2124 (positive values are LE, negative ones GE).
2125 So we can generate an unsigned comparison
2126 against an extreme value of the signed type. */
2127
2128 if (unsignedp && !unsignedp0)
2129 {
2130 if (val != 0)
2131 switch (code)
2132 {
2133 case LT_EXPR:
2134 case GE_EXPR:
2135 primop1 = TYPE_MIN_VALUE (type);
2136 val = 0;
2137 break;
2138
2139 case LE_EXPR:
2140 case GT_EXPR:
2141 primop1 = TYPE_MAX_VALUE (type);
2142 val = 0;
2143 break;
6d819282
MK
2144
2145 default:
2146 break;
b30f223b 2147 }
ceef8ce4 2148 type = c_common_unsigned_type (type);
b30f223b
RS
2149 }
2150
5c5b2283 2151 if (TREE_CODE (primop0) != INTEGER_CST)
b30f223b 2152 {
de7df9eb 2153 if (val == truthvalue_false_node)
d4ee4d25 2154 warning (0, "comparison is always false due to limited range of data type");
de7df9eb 2155 if (val == truthvalue_true_node)
d4ee4d25 2156 warning (0, "comparison is always true due to limited range of data type");
b30f223b
RS
2157 }
2158
2159 if (val != 0)
2160 {
2161 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2162 if (TREE_SIDE_EFFECTS (primop0))
53fb4de3 2163 return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
b30f223b
RS
2164 return val;
2165 }
2166
2167 /* Value is not predetermined, but do the comparison
2168 in the type of the operand that is not constant.
2169 TYPE is already properly set. */
2170 }
2171 else if (real1 && real2
766f6c30
RS
2172 && (TYPE_PRECISION (TREE_TYPE (primop0))
2173 == TYPE_PRECISION (TREE_TYPE (primop1))))
b30f223b
RS
2174 type = TREE_TYPE (primop0);
2175
2176 /* If args' natural types are both narrower than nominal type
2177 and both extend in the same manner, compare them
2178 in the type of the wider arg.
2179 Otherwise must actually extend both to the nominal
2180 common type lest different ways of extending
2181 alter the result.
2182 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
2183
2184 else if (unsignedp0 == unsignedp1 && real1 == real2
2185 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
2186 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
2187 {
2188 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
ceef8ce4 2189 type = c_common_signed_or_unsigned_type (unsignedp0
8df83eae 2190 || TYPE_UNSIGNED (*restype_ptr),
ceef8ce4 2191 type);
b30f223b
RS
2192 /* Make sure shorter operand is extended the right way
2193 to match the longer operand. */
ceef8ce4
NB
2194 primop0
2195 = convert (c_common_signed_or_unsigned_type (unsignedp0,
2196 TREE_TYPE (primop0)),
2197 primop0);
2198 primop1
2199 = convert (c_common_signed_or_unsigned_type (unsignedp1,
2200 TREE_TYPE (primop1)),
2201 primop1);
b30f223b
RS
2202 }
2203 else
2204 {
2205 /* Here we must do the comparison on the nominal type
2206 using the args exactly as we received them. */
2207 type = *restype_ptr;
2208 primop0 = op0;
2209 primop1 = op1;
2210
2211 if (!real1 && !real2 && integer_zerop (primop1)
8df83eae 2212 && TYPE_UNSIGNED (*restype_ptr))
b30f223b
RS
2213 {
2214 tree value = 0;
2215 switch (code)
2216 {
2217 case GE_EXPR:
5af6001b
RK
2218 /* All unsigned values are >= 0, so we warn if extra warnings
2219 are requested. However, if OP0 is a constant that is
2220 >= 0, the signedness of the comparison isn't an issue,
2221 so suppress the warning. */
2c492eef 2222 if (extra_warnings && !in_system_header
3f75a254
JM
2223 && !(TREE_CODE (primop0) == INTEGER_CST
2224 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2225 primop0))))
d4ee4d25 2226 warning (0, "comparison of unsigned expression >= 0 is always true");
de7df9eb 2227 value = truthvalue_true_node;
b30f223b
RS
2228 break;
2229
2230 case LT_EXPR:
2c492eef 2231 if (extra_warnings && !in_system_header
3f75a254
JM
2232 && !(TREE_CODE (primop0) == INTEGER_CST
2233 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2234 primop0))))
d4ee4d25 2235 warning (0, "comparison of unsigned expression < 0 is always false");
de7df9eb 2236 value = truthvalue_false_node;
6d819282
MK
2237 break;
2238
2239 default:
2240 break;
b30f223b
RS
2241 }
2242
2243 if (value != 0)
2244 {
2245 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2246 if (TREE_SIDE_EFFECTS (primop0))
53fb4de3
RS
2247 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
2248 primop0, value);
b30f223b
RS
2249 return value;
2250 }
2251 }
2252 }
2253
2254 *op0_ptr = convert (type, primop0);
2255 *op1_ptr = convert (type, primop1);
2256
de7df9eb 2257 *restype_ptr = truthvalue_type_node;
b30f223b
RS
2258
2259 return 0;
2260}
2261\f
7552da58
JJ
2262/* Return a tree for the sum or difference (RESULTCODE says which)
2263 of pointer PTROP and integer INTOP. */
2264
2265tree
35b1a6fa 2266pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
7552da58
JJ
2267{
2268 tree size_exp;
2269
7552da58
JJ
2270 /* The result is a pointer of the same type that is being added. */
2271
2272 tree result_type = TREE_TYPE (ptrop);
2273
2274 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2275 {
2276 if (pedantic || warn_pointer_arith)
bda67431 2277 pedwarn ("pointer of type %<void *%> used in arithmetic");
7552da58
JJ
2278 size_exp = integer_one_node;
2279 }
2280 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2281 {
2282 if (pedantic || warn_pointer_arith)
2283 pedwarn ("pointer to a function used in arithmetic");
2284 size_exp = integer_one_node;
2285 }
2286 else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
2287 {
2288 if (pedantic || warn_pointer_arith)
2289 pedwarn ("pointer to member function used in arithmetic");
2290 size_exp = integer_one_node;
2291 }
7552da58
JJ
2292 else
2293 size_exp = size_in_bytes (TREE_TYPE (result_type));
2294
2295 /* If what we are about to multiply by the size of the elements
2296 contains a constant term, apply distributive law
2297 and multiply that constant term separately.
2298 This helps produce common subexpressions. */
2299
2300 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
3f75a254 2301 && !TREE_CONSTANT (intop)
7552da58
JJ
2302 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2303 && TREE_CONSTANT (size_exp)
2304 /* If the constant comes from pointer subtraction,
2305 skip this optimization--it would cause an error. */
2306 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2307 /* If the constant is unsigned, and smaller than the pointer size,
2308 then we must skip this optimization. This is because it could cause
2309 an overflow error if the constant is negative but INTOP is not. */
3f75a254 2310 && (!TYPE_UNSIGNED (TREE_TYPE (intop))
7552da58
JJ
2311 || (TYPE_PRECISION (TREE_TYPE (intop))
2312 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2313 {
2314 enum tree_code subcode = resultcode;
2315 tree int_type = TREE_TYPE (intop);
2316 if (TREE_CODE (intop) == MINUS_EXPR)
2317 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2318 /* Convert both subexpression types to the type of intop,
2319 because weird cases involving pointer arithmetic
2320 can result in a sum or difference with different type args. */
2321 ptrop = build_binary_op (subcode, ptrop,
2322 convert (int_type, TREE_OPERAND (intop, 1)), 1);
2323 intop = convert (int_type, TREE_OPERAND (intop, 0));
2324 }
2325
2326 /* Convert the integer argument to a type the same size as sizetype
2327 so the multiply won't overflow spuriously. */
2328
2329 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
8df83eae 2330 || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
35b1a6fa 2331 intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
8df83eae 2332 TYPE_UNSIGNED (sizetype)), intop);
7552da58
JJ
2333
2334 /* Replace the integer argument with a suitable product by the object size.
2335 Do this multiplication as signed, then convert to the appropriate
2336 pointer type (actually unsigned integral). */
2337
2338 intop = convert (result_type,
2339 build_binary_op (MULT_EXPR, intop,
2340 convert (TREE_TYPE (intop), size_exp), 1));
2341
2342 /* Create the sum or difference. */
987b67bc 2343 return fold_build2 (resultcode, result_type, ptrop, intop);
7552da58
JJ
2344}
2345\f
b30f223b 2346/* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
85498824
JM
2347 or for an `if' or `while' statement or ?..: exp. It should already
2348 have been validated to be of suitable type; otherwise, a bad
2349 diagnostic may result.
b30f223b
RS
2350
2351 This preparation consists of taking the ordinary
2352 representation of an expression expr and producing a valid tree
2353 boolean expression describing whether expr is nonzero. We could
de7df9eb 2354 simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
b30f223b
RS
2355 but we optimize comparisons, &&, ||, and !.
2356
de7df9eb 2357 The resulting type should always be `truthvalue_type_node'. */
b30f223b
RS
2358
2359tree
35b1a6fa 2360c_common_truthvalue_conversion (tree expr)
b30f223b 2361{
b30f223b
RS
2362 switch (TREE_CODE (expr))
2363 {
d1a7edaf 2364 case EQ_EXPR: case NE_EXPR: case UNEQ_EXPR: case LTGT_EXPR:
6f312d18
ZW
2365 case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
2366 case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
2367 case ORDERED_EXPR: case UNORDERED_EXPR:
90ec750d
RS
2368 if (TREE_TYPE (expr) == truthvalue_type_node)
2369 return expr;
2370 return build2 (TREE_CODE (expr), truthvalue_type_node,
2371 TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
2372
b30f223b
RS
2373 case TRUTH_ANDIF_EXPR:
2374 case TRUTH_ORIF_EXPR:
2375 case TRUTH_AND_EXPR:
2376 case TRUTH_OR_EXPR:
9379fac9 2377 case TRUTH_XOR_EXPR:
90ec750d
RS
2378 if (TREE_TYPE (expr) == truthvalue_type_node)
2379 return expr;
2380 return build2 (TREE_CODE (expr), truthvalue_type_node,
85498824
JM
2381 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2382 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)));
18c0f675 2383
18d00205 2384 case TRUTH_NOT_EXPR:
90ec750d
RS
2385 if (TREE_TYPE (expr) == truthvalue_type_node)
2386 return expr;
2387 return build1 (TREE_CODE (expr), truthvalue_type_node,
85498824 2388 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
18d00205 2389
b30f223b
RS
2390 case ERROR_MARK:
2391 return expr;
2392
2393 case INTEGER_CST:
010c4d9c
RS
2394 /* Avoid integer_zerop to ignore TREE_CONSTANT_OVERFLOW. */
2395 return (TREE_INT_CST_LOW (expr) != 0 || TREE_INT_CST_HIGH (expr) != 0)
2396 ? truthvalue_true_node
2397 : truthvalue_false_node;
b30f223b
RS
2398
2399 case REAL_CST:
010c4d9c
RS
2400 return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
2401 ? truthvalue_true_node
2402 : truthvalue_false_node;
b30f223b 2403
90ec750d
RS
2404 case FUNCTION_DECL:
2405 expr = build_unary_op (ADDR_EXPR, expr, 0);
2406 /* Fall through. */
2407
b30f223b 2408 case ADDR_EXPR:
1998463c 2409 {
690a704a 2410 if (DECL_P (TREE_OPERAND (expr, 0))
3f75a254 2411 && !DECL_WEAK (TREE_OPERAND (expr, 0)))
1998463c
SB
2412 {
2413 /* Common Ada/Pascal programmer's mistake. We always warn
2414 about this since it is so bad. */
690a704a 2415 warning (OPT_Walways_true, "the address of %qD, will always evaluate as %<true%>",
1998463c
SB
2416 TREE_OPERAND (expr, 0));
2417 return truthvalue_true_node;
2418 }
fc0c675f 2419
1998463c
SB
2420 /* If we are taking the address of an external decl, it might be
2421 zero if it is weak, so we cannot optimize. */
2422 if (DECL_P (TREE_OPERAND (expr, 0))
2423 && DECL_EXTERNAL (TREE_OPERAND (expr, 0)))
2424 break;
2425
2426 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0)))
53fb4de3
RS
2427 return build2 (COMPOUND_EXPR, truthvalue_type_node,
2428 TREE_OPERAND (expr, 0), truthvalue_true_node);
1998463c
SB
2429 else
2430 return truthvalue_true_node;
2431 }
b30f223b 2432
766f6c30 2433 case COMPLEX_EXPR:
f0b996c5 2434 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
b839fb3f 2435 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
85498824
JM
2436 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2437 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
766f6c30
RS
2438 0);
2439
b30f223b
RS
2440 case NEGATE_EXPR:
2441 case ABS_EXPR:
2442 case FLOAT_EXPR:
da7d8304 2443 /* These don't change whether an object is nonzero or zero. */
85498824 2444 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
b30f223b
RS
2445
2446 case LROTATE_EXPR:
2447 case RROTATE_EXPR:
da7d8304 2448 /* These don't change whether an object is zero or nonzero, but
b30f223b
RS
2449 we can't ignore them if their second arg has side-effects. */
2450 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
53fb4de3
RS
2451 return build2 (COMPOUND_EXPR, truthvalue_type_node,
2452 TREE_OPERAND (expr, 1),
85498824 2453 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
b30f223b 2454 else
85498824 2455 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
b57062ca 2456
b30f223b
RS
2457 case COND_EXPR:
2458 /* Distribute the conversion into the arms of a COND_EXPR. */
987b67bc 2459 return fold_build3 (COND_EXPR, truthvalue_type_node,
53fb4de3 2460 TREE_OPERAND (expr, 0),
85498824 2461 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
987b67bc 2462 c_common_truthvalue_conversion (TREE_OPERAND (expr, 2)));
b30f223b
RS
2463
2464 case CONVERT_EXPR:
1344f9a3 2465 case NOP_EXPR:
b30f223b
RS
2466 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2467 since that affects how `default_conversion' will behave. */
2468 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
2469 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2470 break;
b30f223b
RS
2471 /* If this is widening the argument, we can ignore it. */
2472 if (TYPE_PRECISION (TREE_TYPE (expr))
2473 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
85498824 2474 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
b30f223b
RS
2475 break;
2476
b30f223b 2477 case MINUS_EXPR:
71925bc0
RS
2478 /* Perhaps reduce (x - y) != 0 to (x != y). The expressions
2479 aren't guaranteed to the be same for modes that can represent
2480 infinity, since if x and y are both +infinity, or both
2481 -infinity, then x - y is not a number.
2482
2483 Note that this transformation is safe when x or y is NaN.
2484 (x - y) is then NaN, and both (x - y) != 0 and x != y will
2485 be false. */
2486 if (HONOR_INFINITIES (TYPE_MODE (TREE_TYPE (TREE_OPERAND (expr, 0)))))
f87550e0 2487 break;
938d968e 2488 /* Fall through.... */
f87550e0 2489 case BIT_XOR_EXPR:
d7c83727 2490 /* This and MINUS_EXPR can be changed into a comparison of the
f87550e0 2491 two objects. */
b30f223b
RS
2492 if (TREE_TYPE (TREE_OPERAND (expr, 0))
2493 == TREE_TYPE (TREE_OPERAND (expr, 1)))
cb3b1e70
RS
2494 return fold_build2 (NE_EXPR, truthvalue_type_node,
2495 TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
2496 return fold_build2 (NE_EXPR, truthvalue_type_node,
2497 TREE_OPERAND (expr, 0),
2498 fold_convert (TREE_TYPE (TREE_OPERAND (expr, 0)),
2499 TREE_OPERAND (expr, 1)));
e2aab13d 2500
fb48b1f0 2501 case BIT_AND_EXPR:
58cee643 2502 if (integer_onep (TREE_OPERAND (expr, 1))
de7df9eb 2503 && TREE_TYPE (expr) != truthvalue_type_node)
58cee643 2504 /* Using convert here would cause infinite recursion. */
de7df9eb 2505 return build1 (NOP_EXPR, truthvalue_type_node, expr);
58cee643 2506 break;
fb48b1f0 2507
e2aab13d 2508 case MODIFY_EXPR:
44c21c7f
DD
2509 if (!TREE_NO_WARNING (expr))
2510 warning (OPT_Wparentheses,
2511 "suggest parentheses around assignment used as truth value");
e2aab13d 2512 break;
b57062ca 2513
6d819282
MK
2514 default:
2515 break;
b30f223b
RS
2516 }
2517
f0b996c5 2518 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
f0b8d9aa 2519 {
78ef5b89 2520 tree t = save_expr (expr);
f0b8d9aa
AS
2521 return (build_binary_op
2522 ((TREE_SIDE_EFFECTS (expr)
2523 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
85498824
JM
2524 c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
2525 c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
f0b8d9aa
AS
2526 0));
2527 }
f0b996c5 2528
b30f223b
RS
2529 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
2530}
2531\f
9bc15050
RG
2532static void def_builtin_1 (enum built_in_function fncode,
2533 const char *name,
2534 enum built_in_class fnclass,
2535 tree fntype, tree libtype,
2536 bool both_p, bool fallback_p, bool nonansi_p,
2537 tree fnattrs, bool implicit_p);
fc2aaf30 2538
0b73773c
NH
2539/* Make a variant type in the proper way for C/C++, propagating qualifiers
2540 down to the element type of an array. */
2541
2542tree
35b1a6fa 2543c_build_qualified_type (tree type, int type_quals)
0b73773c 2544{
5a6159dd
AP
2545 if (type == error_mark_node)
2546 return type;
9f63daea 2547
4b011bbf 2548 if (TREE_CODE (type) == ARRAY_TYPE)
46df2823
JM
2549 {
2550 tree t;
2551 tree element_type = c_build_qualified_type (TREE_TYPE (type),
2552 type_quals);
2553
2554 /* See if we already have an identically qualified type. */
2555 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
2556 {
2557 if (TYPE_QUALS (strip_array_types (t)) == type_quals
2558 && TYPE_NAME (t) == TYPE_NAME (type)
2559 && TYPE_CONTEXT (t) == TYPE_CONTEXT (type)
2560 && attribute_list_equal (TYPE_ATTRIBUTES (t),
2561 TYPE_ATTRIBUTES (type)))
2562 break;
2563 }
2564 if (!t)
2565 {
2566 t = build_variant_type_copy (type);
2567 TREE_TYPE (t) = element_type;
2568 }
2569 return t;
2570 }
4b011bbf 2571
3932261a
MM
2572 /* A restrict-qualified pointer type must be a pointer to object or
2573 incomplete type. Note that the use of POINTER_TYPE_P also allows
4b011bbf 2574 REFERENCE_TYPEs, which is appropriate for C++. */
3932261a
MM
2575 if ((type_quals & TYPE_QUAL_RESTRICT)
2576 && (!POINTER_TYPE_P (type)
2577 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
2578 {
bda67431 2579 error ("invalid use of %<restrict%>");
3932261a
MM
2580 type_quals &= ~TYPE_QUAL_RESTRICT;
2581 }
2582
3932261a
MM
2583 return build_qualified_type (type, type_quals);
2584}
2585
2586/* Apply the TYPE_QUALS to the new DECL. */
2587
2588void
35b1a6fa 2589c_apply_type_quals_to_decl (int type_quals, tree decl)
3932261a 2590{
4b011bbf 2591 tree type = TREE_TYPE (decl);
9f63daea 2592
5a6159dd
AP
2593 if (type == error_mark_node)
2594 return;
4b011bbf
JM
2595
2596 if (((type_quals & TYPE_QUAL_CONST)
2597 || (type && TREE_CODE (type) == REFERENCE_TYPE))
2598 /* An object declared 'const' is only readonly after it is
2599 initialized. We don't have any way of expressing this currently,
2600 so we need to be conservative and unset TREE_READONLY for types
2601 with constructors. Otherwise aliasing code will ignore stores in
2602 an inline constructor. */
2603 && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
3932261a
MM
2604 TREE_READONLY (decl) = 1;
2605 if (type_quals & TYPE_QUAL_VOLATILE)
2606 {
2607 TREE_SIDE_EFFECTS (decl) = 1;
2608 TREE_THIS_VOLATILE (decl) = 1;
2609 }
6946bc60 2610 if (type_quals & TYPE_QUAL_RESTRICT)
3932261a 2611 {
4b011bbf
JM
2612 while (type && TREE_CODE (type) == ARRAY_TYPE)
2613 /* Allow 'restrict' on arrays of pointers.
2614 FIXME currently we just ignore it. */
2615 type = TREE_TYPE (type);
2616 if (!type
2617 || !POINTER_TYPE_P (type)
2618 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
bda67431 2619 error ("invalid use of %<restrict%>");
4b011bbf 2620 else if (flag_strict_aliasing && type == TREE_TYPE (decl))
3c5ad1ff
RK
2621 /* Indicate we need to make a unique alias set for this pointer.
2622 We can't do it here because it might be pointing to an
2623 incomplete type. */
2624 DECL_POINTER_ALIAS_SET (decl) = -2;
3932261a
MM
2625 }
2626}
2627
6de9cd9a
DN
2628/* Hash function for the problem of multiple type definitions in
2629 different files. This must hash all types that will compare
2630 equal via comptypes to the same value. In practice it hashes
9cf737f8 2631 on some of the simple stuff and leaves the details to comptypes. */
6de9cd9a
DN
2632
2633static hashval_t
2634c_type_hash (const void *p)
2635{
2636 int i = 0;
2637 int shift, size;
3f75a254 2638 tree t = (tree) p;
6de9cd9a
DN
2639 tree t2;
2640 switch (TREE_CODE (t))
2641 {
8c27b7d4 2642 /* For pointers, hash on pointee type plus some swizzling. */
325c3691
RH
2643 case POINTER_TYPE:
2644 return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
2645 /* Hash on number of elements and total size. */
2646 case ENUMERAL_TYPE:
2647 shift = 3;
2648 t2 = TYPE_VALUES (t);
2649 break;
2650 case RECORD_TYPE:
2651 shift = 0;
2652 t2 = TYPE_FIELDS (t);
2653 break;
2654 case QUAL_UNION_TYPE:
2655 shift = 1;
2656 t2 = TYPE_FIELDS (t);
2657 break;
2658 case UNION_TYPE:
2659 shift = 2;
2660 t2 = TYPE_FIELDS (t);
2661 break;
2662 default:
366de0ce 2663 gcc_unreachable ();
6de9cd9a
DN
2664 }
2665 for (; t2; t2 = TREE_CHAIN (t2))
2666 i++;
2667 size = TREE_INT_CST_LOW (TYPE_SIZE (t));
2668 return ((size << 24) | (i << shift));
2669}
2670
4fe52ce9
DJ
2671static GTY((param_is (union tree_node))) htab_t type_hash_table;
2672
41472af8 2673/* Return the typed-based alias set for T, which may be an expression
3bdf5ad1 2674 or a type. Return -1 if we don't do anything special. */
41472af8 2675
3bdf5ad1 2676HOST_WIDE_INT
35b1a6fa 2677c_common_get_alias_set (tree t)
41472af8 2678{
08bc2431 2679 tree u;
6de9cd9a 2680 PTR *slot;
35b1a6fa 2681
08bc2431
MM
2682 /* Permit type-punning when accessing a union, provided the access
2683 is directly through the union. For example, this code does not
2684 permit taking the address of a union member and then storing
2685 through it. Even the type-punning allowed here is a GCC
2686 extension, albeit a common and useful one; the C standard says
2687 that such accesses have implementation-defined behavior. */
2688 for (u = t;
2689 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
2690 u = TREE_OPERAND (u, 0))
2691 if (TREE_CODE (u) == COMPONENT_REF
2692 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
2693 return 0;
ece32014 2694
74d86f4f 2695 /* That's all the expressions we handle specially. */
3f75a254 2696 if (!TYPE_P (t))
74d86f4f
RH
2697 return -1;
2698
95bd1dd7 2699 /* The C standard guarantees that any object may be accessed via an
74d86f4f
RH
2700 lvalue that has character type. */
2701 if (t == char_type_node
2702 || t == signed_char_type_node
2703 || t == unsigned_char_type_node)
3bdf5ad1 2704 return 0;
3932261a 2705
d18b1ed8 2706 /* If it has the may_alias attribute, it can alias anything. */
74d86f4f 2707 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t)))
d18b1ed8
OS
2708 return 0;
2709
f824e5c3
RK
2710 /* The C standard specifically allows aliasing between signed and
2711 unsigned variants of the same type. We treat the signed
2712 variant as canonical. */
8df83eae 2713 if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
8f215dce 2714 {
ceef8ce4 2715 tree t1 = c_common_signed_type (t);
f824e5c3 2716
8f215dce
JJ
2717 /* t1 == t can happen for boolean nodes which are always unsigned. */
2718 if (t1 != t)
2719 return get_alias_set (t1);
2720 }
3bdf5ad1 2721 else if (POINTER_TYPE_P (t))
02af3af6 2722 {
3bdf5ad1 2723 tree t1;
02af3af6
MS
2724
2725 /* Unfortunately, there is no canonical form of a pointer type.
2726 In particular, if we have `typedef int I', then `int *', and
2727 `I *' are different types. So, we have to pick a canonical
2728 representative. We do this below.
d125d268 2729
b61148dd
MM
2730 Technically, this approach is actually more conservative that
2731 it needs to be. In particular, `const int *' and `int *'
684d9f3b 2732 should be in different alias sets, according to the C and C++
b61148dd
MM
2733 standard, since their types are not the same, and so,
2734 technically, an `int **' and `const int **' cannot point at
2735 the same thing.
2736
6de9cd9a 2737 But, the standard is wrong. In particular, this code is
b61148dd
MM
2738 legal C++:
2739
2740 int *ip;
2741 int **ipp = &ip;
162f92bb 2742 const int* const* cipp = ipp;
b61148dd 2743
6de9cd9a 2744 And, it doesn't make sense for that to be legal unless you
b61148dd
MM
2745 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
2746 the pointed-to types. This issue has been reported to the
2747 C++ committee. */
12e1243e 2748 t1 = build_type_no_quals (t);
3bdf5ad1
RK
2749 if (t1 != t)
2750 return get_alias_set (t1);
02af3af6 2751 }
ece32014 2752
6de9cd9a
DN
2753 /* Handle the case of multiple type nodes referring to "the same" type,
2754 which occurs with IMA. These share an alias set. FIXME: Currently only
2755 C90 is handled. (In C99 type compatibility is not transitive, which
2756 complicates things mightily. The alias set splay trees can theoretically
2757 represent this, but insertion is tricky when you consider all the
2758 different orders things might arrive in.) */
2759
2760 if (c_language != clk_c || flag_isoc99)
2761 return -1;
2762
9cf737f8 2763 /* Save time if there's only one input file. */
d974312d 2764 if (num_in_fnames == 1)
6de9cd9a
DN
2765 return -1;
2766
2767 /* Pointers need special handling if they point to any type that
2768 needs special handling (below). */
2769 if (TREE_CODE (t) == POINTER_TYPE)
2770 {
2771 tree t2;
2772 /* Find bottom type under any nested POINTERs. */
9f63daea 2773 for (t2 = TREE_TYPE (t);
6de9cd9a
DN
2774 TREE_CODE (t2) == POINTER_TYPE;
2775 t2 = TREE_TYPE (t2))
2776 ;
9f63daea 2777 if (TREE_CODE (t2) != RECORD_TYPE
6de9cd9a
DN
2778 && TREE_CODE (t2) != ENUMERAL_TYPE
2779 && TREE_CODE (t2) != QUAL_UNION_TYPE
2780 && TREE_CODE (t2) != UNION_TYPE)
2781 return -1;
2782 if (TYPE_SIZE (t2) == 0)
2783 return -1;
2784 }
2785 /* These are the only cases that need special handling. */
9f63daea 2786 if (TREE_CODE (t) != RECORD_TYPE
6de9cd9a
DN
2787 && TREE_CODE (t) != ENUMERAL_TYPE
2788 && TREE_CODE (t) != QUAL_UNION_TYPE
2789 && TREE_CODE (t) != UNION_TYPE
2790 && TREE_CODE (t) != POINTER_TYPE)
2791 return -1;
2792 /* Undefined? */
2793 if (TYPE_SIZE (t) == 0)
2794 return -1;
2795
9f63daea 2796 /* Look up t in hash table. Only one of the compatible types within each
6de9cd9a
DN
2797 alias set is recorded in the table. */
2798 if (!type_hash_table)
4fe52ce9 2799 type_hash_table = htab_create_ggc (1021, c_type_hash,
6de9cd9a
DN
2800 (htab_eq) lang_hooks.types_compatible_p,
2801 NULL);
2802 slot = htab_find_slot (type_hash_table, t, INSERT);
2803 if (*slot != NULL)
6a3203c8
AP
2804 {
2805 TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
2806 return TYPE_ALIAS_SET ((tree)*slot);
2807 }
6de9cd9a
DN
2808 else
2809 /* Our caller will assign and record (in t) a new alias set; all we need
2810 to do is remember t in the hash table. */
2811 *slot = t;
2812
3bdf5ad1 2813 return -1;
41472af8 2814}
0213a355 2815\f
fa72b064 2816/* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
ea793912
GDR
2817 second parameter indicates which OPERATOR is being applied. The COMPLAIN
2818 flag controls whether we should diagnose possibly ill-formed
2819 constructs or not. */
03a08664 2820
0213a355 2821tree
03a08664 2822c_sizeof_or_alignof_type (tree type, bool is_sizeof, int complain)
0213a355 2823{
fa72b064
GDR
2824 const char *op_name;
2825 tree value = NULL;
2826 enum tree_code type_code = TREE_CODE (type);
35b1a6fa 2827
03a08664 2828 op_name = is_sizeof ? "sizeof" : "__alignof__";
35b1a6fa 2829
fa72b064 2830 if (type_code == FUNCTION_TYPE)
0213a355 2831 {
03a08664 2832 if (is_sizeof)
fa72b064 2833 {
ea793912 2834 if (complain && (pedantic || warn_pointer_arith))
bda67431 2835 pedwarn ("invalid application of %<sizeof%> to a function type");
fa72b064
GDR
2836 value = size_one_node;
2837 }
2838 else
2839 value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
2840 }
2841 else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
2842 {
35b1a6fa 2843 if (type_code == VOID_TYPE
ea793912 2844 && complain && (pedantic || warn_pointer_arith))
bda67431 2845 pedwarn ("invalid application of %qs to a void type", op_name);
fa72b064 2846 value = size_one_node;
0213a355 2847 }
0213a355
JM
2848 else if (!COMPLETE_TYPE_P (type))
2849 {
ea793912 2850 if (complain)
bda67431 2851 error ("invalid application of %qs to incomplete type %qT ",
d5a10cf0 2852 op_name, type);
fa72b064 2853 value = size_zero_node;
0213a355
JM
2854 }
2855 else
fa72b064 2856 {
03a08664 2857 if (is_sizeof)
fa72b064
GDR
2858 /* Convert in case a char is more than one unit. */
2859 value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
2860 size_int (TYPE_PRECISION (char_type_node)
2861 / BITS_PER_UNIT));
2862 else
a4e9ffe5 2863 value = size_int (TYPE_ALIGN_UNIT (type));
fa72b064 2864 }
0213a355 2865
fa72b064
GDR
2866 /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
2867 TYPE_IS_SIZETYPE means that certain things (like overflow) will
2868 never happen. However, this node should really have type
2869 `size_t', which is just a typedef for an ordinary integer type. */
4c7a6c1b 2870 value = fold_convert (size_type_node, value);
4094f4d2 2871 gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
35b1a6fa 2872
fa72b064 2873 return value;
0213a355
JM
2874}
2875
2876/* Implement the __alignof keyword: Return the minimum required
2877 alignment of EXPR, measured in bytes. For VAR_DECL's and
2878 FIELD_DECL's return DECL_ALIGN (which can be set from an
2879 "aligned" __attribute__ specification). */
7f4edbcb 2880
0213a355 2881tree
35b1a6fa 2882c_alignof_expr (tree expr)
0213a355
JM
2883{
2884 tree t;
2885
2886 if (TREE_CODE (expr) == VAR_DECL)
a4e9ffe5 2887 t = size_int (DECL_ALIGN_UNIT (expr));
35b1a6fa 2888
0213a355
JM
2889 else if (TREE_CODE (expr) == COMPONENT_REF
2890 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
2891 {
bda67431 2892 error ("%<__alignof%> applied to a bit-field");
0213a355
JM
2893 t = size_one_node;
2894 }
2895 else if (TREE_CODE (expr) == COMPONENT_REF
173bf5be 2896 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
a4e9ffe5 2897 t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
35b1a6fa 2898
0213a355
JM
2899 else if (TREE_CODE (expr) == INDIRECT_REF)
2900 {
2901 tree t = TREE_OPERAND (expr, 0);
2902 tree best = t;
2903 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
35b1a6fa 2904
4c7a6c1b 2905 while ((TREE_CODE (t) == NOP_EXPR || TREE_CODE (t) == CONVERT_EXPR)
173bf5be 2906 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
0213a355
JM
2907 {
2908 int thisalign;
2909
2910 t = TREE_OPERAND (t, 0);
2911 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2912 if (thisalign > bestalign)
2913 best = t, bestalign = thisalign;
2914 }
2915 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
2916 }
2917 else
2918 return c_alignof (TREE_TYPE (expr));
2919
4c7a6c1b 2920 return fold_convert (size_type_node, t);
0213a355
JM
2921}
2922\f
df061a43
RS
2923/* Handle C and C++ default attributes. */
2924
2925enum built_in_attribute
2926{
2927#define DEF_ATTR_NULL_TREE(ENUM) ENUM,
2928#define DEF_ATTR_INT(ENUM, VALUE) ENUM,
2929#define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
2930#define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
df061a43
RS
2931#include "builtin-attrs.def"
2932#undef DEF_ATTR_NULL_TREE
2933#undef DEF_ATTR_INT
2934#undef DEF_ATTR_IDENT
2935#undef DEF_ATTR_TREE_LIST
df061a43
RS
2936 ATTR_LAST
2937};
2938
2939static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
2940
35b1a6fa 2941static void c_init_attributes (void);
df061a43 2942
7f4edbcb 2943/* Build tree nodes and builtin functions common to both C and C++ language
6bcedb4e 2944 frontends. */
3bdf5ad1 2945
7f4edbcb 2946void
35b1a6fa 2947c_common_nodes_and_builtins (void)
7f4edbcb 2948{
35b1a6fa 2949 enum builtin_type
10841285
MM
2950 {
2951#define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
2952#define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
2953#define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
2954#define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
2955#define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
2956#define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
10a0d495
JJ
2957#define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
2958#define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) \
2959 NAME,
10841285
MM
2960#define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
2961#define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
2962#define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
08291658 2963#define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
10a0d495
JJ
2964#define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
2965#define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
2966 NAME,
10841285
MM
2967#define DEF_POINTER_TYPE(NAME, TYPE) NAME,
2968#include "builtin-types.def"
2969#undef DEF_PRIMITIVE_TYPE
2970#undef DEF_FUNCTION_TYPE_0
2971#undef DEF_FUNCTION_TYPE_1
2972#undef DEF_FUNCTION_TYPE_2
2973#undef DEF_FUNCTION_TYPE_3
2974#undef DEF_FUNCTION_TYPE_4
10a0d495
JJ
2975#undef DEF_FUNCTION_TYPE_5
2976#undef DEF_FUNCTION_TYPE_6
10841285
MM
2977#undef DEF_FUNCTION_TYPE_VAR_0
2978#undef DEF_FUNCTION_TYPE_VAR_1
2979#undef DEF_FUNCTION_TYPE_VAR_2
08291658 2980#undef DEF_FUNCTION_TYPE_VAR_3
10a0d495
JJ
2981#undef DEF_FUNCTION_TYPE_VAR_4
2982#undef DEF_FUNCTION_TYPE_VAR_5
10841285
MM
2983#undef DEF_POINTER_TYPE
2984 BT_LAST
2985 };
2986
2987 typedef enum builtin_type builtin_type;
2988
39627fed 2989 tree builtin_types[(int) BT_LAST + 1];
eaa7c03f
JM
2990 int wchar_type_size;
2991 tree array_domain_type;
9f720c3e 2992 tree va_list_ref_type_node;
daf68dd7 2993 tree va_list_arg_type_node;
d3707adb 2994
eaa7c03f 2995 /* Define `int' and `char' first so that dbx will output them first. */
6496a589 2996 record_builtin_type (RID_INT, NULL, integer_type_node);
eaa7c03f
JM
2997 record_builtin_type (RID_CHAR, "char", char_type_node);
2998
2999 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
3000 "unsigned long", "long long unsigned" and "unsigned short" were in C++
3001 but not C. Are the conditionals here needed? */
37fa72e9 3002 if (c_dialect_cxx ())
6496a589 3003 record_builtin_type (RID_SIGNED, NULL, integer_type_node);
eaa7c03f
JM
3004 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
3005 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
3006 record_builtin_type (RID_MAX, "long unsigned int",
3007 long_unsigned_type_node);
37fa72e9 3008 if (c_dialect_cxx ())
eaa7c03f
JM
3009 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
3010 record_builtin_type (RID_MAX, "long long int",
3011 long_long_integer_type_node);
3012 record_builtin_type (RID_MAX, "long long unsigned int",
3013 long_long_unsigned_type_node);
37fa72e9 3014 if (c_dialect_cxx ())
eaa7c03f
JM
3015 record_builtin_type (RID_MAX, "long long unsigned",
3016 long_long_unsigned_type_node);
3017 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
3018 record_builtin_type (RID_MAX, "short unsigned int",
3019 short_unsigned_type_node);
37fa72e9 3020 if (c_dialect_cxx ())
eaa7c03f
JM
3021 record_builtin_type (RID_MAX, "unsigned short",
3022 short_unsigned_type_node);
3023
3024 /* Define both `signed char' and `unsigned char'. */
3025 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
3026 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
3027
b0c48229
NB
3028 /* These are types that c_common_type_for_size and
3029 c_common_type_for_mode use. */
ae2bcd98
RS
3030 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3031 intQI_type_node));
3032 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3033 intHI_type_node));
3034 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3035 intSI_type_node));
3036 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3037 intDI_type_node));
eaa7c03f 3038#if HOST_BITS_PER_WIDE_INT >= 64
1e1b8649
AP
3039 if (targetm.scalar_mode_supported_p (TImode))
3040 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3041 get_identifier ("__int128_t"),
3042 intTI_type_node));
eaa7c03f 3043#endif
ae2bcd98
RS
3044 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3045 unsigned_intQI_type_node));
3046 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3047 unsigned_intHI_type_node));
3048 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3049 unsigned_intSI_type_node));
3050 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3051 unsigned_intDI_type_node));
eaa7c03f 3052#if HOST_BITS_PER_WIDE_INT >= 64
1e1b8649
AP
3053 if (targetm.scalar_mode_supported_p (TImode))
3054 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3055 get_identifier ("__uint128_t"),
3056 unsigned_intTI_type_node));
eaa7c03f
JM
3057#endif
3058
3059 /* Create the widest literal types. */
3060 widest_integer_literal_type_node
3061 = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
ae2bcd98
RS
3062 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3063 widest_integer_literal_type_node));
eaa7c03f
JM
3064
3065 widest_unsigned_literal_type_node
3066 = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
ae2bcd98
RS
3067 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3068 widest_unsigned_literal_type_node));
eaa7c03f
JM
3069
3070 /* `unsigned long' is the standard type for sizeof.
3071 Note that stddef.h uses `unsigned long',
3072 and this must agree, even if long and int are the same size. */
c9f8536c 3073 size_type_node =
eaa7c03f 3074 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
c9f8536c
MM
3075 signed_size_type_node = c_common_signed_type (size_type_node);
3076 set_sizetype (size_type_node);
eaa7c03f 3077
d1c38823
ZD
3078 pid_type_node =
3079 TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
3080
eaa7c03f
JM
3081 build_common_tree_nodes_2 (flag_short_double);
3082
6496a589
KG
3083 record_builtin_type (RID_FLOAT, NULL, float_type_node);
3084 record_builtin_type (RID_DOUBLE, NULL, double_type_node);
eaa7c03f
JM
3085 record_builtin_type (RID_MAX, "long double", long_double_type_node);
3086
ae2bcd98
RS
3087 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3088 get_identifier ("complex int"),
3089 complex_integer_type_node));
3090 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3091 get_identifier ("complex float"),
3092 complex_float_type_node));
3093 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3094 get_identifier ("complex double"),
3095 complex_double_type_node));
3096 lang_hooks.decls.pushdecl
43577e6b
NB
3097 (build_decl (TYPE_DECL, get_identifier ("complex long double"),
3098 complex_long_double_type_node));
eaa7c03f 3099
498c0f27
JJ
3100 if (c_dialect_cxx ())
3101 /* For C++, make fileptr_type_node a distinct void * type until
3102 FILE type is defined. */
8dd16ecc 3103 fileptr_type_node = build_variant_type_copy (ptr_type_node);
498c0f27 3104
6496a589 3105 record_builtin_type (RID_VOID, NULL, void_type_node);
eaa7c03f 3106
8c27b7d4 3107 /* This node must not be shared. */
4a90aeeb 3108 void_zero_node = make_node (INTEGER_CST);
10841285
MM
3109 TREE_TYPE (void_zero_node) = void_type_node;
3110
eaa7c03f
JM
3111 void_list_node = build_void_list_node ();
3112
3113 /* Make a type to be the domain of a few array types
3114 whose domains don't really matter.
3115 200 is small enough that it always fits in size_t
3116 and large enough that it can hold most function names for the
3117 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
3118 array_domain_type = build_index_type (size_int (200));
3119
3120 /* Make a type for arrays of characters.
3121 With luck nothing will ever really depend on the length of this
3122 array type. */
3123 char_array_type_node
3124 = build_array_type (char_type_node, array_domain_type);
3125
3126 /* Likewise for arrays of ints. */
3127 int_array_type_node
3128 = build_array_type (integer_type_node, array_domain_type);
3129
10841285
MM
3130 string_type_node = build_pointer_type (char_type_node);
3131 const_string_type_node
3132 = build_pointer_type (build_qualified_type
3133 (char_type_node, TYPE_QUAL_CONST));
3134
eaa7c03f 3135 /* This is special for C++ so functions can be overloaded. */
a11eba95 3136 wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
eaa7c03f
JM
3137 wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
3138 wchar_type_size = TYPE_PRECISION (wchar_type_node);
37fa72e9 3139 if (c_dialect_cxx ())
eaa7c03f 3140 {
8df83eae 3141 if (TYPE_UNSIGNED (wchar_type_node))
eaa7c03f
JM
3142 wchar_type_node = make_unsigned_type (wchar_type_size);
3143 else
3144 wchar_type_node = make_signed_type (wchar_type_size);
3145 record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
3146 }
3147 else
3148 {
ceef8ce4
NB
3149 signed_wchar_type_node = c_common_signed_type (wchar_type_node);
3150 unsigned_wchar_type_node = c_common_unsigned_type (wchar_type_node);
eaa7c03f
JM
3151 }
3152
3153 /* This is for wide string constants. */
3154 wchar_array_type_node
3155 = build_array_type (wchar_type_node, array_domain_type);
3156
5fd8e536
JM
3157 wint_type_node =
3158 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
3159
3160 intmax_type_node =
3161 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
3162 uintmax_type_node =
3163 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
3164
3165 default_function_type = build_function_type (integer_type_node, NULL_TREE);
3166 ptrdiff_type_node
3167 = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
ceef8ce4 3168 unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
5fd8e536 3169
ae2bcd98 3170 lang_hooks.decls.pushdecl
43577e6b
NB
3171 (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
3172 va_list_type_node));
daf68dd7 3173
daf68dd7 3174 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
9f720c3e
GK
3175 {
3176 va_list_arg_type_node = va_list_ref_type_node =
3177 build_pointer_type (TREE_TYPE (va_list_type_node));
3178 }
daf68dd7 3179 else
9f720c3e
GK
3180 {
3181 va_list_arg_type_node = va_list_type_node;
3182 va_list_ref_type_node = build_reference_type (va_list_type_node);
3183 }
35b1a6fa 3184
10841285
MM
3185#define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
3186 builtin_types[(int) ENUM] = VALUE;
3187#define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
3188 builtin_types[(int) ENUM] \
3189 = build_function_type (builtin_types[(int) RETURN], \
3190 void_list_node);
3191#define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
3192 builtin_types[(int) ENUM] \
3193 = build_function_type (builtin_types[(int) RETURN], \
3194 tree_cons (NULL_TREE, \
3195 builtin_types[(int) ARG1], \
3196 void_list_node));
3197#define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
3198 builtin_types[(int) ENUM] \
35b1a6fa 3199 = build_function_type \
10841285
MM
3200 (builtin_types[(int) RETURN], \
3201 tree_cons (NULL_TREE, \
3202 builtin_types[(int) ARG1], \
3203 tree_cons (NULL_TREE, \
3204 builtin_types[(int) ARG2], \
3205 void_list_node)));
3206#define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3207 builtin_types[(int) ENUM] \
3208 = build_function_type \
3209 (builtin_types[(int) RETURN], \
3210 tree_cons (NULL_TREE, \
3211 builtin_types[(int) ARG1], \
3212 tree_cons (NULL_TREE, \
3213 builtin_types[(int) ARG2], \
3214 tree_cons (NULL_TREE, \
3215 builtin_types[(int) ARG3], \
3216 void_list_node))));
3217#define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3218 builtin_types[(int) ENUM] \
3219 = build_function_type \
3220 (builtin_types[(int) RETURN], \
3221 tree_cons (NULL_TREE, \
3222 builtin_types[(int) ARG1], \
3223 tree_cons (NULL_TREE, \
3224 builtin_types[(int) ARG2], \
35b1a6fa 3225 tree_cons \
10841285 3226 (NULL_TREE, \
35b1a6fa 3227 builtin_types[(int) ARG3], \
10841285
MM
3228 tree_cons (NULL_TREE, \
3229 builtin_types[(int) ARG4], \
3230 void_list_node)))));
10a0d495
JJ
3231#define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3232 builtin_types[(int) ENUM] \
3233 = build_function_type \
3234 (builtin_types[(int) RETURN], \
3235 tree_cons (NULL_TREE, \
3236 builtin_types[(int) ARG1], \
3237 tree_cons (NULL_TREE, \
3238 builtin_types[(int) ARG2], \
3239 tree_cons \
3240 (NULL_TREE, \
3241 builtin_types[(int) ARG3], \
3242 tree_cons (NULL_TREE, \
3243 builtin_types[(int) ARG4], \
3244 tree_cons (NULL_TREE, \
3245 builtin_types[(int) ARG5],\
3246 void_list_node))))));
3247#define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3248 ARG6) \
3249 builtin_types[(int) ENUM] \
3250 = build_function_type \
3251 (builtin_types[(int) RETURN], \
3252 tree_cons (NULL_TREE, \
3253 builtin_types[(int) ARG1], \
3254 tree_cons (NULL_TREE, \
3255 builtin_types[(int) ARG2], \
3256 tree_cons \
3257 (NULL_TREE, \
3258 builtin_types[(int) ARG3], \
3259 tree_cons \
3260 (NULL_TREE, \
3261 builtin_types[(int) ARG4], \
3262 tree_cons (NULL_TREE, \
3263 builtin_types[(int) ARG5], \
3264 tree_cons (NULL_TREE, \
3265 builtin_types[(int) ARG6],\
3266 void_list_node)))))));
10841285
MM
3267#define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
3268 builtin_types[(int) ENUM] \
3269 = build_function_type (builtin_types[(int) RETURN], NULL_TREE);
3270#define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
3271 builtin_types[(int) ENUM] \
35b1a6fa 3272 = build_function_type (builtin_types[(int) RETURN], \
10841285
MM
3273 tree_cons (NULL_TREE, \
3274 builtin_types[(int) ARG1], \
ad3fd36f
KG
3275 NULL_TREE));
3276
10841285
MM
3277#define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
3278 builtin_types[(int) ENUM] \
35b1a6fa 3279 = build_function_type \
10841285
MM
3280 (builtin_types[(int) RETURN], \
3281 tree_cons (NULL_TREE, \
3282 builtin_types[(int) ARG1], \
3283 tree_cons (NULL_TREE, \
3284 builtin_types[(int) ARG2], \
3285 NULL_TREE)));
08291658
RS
3286
3287#define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3288 builtin_types[(int) ENUM] \
35b1a6fa 3289 = build_function_type \
08291658
RS
3290 (builtin_types[(int) RETURN], \
3291 tree_cons (NULL_TREE, \
3292 builtin_types[(int) ARG1], \
3293 tree_cons (NULL_TREE, \
3294 builtin_types[(int) ARG2], \
3295 tree_cons (NULL_TREE, \
3296 builtin_types[(int) ARG3], \
3297 NULL_TREE))));
3298
10a0d495
JJ
3299#define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3300 builtin_types[(int) ENUM] \
3301 = build_function_type \
3302 (builtin_types[(int) RETURN], \
3303 tree_cons (NULL_TREE, \
3304 builtin_types[(int) ARG1], \
3305 tree_cons (NULL_TREE, \
3306 builtin_types[(int) ARG2], \
3307 tree_cons (NULL_TREE, \
3308 builtin_types[(int) ARG3], \
3309 tree_cons (NULL_TREE, \
3310 builtin_types[(int) ARG4],\
3311 NULL_TREE)))));
3312
3313#define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, \
3314 ARG5) \
3315 builtin_types[(int) ENUM] \
3316 = build_function_type \
3317 (builtin_types[(int) RETURN], \
3318 tree_cons (NULL_TREE, \
3319 builtin_types[(int) ARG1], \
3320 tree_cons (NULL_TREE, \
3321 builtin_types[(int) ARG2], \
3322 tree_cons \
3323 (NULL_TREE, \
3324 builtin_types[(int) ARG3], \
3325 tree_cons (NULL_TREE, \
3326 builtin_types[(int) ARG4], \
3327 tree_cons (NULL_TREE, \
3328 builtin_types[(int) ARG5],\
3329 NULL_TREE))))));
3330
10841285
MM
3331#define DEF_POINTER_TYPE(ENUM, TYPE) \
3332 builtin_types[(int) ENUM] \
3333 = build_pointer_type (builtin_types[(int) TYPE]);
3334#include "builtin-types.def"
3335#undef DEF_PRIMITIVE_TYPE
3336#undef DEF_FUNCTION_TYPE_1
3337#undef DEF_FUNCTION_TYPE_2
3338#undef DEF_FUNCTION_TYPE_3
3339#undef DEF_FUNCTION_TYPE_4
10a0d495
JJ
3340#undef DEF_FUNCTION_TYPE_5
3341#undef DEF_FUNCTION_TYPE_6
10841285
MM
3342#undef DEF_FUNCTION_TYPE_VAR_0
3343#undef DEF_FUNCTION_TYPE_VAR_1
08291658
RS
3344#undef DEF_FUNCTION_TYPE_VAR_2
3345#undef DEF_FUNCTION_TYPE_VAR_3
10a0d495
JJ
3346#undef DEF_FUNCTION_TYPE_VAR_4
3347#undef DEF_FUNCTION_TYPE_VAR_5
10841285 3348#undef DEF_POINTER_TYPE
39627fed 3349 builtin_types[(int) BT_LAST] = NULL_TREE;
10841285 3350
03aa99d4 3351 c_init_attributes ();
df061a43 3352
c6a912da
RH
3353#define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
3354 NONANSI_P, ATTRS, IMPLICIT, COND) \
3355 if (NAME && COND) \
9bc15050
RG
3356 def_builtin_1 (ENUM, NAME, CLASS, \
3357 builtin_types[(int) TYPE], \
3358 builtin_types[(int) LIBTYPE], \
3359 BOTH_P, FALLBACK_P, NONANSI_P, \
3360 built_in_attributes[(int) ATTRS], IMPLICIT);
10841285
MM
3361#include "builtins.def"
3362#undef DEF_BUILTIN
52a11cbf 3363
c6a912da
RH
3364 build_common_builtin_nodes ();
3365
5fd9b178 3366 targetm.init_builtins ();
c31b8e1b
ZW
3367 if (flag_mudflap)
3368 mudflap_init ();
4677862a 3369
5b47282c 3370 main_identifier_node = get_identifier ("main");
b2f97e4a
MM
3371
3372 /* Create the built-in __null node. It is important that this is
3373 not shared. */
3374 null_node = make_node (INTEGER_CST);
3375 TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
7f4edbcb 3376}
d3707adb 3377
b482789c
MA
3378/* Look up the function in built_in_decls that corresponds to DECL
3379 and set ASMSPEC as its user assembler name. DECL must be a
6c6cfbfd 3380 function decl that declares a builtin. */
b482789c
MA
3381
3382void
3383set_builtin_user_assembler_name (tree decl, const char *asmspec)
3384{
3385 tree builtin;
3386 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
3387 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
3388 && asmspec != 0);
3389
3390 builtin = built_in_decls [DECL_FUNCTION_CODE (decl)];
3391 set_user_assembler_name (builtin, asmspec);
3392 if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMCPY)
3393 init_block_move_fn (asmspec);
3394 else if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMSET)
3395 init_block_clear_fn (asmspec);
3396}
3397
d3707adb 3398tree
35b1a6fa 3399build_va_arg (tree expr, tree type)
d3707adb
RH
3400{
3401 return build1 (VA_ARG_EXPR, type, expr);
3402}
fc2aaf30
JM
3403
3404
7d14c755
JM
3405/* Linked list of disabled built-in functions. */
3406
3407typedef struct disabled_builtin
3408{
3409 const char *name;
3410 struct disabled_builtin *next;
3411} disabled_builtin;
3412static disabled_builtin *disabled_builtins = NULL;
3413
35b1a6fa 3414static bool builtin_function_disabled_p (const char *);
7d14c755
JM
3415
3416/* Disable a built-in function specified by -fno-builtin-NAME. If NAME
3417 begins with "__builtin_", give an error. */
3418
3419void
35b1a6fa 3420disable_builtin_function (const char *name)
7d14c755
JM
3421{
3422 if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
bda67431 3423 error ("cannot disable built-in function %qs", name);
7d14c755
JM
3424 else
3425 {
1ad463f4
BI
3426 disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
3427 new_disabled_builtin->name = name;
3428 new_disabled_builtin->next = disabled_builtins;
3429 disabled_builtins = new_disabled_builtin;
7d14c755
JM
3430 }
3431}
3432
3433
3434/* Return true if the built-in function NAME has been disabled, false
3435 otherwise. */
3436
3437static bool
35b1a6fa 3438builtin_function_disabled_p (const char *name)
7d14c755
JM
3439{
3440 disabled_builtin *p;
3441 for (p = disabled_builtins; p != NULL; p = p->next)
3442 {
3443 if (strcmp (name, p->name) == 0)
3444 return true;
3445 }
3446 return false;
3447}
3448
3449
9bc15050
RG
3450/* Worker for DEF_BUILTIN.
3451 Possibly define a builtin function with one or two names.
3452 Does not declare a non-__builtin_ function if flag_no_builtin, or if
3453 nonansi_p and flag_no_nonansi_builtin. */
fc2aaf30 3454
9bc15050
RG
3455static void
3456def_builtin_1 (enum built_in_function fncode,
3457 const char *name,
3458 enum built_in_class fnclass,
3459 tree fntype, tree libtype,
3460 bool both_p, bool fallback_p, bool nonansi_p,
3461 tree fnattrs, bool implicit_p)
fc2aaf30 3462{
9bc15050
RG
3463 tree decl;
3464 const char *libname;
3465
3466 gcc_assert ((!both_p && !fallback_p)
3467 || !strncmp (name, "__builtin_",
3468 strlen ("__builtin_")));
3469
3470 libname = name + strlen ("__builtin_");
3471 decl = lang_hooks.builtin_function (name, fntype, fncode, fnclass,
3472 (fallback_p ? libname : NULL),
3473 fnattrs);
3474 if (both_p
3475 && !flag_no_builtin && !builtin_function_disabled_p (libname)
7d14c755 3476 && !(nonansi_p && flag_no_nonansi_builtin))
9bc15050
RG
3477 lang_hooks.builtin_function (libname, libtype, fncode, fnclass,
3478 NULL, fnattrs);
7f685e17 3479
9bc15050
RG
3480 built_in_decls[(int) fncode] = decl;
3481 if (implicit_p)
3482 implicit_built_in_decls[(int) fncode] = decl;
fc2aaf30 3483}
c530479e 3484\f
d72040f5
RH
3485/* Nonzero if the type T promotes to int. This is (nearly) the
3486 integral promotions defined in ISO C99 6.3.1.1/2. */
3487
3488bool
35b1a6fa 3489c_promoting_integer_type_p (tree t)
d72040f5
RH
3490{
3491 switch (TREE_CODE (t))
3492 {
3493 case INTEGER_TYPE:
3494 return (TYPE_MAIN_VARIANT (t) == char_type_node
3495 || TYPE_MAIN_VARIANT (t) == signed_char_type_node
3496 || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
3497 || TYPE_MAIN_VARIANT (t) == short_integer_type_node
c6c04fca
RL
3498 || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
3499 || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
d72040f5
RH
3500
3501 case ENUMERAL_TYPE:
3502 /* ??? Technically all enumerations not larger than an int
3503 promote to an int. But this is used along code paths
3504 that only want to notice a size change. */
3505 return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
3506
3507 case BOOLEAN_TYPE:
3508 return 1;
3509
3510 default:
3511 return 0;
3512 }
3513}
3514
c530479e
RH
3515/* Return 1 if PARMS specifies a fixed number of parameters
3516 and none of their types is affected by default promotions. */
3517
3518int
35b1a6fa 3519self_promoting_args_p (tree parms)
c530479e 3520{
b3694847 3521 tree t;
c530479e
RH
3522 for (t = parms; t; t = TREE_CHAIN (t))
3523 {
b3694847 3524 tree type = TREE_VALUE (t);
7e8176d7 3525
c530479e
RH
3526 if (TREE_CHAIN (t) == 0 && type != void_type_node)
3527 return 0;
3528
3529 if (type == 0)
3530 return 0;
3531
3532 if (TYPE_MAIN_VARIANT (type) == float_type_node)
3533 return 0;
3534
d72040f5 3535 if (c_promoting_integer_type_p (type))
c530479e
RH
3536 return 0;
3537 }
3538 return 1;
3539}
5eda3d66 3540
0a7394bc
MM
3541/* Recursively examines the array elements of TYPE, until a non-array
3542 element type is found. */
3543
3544tree
35b1a6fa 3545strip_array_types (tree type)
0a7394bc
MM
3546{
3547 while (TREE_CODE (type) == ARRAY_TYPE)
3548 type = TREE_TYPE (type);
3549
3550 return type;
3551}
3552
12ea3302
GDR
3553/* Recursively remove any '*' or '&' operator from TYPE. */
3554tree
3555strip_pointer_operator (tree t)
3556{
3557 while (POINTER_TYPE_P (t))
3558 t = TREE_TYPE (t);
3559 return t;
3560}
3561
8f17b5c5
MM
3562/* Used to compare case labels. K1 and K2 are actually tree nodes
3563 representing case labels, or NULL_TREE for a `default' label.
3564 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
3565 K2, and 0 if K1 and K2 are equal. */
3566
3567int
35b1a6fa 3568case_compare (splay_tree_key k1, splay_tree_key k2)
8f17b5c5
MM
3569{
3570 /* Consider a NULL key (such as arises with a `default' label) to be
3571 smaller than anything else. */
3572 if (!k1)
3573 return k2 ? -1 : 0;
3574 else if (!k2)
3575 return k1 ? 1 : 0;
3576
3577 return tree_int_cst_compare ((tree) k1, (tree) k2);
3578}
3579
3580/* Process a case label for the range LOW_VALUE ... HIGH_VALUE. If
3581 LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
3582 actually a `default' label. If only HIGH_VALUE is NULL_TREE, then
3583 case label was declared using the usual C/C++ syntax, rather than
3584 the GNU case range extension. CASES is a tree containing all the
3585 case ranges processed so far; COND is the condition for the
8c161995
RH
3586 switch-statement itself. Returns the CASE_LABEL_EXPR created, or
3587 ERROR_MARK_NODE if no CASE_LABEL_EXPR is created. */
8f17b5c5
MM
3588
3589tree
a6c0a76c
SB
3590c_add_case_label (splay_tree cases, tree cond, tree orig_type,
3591 tree low_value, tree high_value)
8f17b5c5
MM
3592{
3593 tree type;
3594 tree label;
3595 tree case_label;
3596 splay_tree_node node;
3597
3598 /* Create the LABEL_DECL itself. */
6de9cd9a 3599 label = create_artificial_label ();
8f17b5c5
MM
3600
3601 /* If there was an error processing the switch condition, bail now
3602 before we get more confused. */
3603 if (!cond || cond == error_mark_node)
6de9cd9a 3604 goto error_out;
8f17b5c5 3605
35b1a6fa
AJ
3606 if ((low_value && TREE_TYPE (low_value)
3607 && POINTER_TYPE_P (TREE_TYPE (low_value)))
8f17b5c5
MM
3608 || (high_value && TREE_TYPE (high_value)
3609 && POINTER_TYPE_P (TREE_TYPE (high_value))))
522ddfa2
JM
3610 {
3611 error ("pointers are not permitted as case values");
3612 goto error_out;
3613 }
8f17b5c5
MM
3614
3615 /* Case ranges are a GNU extension. */
3616 if (high_value && pedantic)
37fa72e9 3617 pedwarn ("range expressions in switch statements are non-standard");
8f17b5c5
MM
3618
3619 type = TREE_TYPE (cond);
3620 if (low_value)
3621 {
3622 low_value = check_case_value (low_value);
3623 low_value = convert_and_check (type, low_value);
c0e22534
NS
3624 if (low_value == error_mark_node)
3625 goto error_out;
8f17b5c5
MM
3626 }
3627 if (high_value)
3628 {
3629 high_value = check_case_value (high_value);
3630 high_value = convert_and_check (type, high_value);
c0e22534
NS
3631 if (high_value == error_mark_node)
3632 goto error_out;
8f17b5c5
MM
3633 }
3634
c0e22534
NS
3635 if (low_value && high_value)
3636 {
3637 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
3638 really a case range, even though it was written that way.
3639 Remove the HIGH_VALUE to simplify later processing. */
3640 if (tree_int_cst_equal (low_value, high_value))
3641 high_value = NULL_TREE;
3642 else if (!tree_int_cst_lt (low_value, high_value))
3643 warning (0, "empty range specified");
3644 }
8f17b5c5 3645
a6c0a76c
SB
3646 /* See if the case is in range of the type of the original testing
3647 expression. If both low_value and high_value are out of range,
3648 don't insert the case label and return NULL_TREE. */
3649 if (low_value
3f75a254
JM
3650 && !check_case_bounds (type, orig_type,
3651 &low_value, high_value ? &high_value : NULL))
a6c0a76c
SB
3652 return NULL_TREE;
3653
8f17b5c5
MM
3654 /* Look up the LOW_VALUE in the table of case labels we already
3655 have. */
3656 node = splay_tree_lookup (cases, (splay_tree_key) low_value);
3657 /* If there was not an exact match, check for overlapping ranges.
3658 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
3659 that's a `default' label and the only overlap is an exact match. */
3660 if (!node && (low_value || high_value))
3661 {
3662 splay_tree_node low_bound;
3663 splay_tree_node high_bound;
3664
3665 /* Even though there wasn't an exact match, there might be an
3666 overlap between this case range and another case range.
3667 Since we've (inductively) not allowed any overlapping case
3668 ranges, we simply need to find the greatest low case label
3669 that is smaller that LOW_VALUE, and the smallest low case
3670 label that is greater than LOW_VALUE. If there is an overlap
3671 it will occur in one of these two ranges. */
3672 low_bound = splay_tree_predecessor (cases,
3673 (splay_tree_key) low_value);
3674 high_bound = splay_tree_successor (cases,
3675 (splay_tree_key) low_value);
3676
3677 /* Check to see if the LOW_BOUND overlaps. It is smaller than
3678 the LOW_VALUE, so there is no need to check unless the
3679 LOW_BOUND is in fact itself a case range. */
3680 if (low_bound
3681 && CASE_HIGH ((tree) low_bound->value)
3682 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
3683 low_value) >= 0)
3684 node = low_bound;
3685 /* Check to see if the HIGH_BOUND overlaps. The low end of that
3686 range is bigger than the low end of the current range, so we
3687 are only interested if the current range is a real range, and
3688 not an ordinary case label. */
35b1a6fa 3689 else if (high_bound
8f17b5c5
MM
3690 && high_value
3691 && (tree_int_cst_compare ((tree) high_bound->key,
3692 high_value)
3693 <= 0))
3694 node = high_bound;
3695 }
3696 /* If there was an overlap, issue an error. */
3697 if (node)
3698 {
8c161995 3699 tree duplicate = CASE_LABEL ((tree) node->value);
8f17b5c5
MM
3700
3701 if (high_value)
3702 {
3703 error ("duplicate (or overlapping) case value");
ddd2d57e 3704 error ("%Jthis is the first entry overlapping that value", duplicate);
8f17b5c5
MM
3705 }
3706 else if (low_value)
3707 {
3708 error ("duplicate case value") ;
ddd2d57e 3709 error ("%Jpreviously used here", duplicate);
8f17b5c5
MM
3710 }
3711 else
3712 {
3713 error ("multiple default labels in one switch");
ddd2d57e 3714 error ("%Jthis is the first default label", duplicate);
8f17b5c5 3715 }
6de9cd9a 3716 goto error_out;
8f17b5c5
MM
3717 }
3718
3719 /* Add a CASE_LABEL to the statement-tree. */
3720 case_label = add_stmt (build_case_label (low_value, high_value, label));
3721 /* Register this case label in the splay tree. */
35b1a6fa 3722 splay_tree_insert (cases,
8f17b5c5
MM
3723 (splay_tree_key) low_value,
3724 (splay_tree_value) case_label);
3725
3726 return case_label;
6de9cd9a
DN
3727
3728 error_out:
9e14e18f 3729 /* Add a label so that the back-end doesn't think that the beginning of
6de9cd9a 3730 the switch is unreachable. Note that we do not add a case label, as
41806d92 3731 that just leads to duplicates and thence to failure later on. */
6de9cd9a
DN
3732 if (!cases->root)
3733 {
3734 tree t = create_artificial_label ();
9e14e18f 3735 add_stmt (build_stmt (LABEL_EXPR, t));
6de9cd9a
DN
3736 }
3737 return error_mark_node;
3738}
3739
3740/* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
3741 Used to verify that case values match up with enumerator values. */
3742
3743static void
3744match_case_to_enum_1 (tree key, tree type, tree label)
3745{
3746 char buf[2 + 2*HOST_BITS_PER_WIDE_INT/4 + 1];
3747
3748 /* ??? Not working too hard to print the double-word value.
3749 Should perhaps be done with %lwd in the diagnostic routines? */
3750 if (TREE_INT_CST_HIGH (key) == 0)
3751 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_UNSIGNED,
3752 TREE_INT_CST_LOW (key));
3753 else if (!TYPE_UNSIGNED (type)
3754 && TREE_INT_CST_HIGH (key) == -1
3755 && TREE_INT_CST_LOW (key) != 0)
3756 snprintf (buf, sizeof (buf), "-" HOST_WIDE_INT_PRINT_UNSIGNED,
3757 -TREE_INT_CST_LOW (key));
3758 else
3759 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_DOUBLE_HEX,
3760 TREE_INT_CST_HIGH (key), TREE_INT_CST_LOW (key));
3761
3762 if (TYPE_NAME (type) == 0)
d4ee4d25 3763 warning (0, "%Jcase value %qs not in enumerated type",
8c161995 3764 CASE_LABEL (label), buf);
6de9cd9a 3765 else
d4ee4d25 3766 warning (0, "%Jcase value %qs not in enumerated type %qT",
8c161995 3767 CASE_LABEL (label), buf, type);
6de9cd9a
DN
3768}
3769
3770static int
3771match_case_to_enum (splay_tree_node node, void *data)
3772{
3773 tree label = (tree) node->value;
28dab132 3774 tree type = (tree) data;
6de9cd9a
DN
3775
3776 /* Skip default case. */
3777 if (!CASE_LOW (label))
3778 return 0;
3779
3780 /* If TREE_ADDRESSABLE is not set, that means CASE_LOW did not appear
3781 when we did our enum->case scan. Reset our scratch bit after. */
3782 if (!TREE_ADDRESSABLE (label))
3783 match_case_to_enum_1 (CASE_LOW (label), type, label);
3784 else
3785 TREE_ADDRESSABLE (label) = 0;
3786
3787 /* If CASE_HIGH is non-null, we have a range. Here we must search.
3788 Note that the old code in stmt.c did not check for the values in
3789 the range either, just the endpoints. */
3790 if (CASE_HIGH (label))
3791 {
3792 tree chain, key = CASE_HIGH (label);
3793
3794 for (chain = TYPE_VALUES (type);
3795 chain && !tree_int_cst_equal (key, TREE_VALUE (chain));
3796 chain = TREE_CHAIN (chain))
3797 continue;
3798 if (!chain)
3799 match_case_to_enum_1 (key, type, label);
3800 }
3801
3802 return 0;
3803}
3804
fbc315db
ILT
3805/* Handle -Wswitch*. Called from the front end after parsing the
3806 switch construct. */
3807/* ??? Should probably be somewhere generic, since other languages
3808 besides C and C++ would want this. At the moment, however, C/C++
3809 are the only tree-ssa languages that support enumerations at all,
3810 so the point is moot. */
6de9cd9a 3811
fbc315db
ILT
3812void
3813c_do_switch_warnings (splay_tree cases, location_t switch_location,
3814 tree type, tree cond)
6de9cd9a 3815{
9f63daea 3816 splay_tree_node default_node;
6de9cd9a
DN
3817
3818 if (!warn_switch && !warn_switch_enum && !warn_switch_default)
3819 return;
3820
6de9cd9a 3821 default_node = splay_tree_lookup (cases, (splay_tree_key) NULL);
44c21c7f
DD
3822 if (!default_node)
3823 warning (OPT_Wswitch_default, "%Hswitch missing default case",
3824 &switch_location);
6de9cd9a
DN
3825
3826 /* If the switch expression was an enumerated type, check that
3827 exactly all enumeration literals are covered by the cases.
3828 The check is made when -Wswitch was specified and there is no
3829 default case, or when -Wswitch-enum was specified. */
3830 if (((warn_switch && !default_node) || warn_switch_enum)
3831 && type && TREE_CODE (type) == ENUMERAL_TYPE
604f5adf 3832 && TREE_CODE (cond) != INTEGER_CST)
6de9cd9a
DN
3833 {
3834 tree chain;
3835
3836 /* The time complexity here is O(N*lg(N)) worst case, but for the
9f63daea 3837 common case of monotonically increasing enumerators, it is
6de9cd9a
DN
3838 O(N), since the nature of the splay tree will keep the next
3839 element adjacent to the root at all times. */
3840
3841 for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain))
3842 {
3843 splay_tree_node node
3844 = splay_tree_lookup (cases, (splay_tree_key) TREE_VALUE (chain));
201ae393
AP
3845 if (!node)
3846 {
3847 tree low_value = TREE_VALUE (chain);
3848 splay_tree_node low_bound;
3849 splay_tree_node high_bound;
3850 /* Even though there wasn't an exact match, there might be a
3851 case range which includes the enumator's value. */
3852 low_bound = splay_tree_predecessor (cases,
3853 (splay_tree_key) low_value);
3854 high_bound = splay_tree_successor (cases,
3855 (splay_tree_key) low_value);
3856
3857 /* It is smaller than the LOW_VALUE, so there is no need to check
3858 unless the LOW_BOUND is in fact itself a case range. */
3859 if (low_bound
3860 && CASE_HIGH ((tree) low_bound->value)
3861 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
3862 low_value) >= 0)
3863 node = low_bound;
3864 /* The low end of that range is bigger than the current value. */
3865 else if (high_bound
3866 && (tree_int_cst_compare ((tree) high_bound->key,
3867 low_value)
3868 <= 0))
3869 node = high_bound;
3870 }
6de9cd9a
DN
3871 if (node)
3872 {
3873 /* Mark the CASE_LOW part of the case entry as seen, so
9f63daea 3874 that we save time later. Choose TREE_ADDRESSABLE
6de9cd9a
DN
3875 randomly as a bit that won't have been set to-date. */
3876 tree label = (tree) node->value;
3877 TREE_ADDRESSABLE (label) = 1;
3878 }
3879 else
3880 {
3881 /* Warn if there are enumerators that don't correspond to
3882 case expressions. */
d4ee4d25 3883 warning (0, "%Henumeration value %qE not handled in switch",
3c20847b 3884 &switch_location, TREE_PURPOSE (chain));
6de9cd9a
DN
3885 }
3886 }
3887
3888 /* Warn if there are case expressions that don't correspond to
3889 enumerators. This can occur since C and C++ don't enforce
3890 type-checking of assignments to enumeration variables.
3891
3892 The time complexity here is O(N**2) worst case, since we've
3893 not sorted the enumeration values. However, in the absence
9f63daea 3894 of case ranges this is O(N), since all single cases that
6de9cd9a
DN
3895 corresponded to enumerations have been marked above. */
3896
3897 splay_tree_foreach (cases, match_case_to_enum, type);
3898 }
8f17b5c5
MM
3899}
3900
6b665219
MM
3901/* Finish an expression taking the address of LABEL (an
3902 IDENTIFIER_NODE). Returns an expression for the address. */
15b732b2 3903
35b1a6fa
AJ
3904tree
3905finish_label_address_expr (tree label)
15b732b2
NB
3906{
3907 tree result;
3908
3909 if (pedantic)
37fa72e9 3910 pedwarn ("taking the address of a label is non-standard");
15b732b2 3911
6b665219
MM
3912 if (label == error_mark_node)
3913 return error_mark_node;
3914
15b732b2
NB
3915 label = lookup_label (label);
3916 if (label == NULL_TREE)
3917 result = null_pointer_node;
3918 else
3919 {
3920 TREE_USED (label) = 1;
3921 result = build1 (ADDR_EXPR, ptr_type_node, label);
15b732b2
NB
3922 /* The current function in not necessarily uninlinable.
3923 Computed gotos are incompatible with inlining, but the value
3924 here could be used only in a diagnostic, for example. */
3925 }
3926
3927 return result;
3928}
3929
8f17b5c5 3930/* Hook used by expand_expr to expand language-specific tree codes. */
9f63daea 3931/* The only things that should go here are bits needed to expand
1ea7e6ad 3932 constant initializers. Everything else should be handled by the
6de9cd9a 3933 gimplification routines. */
8f17b5c5
MM
3934
3935rtx
9f63daea 3936c_expand_expr (tree exp, rtx target, enum machine_mode tmode,
0fab64a3
MM
3937 int modifier /* Actually enum_modifier. */,
3938 rtx *alt_rtl)
8f17b5c5
MM
3939{
3940 switch (TREE_CODE (exp))
3941 {
db3acfa5
JM
3942 case COMPOUND_LITERAL_EXPR:
3943 {
3944 /* Initialize the anonymous variable declared in the compound
3945 literal, then return the variable. */
3946 tree decl = COMPOUND_LITERAL_EXPR_DECL (exp);
3947 emit_local_var (decl);
0fab64a3 3948 return expand_expr_real (decl, target, tmode, modifier, alt_rtl);
db3acfa5
JM
3949 }
3950
8f17b5c5 3951 default:
366de0ce 3952 gcc_unreachable ();
8f17b5c5 3953 }
8f17b5c5
MM
3954}
3955
db3acfa5
JM
3956/* Hook used by staticp to handle language-specific tree codes. */
3957
525c6bf5 3958tree
35b1a6fa 3959c_staticp (tree exp)
db3acfa5 3960{
525c6bf5
RH
3961 return (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
3962 && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp))
3963 ? exp : NULL);
db3acfa5 3964}
19552aa5
JM
3965\f
3966
3967/* Given a boolean expression ARG, return a tree representing an increment
3968 or decrement (as indicated by CODE) of ARG. The front end must check for
3969 invalid cases (e.g., decrement in C++). */
3970tree
35b1a6fa 3971boolean_increment (enum tree_code code, tree arg)
19552aa5
JM
3972{
3973 tree val;
de7df9eb 3974 tree true_res = boolean_true_node;
37fa72e9 3975
19552aa5
JM
3976 arg = stabilize_reference (arg);
3977 switch (code)
3978 {
3979 case PREINCREMENT_EXPR:
53fb4de3 3980 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
19552aa5
JM
3981 break;
3982 case POSTINCREMENT_EXPR:
53fb4de3 3983 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
19552aa5 3984 arg = save_expr (arg);
53fb4de3
RS
3985 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
3986 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
19552aa5
JM
3987 break;
3988 case PREDECREMENT_EXPR:
53fb4de3
RS
3989 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
3990 invert_truthvalue (arg));
19552aa5
JM
3991 break;
3992 case POSTDECREMENT_EXPR:
53fb4de3
RS
3993 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
3994 invert_truthvalue (arg));
19552aa5 3995 arg = save_expr (arg);
53fb4de3
RS
3996 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
3997 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
19552aa5
JM
3998 break;
3999 default:
366de0ce 4000 gcc_unreachable ();
19552aa5
JM
4001 }
4002 TREE_SIDE_EFFECTS (val) = 1;
4003 return val;
4004}
03dc0325 4005\f
cb60f38d
NB
4006/* Built-in macros for stddef.h, that require macros defined in this
4007 file. */
460bd0e3 4008void
35b1a6fa 4009c_stddef_cpp_builtins(void)
3df89291 4010{
5279d739
ZW
4011 builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
4012 builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
4013 builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
4014 builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
85291069
JM
4015 builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE, 0);
4016 builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE, 0);
676997cf
RH
4017}
4018
6431177a 4019static void
35b1a6fa 4020c_init_attributes (void)
6431177a
JM
4021{
4022 /* Fill in the built_in_attributes array. */
4a90aeeb 4023#define DEF_ATTR_NULL_TREE(ENUM) \
6431177a 4024 built_in_attributes[(int) ENUM] = NULL_TREE;
4a90aeeb 4025#define DEF_ATTR_INT(ENUM, VALUE) \
7d60be94 4026 built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
6431177a
JM
4027#define DEF_ATTR_IDENT(ENUM, STRING) \
4028 built_in_attributes[(int) ENUM] = get_identifier (STRING);
4029#define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
4030 built_in_attributes[(int) ENUM] \
4031 = tree_cons (built_in_attributes[(int) PURPOSE], \
4032 built_in_attributes[(int) VALUE], \
4033 built_in_attributes[(int) CHAIN]);
6431177a
JM
4034#include "builtin-attrs.def"
4035#undef DEF_ATTR_NULL_TREE
4036#undef DEF_ATTR_INT
4037#undef DEF_ATTR_IDENT
4038#undef DEF_ATTR_TREE_LIST
03dc0325 4039}
26f943fd 4040
349ae713
NB
4041/* Attribute handlers common to C front ends. */
4042
4043/* Handle a "packed" attribute; arguments as in
4044 struct attribute_spec.handler. */
4045
4046static tree
e18476eb 4047handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args),
a742c759 4048 int flags, bool *no_add_attrs)
349ae713 4049{
c6e4cc53 4050 if (TYPE_P (*node))
349ae713
NB
4051 {
4052 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
8dd16ecc 4053 *node = build_variant_type_copy (*node);
c6e4cc53
NS
4054 TYPE_PACKED (*node) = 1;
4055 if (TYPE_MAIN_VARIANT (*node) == *node)
4056 {
4057 /* If it is the main variant, then pack the other variants
4058 too. This happens in,
9f63daea 4059
c6e4cc53
NS
4060 struct Foo {
4061 struct Foo const *ptr; // creates a variant w/o packed flag
646c0835
NS
4062 } __ attribute__((packed)); // packs it now.
4063 */
c6e4cc53 4064 tree probe;
9f63daea 4065
c6e4cc53
NS
4066 for (probe = *node; probe; probe = TYPE_NEXT_VARIANT (probe))
4067 TYPE_PACKED (probe) = 1;
4068 }
349ae713
NB
4069 }
4070 else if (TREE_CODE (*node) == FIELD_DECL)
646c0835
NS
4071 {
4072 if (TYPE_ALIGN (TREE_TYPE (*node)) <= BITS_PER_UNIT)
4073 warning (OPT_Wattributes,
4074 "%qE attribute ignored for field of type %qT",
4075 name, TREE_TYPE (*node));
4076 else
4077 DECL_PACKED (*node) = 1;
4078 }
349ae713 4079 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
c6e4cc53
NS
4080 used for DECL_REGISTER. It wouldn't mean anything anyway.
4081 We can't set DECL_PACKED on the type of a TYPE_DECL, because
4082 that changes what the typedef is typing. */
349ae713
NB
4083 else
4084 {
5c498b10 4085 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4086 *no_add_attrs = true;
4087 }
4088
4089 return NULL_TREE;
4090}
4091
4092/* Handle a "nocommon" attribute; arguments as in
4093 struct attribute_spec.handler. */
4094
4095static tree
35b1a6fa 4096handle_nocommon_attribute (tree *node, tree name,
e18476eb
BI
4097 tree ARG_UNUSED (args),
4098 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713
NB
4099{
4100 if (TREE_CODE (*node) == VAR_DECL)
4101 DECL_COMMON (*node) = 0;
4102 else
4103 {
5c498b10 4104 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4105 *no_add_attrs = true;
4106 }
4107
4108 return NULL_TREE;
4109}
4110
4111/* Handle a "common" attribute; arguments as in
4112 struct attribute_spec.handler. */
4113
4114static tree
e18476eb
BI
4115handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4116 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713
NB
4117{
4118 if (TREE_CODE (*node) == VAR_DECL)
4119 DECL_COMMON (*node) = 1;
4120 else
4121 {
5c498b10 4122 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4123 *no_add_attrs = true;
4124 }
4125
4126 return NULL_TREE;
4127}
4128
4129/* Handle a "noreturn" attribute; arguments as in
4130 struct attribute_spec.handler. */
4131
4132static tree
e18476eb
BI
4133handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4134 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713
NB
4135{
4136 tree type = TREE_TYPE (*node);
4137
4138 /* See FIXME comment in c_common_attribute_table. */
4139 if (TREE_CODE (*node) == FUNCTION_DECL)
4140 TREE_THIS_VOLATILE (*node) = 1;
4141 else if (TREE_CODE (type) == POINTER_TYPE
4142 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4143 TREE_TYPE (*node)
4144 = build_pointer_type
4145 (build_type_variant (TREE_TYPE (type),
c29726e2 4146 TYPE_READONLY (TREE_TYPE (type)), 1));
349ae713
NB
4147 else
4148 {
5c498b10 4149 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4150 *no_add_attrs = true;
4151 }
4152
4153 return NULL_TREE;
4154}
4155
4156/* Handle a "noinline" attribute; arguments as in
4157 struct attribute_spec.handler. */
4158
4159static tree
35b1a6fa 4160handle_noinline_attribute (tree *node, tree name,
e18476eb
BI
4161 tree ARG_UNUSED (args),
4162 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713
NB
4163{
4164 if (TREE_CODE (*node) == FUNCTION_DECL)
4165 DECL_UNINLINABLE (*node) = 1;
4166 else
4167 {
5c498b10 4168 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4169 *no_add_attrs = true;
4170 }
4171
4172 return NULL_TREE;
4173}
4174
4175/* Handle a "always_inline" attribute; arguments as in
4176 struct attribute_spec.handler. */
4177
4178static tree
35b1a6fa 4179handle_always_inline_attribute (tree *node, tree name,
e18476eb
BI
4180 tree ARG_UNUSED (args),
4181 int ARG_UNUSED (flags),
a742c759 4182 bool *no_add_attrs)
349ae713
NB
4183{
4184 if (TREE_CODE (*node) == FUNCTION_DECL)
4185 {
4186 /* Do nothing else, just set the attribute. We'll get at
4187 it later with lookup_attribute. */
4188 }
4189 else
4190 {
5c498b10 4191 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4192 *no_add_attrs = true;
4193 }
4194
4195 return NULL_TREE;
4196}
4197
0691d1d4
RG
4198/* Handle a "flatten" attribute; arguments as in
4199 struct attribute_spec.handler. */
4200
4201static tree
4202handle_flatten_attribute (tree *node, tree name,
4203 tree args ATTRIBUTE_UNUSED,
4204 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4205{
4206 if (TREE_CODE (*node) == FUNCTION_DECL)
4207 /* Do nothing else, just set the attribute. We'll get at
4208 it later with lookup_attribute. */
4209 ;
4210 else
4211 {
4212 warning (OPT_Wattributes, "%qE attribute ignored", name);
4213 *no_add_attrs = true;
4214 }
4215
4216 return NULL_TREE;
4217}
4218
4219
349ae713
NB
4220/* Handle a "used" attribute; arguments as in
4221 struct attribute_spec.handler. */
4222
4223static tree
e18476eb
BI
4224handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
4225 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713 4226{
d7ddbe24
RH
4227 tree node = *pnode;
4228
4229 if (TREE_CODE (node) == FUNCTION_DECL
4230 || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
4d7d0451 4231 {
4d7d0451 4232 TREE_USED (node) = 1;
8e3e233b 4233 DECL_PRESERVE_P (node) = 1;
4d7d0451 4234 }
349ae713
NB
4235 else
4236 {
5c498b10 4237 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4238 *no_add_attrs = true;
4239 }
4240
4241 return NULL_TREE;
4242}
4243
4244/* Handle a "unused" attribute; arguments as in
4245 struct attribute_spec.handler. */
4246
4247static tree
e18476eb
BI
4248handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4249 int flags, bool *no_add_attrs)
349ae713
NB
4250{
4251 if (DECL_P (*node))
4252 {
4253 tree decl = *node;
4254
4255 if (TREE_CODE (decl) == PARM_DECL
4256 || TREE_CODE (decl) == VAR_DECL
4257 || TREE_CODE (decl) == FUNCTION_DECL
4258 || TREE_CODE (decl) == LABEL_DECL
4259 || TREE_CODE (decl) == TYPE_DECL)
4260 TREE_USED (decl) = 1;
4261 else
4262 {
5c498b10 4263 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4264 *no_add_attrs = true;
4265 }
4266 }
4267 else
4268 {
4269 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
8dd16ecc 4270 *node = build_variant_type_copy (*node);
349ae713
NB
4271 TREE_USED (*node) = 1;
4272 }
4273
4274 return NULL_TREE;
4275}
4276
ce91e74c
JH
4277/* Handle a "externally_visible" attribute; arguments as in
4278 struct attribute_spec.handler. */
4279
4280static tree
4281handle_externally_visible_attribute (tree *pnode, tree name,
4282 tree ARG_UNUSED (args),
4283 int ARG_UNUSED (flags),
4284 bool *no_add_attrs)
4285{
4286 tree node = *pnode;
4287
4288 if ((!TREE_STATIC (node) && TREE_CODE (node) != FUNCTION_DECL)
4289 || !TREE_PUBLIC (node))
4290 {
4291 warning (OPT_Wattributes,
4292 "%qE attribute have effect only on public objects", name);
4293 *no_add_attrs = true;
4294 }
4295 else if (TREE_CODE (node) == FUNCTION_DECL)
4296 {
4297 struct cgraph_node *n = cgraph_node (node);
4298 n->local.externally_visible = true;
4299 if (n->local.finalized)
4300 cgraph_mark_needed_node (n);
4301 }
4302 else if (TREE_CODE (node) == VAR_DECL)
4303 {
4304 struct cgraph_varpool_node *n = cgraph_varpool_node (node);
4305 n->externally_visible = true;
4306 if (n->finalized)
4307 cgraph_varpool_mark_needed_node (n);
4308 }
4309 else
4310 {
4311 warning (OPT_Wattributes, "%qE attribute ignored", name);
4312 *no_add_attrs = true;
4313 }
4314
4315 return NULL_TREE;
4316}
4317
349ae713
NB
4318/* Handle a "const" attribute; arguments as in
4319 struct attribute_spec.handler. */
4320
4321static tree
e18476eb
BI
4322handle_const_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4323 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713
NB
4324{
4325 tree type = TREE_TYPE (*node);
4326
4327 /* See FIXME comment on noreturn in c_common_attribute_table. */
4328 if (TREE_CODE (*node) == FUNCTION_DECL)
4329 TREE_READONLY (*node) = 1;
4330 else if (TREE_CODE (type) == POINTER_TYPE
4331 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4332 TREE_TYPE (*node)
4333 = build_pointer_type
4334 (build_type_variant (TREE_TYPE (type), 1,
4335 TREE_THIS_VOLATILE (TREE_TYPE (type))));
4336 else
4337 {
5c498b10 4338 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4339 *no_add_attrs = true;
4340 }
4341
4342 return NULL_TREE;
4343}
4344
4345/* Handle a "transparent_union" attribute; arguments as in
4346 struct attribute_spec.handler. */
4347
4348static tree
35b1a6fa 4349handle_transparent_union_attribute (tree *node, tree name,
e18476eb 4350 tree ARG_UNUSED (args), int flags,
a742c759 4351 bool *no_add_attrs)
349ae713 4352{
52dd234b
RH
4353 tree type = NULL;
4354
4355 *no_add_attrs = true;
349ae713
NB
4356
4357 if (DECL_P (*node))
4358 {
52dd234b
RH
4359 if (TREE_CODE (*node) != TYPE_DECL)
4360 goto ignored;
4361 node = &TREE_TYPE (*node);
4362 type = *node;
349ae713
NB
4363 }
4364 else if (TYPE_P (*node))
52dd234b
RH
4365 type = *node;
4366 else
4367 goto ignored;
349ae713 4368
52dd234b 4369 if (TREE_CODE (type) == UNION_TYPE)
349ae713 4370 {
52dd234b
RH
4371 /* When IN_PLACE is set, leave the check for FIELDS and MODE to
4372 the code in finish_struct. */
349ae713 4373 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
52dd234b
RH
4374 {
4375 if (TYPE_FIELDS (type) == NULL_TREE
4376 || TYPE_MODE (type) != DECL_MODE (TYPE_FIELDS (type)))
4377 goto ignored;
4378
4379 /* A type variant isn't good enough, since we don't a cast
4380 to such a type removed as a no-op. */
4381 *node = type = build_duplicate_type (type);
4382 }
4383
4384 TYPE_TRANSPARENT_UNION (type) = 1;
4385 return NULL_TREE;
349ae713
NB
4386 }
4387
52dd234b
RH
4388 ignored:
4389 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4390 return NULL_TREE;
4391}
4392
4393/* Handle a "constructor" attribute; arguments as in
4394 struct attribute_spec.handler. */
4395
4396static tree
35b1a6fa 4397handle_constructor_attribute (tree *node, tree name,
e18476eb
BI
4398 tree ARG_UNUSED (args),
4399 int ARG_UNUSED (flags),
a742c759 4400 bool *no_add_attrs)
349ae713
NB
4401{
4402 tree decl = *node;
4403 tree type = TREE_TYPE (decl);
4404
4405 if (TREE_CODE (decl) == FUNCTION_DECL
4406 && TREE_CODE (type) == FUNCTION_TYPE
4407 && decl_function_context (decl) == 0)
4408 {
4409 DECL_STATIC_CONSTRUCTOR (decl) = 1;
4410 TREE_USED (decl) = 1;
4411 }
4412 else
4413 {
5c498b10 4414 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4415 *no_add_attrs = true;
4416 }
4417
4418 return NULL_TREE;
4419}
4420
4421/* Handle a "destructor" attribute; arguments as in
4422 struct attribute_spec.handler. */
4423
4424static tree
35b1a6fa 4425handle_destructor_attribute (tree *node, tree name,
e18476eb
BI
4426 tree ARG_UNUSED (args),
4427 int ARG_UNUSED (flags),
a742c759 4428 bool *no_add_attrs)
349ae713
NB
4429{
4430 tree decl = *node;
4431 tree type = TREE_TYPE (decl);
4432
4433 if (TREE_CODE (decl) == FUNCTION_DECL
4434 && TREE_CODE (type) == FUNCTION_TYPE
4435 && decl_function_context (decl) == 0)
4436 {
4437 DECL_STATIC_DESTRUCTOR (decl) = 1;
4438 TREE_USED (decl) = 1;
4439 }
4440 else
4441 {
5c498b10 4442 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4443 *no_add_attrs = true;
4444 }
4445
4446 return NULL_TREE;
4447}
4448
4449/* Handle a "mode" attribute; arguments as in
4450 struct attribute_spec.handler. */
4451
4452static tree
e18476eb
BI
4453handle_mode_attribute (tree *node, tree name, tree args,
4454 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713
NB
4455{
4456 tree type = *node;
4457
4458 *no_add_attrs = true;
4459
4460 if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
5c498b10 4461 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4462 else
4463 {
4464 int j;
4465 const char *p = IDENTIFIER_POINTER (TREE_VALUE (args));
4466 int len = strlen (p);
4467 enum machine_mode mode = VOIDmode;
4468 tree typefm;
6dd53648 4469 bool valid_mode;
349ae713
NB
4470
4471 if (len > 4 && p[0] == '_' && p[1] == '_'
4472 && p[len - 1] == '_' && p[len - 2] == '_')
4473 {
28dab132 4474 char *newp = (char *) alloca (len - 1);
349ae713
NB
4475
4476 strcpy (newp, &p[2]);
4477 newp[len - 4] = '\0';
4478 p = newp;
4479 }
4480
4481 /* Change this type to have a type with the specified mode.
4482 First check for the special modes. */
3f75a254 4483 if (!strcmp (p, "byte"))
349ae713
NB
4484 mode = byte_mode;
4485 else if (!strcmp (p, "word"))
4486 mode = word_mode;
3f75a254 4487 else if (!strcmp (p, "pointer"))
349ae713
NB
4488 mode = ptr_mode;
4489 else
4490 for (j = 0; j < NUM_MACHINE_MODES; j++)
4491 if (!strcmp (p, GET_MODE_NAME (j)))
61f03aba
RH
4492 {
4493 mode = (enum machine_mode) j;
4494 break;
4495 }
349ae713
NB
4496
4497 if (mode == VOIDmode)
4a5eab38 4498 {
9e637a26 4499 error ("unknown machine mode %qs", p);
4a5eab38
PB
4500 return NULL_TREE;
4501 }
4502
6dd53648
RH
4503 valid_mode = false;
4504 switch (GET_MODE_CLASS (mode))
4a5eab38 4505 {
6dd53648
RH
4506 case MODE_INT:
4507 case MODE_PARTIAL_INT:
4508 case MODE_FLOAT:
4509 valid_mode = targetm.scalar_mode_supported_p (mode);
4510 break;
4511
4512 case MODE_COMPLEX_INT:
4513 case MODE_COMPLEX_FLOAT:
4514 valid_mode = targetm.scalar_mode_supported_p (GET_MODE_INNER (mode));
4515 break;
4516
4517 case MODE_VECTOR_INT:
4518 case MODE_VECTOR_FLOAT:
5c498b10
DD
4519 warning (OPT_Wattributes, "specifying vector types with "
4520 "__attribute__ ((mode)) is deprecated");
4521 warning (OPT_Wattributes,
4522 "use __attribute__ ((vector_size)) instead");
6dd53648
RH
4523 valid_mode = vector_mode_valid_p (mode);
4524 break;
4a5eab38 4525
6dd53648
RH
4526 default:
4527 break;
4528 }
4529 if (!valid_mode)
4530 {
9e637a26 4531 error ("unable to emulate %qs", p);
6dd53648
RH
4532 return NULL_TREE;
4533 }
4a5eab38 4534
6dd53648 4535 if (POINTER_TYPE_P (type))
cb2a532e 4536 {
6dd53648
RH
4537 tree (*fn)(tree, enum machine_mode, bool);
4538
4539 if (!targetm.valid_pointer_mode (mode))
cb2a532e 4540 {
9e637a26 4541 error ("invalid pointer mode %qs", p);
cb2a532e
AH
4542 return NULL_TREE;
4543 }
4544
6dd53648
RH
4545 if (TREE_CODE (type) == POINTER_TYPE)
4546 fn = build_pointer_type_for_mode;
4977bab6 4547 else
6dd53648
RH
4548 fn = build_reference_type_for_mode;
4549 typefm = fn (TREE_TYPE (type), mode, false);
cb2a532e 4550 }
6dd53648
RH
4551 else
4552 typefm = lang_hooks.types.type_for_mode (mode, TYPE_UNSIGNED (type));
ec8465a5 4553
6dd53648
RH
4554 if (typefm == NULL_TREE)
4555 {
61f03aba 4556 error ("no data type for mode %qs", p);
6dd53648
RH
4557 return NULL_TREE;
4558 }
ec8465a5
RK
4559 else if (TREE_CODE (type) == ENUMERAL_TYPE)
4560 {
4561 /* For enumeral types, copy the precision from the integer
4562 type returned above. If not an INTEGER_TYPE, we can't use
4563 this mode for this type. */
4564 if (TREE_CODE (typefm) != INTEGER_TYPE)
4565 {
61f03aba 4566 error ("cannot use mode %qs for enumeral types", p);
ec8465a5
RK
4567 return NULL_TREE;
4568 }
4569
99db1ef0
RH
4570 if (flags & ATTR_FLAG_TYPE_IN_PLACE)
4571 {
4572 TYPE_PRECISION (type) = TYPE_PRECISION (typefm);
4573 typefm = type;
4574 }
4575 else
4576 {
4577 /* We cannot build a type variant, as there's code that assumes
4578 that TYPE_MAIN_VARIANT has the same mode. This includes the
4579 debug generators. Instead, create a subrange type. This
4580 results in all of the enumeral values being emitted only once
4581 in the original, and the subtype gets them by reference. */
4582 if (TYPE_UNSIGNED (type))
4583 typefm = make_unsigned_type (TYPE_PRECISION (typefm));
4584 else
4585 typefm = make_signed_type (TYPE_PRECISION (typefm));
4586 TREE_TYPE (typefm) = type;
4587 }
ec8465a5 4588 }
a2d36602
RH
4589 else if (VECTOR_MODE_P (mode)
4590 ? TREE_CODE (type) != TREE_CODE (TREE_TYPE (typefm))
4591 : TREE_CODE (type) != TREE_CODE (typefm))
61f03aba
RH
4592 {
4593 error ("mode %qs applied to inappropriate type", p);
4594 return NULL_TREE;
4595 }
4596
6dd53648 4597 *node = typefm;
349ae713
NB
4598 }
4599
4600 return NULL_TREE;
4601}
4602
4603/* Handle a "section" attribute; arguments as in
4604 struct attribute_spec.handler. */
4605
4606static tree
e18476eb
BI
4607handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
4608 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713
NB
4609{
4610 tree decl = *node;
4611
4612 if (targetm.have_named_sections)
4613 {
9fb32434
CT
4614 user_defined_section_attribute = true;
4615
349ae713
NB
4616 if ((TREE_CODE (decl) == FUNCTION_DECL
4617 || TREE_CODE (decl) == VAR_DECL)
4618 && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
4619 {
4620 if (TREE_CODE (decl) == VAR_DECL
4621 && current_function_decl != NULL_TREE
3f75a254 4622 && !TREE_STATIC (decl))
349ae713 4623 {
ddd2d57e 4624 error ("%Jsection attribute cannot be specified for "
6de9cd9a 4625 "local variables", decl);
349ae713
NB
4626 *no_add_attrs = true;
4627 }
4628
4629 /* The decl may have already been given a section attribute
4630 from a previous declaration. Ensure they match. */
4631 else if (DECL_SECTION_NAME (decl) != NULL_TREE
4632 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
4633 TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
4634 {
dee15844
JM
4635 error ("section of %q+D conflicts with previous declaration",
4636 *node);
349ae713
NB
4637 *no_add_attrs = true;
4638 }
4639 else
4640 DECL_SECTION_NAME (decl) = TREE_VALUE (args);
4641 }
4642 else
4643 {
dee15844 4644 error ("section attribute not allowed for %q+D", *node);
349ae713
NB
4645 *no_add_attrs = true;
4646 }
4647 }
4648 else
4649 {
ddd2d57e 4650 error ("%Jsection attributes are not supported for this target", *node);
349ae713
NB
4651 *no_add_attrs = true;
4652 }
4653
4654 return NULL_TREE;
4655}
4656
4657/* Handle a "aligned" attribute; arguments as in
4658 struct attribute_spec.handler. */
4659
4660static tree
e18476eb 4661handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
a742c759 4662 int flags, bool *no_add_attrs)
349ae713
NB
4663{
4664 tree decl = NULL_TREE;
4665 tree *type = NULL;
4666 int is_type = 0;
4667 tree align_expr = (args ? TREE_VALUE (args)
4668 : size_int (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
4669 int i;
4670
4671 if (DECL_P (*node))
4672 {
4673 decl = *node;
4674 type = &TREE_TYPE (decl);
4675 is_type = TREE_CODE (*node) == TYPE_DECL;
4676 }
4677 else if (TYPE_P (*node))
4678 type = node, is_type = 1;
4679
349ae713
NB
4680 if (TREE_CODE (align_expr) != INTEGER_CST)
4681 {
4682 error ("requested alignment is not a constant");
4683 *no_add_attrs = true;
4684 }
4685 else if ((i = tree_log2 (align_expr)) == -1)
4686 {
4687 error ("requested alignment is not a power of 2");
4688 *no_add_attrs = true;
4689 }
4690 else if (i > HOST_BITS_PER_INT - 2)
4691 {
4692 error ("requested alignment is too large");
4693 *no_add_attrs = true;
4694 }
4695 else if (is_type)
4696 {
4697 /* If we have a TYPE_DECL, then copy the type, so that we
4698 don't accidentally modify a builtin type. See pushdecl. */
4699 if (decl && TREE_TYPE (decl) != error_mark_node
4700 && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
4701 {
4702 tree tt = TREE_TYPE (decl);
8dd16ecc 4703 *type = build_variant_type_copy (*type);
349ae713
NB
4704 DECL_ORIGINAL_TYPE (decl) = tt;
4705 TYPE_NAME (*type) = decl;
4706 TREE_USED (*type) = TREE_USED (decl);
4707 TREE_TYPE (decl) = *type;
4708 }
4709 else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
8dd16ecc 4710 *type = build_variant_type_copy (*type);
349ae713
NB
4711
4712 TYPE_ALIGN (*type) = (1 << i) * BITS_PER_UNIT;
4713 TYPE_USER_ALIGN (*type) = 1;
4714 }
4715 else if (TREE_CODE (decl) != VAR_DECL
4716 && TREE_CODE (decl) != FIELD_DECL)
4717 {
dee15844 4718 error ("alignment may not be specified for %q+D", decl);
349ae713
NB
4719 *no_add_attrs = true;
4720 }
4721 else
4722 {
4723 DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT;
4724 DECL_USER_ALIGN (decl) = 1;
4725 }
4726
4727 return NULL_TREE;
4728}
4729
4730/* Handle a "weak" attribute; arguments as in
4731 struct attribute_spec.handler. */
4732
4733static tree
e18476eb
BI
4734handle_weak_attribute (tree *node, tree ARG_UNUSED (name),
4735 tree ARG_UNUSED (args),
4736 int ARG_UNUSED (flags),
4737 bool * ARG_UNUSED (no_add_attrs))
349ae713
NB
4738{
4739 declare_weak (*node);
4740
4741 return NULL_TREE;
4742}
4743
4744/* Handle an "alias" attribute; arguments as in
4745 struct attribute_spec.handler. */
4746
4747static tree
35b1a6fa 4748handle_alias_attribute (tree *node, tree name, tree args,
e18476eb 4749 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713
NB
4750{
4751 tree decl = *node;
4752
4753 if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
a9b0b825
GK
4754 || (TREE_CODE (decl) != FUNCTION_DECL
4755 && TREE_PUBLIC (decl) && !DECL_EXTERNAL (decl))
4756 /* A static variable declaration is always a tentative definition,
4757 but the alias is a non-tentative definition which overrides. */
4758 || (TREE_CODE (decl) != FUNCTION_DECL
4759 && ! TREE_PUBLIC (decl) && DECL_INITIAL (decl)))
349ae713 4760 {
dee15844 4761 error ("%q+D defined both normally and as an alias", decl);
349ae713
NB
4762 *no_add_attrs = true;
4763 }
f6a76b9f
RH
4764
4765 /* Note that the very first time we process a nested declaration,
4766 decl_function_context will not be set. Indeed, *would* never
4767 be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
4768 we do below. After such frobbery, pushdecl would set the context.
4769 In any case, this is never what we want. */
4770 else if (decl_function_context (decl) == 0 && current_function_decl == NULL)
349ae713
NB
4771 {
4772 tree id;
4773
4774 id = TREE_VALUE (args);
4775 if (TREE_CODE (id) != STRING_CST)
4776 {
40b97a2e 4777 error ("alias argument not a string");
349ae713
NB
4778 *no_add_attrs = true;
4779 return NULL_TREE;
4780 }
4781 id = get_identifier (TREE_STRING_POINTER (id));
4782 /* This counts as a use of the object pointed to. */
4783 TREE_USED (id) = 1;
4784
4785 if (TREE_CODE (decl) == FUNCTION_DECL)
4786 DECL_INITIAL (decl) = error_mark_node;
4787 else
6de9cd9a 4788 {
a0203ca7
AO
4789 if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
4790 DECL_EXTERNAL (decl) = 1;
4791 else
4792 DECL_EXTERNAL (decl) = 0;
6de9cd9a
DN
4793 TREE_STATIC (decl) = 1;
4794 }
349ae713
NB
4795 }
4796 else
4797 {
5c498b10 4798 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
4799 *no_add_attrs = true;
4800 }
4801
4802 return NULL_TREE;
4803}
4804
a0203ca7
AO
4805/* Handle a "weakref" attribute; arguments as in struct
4806 attribute_spec.handler. */
4807
4808static tree
4809handle_weakref_attribute (tree *node, tree ARG_UNUSED (name), tree args,
4810 int flags, bool *no_add_attrs)
4811{
4812 tree attr = NULL_TREE;
4813
4814 /* The idea here is that `weakref("name")' mutates into `weakref,
4815 alias("name")', and weakref without arguments, in turn,
4816 implicitly adds weak. */
4817
4818 if (args)
4819 {
4820 attr = tree_cons (get_identifier ("alias"), args, attr);
4821 attr = tree_cons (get_identifier ("weakref"), NULL_TREE, attr);
4822
4823 *no_add_attrs = true;
a9b0b825
GK
4824
4825 decl_attributes (node, attr, flags);
a0203ca7
AO
4826 }
4827 else
4828 {
4829 if (lookup_attribute ("alias", DECL_ATTRIBUTES (*node)))
4830 error ("%Jweakref attribute must appear before alias attribute",
4831 *node);
4832
a9b0b825
GK
4833 /* Can't call declare_weak because it wants this to be TREE_PUBLIC,
4834 and that isn't supported; and because it wants to add it to
4835 the list of weak decls, which isn't helpful. */
4836 DECL_WEAK (*node) = 1;
a0203ca7
AO
4837 }
4838
a0203ca7
AO
4839 return NULL_TREE;
4840}
4841
349ae713
NB
4842/* Handle an "visibility" attribute; arguments as in
4843 struct attribute_spec.handler. */
4844
4845static tree
35b1a6fa 4846handle_visibility_attribute (tree *node, tree name, tree args,
e18476eb 4847 int ARG_UNUSED (flags),
a742c759 4848 bool *no_add_attrs)
349ae713
NB
4849{
4850 tree decl = *node;
968b41a1
MA
4851 tree id = TREE_VALUE (args);
4852
4853 *no_add_attrs = true;
349ae713 4854
d7afec4b
ND
4855 if (TYPE_P (*node))
4856 {
4857 if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE)
4858 {
5c498b10
DD
4859 warning (OPT_Wattributes, "%qE attribute ignored on non-class types",
4860 name);
d7afec4b
ND
4861 return NULL_TREE;
4862 }
4863 }
3f75a254 4864 else if (decl_function_context (decl) != 0 || !TREE_PUBLIC (decl))
349ae713 4865 {
5c498b10 4866 warning (OPT_Wattributes, "%qE attribute ignored", name);
968b41a1 4867 return NULL_TREE;
349ae713 4868 }
349ae713 4869
968b41a1
MA
4870 if (TREE_CODE (id) != STRING_CST)
4871 {
40b97a2e 4872 error ("visibility argument not a string");
968b41a1 4873 return NULL_TREE;
349ae713 4874 }
9f63daea 4875
d7afec4b
ND
4876 /* If this is a type, set the visibility on the type decl. */
4877 if (TYPE_P (decl))
4878 {
4879 decl = TYPE_NAME (decl);
3f75a254 4880 if (!decl)
d7afec4b 4881 return NULL_TREE;
e8233ac2
AP
4882 if (TREE_CODE (decl) == IDENTIFIER_NODE)
4883 {
5c498b10 4884 warning (OPT_Wattributes, "%qE attribute ignored on types",
e8233ac2
AP
4885 name);
4886 return NULL_TREE;
4887 }
d7afec4b 4888 }
349ae713 4889
968b41a1
MA
4890 if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
4891 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4892 else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
4893 DECL_VISIBILITY (decl) = VISIBILITY_INTERNAL;
4894 else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
9f63daea 4895 DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
968b41a1
MA
4896 else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
4897 DECL_VISIBILITY (decl) = VISIBILITY_PROTECTED;
4898 else
40b97a2e 4899 error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
d7afec4b
ND
4900 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4901
4902 /* For decls only, go ahead and attach the attribute to the node as well.
4903 This is needed so we can determine whether we have VISIBILITY_DEFAULT
4904 because the visibility was not specified, or because it was explicitly
4905 overridden from the class visibility. */
4906 if (DECL_P (*node))
4907 *no_add_attrs = false;
968b41a1 4908
349ae713
NB
4909 return NULL_TREE;
4910}
4911
b2ca3702
MM
4912/* Determine the ELF symbol visibility for DECL, which is either a
4913 variable or a function. It is an error to use this function if a
4914 definition of DECL is not available in this translation unit.
4915 Returns true if the final visibility has been determined by this
4916 function; false if the caller is free to make additional
4917 modifications. */
4918
4919bool
4920c_determine_visibility (tree decl)
4921{
4094f4d2
NS
4922 gcc_assert (TREE_CODE (decl) == VAR_DECL
4923 || TREE_CODE (decl) == FUNCTION_DECL);
b2ca3702
MM
4924
4925 /* If the user explicitly specified the visibility with an
4926 attribute, honor that. DECL_VISIBILITY will have been set during
4927 the processing of the attribute. We check for an explicit
4928 attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
4929 to distinguish the use of an attribute from the use of a "#pragma
4930 GCC visibility push(...)"; in the latter case we still want other
4931 considerations to be able to overrule the #pragma. */
4932 if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl)))
4933 return true;
4934
4935 /* Anything that is exported must have default visibility. */
4936 if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
4937 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
4938 {
4939 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4940 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4941 return true;
4942 }
4943
4944 return false;
4945}
4946
dce81a1a
JJ
4947/* Handle an "tls_model" attribute; arguments as in
4948 struct attribute_spec.handler. */
4949
4950static tree
35b1a6fa 4951handle_tls_model_attribute (tree *node, tree name, tree args,
e18476eb 4952 int ARG_UNUSED (flags), bool *no_add_attrs)
dce81a1a 4953{
c2f7fa15 4954 tree id;
dce81a1a 4955 tree decl = *node;
c2f7fa15 4956 enum tls_model kind;
dce81a1a 4957
c2f7fa15
SB
4958 *no_add_attrs = true;
4959
4960 if (!DECL_THREAD_LOCAL_P (decl))
dce81a1a 4961 {
5c498b10 4962 warning (OPT_Wattributes, "%qE attribute ignored", name);
c2f7fa15 4963 return NULL_TREE;
dce81a1a 4964 }
dce81a1a 4965
c2f7fa15
SB
4966 kind = DECL_TLS_MODEL (decl);
4967 id = TREE_VALUE (args);
4968 if (TREE_CODE (id) != STRING_CST)
4969 {
4970 error ("tls_model argument not a string");
4971 return NULL_TREE;
dce81a1a
JJ
4972 }
4973
c2f7fa15
SB
4974 if (!strcmp (TREE_STRING_POINTER (id), "local-exec"))
4975 kind = TLS_MODEL_LOCAL_EXEC;
4976 else if (!strcmp (TREE_STRING_POINTER (id), "initial-exec"))
4977 kind = TLS_MODEL_INITIAL_EXEC;
4978 else if (!strcmp (TREE_STRING_POINTER (id), "local-dynamic"))
4979 kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
4980 else if (!strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
4981 kind = TLS_MODEL_GLOBAL_DYNAMIC;
4982 else
4983 error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
4984
4985 DECL_TLS_MODEL (decl) = kind;
dce81a1a
JJ
4986 return NULL_TREE;
4987}
4988
349ae713
NB
4989/* Handle a "no_instrument_function" attribute; arguments as in
4990 struct attribute_spec.handler. */
4991
4992static tree
35b1a6fa 4993handle_no_instrument_function_attribute (tree *node, tree name,
e18476eb
BI
4994 tree ARG_UNUSED (args),
4995 int ARG_UNUSED (flags),
a742c759 4996 bool *no_add_attrs)
349ae713
NB
4997{
4998 tree decl = *node;
4999
5000 if (TREE_CODE (decl) != FUNCTION_DECL)
5001 {
bda67431 5002 error ("%J%qE attribute applies only to functions", decl, name);
349ae713
NB
5003 *no_add_attrs = true;
5004 }
5005 else if (DECL_INITIAL (decl))
5006 {
bda67431 5007 error ("%Jcan%'t set %qE attribute after definition", decl, name);
349ae713
NB
5008 *no_add_attrs = true;
5009 }
5010 else
5011 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
5012
5013 return NULL_TREE;
5014}
5015
5016/* Handle a "malloc" attribute; arguments as in
5017 struct attribute_spec.handler. */
5018
5019static tree
e18476eb
BI
5020handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5021 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713 5022{
3425638a
JM
5023 if (TREE_CODE (*node) == FUNCTION_DECL
5024 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
349ae713 5025 DECL_IS_MALLOC (*node) = 1;
349ae713
NB
5026 else
5027 {
5c498b10 5028 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
5029 *no_add_attrs = true;
5030 }
5031
5032 return NULL_TREE;
5033}
5034
6e9a3221
AN
5035/* Handle a "returns_twice" attribute; arguments as in
5036 struct attribute_spec.handler. */
5037
5038static tree
5039handle_returns_twice_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5040 int ARG_UNUSED (flags), bool *no_add_attrs)
5041{
5042 if (TREE_CODE (*node) == FUNCTION_DECL)
5043 DECL_IS_RETURNS_TWICE (*node) = 1;
5044 else
5045 {
5c498b10 5046 warning (OPT_Wattributes, "%qE attribute ignored", name);
6e9a3221
AN
5047 *no_add_attrs = true;
5048 }
5049
5050 return NULL_TREE;
5051}
5052
349ae713
NB
5053/* Handle a "no_limit_stack" attribute; arguments as in
5054 struct attribute_spec.handler. */
5055
5056static tree
35b1a6fa 5057handle_no_limit_stack_attribute (tree *node, tree name,
e18476eb
BI
5058 tree ARG_UNUSED (args),
5059 int ARG_UNUSED (flags),
a742c759 5060 bool *no_add_attrs)
349ae713
NB
5061{
5062 tree decl = *node;
5063
5064 if (TREE_CODE (decl) != FUNCTION_DECL)
5065 {
bda67431 5066 error ("%J%qE attribute applies only to functions", decl, name);
349ae713
NB
5067 *no_add_attrs = true;
5068 }
5069 else if (DECL_INITIAL (decl))
5070 {
bda67431 5071 error ("%Jcan%'t set %qE attribute after definition", decl, name);
349ae713
NB
5072 *no_add_attrs = true;
5073 }
5074 else
5075 DECL_NO_LIMIT_STACK (decl) = 1;
5076
5077 return NULL_TREE;
5078}
5079
5080/* Handle a "pure" attribute; arguments as in
5081 struct attribute_spec.handler. */
5082
5083static tree
e18476eb
BI
5084handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5085 int ARG_UNUSED (flags), bool *no_add_attrs)
349ae713
NB
5086{
5087 if (TREE_CODE (*node) == FUNCTION_DECL)
5088 DECL_IS_PURE (*node) = 1;
5089 /* ??? TODO: Support types. */
5090 else
5091 {
5c498b10 5092 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
5093 *no_add_attrs = true;
5094 }
5095
5096 return NULL_TREE;
5097}
5098
dcd6de6d
ZD
5099/* Handle a "no vops" attribute; arguments as in
5100 struct attribute_spec.handler. */
5101
5102static tree
5103handle_novops_attribute (tree *node, tree ARG_UNUSED (name),
5104 tree ARG_UNUSED (args), int ARG_UNUSED (flags),
5105 bool *ARG_UNUSED (no_add_attrs))
5106{
5107 gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
5108 DECL_IS_NOVOPS (*node) = 1;
5109 return NULL_TREE;
5110}
5111
349ae713
NB
5112/* Handle a "deprecated" attribute; arguments as in
5113 struct attribute_spec.handler. */
35b1a6fa 5114
349ae713 5115static tree
35b1a6fa 5116handle_deprecated_attribute (tree *node, tree name,
e18476eb 5117 tree ARG_UNUSED (args), int flags,
a742c759 5118 bool *no_add_attrs)
349ae713
NB
5119{
5120 tree type = NULL_TREE;
5121 int warn = 0;
c51a1ba9 5122 tree what = NULL_TREE;
35b1a6fa 5123
349ae713
NB
5124 if (DECL_P (*node))
5125 {
5126 tree decl = *node;
5127 type = TREE_TYPE (decl);
35b1a6fa 5128
349ae713
NB
5129 if (TREE_CODE (decl) == TYPE_DECL
5130 || TREE_CODE (decl) == PARM_DECL
5131 || TREE_CODE (decl) == VAR_DECL
5132 || TREE_CODE (decl) == FUNCTION_DECL
5133 || TREE_CODE (decl) == FIELD_DECL)
5134 TREE_DEPRECATED (decl) = 1;
5135 else
5136 warn = 1;
5137 }
5138 else if (TYPE_P (*node))
5139 {
5140 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
8dd16ecc 5141 *node = build_variant_type_copy (*node);
349ae713
NB
5142 TREE_DEPRECATED (*node) = 1;
5143 type = *node;
5144 }
5145 else
5146 warn = 1;
35b1a6fa 5147
349ae713
NB
5148 if (warn)
5149 {
5150 *no_add_attrs = true;
5151 if (type && TYPE_NAME (type))
5152 {
5153 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
c51a1ba9 5154 what = TYPE_NAME (*node);
349ae713
NB
5155 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
5156 && DECL_NAME (TYPE_NAME (type)))
c51a1ba9 5157 what = DECL_NAME (TYPE_NAME (type));
349ae713
NB
5158 }
5159 if (what)
5c498b10 5160 warning (OPT_Wattributes, "%qE attribute ignored for %qE", name, what);
349ae713 5161 else
5c498b10 5162 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
5163 }
5164
5165 return NULL_TREE;
5166}
5167
349ae713
NB
5168/* Handle a "vector_size" attribute; arguments as in
5169 struct attribute_spec.handler. */
5170
5171static tree
35b1a6fa 5172handle_vector_size_attribute (tree *node, tree name, tree args,
e18476eb 5173 int ARG_UNUSED (flags),
a742c759 5174 bool *no_add_attrs)
349ae713
NB
5175{
5176 unsigned HOST_WIDE_INT vecsize, nunits;
26277d41 5177 enum machine_mode orig_mode;
4a5eab38 5178 tree type = *node, new_type, size;
349ae713
NB
5179
5180 *no_add_attrs = true;
5181
4a5eab38 5182 size = TREE_VALUE (args);
4a5eab38 5183
3f75a254 5184 if (!host_integerp (size, 1))
349ae713 5185 {
5c498b10 5186 warning (OPT_Wattributes, "%qE attribute ignored", name);
349ae713
NB
5187 return NULL_TREE;
5188 }
5189
5190 /* Get the vector size (in bytes). */
4a5eab38 5191 vecsize = tree_low_cst (size, 1);
349ae713
NB
5192
5193 /* We need to provide for vector pointers, vector arrays, and
5194 functions returning vectors. For example:
5195
5196 __attribute__((vector_size(16))) short *foo;
5197
5198 In this case, the mode is SI, but the type being modified is
5199 HI, so we need to look further. */
5200
5201 while (POINTER_TYPE_P (type)
5202 || TREE_CODE (type) == FUNCTION_TYPE
43dc123f 5203 || TREE_CODE (type) == METHOD_TYPE
349ae713
NB
5204 || TREE_CODE (type) == ARRAY_TYPE)
5205 type = TREE_TYPE (type);
5206
5207 /* Get the mode of the type being modified. */
5208 orig_mode = TYPE_MODE (type);
5209
5210 if (TREE_CODE (type) == RECORD_TYPE
3d8bf70f 5211 || (!SCALAR_FLOAT_MODE_P (orig_mode)
349ae713 5212 && GET_MODE_CLASS (orig_mode) != MODE_INT)
3f75a254 5213 || !host_integerp (TYPE_SIZE_UNIT (type), 1))
349ae713 5214 {
c51a1ba9 5215 error ("invalid vector type for attribute %qE", name);
349ae713
NB
5216 return NULL_TREE;
5217 }
5218
5219 /* Calculate how many units fit in the vector. */
5220 nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
26277d41 5221 if (nunits & (nunits - 1))
349ae713 5222 {
26277d41 5223 error ("number of components of the vector not a power of two");
349ae713
NB
5224 return NULL_TREE;
5225 }
5226
26277d41 5227 new_type = build_vector_type (type, nunits);
349ae713
NB
5228
5229 /* Build back pointers if needed. */
b34417a4 5230 *node = reconstruct_complex_type (*node, new_type);
349ae713
NB
5231
5232 return NULL_TREE;
5233}
5234
b34c7881
JT
5235/* Handle the "nonnull" attribute. */
5236static tree
e18476eb
BI
5237handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
5238 tree args, int ARG_UNUSED (flags),
a742c759 5239 bool *no_add_attrs)
b34c7881
JT
5240{
5241 tree type = *node;
5242 unsigned HOST_WIDE_INT attr_arg_num;
5243
5244 /* If no arguments are specified, all pointer arguments should be
95bd1dd7 5245 non-null. Verify a full prototype is given so that the arguments
b34c7881 5246 will have the correct types when we actually check them later. */
3f75a254 5247 if (!args)
b34c7881 5248 {
3f75a254 5249 if (!TYPE_ARG_TYPES (type))
b34c7881
JT
5250 {
5251 error ("nonnull attribute without arguments on a non-prototype");
6de9cd9a 5252 *no_add_attrs = true;
b34c7881
JT
5253 }
5254 return NULL_TREE;
5255 }
5256
5257 /* Argument list specified. Verify that each argument number references
5258 a pointer argument. */
5259 for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
5260 {
5261 tree argument;
6de9cd9a 5262 unsigned HOST_WIDE_INT arg_num = 0, ck_num;
b34c7881 5263
3f75a254 5264 if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
b34c7881 5265 {
40b97a2e 5266 error ("nonnull argument has invalid operand number (argument %lu)",
b34c7881
JT
5267 (unsigned long) attr_arg_num);
5268 *no_add_attrs = true;
5269 return NULL_TREE;
5270 }
5271
5272 argument = TYPE_ARG_TYPES (type);
5273 if (argument)
5274 {
5275 for (ck_num = 1; ; ck_num++)
5276 {
3f75a254 5277 if (!argument || ck_num == arg_num)
b34c7881
JT
5278 break;
5279 argument = TREE_CHAIN (argument);
5280 }
5281
3f75a254 5282 if (!argument
b34c7881
JT
5283 || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
5284 {
40b97a2e 5285 error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
b34c7881
JT
5286 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5287 *no_add_attrs = true;
5288 return NULL_TREE;
5289 }
5290
6de9cd9a 5291 if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
b34c7881 5292 {
40b97a2e 5293 error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
b34c7881
JT
5294 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5295 *no_add_attrs = true;
5296 return NULL_TREE;
5297 }
5298 }
5299 }
5300
5301 return NULL_TREE;
5302}
5303
5304/* Check the argument list of a function call for null in argument slots
5305 that are marked as requiring a non-null pointer argument. */
5306
5307static void
35b1a6fa 5308check_function_nonnull (tree attrs, tree params)
b34c7881
JT
5309{
5310 tree a, args, param;
5311 int param_num;
5312
5313 for (a = attrs; a; a = TREE_CHAIN (a))
5314 {
5315 if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
5316 {
6de9cd9a 5317 args = TREE_VALUE (a);
b34c7881 5318
6de9cd9a
DN
5319 /* Walk the argument list. If we encounter an argument number we
5320 should check for non-null, do it. If the attribute has no args,
5321 then every pointer argument is checked (in which case the check
b34c7881 5322 for pointer type is done in check_nonnull_arg). */
6de9cd9a
DN
5323 for (param = params, param_num = 1; ;
5324 param_num++, param = TREE_CHAIN (param))
5325 {
3f75a254 5326 if (!param)
35b1a6fa 5327 break;
3f75a254 5328 if (!args || nonnull_check_p (args, param_num))
35b1a6fa
AJ
5329 check_function_arguments_recurse (check_nonnull_arg, NULL,
5330 TREE_VALUE (param),
5331 param_num);
6de9cd9a 5332 }
b34c7881
JT
5333 }
5334 }
5335}
5336
254986c7
KG
5337/* Check that the Nth argument of a function call (counting backwards
5338 from the end) is a (pointer)0. */
3d091dac
KG
5339
5340static void
10a22b11 5341check_function_sentinel (tree attrs, tree params, tree typelist)
3d091dac
KG
5342{
5343 tree attr = lookup_attribute ("sentinel", attrs);
5344
5345 if (attr)
5346 {
10a22b11
KG
5347 /* Skip over the named arguments. */
5348 while (typelist && params)
5349 {
5350 typelist = TREE_CHAIN (typelist);
5351 params = TREE_CHAIN (params);
5352 }
5353
5354 if (typelist || !params)
30480ec4
DD
5355 warning (OPT_Wformat,
5356 "not enough variable arguments to fit a sentinel");
3d091dac
KG
5357 else
5358 {
254986c7
KG
5359 tree sentinel, end;
5360 unsigned pos = 0;
5361
5362 if (TREE_VALUE (attr))
5363 {
5364 tree p = TREE_VALUE (TREE_VALUE (attr));
254986c7
KG
5365 pos = TREE_INT_CST_LOW (p);
5366 }
5367
5368 sentinel = end = params;
5369
5370 /* Advance `end' ahead of `sentinel' by `pos' positions. */
5371 while (pos > 0 && TREE_CHAIN (end))
5372 {
5373 pos--;
5374 end = TREE_CHAIN (end);
5375 }
5376 if (pos > 0)
5377 {
30480ec4
DD
5378 warning (OPT_Wformat,
5379 "not enough variable arguments to fit a sentinel");
254986c7
KG
5380 return;
5381 }
5382
5383 /* Now advance both until we find the last parameter. */
5384 while (TREE_CHAIN (end))
5385 {
5386 end = TREE_CHAIN (end);
5387 sentinel = TREE_CHAIN (sentinel);
5388 }
5389
5390 /* Validate the sentinel. */
b2f97e4a
MM
5391 if ((!POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (sentinel)))
5392 || !integer_zerop (TREE_VALUE (sentinel)))
5393 /* Although __null (in C++) is only an integer we allow it
5394 nevertheless, as we are guaranteed that it's exactly
5395 as wide as a pointer, and we don't want to force
5396 users to cast the NULL they have written there.
5397 We warn with -Wstrict-null-sentinel, though. */
5398 && (warn_strict_null_sentinel
5399 || null_node != TREE_VALUE (sentinel)))
30480ec4 5400 warning (OPT_Wformat, "missing sentinel in function call");
3d091dac
KG
5401 }
5402 }
5403}
5404
b34c7881
JT
5405/* Helper for check_function_nonnull; given a list of operands which
5406 must be non-null in ARGS, determine if operand PARAM_NUM should be
5407 checked. */
5408
5409static bool
35b1a6fa 5410nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
b34c7881 5411{
6de9cd9a 5412 unsigned HOST_WIDE_INT arg_num = 0;
b34c7881
JT
5413
5414 for (; args; args = TREE_CHAIN (args))
5415 {
366de0ce
NS
5416 bool found = get_nonnull_operand (TREE_VALUE (args), &arg_num);
5417
5418 gcc_assert (found);
b34c7881
JT
5419
5420 if (arg_num == param_num)
5421 return true;
5422 }
5423 return false;
5424}
5425
5426/* Check that the function argument PARAM (which is operand number
5427 PARAM_NUM) is non-null. This is called by check_function_nonnull
5428 via check_function_arguments_recurse. */
5429
5430static void
e18476eb 5431check_nonnull_arg (void * ARG_UNUSED (ctx), tree param,
35b1a6fa 5432 unsigned HOST_WIDE_INT param_num)
b34c7881
JT
5433{
5434 /* Just skip checking the argument if it's not a pointer. This can
5435 happen if the "nonnull" attribute was given without an operand
5436 list (which means to check every pointer argument). */
5437
5438 if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
5439 return;
5440
5441 if (integer_zerop (param))
30480ec4
DD
5442 warning (OPT_Wnonnull, "null argument where non-null required "
5443 "(argument %lu)", (unsigned long) param_num);
b34c7881
JT
5444}
5445
5446/* Helper for nonnull attribute handling; fetch the operand number
5447 from the attribute argument list. */
5448
5449static bool
35b1a6fa 5450get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
b34c7881 5451{
f6d1c3a6 5452 /* Verify the arg number is a constant. */
b34c7881
JT
5453 if (TREE_CODE (arg_num_expr) != INTEGER_CST
5454 || TREE_INT_CST_HIGH (arg_num_expr) != 0)
5455 return false;
5456
5457 *valp = TREE_INT_CST_LOW (arg_num_expr);
5458 return true;
5459}
39f2f3c8
RS
5460
5461/* Handle a "nothrow" attribute; arguments as in
5462 struct attribute_spec.handler. */
5463
5464static tree
e18476eb
BI
5465handle_nothrow_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5466 int ARG_UNUSED (flags), bool *no_add_attrs)
39f2f3c8
RS
5467{
5468 if (TREE_CODE (*node) == FUNCTION_DECL)
5469 TREE_NOTHROW (*node) = 1;
5470 /* ??? TODO: Support types. */
5471 else
5472 {
5c498b10 5473 warning (OPT_Wattributes, "%qE attribute ignored", name);
39f2f3c8
RS
5474 *no_add_attrs = true;
5475 }
5476
5477 return NULL_TREE;
5478}
0bfa5f65
RH
5479
5480/* Handle a "cleanup" attribute; arguments as in
5481 struct attribute_spec.handler. */
5482
5483static tree
35b1a6fa 5484handle_cleanup_attribute (tree *node, tree name, tree args,
e18476eb 5485 int ARG_UNUSED (flags), bool *no_add_attrs)
0bfa5f65
RH
5486{
5487 tree decl = *node;
5488 tree cleanup_id, cleanup_decl;
5489
5490 /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
5491 for global destructors in C++. This requires infrastructure that
5492 we don't have generically at the moment. It's also not a feature
5493 we'd be missing too much, since we do have attribute constructor. */
5494 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
5495 {
5c498b10 5496 warning (OPT_Wattributes, "%qE attribute ignored", name);
0bfa5f65
RH
5497 *no_add_attrs = true;
5498 return NULL_TREE;
5499 }
5500
5501 /* Verify that the argument is a function in scope. */
5502 /* ??? We could support pointers to functions here as well, if
5503 that was considered desirable. */
5504 cleanup_id = TREE_VALUE (args);
5505 if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
5506 {
40b97a2e 5507 error ("cleanup argument not an identifier");
0bfa5f65
RH
5508 *no_add_attrs = true;
5509 return NULL_TREE;
5510 }
10e6657a 5511 cleanup_decl = lookup_name (cleanup_id);
0bfa5f65
RH
5512 if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
5513 {
40b97a2e 5514 error ("cleanup argument not a function");
0bfa5f65
RH
5515 *no_add_attrs = true;
5516 return NULL_TREE;
5517 }
5518
35b1a6fa 5519 /* That the function has proper type is checked with the
0bfa5f65
RH
5520 eventual call to build_function_call. */
5521
5522 return NULL_TREE;
5523}
72954a4f
JM
5524
5525/* Handle a "warn_unused_result" attribute. No special handling. */
5526
5527static tree
5528handle_warn_unused_result_attribute (tree *node, tree name,
e18476eb
BI
5529 tree ARG_UNUSED (args),
5530 int ARG_UNUSED (flags), bool *no_add_attrs)
72954a4f
JM
5531{
5532 /* Ignore the attribute for functions not returning any value. */
5533 if (VOID_TYPE_P (TREE_TYPE (*node)))
5534 {
5c498b10 5535 warning (OPT_Wattributes, "%qE attribute ignored", name);
72954a4f
JM
5536 *no_add_attrs = true;
5537 }
5538
5539 return NULL_TREE;
5540}
3d091dac
KG
5541
5542/* Handle a "sentinel" attribute. */
5543
5544static tree
254986c7 5545handle_sentinel_attribute (tree *node, tree name, tree args,
3d091dac
KG
5546 int ARG_UNUSED (flags), bool *no_add_attrs)
5547{
5548 tree params = TYPE_ARG_TYPES (*node);
5549
5550 if (!params)
5551 {
5c498b10
DD
5552 warning (OPT_Wattributes,
5553 "%qE attribute requires prototypes with named arguments", name);
3d091dac 5554 *no_add_attrs = true;
3d091dac 5555 }
254986c7
KG
5556 else
5557 {
5558 while (TREE_CHAIN (params))
5559 params = TREE_CHAIN (params);
3d091dac 5560
254986c7
KG
5561 if (VOID_TYPE_P (TREE_VALUE (params)))
5562 {
5c498b10
DD
5563 warning (OPT_Wattributes,
5564 "%qE attribute only applies to variadic functions", name);
254986c7
KG
5565 *no_add_attrs = true;
5566 }
5567 }
5568
5569 if (args)
3d091dac 5570 {
254986c7
KG
5571 tree position = TREE_VALUE (args);
5572
254986c7
KG
5573 if (TREE_CODE (position) != INTEGER_CST)
5574 {
d4ee4d25 5575 warning (0, "requested position is not an integer constant");
254986c7
KG
5576 *no_add_attrs = true;
5577 }
5578 else
5579 {
5580 if (tree_int_cst_lt (position, integer_zero_node))
5581 {
d4ee4d25 5582 warning (0, "requested position is less than zero");
254986c7
KG
5583 *no_add_attrs = true;
5584 }
5585 }
3d091dac
KG
5586 }
5587
5588 return NULL_TREE;
5589}
b34c7881
JT
5590\f
5591/* Check for valid arguments being passed to a function. */
5592void
10a22b11 5593check_function_arguments (tree attrs, tree params, tree typelist)
b34c7881
JT
5594{
5595 /* Check for null being passed in a pointer argument that must be
5596 non-null. We also need to do this if format checking is enabled. */
5597
5598 if (warn_nonnull)
5599 check_function_nonnull (attrs, params);
5600
5601 /* Check for errors in format strings. */
5602
7876a414 5603 if (warn_format || warn_missing_format_attribute)
3d091dac 5604 check_function_format (attrs, params);
7876a414
KG
5605
5606 if (warn_format)
5607 check_function_sentinel (attrs, params, typelist);
b34c7881
JT
5608}
5609
5610/* Generic argument checking recursion routine. PARAM is the argument to
5611 be checked. PARAM_NUM is the number of the argument. CALLBACK is invoked
5612 once the argument is resolved. CTX is context for the callback. */
5613void
35b1a6fa
AJ
5614check_function_arguments_recurse (void (*callback)
5615 (void *, tree, unsigned HOST_WIDE_INT),
5616 void *ctx, tree param,
5617 unsigned HOST_WIDE_INT param_num)
b34c7881 5618{
1344f9a3
JM
5619 if ((TREE_CODE (param) == NOP_EXPR || TREE_CODE (param) == CONVERT_EXPR)
5620 && (TYPE_PRECISION (TREE_TYPE (param))
5621 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (param, 0)))))
b34c7881
JT
5622 {
5623 /* Strip coercion. */
5624 check_function_arguments_recurse (callback, ctx,
6de9cd9a 5625 TREE_OPERAND (param, 0), param_num);
b34c7881
JT
5626 return;
5627 }
5628
5629 if (TREE_CODE (param) == CALL_EXPR)
5630 {
5631 tree type = TREE_TYPE (TREE_TYPE (TREE_OPERAND (param, 0)));
5632 tree attrs;
5633 bool found_format_arg = false;
5634
5635 /* See if this is a call to a known internationalization function
5636 that modifies a format arg. Such a function may have multiple
5637 format_arg attributes (for example, ngettext). */
5638
5639 for (attrs = TYPE_ATTRIBUTES (type);
5640 attrs;
5641 attrs = TREE_CHAIN (attrs))
5642 if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
5643 {
5644 tree inner_args;
5645 tree format_num_expr;
5646 int format_num;
5647 int i;
5648
5649 /* Extract the argument number, which was previously checked
5650 to be valid. */
5651 format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
b34c7881 5652
366de0ce
NS
5653 gcc_assert (TREE_CODE (format_num_expr) == INTEGER_CST
5654 && !TREE_INT_CST_HIGH (format_num_expr));
b34c7881
JT
5655
5656 format_num = TREE_INT_CST_LOW (format_num_expr);
5657
5658 for (inner_args = TREE_OPERAND (param, 1), i = 1;
5659 inner_args != 0;
5660 inner_args = TREE_CHAIN (inner_args), i++)
5661 if (i == format_num)
5662 {
5663 check_function_arguments_recurse (callback, ctx,
5664 TREE_VALUE (inner_args),
5665 param_num);
5666 found_format_arg = true;
5667 break;
5668 }
5669 }
5670
5671 /* If we found a format_arg attribute and did a recursive check,
5672 we are done with checking this argument. Otherwise, we continue
5673 and this will be considered a non-literal. */
5674 if (found_format_arg)
5675 return;
5676 }
5677
5678 if (TREE_CODE (param) == COND_EXPR)
5679 {
5680 /* Check both halves of the conditional expression. */
5681 check_function_arguments_recurse (callback, ctx,
6de9cd9a 5682 TREE_OPERAND (param, 1), param_num);
b34c7881 5683 check_function_arguments_recurse (callback, ctx,
6de9cd9a 5684 TREE_OPERAND (param, 2), param_num);
b34c7881
JT
5685 return;
5686 }
5687
5688 (*callback) (ctx, param, param_num);
5689}
e2500fed 5690
d07605f5
AP
5691/* Function to help qsort sort FIELD_DECLs by name order. */
5692
5693int
5694field_decl_cmp (const void *x_p, const void *y_p)
5695{
28dab132
BI
5696 const tree *const x = (const tree *const) x_p;
5697 const tree *const y = (const tree *const) y_p;
5698
d07605f5
AP
5699 if (DECL_NAME (*x) == DECL_NAME (*y))
5700 /* A nontype is "greater" than a type. */
5701 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
5702 if (DECL_NAME (*x) == NULL_TREE)
5703 return -1;
5704 if (DECL_NAME (*y) == NULL_TREE)
5705 return 1;
5706 if (DECL_NAME (*x) < DECL_NAME (*y))
5707 return -1;
5708 return 1;
5709}
5710
5711static struct {
5712 gt_pointer_operator new_value;
5713 void *cookie;
5714} resort_data;
5715
5716/* This routine compares two fields like field_decl_cmp but using the
5717pointer operator in resort_data. */
5718
5719static int
5720resort_field_decl_cmp (const void *x_p, const void *y_p)
5721{
28dab132
BI
5722 const tree *const x = (const tree *const) x_p;
5723 const tree *const y = (const tree *const) y_p;
d07605f5
AP
5724
5725 if (DECL_NAME (*x) == DECL_NAME (*y))
5726 /* A nontype is "greater" than a type. */
5727 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
5728 if (DECL_NAME (*x) == NULL_TREE)
5729 return -1;
5730 if (DECL_NAME (*y) == NULL_TREE)
5731 return 1;
5732 {
5733 tree d1 = DECL_NAME (*x);
5734 tree d2 = DECL_NAME (*y);
5735 resort_data.new_value (&d1, resort_data.cookie);
5736 resort_data.new_value (&d2, resort_data.cookie);
5737 if (d1 < d2)
5738 return -1;
5739 }
5740 return 1;
5741}
5742
5743/* Resort DECL_SORTED_FIELDS because pointers have been reordered. */
5744
5745void
5746resort_sorted_fields (void *obj,
e18476eb 5747 void * ARG_UNUSED (orig_obj),
6de9cd9a
DN
5748 gt_pointer_operator new_value,
5749 void *cookie)
d07605f5 5750{
e18476eb 5751 struct sorted_fields_type *sf = (struct sorted_fields_type *) obj;
d07605f5
AP
5752 resort_data.new_value = new_value;
5753 resort_data.cookie = cookie;
5754 qsort (&sf->elts[0], sf->len, sizeof (tree),
6de9cd9a 5755 resort_field_decl_cmp);
d07605f5
AP
5756}
5757
0a3ee0fd
GDR
5758/* Subroutine of c_parse_error.
5759 Return the result of concatenating LHS and RHS. RHS is really
5760 a string literal, its first character is indicated by RHS_START and
3292fb42 5761 RHS_SIZE is its length (including the terminating NUL character).
0a3ee0fd
GDR
5762
5763 The caller is responsible for deleting the returned pointer. */
5764
5765static char *
5766catenate_strings (const char *lhs, const char *rhs_start, int rhs_size)
5767{
5768 const int lhs_size = strlen (lhs);
5769 char *result = XNEWVEC (char, lhs_size + rhs_size);
5770 strncpy (result, lhs, lhs_size);
5771 strncpy (result + lhs_size, rhs_start, rhs_size);
5772 return result;
5773}
5774
4b794eaf 5775/* Issue the error given by GMSGID, indicating that it occurred before
4bb8ca28
MM
5776 TOKEN, which had the associated VALUE. */
5777
5778void
4b794eaf 5779c_parse_error (const char *gmsgid, enum cpp_ttype token, tree value)
4bb8ca28 5780{
0a3ee0fd
GDR
5781#define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
5782
5783 char *message = NULL;
4bb8ca28
MM
5784
5785 if (token == CPP_EOF)
4b794eaf 5786 message = catenate_messages (gmsgid, " at end of input");
4bb8ca28
MM
5787 else if (token == CPP_CHAR || token == CPP_WCHAR)
5788 {
5789 unsigned int val = TREE_INT_CST_LOW (value);
5790 const char *const ell = (token == CPP_CHAR) ? "" : "L";
5791 if (val <= UCHAR_MAX && ISGRAPH (val))
4b794eaf 5792 message = catenate_messages (gmsgid, " before %s'%c'");
4bb8ca28 5793 else
4b794eaf 5794 message = catenate_messages (gmsgid, " before %s'\\x%x'");
0a3ee0fd
GDR
5795
5796 error (message, ell, val);
5797 free (message);
5798 message = NULL;
4bb8ca28 5799 }
0a3ee0fd 5800 else if (token == CPP_STRING || token == CPP_WSTRING)
4b794eaf 5801 message = catenate_messages (gmsgid, " before string constant");
4bb8ca28 5802 else if (token == CPP_NUMBER)
4b794eaf 5803 message = catenate_messages (gmsgid, " before numeric constant");
4bb8ca28 5804 else if (token == CPP_NAME)
0a3ee0fd 5805 {
4b794eaf 5806 message = catenate_messages (gmsgid, " before %qE");
c51a1ba9 5807 error (message, value);
0a3ee0fd
GDR
5808 free (message);
5809 message = NULL;
5810 }
4bb8ca28 5811 else if (token < N_TTYPES)
0a3ee0fd 5812 {
4b794eaf 5813 message = catenate_messages (gmsgid, " before %qs token");
0a3ee0fd
GDR
5814 error (message, cpp_type2name (token));
5815 free (message);
5816 message = NULL;
5817 }
4bb8ca28 5818 else
4b794eaf 5819 error (gmsgid);
0a3ee0fd
GDR
5820
5821 if (message)
5822 {
5823 error (message);
5824 free (message);
5825 }
5826#undef catenate_messages
4bb8ca28
MM
5827}
5828
6de9cd9a
DN
5829/* Walk a gimplified function and warn for functions whose return value is
5830 ignored and attribute((warn_unused_result)) is set. This is done before
9f63daea
EC
5831 inlining, so we don't have to worry about that. */
5832
6de9cd9a
DN
5833void
5834c_warn_unused_result (tree *top_p)
5835{
5836 tree t = *top_p;
5837 tree_stmt_iterator i;
5838 tree fdecl, ftype;
5839
5840 switch (TREE_CODE (t))
5841 {
5842 case STATEMENT_LIST:
5843 for (i = tsi_start (*top_p); !tsi_end_p (i); tsi_next (&i))
5844 c_warn_unused_result (tsi_stmt_ptr (i));
5845 break;
5846
5847 case COND_EXPR:
5848 c_warn_unused_result (&COND_EXPR_THEN (t));
5849 c_warn_unused_result (&COND_EXPR_ELSE (t));
5850 break;
5851 case BIND_EXPR:
5852 c_warn_unused_result (&BIND_EXPR_BODY (t));
5853 break;
5854 case TRY_FINALLY_EXPR:
5855 case TRY_CATCH_EXPR:
5856 c_warn_unused_result (&TREE_OPERAND (t, 0));
5857 c_warn_unused_result (&TREE_OPERAND (t, 1));
5858 break;
5859 case CATCH_EXPR:
5860 c_warn_unused_result (&CATCH_BODY (t));
5861 break;
5862 case EH_FILTER_EXPR:
5863 c_warn_unused_result (&EH_FILTER_FAILURE (t));
5864 break;
5865
5866 case CALL_EXPR:
5201931e
JM
5867 if (TREE_USED (t))
5868 break;
5869
6de9cd9a
DN
5870 /* This is a naked call, as opposed to a CALL_EXPR nested inside
5871 a MODIFY_EXPR. All calls whose value is ignored should be
5872 represented like this. Look for the attribute. */
5873 fdecl = get_callee_fndecl (t);
5874 if (fdecl)
5875 ftype = TREE_TYPE (fdecl);
5876 else
5877 {
5878 ftype = TREE_TYPE (TREE_OPERAND (t, 0));
5879 /* Look past pointer-to-function to the function type itself. */
5880 ftype = TREE_TYPE (ftype);
5881 }
5882
5883 if (lookup_attribute ("warn_unused_result", TYPE_ATTRIBUTES (ftype)))
5884 {
5885 if (fdecl)
d4ee4d25 5886 warning (0, "%Hignoring return value of %qD, "
6de9cd9a
DN
5887 "declared with attribute warn_unused_result",
5888 EXPR_LOCUS (t), fdecl);
5889 else
d4ee4d25 5890 warning (0, "%Hignoring return value of function "
6de9cd9a
DN
5891 "declared with attribute warn_unused_result",
5892 EXPR_LOCUS (t));
5893 }
5894 break;
5895
5896 default:
5897 /* Not a container, not a call, or a call whose value is used. */
5898 break;
5899 }
5900}
5901
c5ff069d
ZW
5902/* Convert a character from the host to the target execution character
5903 set. cpplib handles this, mostly. */
5904
5905HOST_WIDE_INT
5906c_common_to_target_charset (HOST_WIDE_INT c)
5907{
5908 /* Character constants in GCC proper are sign-extended under -fsigned-char,
5909 zero-extended under -fno-signed-char. cpplib insists that characters
5910 and character constants are always unsigned. Hence we must convert
5911 back and forth. */
5912 cppchar_t uc = ((cppchar_t)c) & ((((cppchar_t)1) << CHAR_BIT)-1);
5913
5914 uc = cpp_host_to_exec_charset (parse_in, uc);
5915
5916 if (flag_signed_char)
5917 return ((HOST_WIDE_INT)uc) << (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE)
5918 >> (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE);
5919 else
5920 return uc;
5921}
5922
ee8a6a3e
RH
5923/* Build the result of __builtin_offsetof. EXPR is a nested sequence of
5924 component references, with an INDIRECT_REF at the bottom; much like
5925 the traditional rendering of offsetof as a macro. Returns the folded
5926 and properly cast result. */
5927
5928static tree
5929fold_offsetof_1 (tree expr)
5930{
5931 enum tree_code code = PLUS_EXPR;
5932 tree base, off, t;
5933
5934 switch (TREE_CODE (expr))
5935 {
5936 case ERROR_MARK:
5937 return expr;
5938
5939 case INDIRECT_REF:
5940 return size_zero_node;
5941
5942 case COMPONENT_REF:
5943 base = fold_offsetof_1 (TREE_OPERAND (expr, 0));
5944 if (base == error_mark_node)
5945 return base;
5946
5947 t = TREE_OPERAND (expr, 1);
5948 if (DECL_C_BIT_FIELD (t))
5949 {
5950 error ("attempt to take address of bit-field structure "
c51a1ba9 5951 "member %qD", t);
ee8a6a3e
RH
5952 return error_mark_node;
5953 }
5954 off = size_binop (PLUS_EXPR, DECL_FIELD_OFFSET (t),
5955 size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t), 1)
5956 / BITS_PER_UNIT));
5957 break;
5958
5959 case ARRAY_REF:
5960 base = fold_offsetof_1 (TREE_OPERAND (expr, 0));
5961 if (base == error_mark_node)
5962 return base;
5963
5964 t = TREE_OPERAND (expr, 1);
5965 if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
5966 {
5967 code = MINUS_EXPR;
987b67bc 5968 t = fold_build1 (NEGATE_EXPR, TREE_TYPE (t), t);
ee8a6a3e
RH
5969 }
5970 t = convert (sizetype, t);
5971 off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
5972 break;
5973
5974 default:
366de0ce 5975 gcc_unreachable ();
ee8a6a3e
RH
5976 }
5977
5978 return size_binop (code, base, off);
5979}
5980
5981tree
5982fold_offsetof (tree expr)
5983{
5984 /* Convert back from the internal sizetype to size_t. */
5985 return convert (size_type_node, fold_offsetof_1 (expr));
5986}
5987
37dc0d8d 5988/* Print an error message for an invalid lvalue. USE says
5ae9ba3e
MM
5989 how the lvalue is being used and so selects the error message. */
5990
37dc0d8d
JM
5991void
5992lvalue_error (enum lvalue_use use)
5ae9ba3e 5993{
37dc0d8d 5994 switch (use)
5ae9ba3e 5995 {
37dc0d8d 5996 case lv_assign:
5d352b2d 5997 error ("lvalue required as left operand of assignment");
37dc0d8d
JM
5998 break;
5999 case lv_increment:
5d352b2d 6000 error ("lvalue required as increment operand");
37dc0d8d
JM
6001 break;
6002 case lv_decrement:
5d352b2d 6003 error ("lvalue required as decrement operand");
37dc0d8d
JM
6004 break;
6005 case lv_addressof:
5d352b2d 6006 error ("lvalue required as unary %<&%> operand");
37dc0d8d
JM
6007 break;
6008 case lv_asm:
5d352b2d 6009 error ("lvalue required in asm statement");
37dc0d8d
JM
6010 break;
6011 default:
6012 gcc_unreachable ();
5ae9ba3e 6013 }
5ae9ba3e 6014}
aab038d5
RH
6015\f
6016/* *PTYPE is an incomplete array. Complete it with a domain based on
6017 INITIAL_VALUE. If INITIAL_VALUE is not present, use 1 if DO_DEFAULT
6018 is true. Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6019 2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty. */
6020
6021int
6022complete_array_type (tree *ptype, tree initial_value, bool do_default)
6023{
6024 tree maxindex, type, main_type, elt, unqual_elt;
6025 int failure = 0, quals;
6026
6027 maxindex = size_zero_node;
6028 if (initial_value)
6029 {
6030 if (TREE_CODE (initial_value) == STRING_CST)
6031 {
6032 int eltsize
6033 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
6034 maxindex = size_int (TREE_STRING_LENGTH (initial_value)/eltsize - 1);
6035 }
6036 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
6037 {
4038c495 6038 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
aab038d5 6039
4038c495 6040 if (VEC_empty (constructor_elt, v))
aab038d5
RH
6041 {
6042 if (pedantic)
6043 failure = 3;
6044 maxindex = integer_minus_one_node;
6045 }
6046 else
6047 {
6048 tree curindex;
4038c495
GB
6049 unsigned HOST_WIDE_INT cnt;
6050 constructor_elt *ce;
aab038d5 6051
4038c495
GB
6052 if (VEC_index (constructor_elt, v, 0)->index)
6053 maxindex = fold_convert (sizetype,
6054 VEC_index (constructor_elt,
6055 v, 0)->index);
aab038d5
RH
6056 curindex = maxindex;
6057
4038c495
GB
6058 for (cnt = 1;
6059 VEC_iterate (constructor_elt, v, cnt, ce);
6060 cnt++)
aab038d5 6061 {
4038c495
GB
6062 if (ce->index)
6063 curindex = fold_convert (sizetype, ce->index);
aab038d5
RH
6064 else
6065 curindex = size_binop (PLUS_EXPR, curindex, size_one_node);
6066
6067 if (tree_int_cst_lt (maxindex, curindex))
6068 maxindex = curindex;
6069 }
6070 }
6071 }
6072 else
6073 {
6074 /* Make an error message unless that happened already. */
6075 if (initial_value != error_mark_node)
6076 failure = 1;
6077 }
6078 }
6079 else
6080 {
6081 failure = 2;
6082 if (!do_default)
6083 return failure;
6084 }
6085
6086 type = *ptype;
6087 elt = TREE_TYPE (type);
6088 quals = TYPE_QUALS (strip_array_types (elt));
6089 if (quals == 0)
6090 unqual_elt = elt;
6091 else
6092 unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
6093
6094 /* Using build_distinct_type_copy and modifying things afterward instead
6095 of using build_array_type to create a new type preserves all of the
6096 TYPE_LANG_FLAG_? bits that the front end may have set. */
6097 main_type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
6098 TREE_TYPE (main_type) = unqual_elt;
6099 TYPE_DOMAIN (main_type) = build_index_type (maxindex);
6100 layout_type (main_type);
6101
6102 if (quals == 0)
6103 type = main_type;
6104 else
6105 type = c_build_qualified_type (main_type, quals);
6106
6107 *ptype = type;
6108 return failure;
6109}
5ae9ba3e 6110
48ae6c13
RH
6111\f
6112/* Used to help initialize the builtin-types.def table. When a type of
6113 the correct size doesn't exist, use error_mark_node instead of NULL.
6114 The later results in segfaults even when a decl using the type doesn't
6115 get invoked. */
6116
6117tree
6118builtin_type_for_size (int size, bool unsignedp)
6119{
6120 tree type = lang_hooks.types.type_for_size (size, unsignedp);
6121 return type ? type : error_mark_node;
6122}
6123
6124/* A helper function for resolve_overloaded_builtin in resolving the
6125 overloaded __sync_ builtins. Returns a positive power of 2 if the
6126 first operand of PARAMS is a pointer to a supported data type.
6127 Returns 0 if an error is encountered. */
6128
6129static int
6130sync_resolve_size (tree function, tree params)
6131{
6132 tree type;
6133 int size;
6134
6135 if (params == NULL)
6136 {
6137 error ("too few arguments to function %qE", function);
6138 return 0;
6139 }
6140
6141 type = TREE_TYPE (TREE_VALUE (params));
6142 if (TREE_CODE (type) != POINTER_TYPE)
6143 goto incompatible;
6144
6145 type = TREE_TYPE (type);
6146 if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
6147 goto incompatible;
6148
6149 size = tree_low_cst (TYPE_SIZE_UNIT (type), 1);
6150 if (size == 1 || size == 2 || size == 4 || size == 8)
6151 return size;
6152
6153 incompatible:
6154 error ("incompatible type for argument %d of %qE", 1, function);
6155 return 0;
6156}
6157
6158/* A helper function for resolve_overloaded_builtin. Adds casts to
6159 PARAMS to make arguments match up with those of FUNCTION. Drops
6160 the variadic arguments at the end. Returns false if some error
6161 was encountered; true on success. */
6162
6163static bool
6164sync_resolve_params (tree orig_function, tree function, tree params)
6165{
6166 tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (function));
6167 tree ptype;
6168 int number;
6169
6170 /* We've declared the implementation functions to use "volatile void *"
6171 as the pointer parameter, so we shouldn't get any complaints from the
6172 call to check_function_arguments what ever type the user used. */
6173 arg_types = TREE_CHAIN (arg_types);
6174 ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
6175 number = 2;
6176
6177 /* For the rest of the values, we need to cast these to FTYPE, so that we
6178 don't get warnings for passing pointer types, etc. */
6179 while (arg_types != void_list_node)
6180 {
6181 tree val;
6182
6183 params = TREE_CHAIN (params);
6184 if (params == NULL)
6185 {
6186 error ("too few arguments to function %qE", orig_function);
6187 return false;
6188 }
6189
6190 /* ??? Ideally for the first conversion we'd use convert_for_assignment
6191 so that we get warnings for anything that doesn't match the pointer
6192 type. This isn't portable across the C and C++ front ends atm. */
6193 val = TREE_VALUE (params);
6194 val = convert (ptype, val);
6195 val = convert (TREE_VALUE (arg_types), val);
6196 TREE_VALUE (params) = val;
6197
6198 arg_types = TREE_CHAIN (arg_types);
6199 number++;
6200 }
6201
6202 /* The definition of these primitives is variadic, with the remaining
6203 being "an optional list of variables protected by the memory barrier".
6204 No clue what that's supposed to mean, precisely, but we consider all
6205 call-clobbered variables to be protected so we're safe. */
6206 TREE_CHAIN (params) = NULL;
6207
6208 return true;
6209}
6210
6211/* A helper function for resolve_overloaded_builtin. Adds a cast to
6212 RESULT to make it match the type of the first pointer argument in
6213 PARAMS. */
6214
6215static tree
6216sync_resolve_return (tree params, tree result)
6217{
6218 tree ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
99db1ef0 6219 ptype = TYPE_MAIN_VARIANT (ptype);
48ae6c13
RH
6220 return convert (ptype, result);
6221}
6222
6223/* Some builtin functions are placeholders for other expressions. This
6224 function should be called immediately after parsing the call expression
6225 before surrounding code has committed to the type of the expression.
6226
6227 FUNCTION is the DECL that has been invoked; it is known to be a builtin.
6228 PARAMS is the argument list for the call. The return value is non-null
6229 when expansion is complete, and null if normal processing should
6230 continue. */
6231
6232tree
6233resolve_overloaded_builtin (tree function, tree params)
6234{
6235 enum built_in_function orig_code = DECL_FUNCTION_CODE (function);
58646b77
PB
6236 switch (DECL_BUILT_IN_CLASS (function))
6237 {
6238 case BUILT_IN_NORMAL:
6239 break;
6240 case BUILT_IN_MD:
6241 if (targetm.resolve_overloaded_builtin)
6242 return targetm.resolve_overloaded_builtin (function, params);
6243 else
6244 return NULL_TREE;
6245 default:
6246 return NULL_TREE;
6247 }
6248
6249 /* Handle BUILT_IN_NORMAL here. */
48ae6c13
RH
6250 switch (orig_code)
6251 {
6252 case BUILT_IN_FETCH_AND_ADD_N:
6253 case BUILT_IN_FETCH_AND_SUB_N:
6254 case BUILT_IN_FETCH_AND_OR_N:
6255 case BUILT_IN_FETCH_AND_AND_N:
6256 case BUILT_IN_FETCH_AND_XOR_N:
6257 case BUILT_IN_FETCH_AND_NAND_N:
6258 case BUILT_IN_ADD_AND_FETCH_N:
6259 case BUILT_IN_SUB_AND_FETCH_N:
6260 case BUILT_IN_OR_AND_FETCH_N:
6261 case BUILT_IN_AND_AND_FETCH_N:
6262 case BUILT_IN_XOR_AND_FETCH_N:
6263 case BUILT_IN_NAND_AND_FETCH_N:
6264 case BUILT_IN_BOOL_COMPARE_AND_SWAP_N:
6265 case BUILT_IN_VAL_COMPARE_AND_SWAP_N:
6266 case BUILT_IN_LOCK_TEST_AND_SET_N:
6267 case BUILT_IN_LOCK_RELEASE_N:
6268 {
6269 int n = sync_resolve_size (function, params);
6270 tree new_function, result;
6271
6272 if (n == 0)
6273 return error_mark_node;
6274
6275 new_function = built_in_decls[orig_code + exact_log2 (n) + 1];
6276 if (!sync_resolve_params (function, new_function, params))
6277 return error_mark_node;
6278
6279 result = build_function_call (new_function, params);
6280 if (orig_code != BUILT_IN_BOOL_COMPARE_AND_SWAP_N
6281 && orig_code != BUILT_IN_LOCK_RELEASE_N)
6282 result = sync_resolve_return (params, result);
6283
6284 return result;
6285 }
6286
6287 default:
58646b77 6288 return NULL_TREE;
48ae6c13
RH
6289 }
6290}
6291
5bed876a
AH
6292/* Ignoring their sign, return true if two scalar types are the same. */
6293bool
6294same_scalar_type_ignoring_signedness (tree t1, tree t2)
6295{
6296 enum tree_code c1 = TREE_CODE (t1), c2 = TREE_CODE (t2);
6297
6298 gcc_assert ((c1 == INTEGER_TYPE || c1 == REAL_TYPE)
6299 && (c2 == INTEGER_TYPE || c2 == REAL_TYPE));
6300
6301 /* Equality works here because c_common_signed_type uses
6302 TYPE_MAIN_VARIANT. */
6303 return lang_hooks.types.signed_type (t1)
6304 == lang_hooks.types.signed_type (t2);
6305}
6306
104f8784
KG
6307/* Check for missing format attributes on function pointers. LTYPE is
6308 the new type or left-hand side type. RTYPE is the old type or
6309 right-hand side type. Returns TRUE if LTYPE is missing the desired
6310 attribute. */
6311
6312bool
6313check_missing_format_attribute (tree ltype, tree rtype)
6314{
6315 tree const ttr = TREE_TYPE (rtype), ttl = TREE_TYPE (ltype);
6316 tree ra;
6317
6318 for (ra = TYPE_ATTRIBUTES (ttr); ra; ra = TREE_CHAIN (ra))
6319 if (is_attribute_p ("format", TREE_PURPOSE (ra)))
6320 break;
6321 if (ra)
6322 {
6323 tree la;
6324 for (la = TYPE_ATTRIBUTES (ttl); la; la = TREE_CHAIN (la))
6325 if (is_attribute_p ("format", TREE_PURPOSE (la)))
6326 break;
6327 return !la;
6328 }
6329 else
6330 return false;
6331}
6332
ff6b6641
GDR
6333/* Subscripting with type char is likely to lose on a machine where
6334 chars are signed. So warn on any machine, but optionally. Don't
6335 warn for unsigned char since that type is safe. Don't warn for
6336 signed char because anyone who uses that must have done so
6337 deliberately. Furthermore, we reduce the false positive load by
6338 warning only for non-constant value of type char. */
6339
6340void
6341warn_array_subscript_with_type_char (tree index)
6342{
6343 if (TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node
6344 && TREE_CODE (index) != INTEGER_CST)
6345 warning (OPT_Wchar_subscripts, "array subscript has type %<char%>");
6346}
6347
6348
e2500fed 6349#include "gt-c-common.h"