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