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