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