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