]> gcc.gnu.org Git - gcc.git/blob - gcc/c-common.c
backport: ChangeLog.tuples: ChangeLog from gimple-tuples-branch.
[gcc.git] / gcc / c-common.c
1 /* Subroutines shared by all languages that are variants of C.
2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
20
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "tm.h"
25 #include "intl.h"
26 #include "tree.h"
27 #include "flags.h"
28 #include "output.h"
29 #include "c-pragma.h"
30 #include "rtl.h"
31 #include "ggc.h"
32 #include "varray.h"
33 #include "expr.h"
34 #include "c-common.h"
35 #include "diagnostic.h"
36 #include "tm_p.h"
37 #include "obstack.h"
38 #include "cpplib.h"
39 #include "target.h"
40 #include "langhooks.h"
41 #include "tree-inline.h"
42 #include "c-tree.h"
43 #include "toplev.h"
44 #include "tree-iterator.h"
45 #include "hashtab.h"
46 #include "tree-mudflap.h"
47 #include "opts.h"
48 #include "real.h"
49 #include "cgraph.h"
50 #include "target-def.h"
51 #include "gimple.h"
52 #include "fixed-value.h"
53
54 cpp_reader *parse_in; /* Declared in c-pragma.h. */
55
56 /* We let tm.h override the types used here, to handle trivial differences
57 such as the choice of unsigned int or long unsigned int for size_t.
58 When machines start needing nontrivial differences in the size type,
59 it would be best to do something here to figure out automatically
60 from other information what type to use. */
61
62 #ifndef SIZE_TYPE
63 #define SIZE_TYPE "long unsigned int"
64 #endif
65
66 #ifndef PID_TYPE
67 #define PID_TYPE "int"
68 #endif
69
70 #ifndef CHAR16_TYPE
71 #define CHAR16_TYPE "short unsigned int"
72 #endif
73
74 #ifndef CHAR32_TYPE
75 #define CHAR32_TYPE "unsigned int"
76 #endif
77
78 #ifndef WCHAR_TYPE
79 #define WCHAR_TYPE "int"
80 #endif
81
82 /* WCHAR_TYPE gets overridden by -fshort-wchar. */
83 #define MODIFIED_WCHAR_TYPE \
84 (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
85
86 #ifndef PTRDIFF_TYPE
87 #define PTRDIFF_TYPE "long int"
88 #endif
89
90 #ifndef WINT_TYPE
91 #define WINT_TYPE "unsigned int"
92 #endif
93
94 #ifndef INTMAX_TYPE
95 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
96 ? "int" \
97 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
98 ? "long int" \
99 : "long long int"))
100 #endif
101
102 #ifndef UINTMAX_TYPE
103 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
104 ? "unsigned int" \
105 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
106 ? "long unsigned int" \
107 : "long long unsigned int"))
108 #endif
109
110 /* The following symbols are subsumed in the c_global_trees array, and
111 listed here individually for documentation purposes.
112
113 INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
114
115 tree short_integer_type_node;
116 tree long_integer_type_node;
117 tree long_long_integer_type_node;
118
119 tree short_unsigned_type_node;
120 tree long_unsigned_type_node;
121 tree long_long_unsigned_type_node;
122
123 tree truthvalue_type_node;
124 tree truthvalue_false_node;
125 tree truthvalue_true_node;
126
127 tree ptrdiff_type_node;
128
129 tree unsigned_char_type_node;
130 tree signed_char_type_node;
131 tree wchar_type_node;
132 tree signed_wchar_type_node;
133 tree unsigned_wchar_type_node;
134
135 tree char16_type_node;
136 tree char32_type_node;
137
138 tree float_type_node;
139 tree double_type_node;
140 tree long_double_type_node;
141
142 tree complex_integer_type_node;
143 tree complex_float_type_node;
144 tree complex_double_type_node;
145 tree complex_long_double_type_node;
146
147 tree dfloat32_type_node;
148 tree dfloat64_type_node;
149 tree_dfloat128_type_node;
150
151 tree intQI_type_node;
152 tree intHI_type_node;
153 tree intSI_type_node;
154 tree intDI_type_node;
155 tree intTI_type_node;
156
157 tree unsigned_intQI_type_node;
158 tree unsigned_intHI_type_node;
159 tree unsigned_intSI_type_node;
160 tree unsigned_intDI_type_node;
161 tree unsigned_intTI_type_node;
162
163 tree widest_integer_literal_type_node;
164 tree widest_unsigned_literal_type_node;
165
166 Nodes for types `void *' and `const void *'.
167
168 tree ptr_type_node, const_ptr_type_node;
169
170 Nodes for types `char *' and `const char *'.
171
172 tree string_type_node, const_string_type_node;
173
174 Type `char[SOMENUMBER]'.
175 Used when an array of char is needed and the size is irrelevant.
176
177 tree char_array_type_node;
178
179 Type `int[SOMENUMBER]' or something like it.
180 Used when an array of int needed and the size is irrelevant.
181
182 tree int_array_type_node;
183
184 Type `wchar_t[SOMENUMBER]' or something like it.
185 Used when a wide string literal is created.
186
187 tree wchar_array_type_node;
188
189 Type `char16_t[SOMENUMBER]' or something like it.
190 Used when a UTF-16 string literal is created.
191
192 tree char16_array_type_node;
193
194 Type `char32_t[SOMENUMBER]' or something like it.
195 Used when a UTF-32 string literal is created.
196
197 tree char32_array_type_node;
198
199 Type `int ()' -- used for implicit declaration of functions.
200
201 tree default_function_type;
202
203 A VOID_TYPE node, packaged in a TREE_LIST.
204
205 tree void_list_node;
206
207 The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
208 and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
209 VAR_DECLS, but C++ does.)
210
211 tree function_name_decl_node;
212 tree pretty_function_name_decl_node;
213 tree c99_function_name_decl_node;
214
215 Stack of nested function name VAR_DECLs.
216
217 tree saved_function_name_decls;
218
219 */
220
221 tree c_global_trees[CTI_MAX];
222 \f
223 /* Switches common to the C front ends. */
224
225 /* Nonzero if preprocessing only. */
226
227 int flag_preprocess_only;
228
229 /* Nonzero means don't output line number information. */
230
231 char flag_no_line_commands;
232
233 /* Nonzero causes -E output not to be done, but directives such as
234 #define that have side effects are still obeyed. */
235
236 char flag_no_output;
237
238 /* Nonzero means dump macros in some fashion. */
239
240 char flag_dump_macros;
241
242 /* Nonzero means pass #include lines through to the output. */
243
244 char flag_dump_includes;
245
246 /* Nonzero means process PCH files while preprocessing. */
247
248 bool flag_pch_preprocess;
249
250 /* The file name to which we should write a precompiled header, or
251 NULL if no header will be written in this compile. */
252
253 const char *pch_file;
254
255 /* Nonzero if an ISO standard was selected. It rejects macros in the
256 user's namespace. */
257 int flag_iso;
258
259 /* Nonzero if -undef was given. It suppresses target built-in macros
260 and assertions. */
261 int flag_undef;
262
263 /* Nonzero means don't recognize the non-ANSI builtin functions. */
264
265 int flag_no_builtin;
266
267 /* Nonzero means don't recognize the non-ANSI builtin functions.
268 -ansi sets this. */
269
270 int flag_no_nonansi_builtin;
271
272 /* Nonzero means give `double' the same size as `float'. */
273
274 int flag_short_double;
275
276 /* Nonzero means give `wchar_t' the same size as `short'. */
277
278 int flag_short_wchar;
279
280 /* Nonzero means allow implicit conversions between vectors with
281 differing numbers of subparts and/or differing element types. */
282 int flag_lax_vector_conversions;
283
284 /* Nonzero means allow Microsoft extensions without warnings or errors. */
285 int flag_ms_extensions;
286
287 /* Nonzero means don't recognize the keyword `asm'. */
288
289 int flag_no_asm;
290
291 /* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
292
293 int flag_signed_bitfields = 1;
294
295 /* Warn about #pragma directives that are not recognized. */
296
297 int warn_unknown_pragmas; /* Tri state variable. */
298
299 /* Warn about format/argument anomalies in calls to formatted I/O functions
300 (*printf, *scanf, strftime, strfmon, etc.). */
301
302 int warn_format;
303
304 /* Warn about using __null (as NULL in C++) as sentinel. For code compiled
305 with GCC this doesn't matter as __null is guaranteed to have the right
306 size. */
307
308 int warn_strict_null_sentinel;
309
310 /* Zero means that faster, ...NonNil variants of objc_msgSend...
311 calls will be used in ObjC; passing nil receivers to such calls
312 will most likely result in crashes. */
313 int flag_nil_receivers = 1;
314
315 /* Nonzero means that code generation will be altered to support
316 "zero-link" execution. This currently affects ObjC only, but may
317 affect other languages in the future. */
318 int flag_zero_link = 0;
319
320 /* Nonzero means emit an '__OBJC, __image_info' for the current translation
321 unit. It will inform the ObjC runtime that class definition(s) herein
322 contained are to replace one(s) previously loaded. */
323 int flag_replace_objc_classes = 0;
324
325 /* C/ObjC language option variables. */
326
327
328 /* Nonzero means allow type mismatches in conditional expressions;
329 just make their values `void'. */
330
331 int flag_cond_mismatch;
332
333 /* Nonzero means enable C89 Amendment 1 features. */
334
335 int flag_isoc94;
336
337 /* Nonzero means use the ISO C99 dialect of C. */
338
339 int flag_isoc99;
340
341 /* Nonzero means that we have builtin functions, and main is an int. */
342
343 int flag_hosted = 1;
344
345 /* Warn if main is suspicious. */
346
347 int warn_main;
348
349
350 /* ObjC language option variables. */
351
352
353 /* Open and close the file for outputting class declarations, if
354 requested (ObjC). */
355
356 int flag_gen_declaration;
357
358 /* Tells the compiler that this is a special run. Do not perform any
359 compiling, instead we are to test some platform dependent features
360 and output a C header file with appropriate definitions. */
361
362 int print_struct_values;
363
364 /* Tells the compiler what is the constant string class for ObjC. */
365
366 const char *constant_string_class_name;
367
368
369 /* C++ language option variables. */
370
371
372 /* Nonzero means don't recognize any extension keywords. */
373
374 int flag_no_gnu_keywords;
375
376 /* Nonzero means do emit exported implementations of functions even if
377 they can be inlined. */
378
379 int flag_implement_inlines = 1;
380
381 /* Nonzero means that implicit instantiations will be emitted if needed. */
382
383 int flag_implicit_templates = 1;
384
385 /* Nonzero means that implicit instantiations of inline templates will be
386 emitted if needed, even if instantiations of non-inline templates
387 aren't. */
388
389 int flag_implicit_inline_templates = 1;
390
391 /* Nonzero means generate separate instantiation control files and
392 juggle them at link time. */
393
394 int flag_use_repository;
395
396 /* Nonzero if we want to issue diagnostics that the standard says are not
397 required. */
398
399 int flag_optional_diags = 1;
400
401 /* Nonzero means we should attempt to elide constructors when possible. */
402
403 int flag_elide_constructors = 1;
404
405 /* Nonzero means that member functions defined in class scope are
406 inline by default. */
407
408 int flag_default_inline = 1;
409
410 /* Controls whether compiler generates 'type descriptor' that give
411 run-time type information. */
412
413 int flag_rtti = 1;
414
415 /* Nonzero if we want to conserve space in the .o files. We do this
416 by putting uninitialized data and runtime initialized data into
417 .common instead of .data at the expense of not flagging multiple
418 definitions. */
419
420 int flag_conserve_space;
421
422 /* Nonzero if we want to obey access control semantics. */
423
424 int flag_access_control = 1;
425
426 /* Nonzero if we want to check the return value of new and avoid calling
427 constructors if it is a null pointer. */
428
429 int flag_check_new;
430
431 /* The C++ dialect being used. C++98 is the default. */
432
433 enum cxx_dialect cxx_dialect = cxx98;
434
435 /* Nonzero if we want the new ISO rules for pushing a new scope for `for'
436 initialization variables.
437 0: Old rules, set by -fno-for-scope.
438 2: New ISO rules, set by -ffor-scope.
439 1: Try to implement new ISO rules, but with backup compatibility
440 (and warnings). This is the default, for now. */
441
442 int flag_new_for_scope = 1;
443
444 /* Nonzero if we want to emit defined symbols with common-like linkage as
445 weak symbols where possible, in order to conform to C++ semantics.
446 Otherwise, emit them as local symbols. */
447
448 int flag_weak = 1;
449
450 /* 0 means we want the preprocessor to not emit line directives for
451 the current working directory. 1 means we want it to do it. -1
452 means we should decide depending on whether debugging information
453 is being emitted or not. */
454
455 int flag_working_directory = -1;
456
457 /* Nonzero to use __cxa_atexit, rather than atexit, to register
458 destructors for local statics and global objects. '2' means it has been
459 set nonzero as a default, not by a command-line flag. */
460
461 int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
462
463 /* Nonzero to use __cxa_get_exception_ptr in C++ exception-handling
464 code. '2' means it has not been set explicitly on the command line. */
465
466 int flag_use_cxa_get_exception_ptr = 2;
467
468 /* Nonzero means to implement standard semantics for exception
469 specifications, calling unexpected if an exception is thrown that
470 doesn't match the specification. Zero means to treat them as
471 assertions and optimize accordingly, but not check them. */
472
473 int flag_enforce_eh_specs = 1;
474
475 /* Nonzero means to generate thread-safe code for initializing local
476 statics. */
477
478 int flag_threadsafe_statics = 1;
479
480 /* Nonzero means warn about implicit declarations. */
481
482 int warn_implicit = 1;
483
484 /* Maximum template instantiation depth. This limit is rather
485 arbitrary, but it exists to limit the time it takes to notice
486 infinite template instantiations. */
487
488 int max_tinst_depth = 500;
489
490
491
492 /* The elements of `ridpointers' are identifier nodes for the reserved
493 type names and storage classes. It is indexed by a RID_... value. */
494 tree *ridpointers;
495
496 tree (*make_fname_decl) (tree, int);
497
498 /* Nonzero means the expression being parsed will never be evaluated.
499 This is a count, since unevaluated expressions can nest. */
500 int skip_evaluation;
501
502 /* Information about how a function name is generated. */
503 struct fname_var_t
504 {
505 tree *const decl; /* pointer to the VAR_DECL. */
506 const unsigned rid; /* RID number for the identifier. */
507 const int pretty; /* How pretty is it? */
508 };
509
510 /* The three ways of getting then name of the current function. */
511
512 const struct fname_var_t fname_vars[] =
513 {
514 /* C99 compliant __func__, must be first. */
515 {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
516 /* GCC __FUNCTION__ compliant. */
517 {&function_name_decl_node, RID_FUNCTION_NAME, 0},
518 /* GCC __PRETTY_FUNCTION__ compliant. */
519 {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
520 {NULL, 0, 0},
521 };
522
523 static tree check_case_value (tree);
524 static bool check_case_bounds (tree, tree, tree *, tree *);
525
526 static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
527 static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
528 static tree handle_common_attribute (tree *, tree, tree, int, bool *);
529 static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
530 static tree handle_hot_attribute (tree *, tree, tree, int, bool *);
531 static tree handle_cold_attribute (tree *, tree, tree, int, bool *);
532 static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
533 static tree handle_always_inline_attribute (tree *, tree, tree, int,
534 bool *);
535 static tree handle_gnu_inline_attribute (tree *, tree, tree, int, bool *);
536 static tree handle_artificial_attribute (tree *, tree, tree, int, bool *);
537 static tree handle_flatten_attribute (tree *, tree, tree, int, bool *);
538 static tree handle_error_attribute (tree *, tree, tree, int, bool *);
539 static tree handle_used_attribute (tree *, tree, tree, int, bool *);
540 static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
541 static tree handle_externally_visible_attribute (tree *, tree, tree, int,
542 bool *);
543 static tree handle_const_attribute (tree *, tree, tree, int, bool *);
544 static tree handle_transparent_union_attribute (tree *, tree, tree,
545 int, bool *);
546 static tree handle_constructor_attribute (tree *, tree, tree, int, bool *);
547 static tree handle_destructor_attribute (tree *, tree, tree, int, bool *);
548 static tree handle_mode_attribute (tree *, tree, tree, int, bool *);
549 static tree handle_section_attribute (tree *, tree, tree, int, bool *);
550 static tree handle_aligned_attribute (tree *, tree, tree, int, bool *);
551 static tree handle_weak_attribute (tree *, tree, tree, int, bool *) ;
552 static tree handle_alias_attribute (tree *, tree, tree, int, bool *);
553 static tree handle_weakref_attribute (tree *, tree, tree, int, bool *) ;
554 static tree handle_visibility_attribute (tree *, tree, tree, int,
555 bool *);
556 static tree handle_tls_model_attribute (tree *, tree, tree, int,
557 bool *);
558 static tree handle_no_instrument_function_attribute (tree *, tree,
559 tree, int, bool *);
560 static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
561 static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
562 static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
563 bool *);
564 static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
565 static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
566 static tree handle_deprecated_attribute (tree *, tree, tree, int,
567 bool *);
568 static tree handle_vector_size_attribute (tree *, tree, tree, int,
569 bool *);
570 static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
571 static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
572 static tree handle_cleanup_attribute (tree *, tree, tree, int, bool *);
573 static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
574 bool *);
575 static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
576 static tree handle_type_generic_attribute (tree *, tree, tree, int, bool *);
577 static tree handle_alloc_size_attribute (tree *, tree, tree, int, bool *);
578 static tree handle_option_attribute (tree *, tree, tree, int, bool *);
579 static tree handle_optimize_attribute (tree *, tree, tree, int, bool *);
580
581 static void check_function_nonnull (tree, int, tree *);
582 static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
583 static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
584 static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
585 static int resort_field_decl_cmp (const void *, const void *);
586
587 /* Reserved words. The third field is a mask: keywords are disabled
588 if they match the mask.
589
590 Masks for languages:
591 C --std=c89: D_C99 | D_CXXONLY | D_OBJC | D_CXX_OBJC
592 C --std=c99: D_CXXONLY | D_OBJC
593 ObjC is like C except that D_OBJC and D_CXX_OBJC are not set
594 C++ --std=c98: D_CONLY | D_CXXOX | D_OBJC
595 C++ --std=c0x: D_CONLY | D_OBJC
596 ObjC++ is like C++ except that D_OBJC is not set
597
598 If -fno-asm is used, D_ASM is added to the mask. If
599 -fno-gnu-keywords is used, D_EXT is added. If -fno-asm and C in
600 C89 mode, D_EXT89 is added for both -fno-asm and -fno-gnu-keywords.
601 In C with -Wcxx-compat, we warn if D_CXXWARN is set. */
602
603 const struct c_common_resword c_common_reswords[] =
604 {
605 { "_Bool", RID_BOOL, D_CONLY },
606 { "_Complex", RID_COMPLEX, 0 },
607 { "_Decimal32", RID_DFLOAT32, D_CONLY | D_EXT },
608 { "_Decimal64", RID_DFLOAT64, D_CONLY | D_EXT },
609 { "_Decimal128", RID_DFLOAT128, D_CONLY | D_EXT },
610 { "_Fract", RID_FRACT, D_CONLY | D_EXT },
611 { "_Accum", RID_ACCUM, D_CONLY | D_EXT },
612 { "_Sat", RID_SAT, D_CONLY | D_EXT },
613 { "__FUNCTION__", RID_FUNCTION_NAME, 0 },
614 { "__PRETTY_FUNCTION__", RID_PRETTY_FUNCTION_NAME, 0 },
615 { "__alignof", RID_ALIGNOF, 0 },
616 { "__alignof__", RID_ALIGNOF, 0 },
617 { "__asm", RID_ASM, 0 },
618 { "__asm__", RID_ASM, 0 },
619 { "__attribute", RID_ATTRIBUTE, 0 },
620 { "__attribute__", RID_ATTRIBUTE, 0 },
621 { "__builtin_choose_expr", RID_CHOOSE_EXPR, D_CONLY },
622 { "__builtin_offsetof", RID_OFFSETOF, 0 },
623 { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, D_CONLY },
624 { "__builtin_va_arg", RID_VA_ARG, 0 },
625 { "__complex", RID_COMPLEX, 0 },
626 { "__complex__", RID_COMPLEX, 0 },
627 { "__const", RID_CONST, 0 },
628 { "__const__", RID_CONST, 0 },
629 { "__decltype", RID_DECLTYPE, D_CXXONLY },
630 { "__extension__", RID_EXTENSION, 0 },
631 { "__func__", RID_C99_FUNCTION_NAME, 0 },
632 { "__has_nothrow_assign", RID_HAS_NOTHROW_ASSIGN, D_CXXONLY },
633 { "__has_nothrow_constructor", RID_HAS_NOTHROW_CONSTRUCTOR, D_CXXONLY },
634 { "__has_nothrow_copy", RID_HAS_NOTHROW_COPY, D_CXXONLY },
635 { "__has_trivial_assign", RID_HAS_TRIVIAL_ASSIGN, D_CXXONLY },
636 { "__has_trivial_constructor", RID_HAS_TRIVIAL_CONSTRUCTOR, D_CXXONLY },
637 { "__has_trivial_copy", RID_HAS_TRIVIAL_COPY, D_CXXONLY },
638 { "__has_trivial_destructor", RID_HAS_TRIVIAL_DESTRUCTOR, D_CXXONLY },
639 { "__has_virtual_destructor", RID_HAS_VIRTUAL_DESTRUCTOR, D_CXXONLY },
640 { "__is_abstract", RID_IS_ABSTRACT, D_CXXONLY },
641 { "__is_base_of", RID_IS_BASE_OF, D_CXXONLY },
642 { "__is_class", RID_IS_CLASS, D_CXXONLY },
643 { "__is_convertible_to", RID_IS_CONVERTIBLE_TO, D_CXXONLY },
644 { "__is_empty", RID_IS_EMPTY, D_CXXONLY },
645 { "__is_enum", RID_IS_ENUM, D_CXXONLY },
646 { "__is_pod", RID_IS_POD, D_CXXONLY },
647 { "__is_polymorphic", RID_IS_POLYMORPHIC, D_CXXONLY },
648 { "__is_union", RID_IS_UNION, D_CXXONLY },
649 { "__imag", RID_IMAGPART, 0 },
650 { "__imag__", RID_IMAGPART, 0 },
651 { "__inline", RID_INLINE, 0 },
652 { "__inline__", RID_INLINE, 0 },
653 { "__label__", RID_LABEL, 0 },
654 { "__null", RID_NULL, 0 },
655 { "__real", RID_REALPART, 0 },
656 { "__real__", RID_REALPART, 0 },
657 { "__restrict", RID_RESTRICT, 0 },
658 { "__restrict__", RID_RESTRICT, 0 },
659 { "__signed", RID_SIGNED, 0 },
660 { "__signed__", RID_SIGNED, 0 },
661 { "__thread", RID_THREAD, 0 },
662 { "__typeof", RID_TYPEOF, 0 },
663 { "__typeof__", RID_TYPEOF, 0 },
664 { "__volatile", RID_VOLATILE, 0 },
665 { "__volatile__", RID_VOLATILE, 0 },
666 { "asm", RID_ASM, D_ASM },
667 { "auto", RID_AUTO, 0 },
668 { "bool", RID_BOOL, D_CXXONLY },
669 { "break", RID_BREAK, 0 },
670 { "case", RID_CASE, 0 },
671 { "catch", RID_CATCH, D_CXX_OBJC },
672 { "char", RID_CHAR, 0 },
673 { "char16_t", RID_CHAR16, D_CXXONLY | D_CXX0X },
674 { "char32_t", RID_CHAR32, D_CXXONLY | D_CXX0X },
675 { "class", RID_CLASS, D_CXX_OBJC },
676 { "const", RID_CONST, 0 },
677 { "const_cast", RID_CONSTCAST, D_CXXONLY | D_CXXWARN },
678 { "continue", RID_CONTINUE, 0 },
679 { "decltype", RID_DECLTYPE, D_CXXONLY | D_CXX0X },
680 { "default", RID_DEFAULT, 0 },
681 { "delete", RID_DELETE, D_CXXONLY },
682 { "do", RID_DO, 0 },
683 { "double", RID_DOUBLE, 0 },
684 { "dynamic_cast", RID_DYNCAST, D_CXXONLY | D_CXXWARN },
685 { "else", RID_ELSE, 0 },
686 { "enum", RID_ENUM, 0 },
687 { "explicit", RID_EXPLICIT, D_CXXONLY },
688 { "export", RID_EXPORT, D_CXXONLY },
689 { "extern", RID_EXTERN, 0 },
690 { "false", RID_FALSE, D_CXXONLY },
691 { "float", RID_FLOAT, 0 },
692 { "for", RID_FOR, 0 },
693 { "friend", RID_FRIEND, D_CXXONLY },
694 { "goto", RID_GOTO, 0 },
695 { "if", RID_IF, 0 },
696 { "inline", RID_INLINE, D_EXT89 },
697 { "int", RID_INT, 0 },
698 { "long", RID_LONG, 0 },
699 { "mutable", RID_MUTABLE, D_CXXONLY | D_CXXWARN },
700 { "namespace", RID_NAMESPACE, D_CXXONLY },
701 { "new", RID_NEW, D_CXXONLY },
702 { "operator", RID_OPERATOR, D_CXXONLY },
703 { "private", RID_PRIVATE, D_CXX_OBJC },
704 { "protected", RID_PROTECTED, D_CXX_OBJC },
705 { "public", RID_PUBLIC, D_CXX_OBJC },
706 { "register", RID_REGISTER, 0 },
707 { "reinterpret_cast", RID_REINTCAST, D_CXXONLY | D_CXXWARN },
708 { "restrict", RID_RESTRICT, D_CONLY | D_C99 },
709 { "return", RID_RETURN, 0 },
710 { "short", RID_SHORT, 0 },
711 { "signed", RID_SIGNED, 0 },
712 { "sizeof", RID_SIZEOF, 0 },
713 { "static", RID_STATIC, 0 },
714 { "static_assert", RID_STATIC_ASSERT, D_CXXONLY | D_CXX0X | D_CXXWARN },
715 { "static_cast", RID_STATCAST, D_CXXONLY | D_CXXWARN },
716 { "struct", RID_STRUCT, 0 },
717 { "switch", RID_SWITCH, 0 },
718 { "template", RID_TEMPLATE, D_CXXONLY },
719 { "this", RID_THIS, D_CXXONLY },
720 { "throw", RID_THROW, D_CXX_OBJC },
721 { "true", RID_TRUE, D_CXXONLY },
722 { "try", RID_TRY, D_CXX_OBJC },
723 { "typedef", RID_TYPEDEF, 0 },
724 { "typename", RID_TYPENAME, D_CXXONLY },
725 { "typeid", RID_TYPEID, D_CXXONLY },
726 { "typeof", RID_TYPEOF, D_ASM | D_EXT },
727 { "union", RID_UNION, 0 },
728 { "unsigned", RID_UNSIGNED, 0 },
729 { "using", RID_USING, D_CXXONLY },
730 { "virtual", RID_VIRTUAL, D_CXXONLY },
731 { "void", RID_VOID, 0 },
732 { "volatile", RID_VOLATILE, 0 },
733 { "wchar_t", RID_WCHAR, D_CXXONLY },
734 { "while", RID_WHILE, 0 },
735 /* These Objective-C keywords are recognized only immediately after
736 an '@'. */
737 { "compatibility_alias", RID_AT_ALIAS, D_OBJC },
738 { "defs", RID_AT_DEFS, D_OBJC },
739 { "encode", RID_AT_ENCODE, D_OBJC },
740 { "end", RID_AT_END, D_OBJC },
741 { "implementation", RID_AT_IMPLEMENTATION, D_OBJC },
742 { "interface", RID_AT_INTERFACE, D_OBJC },
743 { "protocol", RID_AT_PROTOCOL, D_OBJC },
744 { "selector", RID_AT_SELECTOR, D_OBJC },
745 { "finally", RID_AT_FINALLY, D_OBJC },
746 { "synchronized", RID_AT_SYNCHRONIZED, D_OBJC },
747 /* These are recognized only in protocol-qualifier context
748 (see above) */
749 { "bycopy", RID_BYCOPY, D_OBJC },
750 { "byref", RID_BYREF, D_OBJC },
751 { "in", RID_IN, D_OBJC },
752 { "inout", RID_INOUT, D_OBJC },
753 { "oneway", RID_ONEWAY, D_OBJC },
754 { "out", RID_OUT, D_OBJC },
755 };
756
757 const unsigned int num_c_common_reswords =
758 sizeof c_common_reswords / sizeof (struct c_common_resword);
759
760 /* Table of machine-independent attributes common to all C-like languages. */
761 const struct attribute_spec c_common_attribute_table[] =
762 {
763 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
764 { "packed", 0, 0, false, false, false,
765 handle_packed_attribute },
766 { "nocommon", 0, 0, true, false, false,
767 handle_nocommon_attribute },
768 { "common", 0, 0, true, false, false,
769 handle_common_attribute },
770 /* FIXME: logically, noreturn attributes should be listed as
771 "false, true, true" and apply to function types. But implementing this
772 would require all the places in the compiler that use TREE_THIS_VOLATILE
773 on a decl to identify non-returning functions to be located and fixed
774 to check the function type instead. */
775 { "noreturn", 0, 0, true, false, false,
776 handle_noreturn_attribute },
777 { "volatile", 0, 0, true, false, false,
778 handle_noreturn_attribute },
779 { "noinline", 0, 0, true, false, false,
780 handle_noinline_attribute },
781 { "always_inline", 0, 0, true, false, false,
782 handle_always_inline_attribute },
783 { "gnu_inline", 0, 0, true, false, false,
784 handle_gnu_inline_attribute },
785 { "artificial", 0, 0, true, false, false,
786 handle_artificial_attribute },
787 { "flatten", 0, 0, true, false, false,
788 handle_flatten_attribute },
789 { "used", 0, 0, true, false, false,
790 handle_used_attribute },
791 { "unused", 0, 0, false, false, false,
792 handle_unused_attribute },
793 { "externally_visible", 0, 0, true, false, false,
794 handle_externally_visible_attribute },
795 /* The same comments as for noreturn attributes apply to const ones. */
796 { "const", 0, 0, true, false, false,
797 handle_const_attribute },
798 { "transparent_union", 0, 0, false, false, false,
799 handle_transparent_union_attribute },
800 { "constructor", 0, 1, true, false, false,
801 handle_constructor_attribute },
802 { "destructor", 0, 1, true, false, false,
803 handle_destructor_attribute },
804 { "mode", 1, 1, false, true, false,
805 handle_mode_attribute },
806 { "section", 1, 1, true, false, false,
807 handle_section_attribute },
808 { "aligned", 0, 1, false, false, false,
809 handle_aligned_attribute },
810 { "weak", 0, 0, true, false, false,
811 handle_weak_attribute },
812 { "alias", 1, 1, true, false, false,
813 handle_alias_attribute },
814 { "weakref", 0, 1, true, false, false,
815 handle_weakref_attribute },
816 { "no_instrument_function", 0, 0, true, false, false,
817 handle_no_instrument_function_attribute },
818 { "malloc", 0, 0, true, false, false,
819 handle_malloc_attribute },
820 { "returns_twice", 0, 0, true, false, false,
821 handle_returns_twice_attribute },
822 { "no_stack_limit", 0, 0, true, false, false,
823 handle_no_limit_stack_attribute },
824 { "pure", 0, 0, true, false, false,
825 handle_pure_attribute },
826 /* For internal use (marking of builtins) only. The name contains space
827 to prevent its usage in source code. */
828 { "no vops", 0, 0, true, false, false,
829 handle_novops_attribute },
830 { "deprecated", 0, 0, false, false, false,
831 handle_deprecated_attribute },
832 { "vector_size", 1, 1, false, true, false,
833 handle_vector_size_attribute },
834 { "visibility", 1, 1, false, false, false,
835 handle_visibility_attribute },
836 { "tls_model", 1, 1, true, false, false,
837 handle_tls_model_attribute },
838 { "nonnull", 0, -1, false, true, true,
839 handle_nonnull_attribute },
840 { "nothrow", 0, 0, true, false, false,
841 handle_nothrow_attribute },
842 { "may_alias", 0, 0, false, true, false, NULL },
843 { "cleanup", 1, 1, true, false, false,
844 handle_cleanup_attribute },
845 { "warn_unused_result", 0, 0, false, true, true,
846 handle_warn_unused_result_attribute },
847 { "sentinel", 0, 1, false, true, true,
848 handle_sentinel_attribute },
849 /* For internal use (marking of builtins) only. The name contains space
850 to prevent its usage in source code. */
851 { "type generic", 0, 0, false, true, true,
852 handle_type_generic_attribute },
853 { "alloc_size", 1, 2, false, true, true,
854 handle_alloc_size_attribute },
855 { "cold", 0, 0, true, false, false,
856 handle_cold_attribute },
857 { "hot", 0, 0, true, false, false,
858 handle_hot_attribute },
859 { "warning", 1, 1, true, false, false,
860 handle_error_attribute },
861 { "error", 1, 1, true, false, false,
862 handle_error_attribute },
863 { "option", 1, -1, true, false, false,
864 handle_option_attribute },
865 { "optimize", 1, -1, true, false, false,
866 handle_optimize_attribute },
867 { NULL, 0, 0, false, false, false, NULL }
868 };
869
870 /* Give the specifications for the format attributes, used by C and all
871 descendants. */
872
873 const struct attribute_spec c_common_format_attribute_table[] =
874 {
875 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
876 { "format", 3, 3, false, true, true,
877 handle_format_attribute },
878 { "format_arg", 1, 1, false, true, true,
879 handle_format_arg_attribute },
880 { NULL, 0, 0, false, false, false, NULL }
881 };
882
883 /* Push current bindings for the function name VAR_DECLS. */
884
885 void
886 start_fname_decls (void)
887 {
888 unsigned ix;
889 tree saved = NULL_TREE;
890
891 for (ix = 0; fname_vars[ix].decl; ix++)
892 {
893 tree decl = *fname_vars[ix].decl;
894
895 if (decl)
896 {
897 saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
898 *fname_vars[ix].decl = NULL_TREE;
899 }
900 }
901 if (saved || saved_function_name_decls)
902 /* Normally they'll have been NULL, so only push if we've got a
903 stack, or they are non-NULL. */
904 saved_function_name_decls = tree_cons (saved, NULL_TREE,
905 saved_function_name_decls);
906 }
907
908 /* Finish up the current bindings, adding them into the current function's
909 statement tree. This must be done _before_ finish_stmt_tree is called.
910 If there is no current function, we must be at file scope and no statements
911 are involved. Pop the previous bindings. */
912
913 void
914 finish_fname_decls (void)
915 {
916 unsigned ix;
917 tree stmts = NULL_TREE;
918 tree stack = saved_function_name_decls;
919
920 for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
921 append_to_statement_list (TREE_VALUE (stack), &stmts);
922
923 if (stmts)
924 {
925 tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
926
927 if (TREE_CODE (*bodyp) == BIND_EXPR)
928 bodyp = &BIND_EXPR_BODY (*bodyp);
929
930 append_to_statement_list_force (*bodyp, &stmts);
931 *bodyp = stmts;
932 }
933
934 for (ix = 0; fname_vars[ix].decl; ix++)
935 *fname_vars[ix].decl = NULL_TREE;
936
937 if (stack)
938 {
939 /* We had saved values, restore them. */
940 tree saved;
941
942 for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
943 {
944 tree decl = TREE_PURPOSE (saved);
945 unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
946
947 *fname_vars[ix].decl = decl;
948 }
949 stack = TREE_CHAIN (stack);
950 }
951 saved_function_name_decls = stack;
952 }
953
954 /* Return the text name of the current function, suitably prettified
955 by PRETTY_P. Return string must be freed by caller. */
956
957 const char *
958 fname_as_string (int pretty_p)
959 {
960 const char *name = "top level";
961 char *namep;
962 int vrb = 2, len;
963 cpp_string cstr = { 0, 0 }, strname;
964
965 if (!pretty_p)
966 {
967 name = "";
968 vrb = 0;
969 }
970
971 if (current_function_decl)
972 name = lang_hooks.decl_printable_name (current_function_decl, vrb);
973
974 len = strlen (name) + 3; /* Two for '"'s. One for NULL. */
975
976 namep = XNEWVEC (char, len);
977 snprintf (namep, len, "\"%s\"", name);
978 strname.text = (unsigned char *) namep;
979 strname.len = len - 1;
980
981 if (cpp_interpret_string (parse_in, &strname, 1, &cstr, CPP_STRING))
982 {
983 XDELETEVEC (namep);
984 return (const char *) cstr.text;
985 }
986
987 return namep;
988 }
989
990 /* Expand DECL if it declares an entity not handled by the
991 common code. */
992
993 int
994 c_expand_decl (tree decl)
995 {
996 if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
997 {
998 /* Let the back-end know about this variable. */
999 if (!anon_aggr_type_p (TREE_TYPE (decl)))
1000 emit_local_var (decl);
1001 else
1002 expand_anon_union_decl (decl, NULL_TREE,
1003 DECL_ANON_UNION_ELEMS (decl));
1004 }
1005 else
1006 return 0;
1007
1008 return 1;
1009 }
1010
1011
1012 /* Return the VAR_DECL for a const char array naming the current
1013 function. If the VAR_DECL has not yet been created, create it
1014 now. RID indicates how it should be formatted and IDENTIFIER_NODE
1015 ID is its name (unfortunately C and C++ hold the RID values of
1016 keywords in different places, so we can't derive RID from ID in
1017 this language independent code. */
1018
1019 tree
1020 fname_decl (unsigned int rid, tree id)
1021 {
1022 unsigned ix;
1023 tree decl = NULL_TREE;
1024
1025 for (ix = 0; fname_vars[ix].decl; ix++)
1026 if (fname_vars[ix].rid == rid)
1027 break;
1028
1029 decl = *fname_vars[ix].decl;
1030 if (!decl)
1031 {
1032 /* If a tree is built here, it would normally have the lineno of
1033 the current statement. Later this tree will be moved to the
1034 beginning of the function and this line number will be wrong.
1035 To avoid this problem set the lineno to 0 here; that prevents
1036 it from appearing in the RTL. */
1037 tree stmts;
1038 location_t saved_location = input_location;
1039 input_location = UNKNOWN_LOCATION;
1040
1041 stmts = push_stmt_list ();
1042 decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
1043 stmts = pop_stmt_list (stmts);
1044 if (!IS_EMPTY_STMT (stmts))
1045 saved_function_name_decls
1046 = tree_cons (decl, stmts, saved_function_name_decls);
1047 *fname_vars[ix].decl = decl;
1048 input_location = saved_location;
1049 }
1050 if (!ix && !current_function_decl)
1051 pedwarn (0, "%qD is not defined outside of function scope", decl);
1052
1053 return decl;
1054 }
1055
1056 /* Given a STRING_CST, give it a suitable array-of-chars data type. */
1057
1058 tree
1059 fix_string_type (tree value)
1060 {
1061 int length = TREE_STRING_LENGTH (value);
1062 int nchars;
1063 tree e_type, i_type, a_type;
1064
1065 /* Compute the number of elements, for the array type. */
1066 if (TREE_TYPE (value) == char_array_type_node || !TREE_TYPE (value))
1067 {
1068 nchars = length;
1069 e_type = char_type_node;
1070 }
1071 else if (TREE_TYPE (value) == char16_array_type_node)
1072 {
1073 nchars = length / (TYPE_PRECISION (char16_type_node) / BITS_PER_UNIT);
1074 e_type = char16_type_node;
1075 }
1076 else if (TREE_TYPE (value) == char32_array_type_node)
1077 {
1078 nchars = length / (TYPE_PRECISION (char32_type_node) / BITS_PER_UNIT);
1079 e_type = char32_type_node;
1080 }
1081 else
1082 {
1083 nchars = length / (TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT);
1084 e_type = wchar_type_node;
1085 }
1086
1087 /* C89 2.2.4.1, C99 5.2.4.1 (Translation limits). The analogous
1088 limit in C++98 Annex B is very large (65536) and is not normative,
1089 so we do not diagnose it (warn_overlength_strings is forced off
1090 in c_common_post_options). */
1091 if (warn_overlength_strings)
1092 {
1093 const int nchars_max = flag_isoc99 ? 4095 : 509;
1094 const int relevant_std = flag_isoc99 ? 99 : 90;
1095 if (nchars - 1 > nchars_max)
1096 /* Translators: The %d after 'ISO C' will be 90 or 99. Do not
1097 separate the %d from the 'C'. 'ISO' should not be
1098 translated, but it may be moved after 'C%d' in languages
1099 where modifiers follow nouns. */
1100 pedwarn (OPT_Woverlength_strings,
1101 "string length %qd is greater than the length %qd "
1102 "ISO C%d compilers are required to support",
1103 nchars - 1, nchars_max, relevant_std);
1104 }
1105
1106 /* Create the array type for the string constant. The ISO C++
1107 standard says that a string literal has type `const char[N]' or
1108 `const wchar_t[N]'. We use the same logic when invoked as a C
1109 front-end with -Wwrite-strings.
1110 ??? We should change the type of an expression depending on the
1111 state of a warning flag. We should just be warning -- see how
1112 this is handled in the C++ front-end for the deprecated implicit
1113 conversion from string literals to `char*' or `wchar_t*'.
1114
1115 The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
1116 array type being the unqualified version of that type.
1117 Therefore, if we are constructing an array of const char, we must
1118 construct the matching unqualified array type first. The C front
1119 end does not require this, but it does no harm, so we do it
1120 unconditionally. */
1121 i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
1122 a_type = build_array_type (e_type, i_type);
1123 if (c_dialect_cxx() || warn_write_strings)
1124 a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
1125
1126 TREE_TYPE (value) = a_type;
1127 TREE_CONSTANT (value) = 1;
1128 TREE_READONLY (value) = 1;
1129 TREE_STATIC (value) = 1;
1130 return value;
1131 }
1132 \f
1133 /* Print a warning if a constant expression had overflow in folding.
1134 Invoke this function on every expression that the language
1135 requires to be a constant expression.
1136 Note the ANSI C standard says it is erroneous for a
1137 constant expression to overflow. */
1138
1139 void
1140 constant_expression_warning (tree value)
1141 {
1142 if (warn_overflow && pedantic
1143 && (TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
1144 || TREE_CODE (value) == FIXED_CST
1145 || TREE_CODE (value) == VECTOR_CST
1146 || TREE_CODE (value) == COMPLEX_CST)
1147 && TREE_OVERFLOW (value))
1148 pedwarn (OPT_Woverflow, "overflow in constant expression");
1149 }
1150
1151 /* The same as above but print an unconditional error. */
1152 void
1153 constant_expression_error (tree value)
1154 {
1155 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
1156 || TREE_CODE (value) == FIXED_CST
1157 || TREE_CODE (value) == VECTOR_CST
1158 || TREE_CODE (value) == COMPLEX_CST)
1159 && TREE_OVERFLOW (value))
1160 error ("overflow in constant expression");
1161 }
1162
1163 /* Print a warning if an expression had overflow in folding and its
1164 operands hadn't.
1165
1166 Invoke this function on every expression that
1167 (1) appears in the source code, and
1168 (2) is a constant expression that overflowed, and
1169 (3) is not already checked by convert_and_check;
1170 however, do not invoke this function on operands of explicit casts
1171 or when the expression is the result of an operator and any operand
1172 already overflowed. */
1173
1174 void
1175 overflow_warning (tree value)
1176 {
1177 if (skip_evaluation) return;
1178
1179 switch (TREE_CODE (value))
1180 {
1181 case INTEGER_CST:
1182 warning (OPT_Woverflow, "integer overflow in expression");
1183 break;
1184
1185 case REAL_CST:
1186 warning (OPT_Woverflow, "floating point overflow in expression");
1187 break;
1188
1189 case FIXED_CST:
1190 warning (OPT_Woverflow, "fixed-point overflow in expression");
1191 break;
1192
1193 case VECTOR_CST:
1194 warning (OPT_Woverflow, "vector overflow in expression");
1195 break;
1196
1197 case COMPLEX_CST:
1198 if (TREE_CODE (TREE_REALPART (value)) == INTEGER_CST)
1199 warning (OPT_Woverflow, "complex integer overflow in expression");
1200 else if (TREE_CODE (TREE_REALPART (value)) == REAL_CST)
1201 warning (OPT_Woverflow, "complex floating point overflow in expression");
1202 break;
1203
1204 default:
1205 break;
1206 }
1207 }
1208
1209
1210 /* Warn about use of a logical || / && operator being used in a
1211 context where it is likely that the bitwise equivalent was intended
1212 by the programmer. CODE is the TREE_CODE of the operator, ARG1
1213 and ARG2 the arguments. */
1214
1215 void
1216 warn_logical_operator (enum tree_code code, tree arg1, tree
1217 arg2)
1218 {
1219 switch (code)
1220 {
1221 case TRUTH_ANDIF_EXPR:
1222 case TRUTH_ORIF_EXPR:
1223 case TRUTH_OR_EXPR:
1224 case TRUTH_AND_EXPR:
1225 if (!TREE_NO_WARNING (arg1)
1226 && INTEGRAL_TYPE_P (TREE_TYPE (arg1))
1227 && !CONSTANT_CLASS_P (arg1)
1228 && TREE_CODE (arg2) == INTEGER_CST
1229 && !integer_zerop (arg2))
1230 {
1231 warning (OPT_Wlogical_op,
1232 "logical %<%s%> with non-zero constant "
1233 "will always evaluate as true",
1234 ((code == TRUTH_ANDIF_EXPR)
1235 || (code == TRUTH_AND_EXPR)) ? "&&" : "||");
1236 TREE_NO_WARNING (arg1) = true;
1237 }
1238 break;
1239 default:
1240 break;
1241 }
1242 }
1243
1244
1245 /* Print a warning about casts that might indicate violation
1246 of strict aliasing rules if -Wstrict-aliasing is used and
1247 strict aliasing mode is in effect. OTYPE is the original
1248 TREE_TYPE of EXPR, and TYPE the type we're casting to. */
1249
1250 bool
1251 strict_aliasing_warning (tree otype, tree type, tree expr)
1252 {
1253 if (!(flag_strict_aliasing
1254 && POINTER_TYPE_P (type)
1255 && POINTER_TYPE_P (otype)
1256 && !VOID_TYPE_P (TREE_TYPE (type)))
1257 /* If the type we are casting to is a ref-all pointer
1258 dereferencing it is always valid. */
1259 || TYPE_REF_CAN_ALIAS_ALL (type))
1260 return false;
1261
1262 if ((warn_strict_aliasing > 1) && TREE_CODE (expr) == ADDR_EXPR
1263 && (DECL_P (TREE_OPERAND (expr, 0))
1264 || handled_component_p (TREE_OPERAND (expr, 0))))
1265 {
1266 /* Casting the address of an object to non void pointer. Warn
1267 if the cast breaks type based aliasing. */
1268 if (!COMPLETE_TYPE_P (TREE_TYPE (type)) && warn_strict_aliasing == 2)
1269 {
1270 warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
1271 "might break strict-aliasing rules");
1272 return true;
1273 }
1274 else
1275 {
1276 /* warn_strict_aliasing >= 3. This includes the default (3).
1277 Only warn if the cast is dereferenced immediately. */
1278 alias_set_type set1 =
1279 get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
1280 alias_set_type set2 = get_alias_set (TREE_TYPE (type));
1281
1282 if (set1 != set2 && set2 != 0
1283 && (set1 == 0 || !alias_sets_conflict_p (set1, set2)))
1284 {
1285 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1286 "pointer will break strict-aliasing rules");
1287 return true;
1288 }
1289 else if (warn_strict_aliasing == 2
1290 && !alias_sets_must_conflict_p (set1, set2))
1291 {
1292 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1293 "pointer might break strict-aliasing rules");
1294 return true;
1295 }
1296 }
1297 }
1298 else
1299 if ((warn_strict_aliasing == 1) && !VOID_TYPE_P (TREE_TYPE (otype)))
1300 {
1301 /* At this level, warn for any conversions, even if an address is
1302 not taken in the same statement. This will likely produce many
1303 false positives, but could be useful to pinpoint problems that
1304 are not revealed at higher levels. */
1305 alias_set_type set1 = get_alias_set (TREE_TYPE (otype));
1306 alias_set_type set2 = get_alias_set (TREE_TYPE (type));
1307 if (!COMPLETE_TYPE_P (type)
1308 || !alias_sets_must_conflict_p (set1, set2))
1309 {
1310 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1311 "pointer might break strict-aliasing rules");
1312 return true;
1313 }
1314 }
1315
1316 return false;
1317 }
1318
1319 /* Print a warning about if (); or if () .. else; constructs
1320 via the special empty statement node that we create. INNER_THEN
1321 and INNER_ELSE are the statement lists of the if and the else
1322 block. */
1323
1324 void
1325 empty_if_body_warning (tree inner_then, tree inner_else)
1326 {
1327 if (TREE_CODE (inner_then) == STATEMENT_LIST
1328 && STATEMENT_LIST_TAIL (inner_then))
1329 inner_then = STATEMENT_LIST_TAIL (inner_then)->stmt;
1330
1331 if (inner_else && TREE_CODE (inner_else) == STATEMENT_LIST
1332 && STATEMENT_LIST_TAIL (inner_else))
1333 inner_else = STATEMENT_LIST_TAIL (inner_else)->stmt;
1334
1335 if (IS_EMPTY_STMT (inner_then) && !inner_else)
1336 warning (OPT_Wempty_body, "%Hsuggest braces around empty body "
1337 "in an %<if%> statement", EXPR_LOCUS (inner_then));
1338
1339 else if (inner_else && IS_EMPTY_STMT (inner_else))
1340 warning (OPT_Wempty_body, "%Hsuggest braces around empty body "
1341 "in an %<else%> statement", EXPR_LOCUS (inner_else));
1342 }
1343
1344 /* Warn for unlikely, improbable, or stupid DECL declarations
1345 of `main'. */
1346
1347 void
1348 check_main_parameter_types (tree decl)
1349 {
1350 tree args;
1351 int argct = 0;
1352
1353 for (args = TYPE_ARG_TYPES (TREE_TYPE (decl)); args;
1354 args = TREE_CHAIN (args))
1355 {
1356 tree type = args ? TREE_VALUE (args) : 0;
1357
1358 if (type == void_type_node || type == error_mark_node )
1359 break;
1360
1361 ++argct;
1362 switch (argct)
1363 {
1364 case 1:
1365 if (TYPE_MAIN_VARIANT (type) != integer_type_node)
1366 pedwarn (0, "first argument of %q+D should be %<int%>", decl);
1367 break;
1368
1369 case 2:
1370 if (TREE_CODE (type) != POINTER_TYPE
1371 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1372 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1373 != char_type_node))
1374 pedwarn (0, "second argument of %q+D should be %<char **%>",
1375 decl);
1376 break;
1377
1378 case 3:
1379 if (TREE_CODE (type) != POINTER_TYPE
1380 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1381 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1382 != char_type_node))
1383 pedwarn (0, "third argument of %q+D should probably be "
1384 "%<char **%>", decl);
1385 break;
1386 }
1387 }
1388
1389 /* It is intentional that this message does not mention the third
1390 argument because it's only mentioned in an appendix of the
1391 standard. */
1392 if (argct > 0 && (argct < 2 || argct > 3))
1393 pedwarn (0, "%q+D takes only zero or two arguments", decl);
1394 }
1395
1396 /* True if pointers to distinct types T1 and T2 can be converted to
1397 each other without an explicit cast. Only returns true for opaque
1398 vector types. */
1399 bool
1400 vector_targets_convertible_p (const_tree t1, const_tree t2)
1401 {
1402 if (TREE_CODE (t1) == VECTOR_TYPE && TREE_CODE (t2) == VECTOR_TYPE
1403 && (targetm.vector_opaque_p (t1) || targetm.vector_opaque_p (t2))
1404 && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1405 return true;
1406
1407 return false;
1408 }
1409
1410 /* True if vector types T1 and T2 can be converted to each other
1411 without an explicit cast. If EMIT_LAX_NOTE is true, and T1 and T2
1412 can only be converted with -flax-vector-conversions yet that is not
1413 in effect, emit a note telling the user about that option if such
1414 a note has not previously been emitted. */
1415 bool
1416 vector_types_convertible_p (const_tree t1, const_tree t2, bool emit_lax_note)
1417 {
1418 static bool emitted_lax_note = false;
1419 bool convertible_lax;
1420
1421 if ((targetm.vector_opaque_p (t1) || targetm.vector_opaque_p (t2))
1422 && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1423 return true;
1424
1425 convertible_lax =
1426 (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
1427 && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
1428 TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
1429 && (INTEGRAL_TYPE_P (TREE_TYPE (t1))
1430 == INTEGRAL_TYPE_P (TREE_TYPE (t2))));
1431
1432 if (!convertible_lax || flag_lax_vector_conversions)
1433 return convertible_lax;
1434
1435 if (TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
1436 && lang_hooks.types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1437 return true;
1438
1439 if (emit_lax_note && !emitted_lax_note)
1440 {
1441 emitted_lax_note = true;
1442 inform ("use -flax-vector-conversions to permit "
1443 "conversions between vectors with differing "
1444 "element types or numbers of subparts");
1445 }
1446
1447 return false;
1448 }
1449
1450 /* Warns if the conversion of EXPR to TYPE may alter a value.
1451 This is a helper function for warnings_for_convert_and_check. */
1452
1453 static void
1454 conversion_warning (tree type, tree expr)
1455 {
1456 bool give_warning = false;
1457
1458 unsigned int formal_prec = TYPE_PRECISION (type);
1459
1460 if (!warn_conversion && !warn_sign_conversion)
1461 return;
1462
1463 if (TREE_CODE (expr) == REAL_CST || TREE_CODE (expr) == INTEGER_CST)
1464 {
1465 /* Warn for real constant that is not an exact integer converted
1466 to integer type. */
1467 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1468 && TREE_CODE (type) == INTEGER_TYPE)
1469 {
1470 if (!real_isinteger (TREE_REAL_CST_PTR (expr), TYPE_MODE (TREE_TYPE (expr))))
1471 give_warning = true;
1472 }
1473 /* Warn for an integer constant that does not fit into integer type. */
1474 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1475 && TREE_CODE (type) == INTEGER_TYPE
1476 && !int_fits_type_p (expr, type))
1477 {
1478 if (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr)))
1479 warning (OPT_Wsign_conversion,
1480 "negative integer implicitly converted to unsigned type");
1481 else if (!TYPE_UNSIGNED (type) && TYPE_UNSIGNED (TREE_TYPE (expr)))
1482 warning (OPT_Wsign_conversion,
1483 "conversion of unsigned constant value to negative integer");
1484 else
1485 give_warning = true;
1486 }
1487 else if (TREE_CODE (type) == REAL_TYPE)
1488 {
1489 /* Warn for an integer constant that does not fit into real type. */
1490 if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE)
1491 {
1492 REAL_VALUE_TYPE a = real_value_from_int_cst (0, expr);
1493 if (!exact_real_truncate (TYPE_MODE (type), &a))
1494 give_warning = true;
1495 }
1496 /* Warn for a real constant that does not fit into a smaller
1497 real type. */
1498 else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1499 && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1500 {
1501 REAL_VALUE_TYPE a = TREE_REAL_CST (expr);
1502 if (!exact_real_truncate (TYPE_MODE (type), &a))
1503 give_warning = true;
1504 }
1505 }
1506
1507 if (give_warning)
1508 warning (OPT_Wconversion,
1509 "conversion to %qT alters %qT constant value",
1510 type, TREE_TYPE (expr));
1511 }
1512 else /* 'expr' is not a constant. */
1513 {
1514 /* Warn for real types converted to integer types. */
1515 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1516 && TREE_CODE (type) == INTEGER_TYPE)
1517 give_warning = true;
1518
1519 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1520 && TREE_CODE (type) == INTEGER_TYPE)
1521 {
1522 /* Don't warn about unsigned char y = 0xff, x = (int) y; */
1523 expr = get_unwidened (expr, 0);
1524
1525 /* Warn for integer types converted to smaller integer types. */
1526 if (formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1527 give_warning = true;
1528
1529 /* When they are the same width but different signedness,
1530 then the value may change. */
1531 else if ((formal_prec == TYPE_PRECISION (TREE_TYPE (expr))
1532 && TYPE_UNSIGNED (TREE_TYPE (expr)) != TYPE_UNSIGNED (type))
1533 /* Even when converted to a bigger type, if the type is
1534 unsigned but expr is signed, then negative values
1535 will be changed. */
1536 || (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr))))
1537 warning (OPT_Wsign_conversion,
1538 "conversion to %qT from %qT may change the sign of the result",
1539 type, TREE_TYPE (expr));
1540 }
1541
1542 /* Warn for integer types converted to real types if and only if
1543 all the range of values of the integer type cannot be
1544 represented by the real type. */
1545 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1546 && TREE_CODE (type) == REAL_TYPE)
1547 {
1548 tree type_low_bound = TYPE_MIN_VALUE (TREE_TYPE (expr));
1549 tree type_high_bound = TYPE_MAX_VALUE (TREE_TYPE (expr));
1550 REAL_VALUE_TYPE real_low_bound = real_value_from_int_cst (0, type_low_bound);
1551 REAL_VALUE_TYPE real_high_bound = real_value_from_int_cst (0, type_high_bound);
1552
1553 if (!exact_real_truncate (TYPE_MODE (type), &real_low_bound)
1554 || !exact_real_truncate (TYPE_MODE (type), &real_high_bound))
1555 give_warning = true;
1556 }
1557
1558 /* Warn for real types converted to smaller real types. */
1559 else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1560 && TREE_CODE (type) == REAL_TYPE
1561 && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1562 give_warning = true;
1563
1564
1565 if (give_warning)
1566 warning (OPT_Wconversion,
1567 "conversion to %qT from %qT may alter its value",
1568 type, TREE_TYPE (expr));
1569 }
1570 }
1571
1572 /* Produce warnings after a conversion. RESULT is the result of
1573 converting EXPR to TYPE. This is a helper function for
1574 convert_and_check and cp_convert_and_check. */
1575
1576 void
1577 warnings_for_convert_and_check (tree type, tree expr, tree result)
1578 {
1579 if (TREE_CODE (expr) == INTEGER_CST
1580 && (TREE_CODE (type) == INTEGER_TYPE
1581 || TREE_CODE (type) == ENUMERAL_TYPE)
1582 && !int_fits_type_p (expr, type))
1583 {
1584 /* Do not diagnose overflow in a constant expression merely
1585 because a conversion overflowed. */
1586 if (TREE_OVERFLOW (result))
1587 TREE_OVERFLOW (result) = TREE_OVERFLOW (expr);
1588
1589 if (TYPE_UNSIGNED (type))
1590 {
1591 /* This detects cases like converting -129 or 256 to
1592 unsigned char. */
1593 if (!int_fits_type_p (expr, c_common_signed_type (type)))
1594 warning (OPT_Woverflow,
1595 "large integer implicitly truncated to unsigned type");
1596 else
1597 conversion_warning (type, expr);
1598 }
1599 else if (!int_fits_type_p (expr, c_common_unsigned_type (type)))
1600 warning (OPT_Woverflow,
1601 "overflow in implicit constant conversion");
1602 /* No warning for converting 0x80000000 to int. */
1603 else if (pedantic
1604 && (TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE
1605 || TYPE_PRECISION (TREE_TYPE (expr))
1606 != TYPE_PRECISION (type)))
1607 warning (OPT_Woverflow,
1608 "overflow in implicit constant conversion");
1609
1610 else
1611 conversion_warning (type, expr);
1612 }
1613 else if ((TREE_CODE (result) == INTEGER_CST
1614 || TREE_CODE (result) == FIXED_CST) && TREE_OVERFLOW (result))
1615 warning (OPT_Woverflow,
1616 "overflow in implicit constant conversion");
1617 else
1618 conversion_warning (type, expr);
1619 }
1620
1621
1622 /* Convert EXPR to TYPE, warning about conversion problems with constants.
1623 Invoke this function on every expression that is converted implicitly,
1624 i.e. because of language rules and not because of an explicit cast. */
1625
1626 tree
1627 convert_and_check (tree type, tree expr)
1628 {
1629 tree result;
1630
1631 if (TREE_TYPE (expr) == type)
1632 return expr;
1633
1634 result = convert (type, expr);
1635
1636 if (!skip_evaluation && !TREE_OVERFLOW_P (expr) && result != error_mark_node)
1637 warnings_for_convert_and_check (type, expr, result);
1638
1639 return result;
1640 }
1641 \f
1642 /* A node in a list that describes references to variables (EXPR), which are
1643 either read accesses if WRITER is zero, or write accesses, in which case
1644 WRITER is the parent of EXPR. */
1645 struct tlist
1646 {
1647 struct tlist *next;
1648 tree expr, writer;
1649 };
1650
1651 /* Used to implement a cache the results of a call to verify_tree. We only
1652 use this for SAVE_EXPRs. */
1653 struct tlist_cache
1654 {
1655 struct tlist_cache *next;
1656 struct tlist *cache_before_sp;
1657 struct tlist *cache_after_sp;
1658 tree expr;
1659 };
1660
1661 /* Obstack to use when allocating tlist structures, and corresponding
1662 firstobj. */
1663 static struct obstack tlist_obstack;
1664 static char *tlist_firstobj = 0;
1665
1666 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
1667 warnings. */
1668 static struct tlist *warned_ids;
1669 /* SAVE_EXPRs need special treatment. We process them only once and then
1670 cache the results. */
1671 static struct tlist_cache *save_expr_cache;
1672
1673 static void add_tlist (struct tlist **, struct tlist *, tree, int);
1674 static void merge_tlist (struct tlist **, struct tlist *, int);
1675 static void verify_tree (tree, struct tlist **, struct tlist **, tree);
1676 static int warning_candidate_p (tree);
1677 static void warn_for_collisions (struct tlist *);
1678 static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
1679 static struct tlist *new_tlist (struct tlist *, tree, tree);
1680
1681 /* Create a new struct tlist and fill in its fields. */
1682 static struct tlist *
1683 new_tlist (struct tlist *next, tree t, tree writer)
1684 {
1685 struct tlist *l;
1686 l = XOBNEW (&tlist_obstack, struct tlist);
1687 l->next = next;
1688 l->expr = t;
1689 l->writer = writer;
1690 return l;
1691 }
1692
1693 /* Add duplicates of the nodes found in ADD to the list *TO. If EXCLUDE_WRITER
1694 is nonnull, we ignore any node we find which has a writer equal to it. */
1695
1696 static void
1697 add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
1698 {
1699 while (add)
1700 {
1701 struct tlist *next = add->next;
1702 if (!copy)
1703 add->next = *to;
1704 if (!exclude_writer || add->writer != exclude_writer)
1705 *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
1706 add = next;
1707 }
1708 }
1709
1710 /* Merge the nodes of ADD into TO. This merging process is done so that for
1711 each variable that already exists in TO, no new node is added; however if
1712 there is a write access recorded in ADD, and an occurrence on TO is only
1713 a read access, then the occurrence in TO will be modified to record the
1714 write. */
1715
1716 static void
1717 merge_tlist (struct tlist **to, struct tlist *add, int copy)
1718 {
1719 struct tlist **end = to;
1720
1721 while (*end)
1722 end = &(*end)->next;
1723
1724 while (add)
1725 {
1726 int found = 0;
1727 struct tlist *tmp2;
1728 struct tlist *next = add->next;
1729
1730 for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
1731 if (tmp2->expr == add->expr)
1732 {
1733 found = 1;
1734 if (!tmp2->writer)
1735 tmp2->writer = add->writer;
1736 }
1737 if (!found)
1738 {
1739 *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
1740 end = &(*end)->next;
1741 *end = 0;
1742 }
1743 add = next;
1744 }
1745 }
1746
1747 /* WRITTEN is a variable, WRITER is its parent. Warn if any of the variable
1748 references in list LIST conflict with it, excluding reads if ONLY writers
1749 is nonzero. */
1750
1751 static void
1752 warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
1753 int only_writes)
1754 {
1755 struct tlist *tmp;
1756
1757 /* Avoid duplicate warnings. */
1758 for (tmp = warned_ids; tmp; tmp = tmp->next)
1759 if (tmp->expr == written)
1760 return;
1761
1762 while (list)
1763 {
1764 if (list->expr == written
1765 && list->writer != writer
1766 && (!only_writes || list->writer)
1767 && DECL_NAME (list->expr))
1768 {
1769 warned_ids = new_tlist (warned_ids, written, NULL_TREE);
1770 warning (OPT_Wsequence_point, "operation on %qE may be undefined",
1771 list->expr);
1772 }
1773 list = list->next;
1774 }
1775 }
1776
1777 /* Given a list LIST of references to variables, find whether any of these
1778 can cause conflicts due to missing sequence points. */
1779
1780 static void
1781 warn_for_collisions (struct tlist *list)
1782 {
1783 struct tlist *tmp;
1784
1785 for (tmp = list; tmp; tmp = tmp->next)
1786 {
1787 if (tmp->writer)
1788 warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
1789 }
1790 }
1791
1792 /* Return nonzero if X is a tree that can be verified by the sequence point
1793 warnings. */
1794 static int
1795 warning_candidate_p (tree x)
1796 {
1797 return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
1798 }
1799
1800 /* Walk the tree X, and record accesses to variables. If X is written by the
1801 parent tree, WRITER is the parent.
1802 We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP. If this
1803 expression or its only operand forces a sequence point, then everything up
1804 to the sequence point is stored in PBEFORE_SP. Everything else gets stored
1805 in PNO_SP.
1806 Once we return, we will have emitted warnings if any subexpression before
1807 such a sequence point could be undefined. On a higher level, however, the
1808 sequence point may not be relevant, and we'll merge the two lists.
1809
1810 Example: (b++, a) + b;
1811 The call that processes the COMPOUND_EXPR will store the increment of B
1812 in PBEFORE_SP, and the use of A in PNO_SP. The higher-level call that
1813 processes the PLUS_EXPR will need to merge the two lists so that
1814 eventually, all accesses end up on the same list (and we'll warn about the
1815 unordered subexpressions b++ and b.
1816
1817 A note on merging. If we modify the former example so that our expression
1818 becomes
1819 (b++, b) + a
1820 care must be taken not simply to add all three expressions into the final
1821 PNO_SP list. The function merge_tlist takes care of that by merging the
1822 before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1823 way, so that no more than one access to B is recorded. */
1824
1825 static void
1826 verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
1827 tree writer)
1828 {
1829 struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1830 enum tree_code code;
1831 enum tree_code_class cl;
1832
1833 /* X may be NULL if it is the operand of an empty statement expression
1834 ({ }). */
1835 if (x == NULL)
1836 return;
1837
1838 restart:
1839 code = TREE_CODE (x);
1840 cl = TREE_CODE_CLASS (code);
1841
1842 if (warning_candidate_p (x))
1843 {
1844 *pno_sp = new_tlist (*pno_sp, x, writer);
1845 return;
1846 }
1847
1848 switch (code)
1849 {
1850 case CONSTRUCTOR:
1851 return;
1852
1853 case COMPOUND_EXPR:
1854 case TRUTH_ANDIF_EXPR:
1855 case TRUTH_ORIF_EXPR:
1856 tmp_before = tmp_nosp = tmp_list3 = 0;
1857 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1858 warn_for_collisions (tmp_nosp);
1859 merge_tlist (pbefore_sp, tmp_before, 0);
1860 merge_tlist (pbefore_sp, tmp_nosp, 0);
1861 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
1862 merge_tlist (pbefore_sp, tmp_list3, 0);
1863 return;
1864
1865 case COND_EXPR:
1866 tmp_before = tmp_list2 = 0;
1867 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
1868 warn_for_collisions (tmp_list2);
1869 merge_tlist (pbefore_sp, tmp_before, 0);
1870 merge_tlist (pbefore_sp, tmp_list2, 1);
1871
1872 tmp_list3 = tmp_nosp = 0;
1873 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
1874 warn_for_collisions (tmp_nosp);
1875 merge_tlist (pbefore_sp, tmp_list3, 0);
1876
1877 tmp_list3 = tmp_list2 = 0;
1878 verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
1879 warn_for_collisions (tmp_list2);
1880 merge_tlist (pbefore_sp, tmp_list3, 0);
1881 /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1882 two first, to avoid warning for (a ? b++ : b++). */
1883 merge_tlist (&tmp_nosp, tmp_list2, 0);
1884 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1885 return;
1886
1887 case PREDECREMENT_EXPR:
1888 case PREINCREMENT_EXPR:
1889 case POSTDECREMENT_EXPR:
1890 case POSTINCREMENT_EXPR:
1891 verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
1892 return;
1893
1894 case MODIFY_EXPR:
1895 tmp_before = tmp_nosp = tmp_list3 = 0;
1896 verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
1897 verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
1898 /* Expressions inside the LHS are not ordered wrt. the sequence points
1899 in the RHS. Example:
1900 *a = (a++, 2)
1901 Despite the fact that the modification of "a" is in the before_sp
1902 list (tmp_before), it conflicts with the use of "a" in the LHS.
1903 We can handle this by adding the contents of tmp_list3
1904 to those of tmp_before, and redoing the collision warnings for that
1905 list. */
1906 add_tlist (&tmp_before, tmp_list3, x, 1);
1907 warn_for_collisions (tmp_before);
1908 /* Exclude the LHS itself here; we first have to merge it into the
1909 tmp_nosp list. This is done to avoid warning for "a = a"; if we
1910 didn't exclude the LHS, we'd get it twice, once as a read and once
1911 as a write. */
1912 add_tlist (pno_sp, tmp_list3, x, 0);
1913 warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
1914
1915 merge_tlist (pbefore_sp, tmp_before, 0);
1916 if (warning_candidate_p (TREE_OPERAND (x, 0)))
1917 merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
1918 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
1919 return;
1920
1921 case CALL_EXPR:
1922 /* We need to warn about conflicts among arguments and conflicts between
1923 args and the function address. Side effects of the function address,
1924 however, are not ordered by the sequence point of the call. */
1925 {
1926 call_expr_arg_iterator iter;
1927 tree arg;
1928 tmp_before = tmp_nosp = 0;
1929 verify_tree (CALL_EXPR_FN (x), &tmp_before, &tmp_nosp, NULL_TREE);
1930 FOR_EACH_CALL_EXPR_ARG (arg, iter, x)
1931 {
1932 tmp_list2 = tmp_list3 = 0;
1933 verify_tree (arg, &tmp_list2, &tmp_list3, NULL_TREE);
1934 merge_tlist (&tmp_list3, tmp_list2, 0);
1935 add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
1936 }
1937 add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
1938 warn_for_collisions (tmp_before);
1939 add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
1940 return;
1941 }
1942
1943 case TREE_LIST:
1944 /* Scan all the list, e.g. indices of multi dimensional array. */
1945 while (x)
1946 {
1947 tmp_before = tmp_nosp = 0;
1948 verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
1949 merge_tlist (&tmp_nosp, tmp_before, 0);
1950 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1951 x = TREE_CHAIN (x);
1952 }
1953 return;
1954
1955 case SAVE_EXPR:
1956 {
1957 struct tlist_cache *t;
1958 for (t = save_expr_cache; t; t = t->next)
1959 if (t->expr == x)
1960 break;
1961
1962 if (!t)
1963 {
1964 t = XOBNEW (&tlist_obstack, struct tlist_cache);
1965 t->next = save_expr_cache;
1966 t->expr = x;
1967 save_expr_cache = t;
1968
1969 tmp_before = tmp_nosp = 0;
1970 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1971 warn_for_collisions (tmp_nosp);
1972
1973 tmp_list3 = 0;
1974 while (tmp_nosp)
1975 {
1976 struct tlist *t = tmp_nosp;
1977 tmp_nosp = t->next;
1978 merge_tlist (&tmp_list3, t, 0);
1979 }
1980 t->cache_before_sp = tmp_before;
1981 t->cache_after_sp = tmp_list3;
1982 }
1983 merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1984 add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1985 return;
1986 }
1987
1988 default:
1989 /* For other expressions, simply recurse on their operands.
1990 Manual tail recursion for unary expressions.
1991 Other non-expressions need not be processed. */
1992 if (cl == tcc_unary)
1993 {
1994 x = TREE_OPERAND (x, 0);
1995 writer = 0;
1996 goto restart;
1997 }
1998 else if (IS_EXPR_CODE_CLASS (cl))
1999 {
2000 int lp;
2001 int max = TREE_OPERAND_LENGTH (x);
2002 for (lp = 0; lp < max; lp++)
2003 {
2004 tmp_before = tmp_nosp = 0;
2005 verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
2006 merge_tlist (&tmp_nosp, tmp_before, 0);
2007 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
2008 }
2009 }
2010 return;
2011 }
2012 }
2013
2014 /* Try to warn for undefined behavior in EXPR due to missing sequence
2015 points. */
2016
2017 void
2018 verify_sequence_points (tree expr)
2019 {
2020 struct tlist *before_sp = 0, *after_sp = 0;
2021
2022 warned_ids = 0;
2023 save_expr_cache = 0;
2024 if (tlist_firstobj == 0)
2025 {
2026 gcc_obstack_init (&tlist_obstack);
2027 tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
2028 }
2029
2030 verify_tree (expr, &before_sp, &after_sp, 0);
2031 warn_for_collisions (after_sp);
2032 obstack_free (&tlist_obstack, tlist_firstobj);
2033 }
2034 \f
2035 /* Validate the expression after `case' and apply default promotions. */
2036
2037 static tree
2038 check_case_value (tree value)
2039 {
2040 if (value == NULL_TREE)
2041 return value;
2042
2043 /* ??? Can we ever get nops here for a valid case value? We
2044 shouldn't for C. */
2045 STRIP_TYPE_NOPS (value);
2046 /* In C++, the following is allowed:
2047
2048 const int i = 3;
2049 switch (...) { case i: ... }
2050
2051 So, we try to reduce the VALUE to a constant that way. */
2052 if (c_dialect_cxx ())
2053 {
2054 value = decl_constant_value (value);
2055 STRIP_TYPE_NOPS (value);
2056 value = fold (value);
2057 }
2058
2059 if (TREE_CODE (value) == INTEGER_CST)
2060 /* Promote char or short to int. */
2061 value = perform_integral_promotions (value);
2062 else if (value != error_mark_node)
2063 {
2064 error ("case label does not reduce to an integer constant");
2065 value = error_mark_node;
2066 }
2067
2068 constant_expression_warning (value);
2069
2070 return value;
2071 }
2072 \f
2073 /* See if the case values LOW and HIGH are in the range of the original
2074 type (i.e. before the default conversion to int) of the switch testing
2075 expression.
2076 TYPE is the promoted type of the testing expression, and ORIG_TYPE is
2077 the type before promoting it. CASE_LOW_P is a pointer to the lower
2078 bound of the case label, and CASE_HIGH_P is the upper bound or NULL
2079 if the case is not a case range.
2080 The caller has to make sure that we are not called with NULL for
2081 CASE_LOW_P (i.e. the default case).
2082 Returns true if the case label is in range of ORIG_TYPE (saturated or
2083 untouched) or false if the label is out of range. */
2084
2085 static bool
2086 check_case_bounds (tree type, tree orig_type,
2087 tree *case_low_p, tree *case_high_p)
2088 {
2089 tree min_value, max_value;
2090 tree case_low = *case_low_p;
2091 tree case_high = case_high_p ? *case_high_p : case_low;
2092
2093 /* If there was a problem with the original type, do nothing. */
2094 if (orig_type == error_mark_node)
2095 return true;
2096
2097 min_value = TYPE_MIN_VALUE (orig_type);
2098 max_value = TYPE_MAX_VALUE (orig_type);
2099
2100 /* Case label is less than minimum for type. */
2101 if (tree_int_cst_compare (case_low, min_value) < 0
2102 && tree_int_cst_compare (case_high, min_value) < 0)
2103 {
2104 warning (0, "case label value is less than minimum value for type");
2105 return false;
2106 }
2107
2108 /* Case value is greater than maximum for type. */
2109 if (tree_int_cst_compare (case_low, max_value) > 0
2110 && tree_int_cst_compare (case_high, max_value) > 0)
2111 {
2112 warning (0, "case label value exceeds maximum value for type");
2113 return false;
2114 }
2115
2116 /* Saturate lower case label value to minimum. */
2117 if (tree_int_cst_compare (case_high, min_value) >= 0
2118 && tree_int_cst_compare (case_low, min_value) < 0)
2119 {
2120 warning (0, "lower value in case label range"
2121 " less than minimum value for type");
2122 case_low = min_value;
2123 }
2124
2125 /* Saturate upper case label value to maximum. */
2126 if (tree_int_cst_compare (case_low, max_value) <= 0
2127 && tree_int_cst_compare (case_high, max_value) > 0)
2128 {
2129 warning (0, "upper value in case label range"
2130 " exceeds maximum value for type");
2131 case_high = max_value;
2132 }
2133
2134 if (*case_low_p != case_low)
2135 *case_low_p = convert (type, case_low);
2136 if (case_high_p && *case_high_p != case_high)
2137 *case_high_p = convert (type, case_high);
2138
2139 return true;
2140 }
2141 \f
2142 /* Return an integer type with BITS bits of precision,
2143 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
2144
2145 tree
2146 c_common_type_for_size (unsigned int bits, int unsignedp)
2147 {
2148 if (bits == TYPE_PRECISION (integer_type_node))
2149 return unsignedp ? unsigned_type_node : integer_type_node;
2150
2151 if (bits == TYPE_PRECISION (signed_char_type_node))
2152 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2153
2154 if (bits == TYPE_PRECISION (short_integer_type_node))
2155 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2156
2157 if (bits == TYPE_PRECISION (long_integer_type_node))
2158 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2159
2160 if (bits == TYPE_PRECISION (long_long_integer_type_node))
2161 return (unsignedp ? long_long_unsigned_type_node
2162 : long_long_integer_type_node);
2163
2164 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
2165 return (unsignedp ? widest_unsigned_literal_type_node
2166 : widest_integer_literal_type_node);
2167
2168 if (bits <= TYPE_PRECISION (intQI_type_node))
2169 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2170
2171 if (bits <= TYPE_PRECISION (intHI_type_node))
2172 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2173
2174 if (bits <= TYPE_PRECISION (intSI_type_node))
2175 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2176
2177 if (bits <= TYPE_PRECISION (intDI_type_node))
2178 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2179
2180 return 0;
2181 }
2182
2183 /* Return a fixed-point type that has at least IBIT ibits and FBIT fbits
2184 that is unsigned if UNSIGNEDP is nonzero, otherwise signed;
2185 and saturating if SATP is nonzero, otherwise not saturating. */
2186
2187 tree
2188 c_common_fixed_point_type_for_size (unsigned int ibit, unsigned int fbit,
2189 int unsignedp, int satp)
2190 {
2191 enum machine_mode mode;
2192 if (ibit == 0)
2193 mode = unsignedp ? UQQmode : QQmode;
2194 else
2195 mode = unsignedp ? UHAmode : HAmode;
2196
2197 for (; mode != VOIDmode; mode = GET_MODE_WIDER_MODE (mode))
2198 if (GET_MODE_IBIT (mode) >= ibit && GET_MODE_FBIT (mode) >= fbit)
2199 break;
2200
2201 if (mode == VOIDmode || !targetm.scalar_mode_supported_p (mode))
2202 {
2203 sorry ("GCC cannot support operators with integer types and "
2204 "fixed-point types that have too many integral and "
2205 "fractional bits together");
2206 return 0;
2207 }
2208
2209 return c_common_type_for_mode (mode, satp);
2210 }
2211
2212 /* Used for communication between c_common_type_for_mode and
2213 c_register_builtin_type. */
2214 static GTY(()) tree registered_builtin_types;
2215
2216 /* Return a data type that has machine mode MODE.
2217 If the mode is an integer,
2218 then UNSIGNEDP selects between signed and unsigned types.
2219 If the mode is a fixed-point mode,
2220 then UNSIGNEDP selects between saturating and nonsaturating types. */
2221
2222 tree
2223 c_common_type_for_mode (enum machine_mode mode, int unsignedp)
2224 {
2225 tree t;
2226
2227 if (mode == TYPE_MODE (integer_type_node))
2228 return unsignedp ? unsigned_type_node : integer_type_node;
2229
2230 if (mode == TYPE_MODE (signed_char_type_node))
2231 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2232
2233 if (mode == TYPE_MODE (short_integer_type_node))
2234 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2235
2236 if (mode == TYPE_MODE (long_integer_type_node))
2237 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2238
2239 if (mode == TYPE_MODE (long_long_integer_type_node))
2240 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
2241
2242 if (mode == TYPE_MODE (widest_integer_literal_type_node))
2243 return unsignedp ? widest_unsigned_literal_type_node
2244 : widest_integer_literal_type_node;
2245
2246 if (mode == QImode)
2247 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2248
2249 if (mode == HImode)
2250 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2251
2252 if (mode == SImode)
2253 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2254
2255 if (mode == DImode)
2256 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2257
2258 #if HOST_BITS_PER_WIDE_INT >= 64
2259 if (mode == TYPE_MODE (intTI_type_node))
2260 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2261 #endif
2262
2263 if (mode == TYPE_MODE (float_type_node))
2264 return float_type_node;
2265
2266 if (mode == TYPE_MODE (double_type_node))
2267 return double_type_node;
2268
2269 if (mode == TYPE_MODE (long_double_type_node))
2270 return long_double_type_node;
2271
2272 if (mode == TYPE_MODE (void_type_node))
2273 return void_type_node;
2274
2275 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
2276 return (unsignedp
2277 ? make_unsigned_type (GET_MODE_PRECISION (mode))
2278 : make_signed_type (GET_MODE_PRECISION (mode)));
2279
2280 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
2281 return (unsignedp
2282 ? make_unsigned_type (GET_MODE_PRECISION (mode))
2283 : make_signed_type (GET_MODE_PRECISION (mode)));
2284
2285 if (COMPLEX_MODE_P (mode))
2286 {
2287 enum machine_mode inner_mode;
2288 tree inner_type;
2289
2290 if (mode == TYPE_MODE (complex_float_type_node))
2291 return complex_float_type_node;
2292 if (mode == TYPE_MODE (complex_double_type_node))
2293 return complex_double_type_node;
2294 if (mode == TYPE_MODE (complex_long_double_type_node))
2295 return complex_long_double_type_node;
2296
2297 if (mode == TYPE_MODE (complex_integer_type_node) && !unsignedp)
2298 return complex_integer_type_node;
2299
2300 inner_mode = GET_MODE_INNER (mode);
2301 inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2302 if (inner_type != NULL_TREE)
2303 return build_complex_type (inner_type);
2304 }
2305 else if (VECTOR_MODE_P (mode))
2306 {
2307 enum machine_mode inner_mode = GET_MODE_INNER (mode);
2308 tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2309 if (inner_type != NULL_TREE)
2310 return build_vector_type_for_mode (inner_type, mode);
2311 }
2312
2313 if (mode == TYPE_MODE (dfloat32_type_node))
2314 return dfloat32_type_node;
2315 if (mode == TYPE_MODE (dfloat64_type_node))
2316 return dfloat64_type_node;
2317 if (mode == TYPE_MODE (dfloat128_type_node))
2318 return dfloat128_type_node;
2319
2320 if (ALL_SCALAR_FIXED_POINT_MODE_P (mode))
2321 {
2322 if (mode == TYPE_MODE (short_fract_type_node))
2323 return unsignedp ? sat_short_fract_type_node : short_fract_type_node;
2324 if (mode == TYPE_MODE (fract_type_node))
2325 return unsignedp ? sat_fract_type_node : fract_type_node;
2326 if (mode == TYPE_MODE (long_fract_type_node))
2327 return unsignedp ? sat_long_fract_type_node : long_fract_type_node;
2328 if (mode == TYPE_MODE (long_long_fract_type_node))
2329 return unsignedp ? sat_long_long_fract_type_node
2330 : long_long_fract_type_node;
2331
2332 if (mode == TYPE_MODE (unsigned_short_fract_type_node))
2333 return unsignedp ? sat_unsigned_short_fract_type_node
2334 : unsigned_short_fract_type_node;
2335 if (mode == TYPE_MODE (unsigned_fract_type_node))
2336 return unsignedp ? sat_unsigned_fract_type_node
2337 : unsigned_fract_type_node;
2338 if (mode == TYPE_MODE (unsigned_long_fract_type_node))
2339 return unsignedp ? sat_unsigned_long_fract_type_node
2340 : unsigned_long_fract_type_node;
2341 if (mode == TYPE_MODE (unsigned_long_long_fract_type_node))
2342 return unsignedp ? sat_unsigned_long_long_fract_type_node
2343 : unsigned_long_long_fract_type_node;
2344
2345 if (mode == TYPE_MODE (short_accum_type_node))
2346 return unsignedp ? sat_short_accum_type_node : short_accum_type_node;
2347 if (mode == TYPE_MODE (accum_type_node))
2348 return unsignedp ? sat_accum_type_node : accum_type_node;
2349 if (mode == TYPE_MODE (long_accum_type_node))
2350 return unsignedp ? sat_long_accum_type_node : long_accum_type_node;
2351 if (mode == TYPE_MODE (long_long_accum_type_node))
2352 return unsignedp ? sat_long_long_accum_type_node
2353 : long_long_accum_type_node;
2354
2355 if (mode == TYPE_MODE (unsigned_short_accum_type_node))
2356 return unsignedp ? sat_unsigned_short_accum_type_node
2357 : unsigned_short_accum_type_node;
2358 if (mode == TYPE_MODE (unsigned_accum_type_node))
2359 return unsignedp ? sat_unsigned_accum_type_node
2360 : unsigned_accum_type_node;
2361 if (mode == TYPE_MODE (unsigned_long_accum_type_node))
2362 return unsignedp ? sat_unsigned_long_accum_type_node
2363 : unsigned_long_accum_type_node;
2364 if (mode == TYPE_MODE (unsigned_long_long_accum_type_node))
2365 return unsignedp ? sat_unsigned_long_long_accum_type_node
2366 : unsigned_long_long_accum_type_node;
2367
2368 if (mode == QQmode)
2369 return unsignedp ? sat_qq_type_node : qq_type_node;
2370 if (mode == HQmode)
2371 return unsignedp ? sat_hq_type_node : hq_type_node;
2372 if (mode == SQmode)
2373 return unsignedp ? sat_sq_type_node : sq_type_node;
2374 if (mode == DQmode)
2375 return unsignedp ? sat_dq_type_node : dq_type_node;
2376 if (mode == TQmode)
2377 return unsignedp ? sat_tq_type_node : tq_type_node;
2378
2379 if (mode == UQQmode)
2380 return unsignedp ? sat_uqq_type_node : uqq_type_node;
2381 if (mode == UHQmode)
2382 return unsignedp ? sat_uhq_type_node : uhq_type_node;
2383 if (mode == USQmode)
2384 return unsignedp ? sat_usq_type_node : usq_type_node;
2385 if (mode == UDQmode)
2386 return unsignedp ? sat_udq_type_node : udq_type_node;
2387 if (mode == UTQmode)
2388 return unsignedp ? sat_utq_type_node : utq_type_node;
2389
2390 if (mode == HAmode)
2391 return unsignedp ? sat_ha_type_node : ha_type_node;
2392 if (mode == SAmode)
2393 return unsignedp ? sat_sa_type_node : sa_type_node;
2394 if (mode == DAmode)
2395 return unsignedp ? sat_da_type_node : da_type_node;
2396 if (mode == TAmode)
2397 return unsignedp ? sat_ta_type_node : ta_type_node;
2398
2399 if (mode == UHAmode)
2400 return unsignedp ? sat_uha_type_node : uha_type_node;
2401 if (mode == USAmode)
2402 return unsignedp ? sat_usa_type_node : usa_type_node;
2403 if (mode == UDAmode)
2404 return unsignedp ? sat_uda_type_node : uda_type_node;
2405 if (mode == UTAmode)
2406 return unsignedp ? sat_uta_type_node : uta_type_node;
2407 }
2408
2409 for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
2410 if (TYPE_MODE (TREE_VALUE (t)) == mode)
2411 return TREE_VALUE (t);
2412
2413 return 0;
2414 }
2415
2416 tree
2417 c_common_unsigned_type (tree type)
2418 {
2419 return c_common_signed_or_unsigned_type (1, type);
2420 }
2421
2422 /* Return a signed type the same as TYPE in other respects. */
2423
2424 tree
2425 c_common_signed_type (tree type)
2426 {
2427 return c_common_signed_or_unsigned_type (0, type);
2428 }
2429
2430 /* Return a type the same as TYPE except unsigned or
2431 signed according to UNSIGNEDP. */
2432
2433 tree
2434 c_common_signed_or_unsigned_type (int unsignedp, tree type)
2435 {
2436 tree type1;
2437
2438 /* This block of code emulates the behavior of the old
2439 c_common_unsigned_type. In particular, it returns
2440 long_unsigned_type_node if passed a long, even when a int would
2441 have the same size. This is necessary for warnings to work
2442 correctly in archs where sizeof(int) == sizeof(long) */
2443
2444 type1 = TYPE_MAIN_VARIANT (type);
2445 if (type1 == signed_char_type_node || type1 == char_type_node || type1 == unsigned_char_type_node)
2446 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2447 if (type1 == integer_type_node || type1 == unsigned_type_node)
2448 return unsignedp ? unsigned_type_node : integer_type_node;
2449 if (type1 == short_integer_type_node || type1 == short_unsigned_type_node)
2450 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2451 if (type1 == long_integer_type_node || type1 == long_unsigned_type_node)
2452 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2453 if (type1 == long_long_integer_type_node || type1 == long_long_unsigned_type_node)
2454 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
2455 if (type1 == widest_integer_literal_type_node || type1 == widest_unsigned_literal_type_node)
2456 return unsignedp ? widest_unsigned_literal_type_node : widest_integer_literal_type_node;
2457 #if HOST_BITS_PER_WIDE_INT >= 64
2458 if (type1 == intTI_type_node || type1 == unsigned_intTI_type_node)
2459 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2460 #endif
2461 if (type1 == intDI_type_node || type1 == unsigned_intDI_type_node)
2462 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2463 if (type1 == intSI_type_node || type1 == unsigned_intSI_type_node)
2464 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2465 if (type1 == intHI_type_node || type1 == unsigned_intHI_type_node)
2466 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2467 if (type1 == intQI_type_node || type1 == unsigned_intQI_type_node)
2468 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2469
2470 #define C_COMMON_FIXED_TYPES(NAME) \
2471 if (type1 == short_ ## NAME ## _type_node \
2472 || type1 == unsigned_short_ ## NAME ## _type_node) \
2473 return unsignedp ? unsigned_short_ ## NAME ## _type_node \
2474 : short_ ## NAME ## _type_node; \
2475 if (type1 == NAME ## _type_node \
2476 || type1 == unsigned_ ## NAME ## _type_node) \
2477 return unsignedp ? unsigned_ ## NAME ## _type_node \
2478 : NAME ## _type_node; \
2479 if (type1 == long_ ## NAME ## _type_node \
2480 || type1 == unsigned_long_ ## NAME ## _type_node) \
2481 return unsignedp ? unsigned_long_ ## NAME ## _type_node \
2482 : long_ ## NAME ## _type_node; \
2483 if (type1 == long_long_ ## NAME ## _type_node \
2484 || type1 == unsigned_long_long_ ## NAME ## _type_node) \
2485 return unsignedp ? unsigned_long_long_ ## NAME ## _type_node \
2486 : long_long_ ## NAME ## _type_node;
2487
2488 #define C_COMMON_FIXED_MODE_TYPES(NAME) \
2489 if (type1 == NAME ## _type_node \
2490 || type1 == u ## NAME ## _type_node) \
2491 return unsignedp ? u ## NAME ## _type_node \
2492 : NAME ## _type_node;
2493
2494 #define C_COMMON_FIXED_TYPES_SAT(NAME) \
2495 if (type1 == sat_ ## short_ ## NAME ## _type_node \
2496 || type1 == sat_ ## unsigned_short_ ## NAME ## _type_node) \
2497 return unsignedp ? sat_ ## unsigned_short_ ## NAME ## _type_node \
2498 : sat_ ## short_ ## NAME ## _type_node; \
2499 if (type1 == sat_ ## NAME ## _type_node \
2500 || type1 == sat_ ## unsigned_ ## NAME ## _type_node) \
2501 return unsignedp ? sat_ ## unsigned_ ## NAME ## _type_node \
2502 : sat_ ## NAME ## _type_node; \
2503 if (type1 == sat_ ## long_ ## NAME ## _type_node \
2504 || type1 == sat_ ## unsigned_long_ ## NAME ## _type_node) \
2505 return unsignedp ? sat_ ## unsigned_long_ ## NAME ## _type_node \
2506 : sat_ ## long_ ## NAME ## _type_node; \
2507 if (type1 == sat_ ## long_long_ ## NAME ## _type_node \
2508 || type1 == sat_ ## unsigned_long_long_ ## NAME ## _type_node) \
2509 return unsignedp ? sat_ ## unsigned_long_long_ ## NAME ## _type_node \
2510 : sat_ ## long_long_ ## NAME ## _type_node;
2511
2512 #define C_COMMON_FIXED_MODE_TYPES_SAT(NAME) \
2513 if (type1 == sat_ ## NAME ## _type_node \
2514 || type1 == sat_ ## u ## NAME ## _type_node) \
2515 return unsignedp ? sat_ ## u ## NAME ## _type_node \
2516 : sat_ ## NAME ## _type_node;
2517
2518 C_COMMON_FIXED_TYPES (fract);
2519 C_COMMON_FIXED_TYPES_SAT (fract);
2520 C_COMMON_FIXED_TYPES (accum);
2521 C_COMMON_FIXED_TYPES_SAT (accum);
2522
2523 C_COMMON_FIXED_MODE_TYPES (qq);
2524 C_COMMON_FIXED_MODE_TYPES (hq);
2525 C_COMMON_FIXED_MODE_TYPES (sq);
2526 C_COMMON_FIXED_MODE_TYPES (dq);
2527 C_COMMON_FIXED_MODE_TYPES (tq);
2528 C_COMMON_FIXED_MODE_TYPES_SAT (qq);
2529 C_COMMON_FIXED_MODE_TYPES_SAT (hq);
2530 C_COMMON_FIXED_MODE_TYPES_SAT (sq);
2531 C_COMMON_FIXED_MODE_TYPES_SAT (dq);
2532 C_COMMON_FIXED_MODE_TYPES_SAT (tq);
2533 C_COMMON_FIXED_MODE_TYPES (ha);
2534 C_COMMON_FIXED_MODE_TYPES (sa);
2535 C_COMMON_FIXED_MODE_TYPES (da);
2536 C_COMMON_FIXED_MODE_TYPES (ta);
2537 C_COMMON_FIXED_MODE_TYPES_SAT (ha);
2538 C_COMMON_FIXED_MODE_TYPES_SAT (sa);
2539 C_COMMON_FIXED_MODE_TYPES_SAT (da);
2540 C_COMMON_FIXED_MODE_TYPES_SAT (ta);
2541
2542 /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
2543 the precision; they have precision set to match their range, but
2544 may use a wider mode to match an ABI. If we change modes, we may
2545 wind up with bad conversions. For INTEGER_TYPEs in C, must check
2546 the precision as well, so as to yield correct results for
2547 bit-field types. C++ does not have these separate bit-field
2548 types, and producing a signed or unsigned variant of an
2549 ENUMERAL_TYPE may cause other problems as well. */
2550
2551 if (!INTEGRAL_TYPE_P (type)
2552 || TYPE_UNSIGNED (type) == unsignedp)
2553 return type;
2554
2555 #define TYPE_OK(node) \
2556 (TYPE_MODE (type) == TYPE_MODE (node) \
2557 && (c_dialect_cxx () || TYPE_PRECISION (type) == TYPE_PRECISION (node)))
2558 if (TYPE_OK (signed_char_type_node))
2559 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2560 if (TYPE_OK (integer_type_node))
2561 return unsignedp ? unsigned_type_node : integer_type_node;
2562 if (TYPE_OK (short_integer_type_node))
2563 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2564 if (TYPE_OK (long_integer_type_node))
2565 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2566 if (TYPE_OK (long_long_integer_type_node))
2567 return (unsignedp ? long_long_unsigned_type_node
2568 : long_long_integer_type_node);
2569 if (TYPE_OK (widest_integer_literal_type_node))
2570 return (unsignedp ? widest_unsigned_literal_type_node
2571 : widest_integer_literal_type_node);
2572
2573 #if HOST_BITS_PER_WIDE_INT >= 64
2574 if (TYPE_OK (intTI_type_node))
2575 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2576 #endif
2577 if (TYPE_OK (intDI_type_node))
2578 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2579 if (TYPE_OK (intSI_type_node))
2580 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2581 if (TYPE_OK (intHI_type_node))
2582 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2583 if (TYPE_OK (intQI_type_node))
2584 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2585 #undef TYPE_OK
2586
2587 if (c_dialect_cxx ())
2588 return type;
2589 else
2590 return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
2591 }
2592
2593 /* Build a bit-field integer type for the given WIDTH and UNSIGNEDP. */
2594
2595 tree
2596 c_build_bitfield_integer_type (unsigned HOST_WIDE_INT width, int unsignedp)
2597 {
2598 /* Extended integer types of the same width as a standard type have
2599 lesser rank, so those of the same width as int promote to int or
2600 unsigned int and are valid for printf formats expecting int or
2601 unsigned int. To avoid such special cases, avoid creating
2602 extended integer types for bit-fields if a standard integer type
2603 is available. */
2604 if (width == TYPE_PRECISION (integer_type_node))
2605 return unsignedp ? unsigned_type_node : integer_type_node;
2606 if (width == TYPE_PRECISION (signed_char_type_node))
2607 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2608 if (width == TYPE_PRECISION (short_integer_type_node))
2609 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2610 if (width == TYPE_PRECISION (long_integer_type_node))
2611 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2612 if (width == TYPE_PRECISION (long_long_integer_type_node))
2613 return (unsignedp ? long_long_unsigned_type_node
2614 : long_long_integer_type_node);
2615 return build_nonstandard_integer_type (width, unsignedp);
2616 }
2617
2618 /* The C version of the register_builtin_type langhook. */
2619
2620 void
2621 c_register_builtin_type (tree type, const char* name)
2622 {
2623 tree decl;
2624
2625 decl = build_decl (TYPE_DECL, get_identifier (name), type);
2626 DECL_ARTIFICIAL (decl) = 1;
2627 if (!TYPE_NAME (type))
2628 TYPE_NAME (type) = decl;
2629 pushdecl (decl);
2630
2631 registered_builtin_types = tree_cons (0, type, registered_builtin_types);
2632 }
2633
2634 \f
2635 /* Return the minimum number of bits needed to represent VALUE in a
2636 signed or unsigned type, UNSIGNEDP says which. */
2637
2638 unsigned int
2639 min_precision (tree value, int unsignedp)
2640 {
2641 int log;
2642
2643 /* If the value is negative, compute its negative minus 1. The latter
2644 adjustment is because the absolute value of the largest negative value
2645 is one larger than the largest positive value. This is equivalent to
2646 a bit-wise negation, so use that operation instead. */
2647
2648 if (tree_int_cst_sgn (value) < 0)
2649 value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
2650
2651 /* Return the number of bits needed, taking into account the fact
2652 that we need one more bit for a signed than unsigned type. */
2653
2654 if (integer_zerop (value))
2655 log = 0;
2656 else
2657 log = tree_floor_log2 (value);
2658
2659 return log + 1 + !unsignedp;
2660 }
2661 \f
2662 /* Print an error message for invalid operands to arith operation
2663 CODE with TYPE0 for operand 0, and TYPE1 for operand 1. */
2664
2665 void
2666 binary_op_error (enum tree_code code, tree type0, tree type1)
2667 {
2668 const char *opname;
2669
2670 switch (code)
2671 {
2672 case PLUS_EXPR:
2673 opname = "+"; break;
2674 case MINUS_EXPR:
2675 opname = "-"; break;
2676 case MULT_EXPR:
2677 opname = "*"; break;
2678 case MAX_EXPR:
2679 opname = "max"; break;
2680 case MIN_EXPR:
2681 opname = "min"; break;
2682 case EQ_EXPR:
2683 opname = "=="; break;
2684 case NE_EXPR:
2685 opname = "!="; break;
2686 case LE_EXPR:
2687 opname = "<="; break;
2688 case GE_EXPR:
2689 opname = ">="; break;
2690 case LT_EXPR:
2691 opname = "<"; break;
2692 case GT_EXPR:
2693 opname = ">"; break;
2694 case LSHIFT_EXPR:
2695 opname = "<<"; break;
2696 case RSHIFT_EXPR:
2697 opname = ">>"; break;
2698 case TRUNC_MOD_EXPR:
2699 case FLOOR_MOD_EXPR:
2700 opname = "%"; break;
2701 case TRUNC_DIV_EXPR:
2702 case FLOOR_DIV_EXPR:
2703 opname = "/"; break;
2704 case BIT_AND_EXPR:
2705 opname = "&"; break;
2706 case BIT_IOR_EXPR:
2707 opname = "|"; break;
2708 case TRUTH_ANDIF_EXPR:
2709 opname = "&&"; break;
2710 case TRUTH_ORIF_EXPR:
2711 opname = "||"; break;
2712 case BIT_XOR_EXPR:
2713 opname = "^"; break;
2714 default:
2715 gcc_unreachable ();
2716 }
2717 error ("invalid operands to binary %s (have %qT and %qT)", opname,
2718 type0, type1);
2719 }
2720 \f
2721 /* Subroutine of build_binary_op, used for comparison operations.
2722 See if the operands have both been converted from subword integer types
2723 and, if so, perhaps change them both back to their original type.
2724 This function is also responsible for converting the two operands
2725 to the proper common type for comparison.
2726
2727 The arguments of this function are all pointers to local variables
2728 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
2729 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
2730
2731 If this function returns nonzero, it means that the comparison has
2732 a constant value. What this function returns is an expression for
2733 that value. */
2734
2735 tree
2736 shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
2737 enum tree_code *rescode_ptr)
2738 {
2739 tree type;
2740 tree op0 = *op0_ptr;
2741 tree op1 = *op1_ptr;
2742 int unsignedp0, unsignedp1;
2743 int real1, real2;
2744 tree primop0, primop1;
2745 enum tree_code code = *rescode_ptr;
2746
2747 /* Throw away any conversions to wider types
2748 already present in the operands. */
2749
2750 primop0 = get_narrower (op0, &unsignedp0);
2751 primop1 = get_narrower (op1, &unsignedp1);
2752
2753 /* Handle the case that OP0 does not *contain* a conversion
2754 but it *requires* conversion to FINAL_TYPE. */
2755
2756 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
2757 unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
2758 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
2759 unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
2760
2761 /* If one of the operands must be floated, we cannot optimize. */
2762 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
2763 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
2764
2765 /* If first arg is constant, swap the args (changing operation
2766 so value is preserved), for canonicalization. Don't do this if
2767 the second arg is 0. */
2768
2769 if (TREE_CONSTANT (primop0)
2770 && !integer_zerop (primop1) && !real_zerop (primop1)
2771 && !fixed_zerop (primop1))
2772 {
2773 tree tem = primop0;
2774 int temi = unsignedp0;
2775 primop0 = primop1;
2776 primop1 = tem;
2777 tem = op0;
2778 op0 = op1;
2779 op1 = tem;
2780 *op0_ptr = op0;
2781 *op1_ptr = op1;
2782 unsignedp0 = unsignedp1;
2783 unsignedp1 = temi;
2784 temi = real1;
2785 real1 = real2;
2786 real2 = temi;
2787
2788 switch (code)
2789 {
2790 case LT_EXPR:
2791 code = GT_EXPR;
2792 break;
2793 case GT_EXPR:
2794 code = LT_EXPR;
2795 break;
2796 case LE_EXPR:
2797 code = GE_EXPR;
2798 break;
2799 case GE_EXPR:
2800 code = LE_EXPR;
2801 break;
2802 default:
2803 break;
2804 }
2805 *rescode_ptr = code;
2806 }
2807
2808 /* If comparing an integer against a constant more bits wide,
2809 maybe we can deduce a value of 1 or 0 independent of the data.
2810 Or else truncate the constant now
2811 rather than extend the variable at run time.
2812
2813 This is only interesting if the constant is the wider arg.
2814 Also, it is not safe if the constant is unsigned and the
2815 variable arg is signed, since in this case the variable
2816 would be sign-extended and then regarded as unsigned.
2817 Our technique fails in this case because the lowest/highest
2818 possible unsigned results don't follow naturally from the
2819 lowest/highest possible values of the variable operand.
2820 For just EQ_EXPR and NE_EXPR there is another technique that
2821 could be used: see if the constant can be faithfully represented
2822 in the other operand's type, by truncating it and reextending it
2823 and see if that preserves the constant's value. */
2824
2825 if (!real1 && !real2
2826 && TREE_CODE (TREE_TYPE (primop0)) != FIXED_POINT_TYPE
2827 && TREE_CODE (primop1) == INTEGER_CST
2828 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
2829 {
2830 int min_gt, max_gt, min_lt, max_lt;
2831 tree maxval, minval;
2832 /* 1 if comparison is nominally unsigned. */
2833 int unsignedp = TYPE_UNSIGNED (*restype_ptr);
2834 tree val;
2835
2836 type = c_common_signed_or_unsigned_type (unsignedp0,
2837 TREE_TYPE (primop0));
2838
2839 maxval = TYPE_MAX_VALUE (type);
2840 minval = TYPE_MIN_VALUE (type);
2841
2842 if (unsignedp && !unsignedp0)
2843 *restype_ptr = c_common_signed_type (*restype_ptr);
2844
2845 if (TREE_TYPE (primop1) != *restype_ptr)
2846 {
2847 /* Convert primop1 to target type, but do not introduce
2848 additional overflow. We know primop1 is an int_cst. */
2849 primop1 = force_fit_type_double (*restype_ptr,
2850 TREE_INT_CST_LOW (primop1),
2851 TREE_INT_CST_HIGH (primop1), 0,
2852 TREE_OVERFLOW (primop1));
2853 }
2854 if (type != *restype_ptr)
2855 {
2856 minval = convert (*restype_ptr, minval);
2857 maxval = convert (*restype_ptr, maxval);
2858 }
2859
2860 if (unsignedp && unsignedp0)
2861 {
2862 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
2863 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
2864 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
2865 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
2866 }
2867 else
2868 {
2869 min_gt = INT_CST_LT (primop1, minval);
2870 max_gt = INT_CST_LT (primop1, maxval);
2871 min_lt = INT_CST_LT (minval, primop1);
2872 max_lt = INT_CST_LT (maxval, primop1);
2873 }
2874
2875 val = 0;
2876 /* This used to be a switch, but Genix compiler can't handle that. */
2877 if (code == NE_EXPR)
2878 {
2879 if (max_lt || min_gt)
2880 val = truthvalue_true_node;
2881 }
2882 else if (code == EQ_EXPR)
2883 {
2884 if (max_lt || min_gt)
2885 val = truthvalue_false_node;
2886 }
2887 else if (code == LT_EXPR)
2888 {
2889 if (max_lt)
2890 val = truthvalue_true_node;
2891 if (!min_lt)
2892 val = truthvalue_false_node;
2893 }
2894 else if (code == GT_EXPR)
2895 {
2896 if (min_gt)
2897 val = truthvalue_true_node;
2898 if (!max_gt)
2899 val = truthvalue_false_node;
2900 }
2901 else if (code == LE_EXPR)
2902 {
2903 if (!max_gt)
2904 val = truthvalue_true_node;
2905 if (min_gt)
2906 val = truthvalue_false_node;
2907 }
2908 else if (code == GE_EXPR)
2909 {
2910 if (!min_lt)
2911 val = truthvalue_true_node;
2912 if (max_lt)
2913 val = truthvalue_false_node;
2914 }
2915
2916 /* If primop0 was sign-extended and unsigned comparison specd,
2917 we did a signed comparison above using the signed type bounds.
2918 But the comparison we output must be unsigned.
2919
2920 Also, for inequalities, VAL is no good; but if the signed
2921 comparison had *any* fixed result, it follows that the
2922 unsigned comparison just tests the sign in reverse
2923 (positive values are LE, negative ones GE).
2924 So we can generate an unsigned comparison
2925 against an extreme value of the signed type. */
2926
2927 if (unsignedp && !unsignedp0)
2928 {
2929 if (val != 0)
2930 switch (code)
2931 {
2932 case LT_EXPR:
2933 case GE_EXPR:
2934 primop1 = TYPE_MIN_VALUE (type);
2935 val = 0;
2936 break;
2937
2938 case LE_EXPR:
2939 case GT_EXPR:
2940 primop1 = TYPE_MAX_VALUE (type);
2941 val = 0;
2942 break;
2943
2944 default:
2945 break;
2946 }
2947 type = c_common_unsigned_type (type);
2948 }
2949
2950 if (TREE_CODE (primop0) != INTEGER_CST)
2951 {
2952 if (val == truthvalue_false_node)
2953 warning (OPT_Wtype_limits, "comparison is always false due to limited range of data type");
2954 if (val == truthvalue_true_node)
2955 warning (OPT_Wtype_limits, "comparison is always true due to limited range of data type");
2956 }
2957
2958 if (val != 0)
2959 {
2960 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2961 if (TREE_SIDE_EFFECTS (primop0))
2962 return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
2963 return val;
2964 }
2965
2966 /* Value is not predetermined, but do the comparison
2967 in the type of the operand that is not constant.
2968 TYPE is already properly set. */
2969 }
2970
2971 /* If either arg is decimal float and the other is float, find the
2972 proper common type to use for comparison. */
2973 else if (real1 && real2
2974 && (DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0)))
2975 || DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1)))))
2976 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2977
2978 else if (real1 && real2
2979 && (TYPE_PRECISION (TREE_TYPE (primop0))
2980 == TYPE_PRECISION (TREE_TYPE (primop1))))
2981 type = TREE_TYPE (primop0);
2982
2983 /* If args' natural types are both narrower than nominal type
2984 and both extend in the same manner, compare them
2985 in the type of the wider arg.
2986 Otherwise must actually extend both to the nominal
2987 common type lest different ways of extending
2988 alter the result.
2989 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
2990
2991 else if (unsignedp0 == unsignedp1 && real1 == real2
2992 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
2993 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
2994 {
2995 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2996 type = c_common_signed_or_unsigned_type (unsignedp0
2997 || TYPE_UNSIGNED (*restype_ptr),
2998 type);
2999 /* Make sure shorter operand is extended the right way
3000 to match the longer operand. */
3001 primop0
3002 = convert (c_common_signed_or_unsigned_type (unsignedp0,
3003 TREE_TYPE (primop0)),
3004 primop0);
3005 primop1
3006 = convert (c_common_signed_or_unsigned_type (unsignedp1,
3007 TREE_TYPE (primop1)),
3008 primop1);
3009 }
3010 else
3011 {
3012 /* Here we must do the comparison on the nominal type
3013 using the args exactly as we received them. */
3014 type = *restype_ptr;
3015 primop0 = op0;
3016 primop1 = op1;
3017
3018 if (!real1 && !real2 && integer_zerop (primop1)
3019 && TYPE_UNSIGNED (*restype_ptr))
3020 {
3021 tree value = 0;
3022 switch (code)
3023 {
3024 case GE_EXPR:
3025 /* All unsigned values are >= 0, so we warn. However,
3026 if OP0 is a constant that is >= 0, the signedness of
3027 the comparison isn't an issue, so suppress the
3028 warning. */
3029 if (warn_type_limits && !in_system_header
3030 && !(TREE_CODE (primop0) == INTEGER_CST
3031 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
3032 primop0))))
3033 warning (OPT_Wtype_limits,
3034 "comparison of unsigned expression >= 0 is always true");
3035 value = truthvalue_true_node;
3036 break;
3037
3038 case LT_EXPR:
3039 if (warn_type_limits && !in_system_header
3040 && !(TREE_CODE (primop0) == INTEGER_CST
3041 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
3042 primop0))))
3043 warning (OPT_Wtype_limits,
3044 "comparison of unsigned expression < 0 is always false");
3045 value = truthvalue_false_node;
3046 break;
3047
3048 default:
3049 break;
3050 }
3051
3052 if (value != 0)
3053 {
3054 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
3055 if (TREE_SIDE_EFFECTS (primop0))
3056 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
3057 primop0, value);
3058 return value;
3059 }
3060 }
3061 }
3062
3063 *op0_ptr = convert (type, primop0);
3064 *op1_ptr = convert (type, primop1);
3065
3066 *restype_ptr = truthvalue_type_node;
3067
3068 return 0;
3069 }
3070 \f
3071 /* Return a tree for the sum or difference (RESULTCODE says which)
3072 of pointer PTROP and integer INTOP. */
3073
3074 tree
3075 pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
3076 {
3077 tree size_exp, ret;
3078
3079 /* The result is a pointer of the same type that is being added. */
3080 tree result_type = TREE_TYPE (ptrop);
3081
3082 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
3083 {
3084 pedwarn (pedantic ? OPT_pedantic : OPT_Wpointer_arith,
3085 "pointer of type %<void *%> used in arithmetic");
3086 size_exp = integer_one_node;
3087 }
3088 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
3089 {
3090 pedwarn (pedantic ? OPT_pedantic : OPT_Wpointer_arith,
3091 "pointer to a function used in arithmetic");
3092 size_exp = integer_one_node;
3093 }
3094 else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
3095 {
3096 pedwarn (pedantic ? OPT_pedantic : OPT_Wpointer_arith,
3097 "pointer to member function used in arithmetic");
3098 size_exp = integer_one_node;
3099 }
3100 else
3101 size_exp = size_in_bytes (TREE_TYPE (result_type));
3102
3103 /* We are manipulating pointer values, so we don't need to warn
3104 about relying on undefined signed overflow. We disable the
3105 warning here because we use integer types so fold won't know that
3106 they are really pointers. */
3107 fold_defer_overflow_warnings ();
3108
3109 /* If what we are about to multiply by the size of the elements
3110 contains a constant term, apply distributive law
3111 and multiply that constant term separately.
3112 This helps produce common subexpressions. */
3113 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
3114 && !TREE_CONSTANT (intop)
3115 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
3116 && TREE_CONSTANT (size_exp)
3117 /* If the constant comes from pointer subtraction,
3118 skip this optimization--it would cause an error. */
3119 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
3120 /* If the constant is unsigned, and smaller than the pointer size,
3121 then we must skip this optimization. This is because it could cause
3122 an overflow error if the constant is negative but INTOP is not. */
3123 && (!TYPE_UNSIGNED (TREE_TYPE (intop))
3124 || (TYPE_PRECISION (TREE_TYPE (intop))
3125 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
3126 {
3127 enum tree_code subcode = resultcode;
3128 tree int_type = TREE_TYPE (intop);
3129 if (TREE_CODE (intop) == MINUS_EXPR)
3130 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
3131 /* Convert both subexpression types to the type of intop,
3132 because weird cases involving pointer arithmetic
3133 can result in a sum or difference with different type args. */
3134 ptrop = build_binary_op (subcode, ptrop,
3135 convert (int_type, TREE_OPERAND (intop, 1)), 1);
3136 intop = convert (int_type, TREE_OPERAND (intop, 0));
3137 }
3138
3139 /* Convert the integer argument to a type the same size as sizetype
3140 so the multiply won't overflow spuriously. */
3141 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
3142 || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
3143 intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
3144 TYPE_UNSIGNED (sizetype)), intop);
3145
3146 /* Replace the integer argument with a suitable product by the object size.
3147 Do this multiplication as signed, then convert to the appropriate
3148 type for the pointer operation. */
3149 intop = convert (sizetype,
3150 build_binary_op (MULT_EXPR, intop,
3151 convert (TREE_TYPE (intop), size_exp), 1));
3152
3153 /* Create the sum or difference. */
3154 if (resultcode == MINUS_EXPR)
3155 intop = fold_build1 (NEGATE_EXPR, sizetype, intop);
3156
3157 ret = fold_build2 (POINTER_PLUS_EXPR, result_type, ptrop, intop);
3158
3159 fold_undefer_and_ignore_overflow_warnings ();
3160
3161 return ret;
3162 }
3163 \f
3164 /* Return whether EXPR is a declaration whose address can never be
3165 NULL. */
3166
3167 bool
3168 decl_with_nonnull_addr_p (const_tree expr)
3169 {
3170 return (DECL_P (expr)
3171 && (TREE_CODE (expr) == PARM_DECL
3172 || TREE_CODE (expr) == LABEL_DECL
3173 || !DECL_WEAK (expr)));
3174 }
3175
3176 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
3177 or for an `if' or `while' statement or ?..: exp. It should already
3178 have been validated to be of suitable type; otherwise, a bad
3179 diagnostic may result.
3180
3181 This preparation consists of taking the ordinary
3182 representation of an expression expr and producing a valid tree
3183 boolean expression describing whether expr is nonzero. We could
3184 simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
3185 but we optimize comparisons, &&, ||, and !.
3186
3187 The resulting type should always be `truthvalue_type_node'. */
3188
3189 tree
3190 c_common_truthvalue_conversion (tree expr)
3191 {
3192 switch (TREE_CODE (expr))
3193 {
3194 case EQ_EXPR: case NE_EXPR: case UNEQ_EXPR: case LTGT_EXPR:
3195 case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
3196 case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
3197 case ORDERED_EXPR: case UNORDERED_EXPR:
3198 if (TREE_TYPE (expr) == truthvalue_type_node)
3199 return expr;
3200 return build2 (TREE_CODE (expr), truthvalue_type_node,
3201 TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
3202
3203 case TRUTH_ANDIF_EXPR:
3204 case TRUTH_ORIF_EXPR:
3205 case TRUTH_AND_EXPR:
3206 case TRUTH_OR_EXPR:
3207 case TRUTH_XOR_EXPR:
3208 if (TREE_TYPE (expr) == truthvalue_type_node)
3209 return expr;
3210 return build2 (TREE_CODE (expr), truthvalue_type_node,
3211 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
3212 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)));
3213
3214 case TRUTH_NOT_EXPR:
3215 if (TREE_TYPE (expr) == truthvalue_type_node)
3216 return expr;
3217 return build1 (TREE_CODE (expr), truthvalue_type_node,
3218 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
3219
3220 case ERROR_MARK:
3221 return expr;
3222
3223 case INTEGER_CST:
3224 return integer_zerop (expr) ? truthvalue_false_node
3225 : truthvalue_true_node;
3226
3227 case REAL_CST:
3228 return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
3229 ? truthvalue_true_node
3230 : truthvalue_false_node;
3231
3232 case FIXED_CST:
3233 return fixed_compare (NE_EXPR, &TREE_FIXED_CST (expr),
3234 &FCONST0 (TYPE_MODE (TREE_TYPE (expr))))
3235 ? truthvalue_true_node
3236 : truthvalue_false_node;
3237
3238 case FUNCTION_DECL:
3239 expr = build_unary_op (ADDR_EXPR, expr, 0);
3240 /* Fall through. */
3241
3242 case ADDR_EXPR:
3243 {
3244 tree inner = TREE_OPERAND (expr, 0);
3245 if (decl_with_nonnull_addr_p (inner))
3246 {
3247 /* Common Ada/Pascal programmer's mistake. */
3248 warning (OPT_Waddress,
3249 "the address of %qD will always evaluate as %<true%>",
3250 inner);
3251 return truthvalue_true_node;
3252 }
3253
3254 /* If we still have a decl, it is possible for its address to
3255 be NULL, so we cannot optimize. */
3256 if (DECL_P (inner))
3257 {
3258 gcc_assert (DECL_WEAK (inner));
3259 break;
3260 }
3261
3262 if (TREE_SIDE_EFFECTS (inner))
3263 return build2 (COMPOUND_EXPR, truthvalue_type_node,
3264 inner, truthvalue_true_node);
3265 else
3266 return truthvalue_true_node;
3267 }
3268
3269 case COMPLEX_EXPR:
3270 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
3271 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
3272 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
3273 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
3274 0);
3275
3276 case NEGATE_EXPR:
3277 case ABS_EXPR:
3278 case FLOAT_EXPR:
3279 /* These don't change whether an object is nonzero or zero. */
3280 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
3281
3282 case LROTATE_EXPR:
3283 case RROTATE_EXPR:
3284 /* These don't change whether an object is zero or nonzero, but
3285 we can't ignore them if their second arg has side-effects. */
3286 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
3287 return build2 (COMPOUND_EXPR, truthvalue_type_node,
3288 TREE_OPERAND (expr, 1),
3289 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
3290 else
3291 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
3292
3293 case COND_EXPR:
3294 /* Distribute the conversion into the arms of a COND_EXPR. */
3295 return fold_build3 (COND_EXPR, truthvalue_type_node,
3296 TREE_OPERAND (expr, 0),
3297 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
3298 c_common_truthvalue_conversion (TREE_OPERAND (expr, 2)));
3299
3300 CASE_CONVERT:
3301 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
3302 since that affects how `default_conversion' will behave. */
3303 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
3304 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
3305 break;
3306 /* If this is widening the argument, we can ignore it. */
3307 if (TYPE_PRECISION (TREE_TYPE (expr))
3308 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
3309 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
3310 break;
3311
3312 case MODIFY_EXPR:
3313 if (!TREE_NO_WARNING (expr)
3314 && warn_parentheses)
3315 {
3316 warning (OPT_Wparentheses,
3317 "suggest parentheses around assignment used as truth value");
3318 TREE_NO_WARNING (expr) = 1;
3319 }
3320 break;
3321
3322 default:
3323 break;
3324 }
3325
3326 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
3327 {
3328 tree t = save_expr (expr);
3329 return (build_binary_op
3330 ((TREE_SIDE_EFFECTS (expr)
3331 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
3332 c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
3333 c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
3334 0));
3335 }
3336
3337 if (TREE_CODE (TREE_TYPE (expr)) == FIXED_POINT_TYPE)
3338 {
3339 tree fixed_zero_node = build_fixed (TREE_TYPE (expr),
3340 FCONST0 (TYPE_MODE
3341 (TREE_TYPE (expr))));
3342 return build_binary_op (NE_EXPR, expr, fixed_zero_node, 1);
3343 }
3344
3345 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
3346 }
3347 \f
3348 static void def_builtin_1 (enum built_in_function fncode,
3349 const char *name,
3350 enum built_in_class fnclass,
3351 tree fntype, tree libtype,
3352 bool both_p, bool fallback_p, bool nonansi_p,
3353 tree fnattrs, bool implicit_p);
3354
3355
3356 /* Apply the TYPE_QUALS to the new DECL. */
3357
3358 void
3359 c_apply_type_quals_to_decl (int type_quals, tree decl)
3360 {
3361 tree type = TREE_TYPE (decl);
3362
3363 if (type == error_mark_node)
3364 return;
3365
3366 if (((type_quals & TYPE_QUAL_CONST)
3367 || (type && TREE_CODE (type) == REFERENCE_TYPE))
3368 /* An object declared 'const' is only readonly after it is
3369 initialized. We don't have any way of expressing this currently,
3370 so we need to be conservative and unset TREE_READONLY for types
3371 with constructors. Otherwise aliasing code will ignore stores in
3372 an inline constructor. */
3373 && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
3374 TREE_READONLY (decl) = 1;
3375 if (type_quals & TYPE_QUAL_VOLATILE)
3376 {
3377 TREE_SIDE_EFFECTS (decl) = 1;
3378 TREE_THIS_VOLATILE (decl) = 1;
3379 }
3380 if (type_quals & TYPE_QUAL_RESTRICT)
3381 {
3382 while (type && TREE_CODE (type) == ARRAY_TYPE)
3383 /* Allow 'restrict' on arrays of pointers.
3384 FIXME currently we just ignore it. */
3385 type = TREE_TYPE (type);
3386 if (!type
3387 || !POINTER_TYPE_P (type)
3388 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
3389 error ("invalid use of %<restrict%>");
3390 else if (flag_strict_aliasing && type == TREE_TYPE (decl))
3391 /* Indicate we need to make a unique alias set for this pointer.
3392 We can't do it here because it might be pointing to an
3393 incomplete type. */
3394 DECL_POINTER_ALIAS_SET (decl) = -2;
3395 }
3396 }
3397
3398 /* Hash function for the problem of multiple type definitions in
3399 different files. This must hash all types that will compare
3400 equal via comptypes to the same value. In practice it hashes
3401 on some of the simple stuff and leaves the details to comptypes. */
3402
3403 static hashval_t
3404 c_type_hash (const void *p)
3405 {
3406 int i = 0;
3407 int shift, size;
3408 const_tree const t = (const_tree) p;
3409 tree t2;
3410 switch (TREE_CODE (t))
3411 {
3412 /* For pointers, hash on pointee type plus some swizzling. */
3413 case POINTER_TYPE:
3414 return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
3415 /* Hash on number of elements and total size. */
3416 case ENUMERAL_TYPE:
3417 shift = 3;
3418 t2 = TYPE_VALUES (t);
3419 break;
3420 case RECORD_TYPE:
3421 shift = 0;
3422 t2 = TYPE_FIELDS (t);
3423 break;
3424 case QUAL_UNION_TYPE:
3425 shift = 1;
3426 t2 = TYPE_FIELDS (t);
3427 break;
3428 case UNION_TYPE:
3429 shift = 2;
3430 t2 = TYPE_FIELDS (t);
3431 break;
3432 default:
3433 gcc_unreachable ();
3434 }
3435 for (; t2; t2 = TREE_CHAIN (t2))
3436 i++;
3437 /* We might have a VLA here. */
3438 if (TREE_CODE (TYPE_SIZE (t)) != INTEGER_CST)
3439 size = 0;
3440 else
3441 size = TREE_INT_CST_LOW (TYPE_SIZE (t));
3442 return ((size << 24) | (i << shift));
3443 }
3444
3445 static GTY((param_is (union tree_node))) htab_t type_hash_table;
3446
3447 /* Return the typed-based alias set for T, which may be an expression
3448 or a type. Return -1 if we don't do anything special. */
3449
3450 alias_set_type
3451 c_common_get_alias_set (tree t)
3452 {
3453 tree u;
3454 PTR *slot;
3455
3456 /* Permit type-punning when accessing a union, provided the access
3457 is directly through the union. For example, this code does not
3458 permit taking the address of a union member and then storing
3459 through it. Even the type-punning allowed here is a GCC
3460 extension, albeit a common and useful one; the C standard says
3461 that such accesses have implementation-defined behavior. */
3462 for (u = t;
3463 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
3464 u = TREE_OPERAND (u, 0))
3465 if (TREE_CODE (u) == COMPONENT_REF
3466 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
3467 return 0;
3468
3469 /* That's all the expressions we handle specially. */
3470 if (!TYPE_P (t))
3471 return -1;
3472
3473 /* The C standard guarantees that any object may be accessed via an
3474 lvalue that has character type. */
3475 if (t == char_type_node
3476 || t == signed_char_type_node
3477 || t == unsigned_char_type_node)
3478 return 0;
3479
3480 /* The C standard specifically allows aliasing between signed and
3481 unsigned variants of the same type. We treat the signed
3482 variant as canonical. */
3483 if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
3484 {
3485 tree t1 = c_common_signed_type (t);
3486
3487 /* t1 == t can happen for boolean nodes which are always unsigned. */
3488 if (t1 != t)
3489 return get_alias_set (t1);
3490 }
3491 else if (POINTER_TYPE_P (t))
3492 {
3493 tree t1;
3494
3495 /* Unfortunately, there is no canonical form of a pointer type.
3496 In particular, if we have `typedef int I', then `int *', and
3497 `I *' are different types. So, we have to pick a canonical
3498 representative. We do this below.
3499
3500 Technically, this approach is actually more conservative that
3501 it needs to be. In particular, `const int *' and `int *'
3502 should be in different alias sets, according to the C and C++
3503 standard, since their types are not the same, and so,
3504 technically, an `int **' and `const int **' cannot point at
3505 the same thing.
3506
3507 But, the standard is wrong. In particular, this code is
3508 legal C++:
3509
3510 int *ip;
3511 int **ipp = &ip;
3512 const int* const* cipp = ipp;
3513
3514 And, it doesn't make sense for that to be legal unless you
3515 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
3516 the pointed-to types. This issue has been reported to the
3517 C++ committee. */
3518 t1 = build_type_no_quals (t);
3519 if (t1 != t)
3520 return get_alias_set (t1);
3521 }
3522
3523 /* Handle the case of multiple type nodes referring to "the same" type,
3524 which occurs with IMA. These share an alias set. FIXME: Currently only
3525 C90 is handled. (In C99 type compatibility is not transitive, which
3526 complicates things mightily. The alias set splay trees can theoretically
3527 represent this, but insertion is tricky when you consider all the
3528 different orders things might arrive in.) */
3529
3530 if (c_language != clk_c || flag_isoc99)
3531 return -1;
3532
3533 /* Save time if there's only one input file. */
3534 if (num_in_fnames == 1)
3535 return -1;
3536
3537 /* Pointers need special handling if they point to any type that
3538 needs special handling (below). */
3539 if (TREE_CODE (t) == POINTER_TYPE)
3540 {
3541 tree t2;
3542 /* Find bottom type under any nested POINTERs. */
3543 for (t2 = TREE_TYPE (t);
3544 TREE_CODE (t2) == POINTER_TYPE;
3545 t2 = TREE_TYPE (t2))
3546 ;
3547 if (TREE_CODE (t2) != RECORD_TYPE
3548 && TREE_CODE (t2) != ENUMERAL_TYPE
3549 && TREE_CODE (t2) != QUAL_UNION_TYPE
3550 && TREE_CODE (t2) != UNION_TYPE)
3551 return -1;
3552 if (TYPE_SIZE (t2) == 0)
3553 return -1;
3554 }
3555 /* These are the only cases that need special handling. */
3556 if (TREE_CODE (t) != RECORD_TYPE
3557 && TREE_CODE (t) != ENUMERAL_TYPE
3558 && TREE_CODE (t) != QUAL_UNION_TYPE
3559 && TREE_CODE (t) != UNION_TYPE
3560 && TREE_CODE (t) != POINTER_TYPE)
3561 return -1;
3562 /* Undefined? */
3563 if (TYPE_SIZE (t) == 0)
3564 return -1;
3565
3566 /* Look up t in hash table. Only one of the compatible types within each
3567 alias set is recorded in the table. */
3568 if (!type_hash_table)
3569 type_hash_table = htab_create_ggc (1021, c_type_hash,
3570 (htab_eq) lang_hooks.types_compatible_p,
3571 NULL);
3572 slot = htab_find_slot (type_hash_table, t, INSERT);
3573 if (*slot != NULL)
3574 {
3575 TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
3576 return TYPE_ALIAS_SET ((tree)*slot);
3577 }
3578 else
3579 /* Our caller will assign and record (in t) a new alias set; all we need
3580 to do is remember t in the hash table. */
3581 *slot = t;
3582
3583 return -1;
3584 }
3585 \f
3586 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
3587 second parameter indicates which OPERATOR is being applied. The COMPLAIN
3588 flag controls whether we should diagnose possibly ill-formed
3589 constructs or not. */
3590
3591 tree
3592 c_sizeof_or_alignof_type (tree type, bool is_sizeof, int complain)
3593 {
3594 const char *op_name;
3595 tree value = NULL;
3596 enum tree_code type_code = TREE_CODE (type);
3597
3598 op_name = is_sizeof ? "sizeof" : "__alignof__";
3599
3600 if (type_code == FUNCTION_TYPE)
3601 {
3602 if (is_sizeof)
3603 {
3604 if (complain && (pedantic || warn_pointer_arith))
3605 pedwarn (pedantic ? OPT_pedantic : OPT_Wpointer_arith,
3606 "invalid application of %<sizeof%> to a function type");
3607 else if (!complain)
3608 return error_mark_node;
3609 value = size_one_node;
3610 }
3611 else
3612 value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
3613 }
3614 else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
3615 {
3616 if (type_code == VOID_TYPE
3617 && complain && (pedantic || warn_pointer_arith))
3618 pedwarn (pedantic ? OPT_pedantic : OPT_Wpointer_arith,
3619 "invalid application of %qs to a void type", op_name);
3620 else if (!complain)
3621 return error_mark_node;
3622 value = size_one_node;
3623 }
3624 else if (!COMPLETE_TYPE_P (type))
3625 {
3626 if (complain)
3627 error ("invalid application of %qs to incomplete type %qT ",
3628 op_name, type);
3629 value = size_zero_node;
3630 }
3631 else
3632 {
3633 if (is_sizeof)
3634 /* Convert in case a char is more than one unit. */
3635 value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
3636 size_int (TYPE_PRECISION (char_type_node)
3637 / BITS_PER_UNIT));
3638 else
3639 value = size_int (TYPE_ALIGN_UNIT (type));
3640 }
3641
3642 /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
3643 TYPE_IS_SIZETYPE means that certain things (like overflow) will
3644 never happen. However, this node should really have type
3645 `size_t', which is just a typedef for an ordinary integer type. */
3646 value = fold_convert (size_type_node, value);
3647 gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
3648
3649 return value;
3650 }
3651
3652 /* Implement the __alignof keyword: Return the minimum required
3653 alignment of EXPR, measured in bytes. For VAR_DECLs,
3654 FUNCTION_DECLs and FIELD_DECLs return DECL_ALIGN (which can be set
3655 from an "aligned" __attribute__ specification). */
3656
3657 tree
3658 c_alignof_expr (tree expr)
3659 {
3660 tree t;
3661
3662 if (VAR_OR_FUNCTION_DECL_P (expr))
3663 t = size_int (DECL_ALIGN_UNIT (expr));
3664
3665 else if (TREE_CODE (expr) == COMPONENT_REF
3666 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
3667 {
3668 error ("%<__alignof%> applied to a bit-field");
3669 t = size_one_node;
3670 }
3671 else if (TREE_CODE (expr) == COMPONENT_REF
3672 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
3673 t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
3674
3675 else if (TREE_CODE (expr) == INDIRECT_REF)
3676 {
3677 tree t = TREE_OPERAND (expr, 0);
3678 tree best = t;
3679 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3680
3681 while (CONVERT_EXPR_P (t)
3682 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
3683 {
3684 int thisalign;
3685
3686 t = TREE_OPERAND (t, 0);
3687 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3688 if (thisalign > bestalign)
3689 best = t, bestalign = thisalign;
3690 }
3691 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
3692 }
3693 else
3694 return c_alignof (TREE_TYPE (expr));
3695
3696 return fold_convert (size_type_node, t);
3697 }
3698 \f
3699 /* Handle C and C++ default attributes. */
3700
3701 enum built_in_attribute
3702 {
3703 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
3704 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
3705 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
3706 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
3707 #include "builtin-attrs.def"
3708 #undef DEF_ATTR_NULL_TREE
3709 #undef DEF_ATTR_INT
3710 #undef DEF_ATTR_IDENT
3711 #undef DEF_ATTR_TREE_LIST
3712 ATTR_LAST
3713 };
3714
3715 static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
3716
3717 static void c_init_attributes (void);
3718
3719 enum c_builtin_type
3720 {
3721 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
3722 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
3723 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
3724 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
3725 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3726 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3727 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
3728 #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME,
3729 #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME,
3730 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
3731 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
3732 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
3733 #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3734 #define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3735 #define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
3736 NAME,
3737 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
3738 #include "builtin-types.def"
3739 #undef DEF_PRIMITIVE_TYPE
3740 #undef DEF_FUNCTION_TYPE_0
3741 #undef DEF_FUNCTION_TYPE_1
3742 #undef DEF_FUNCTION_TYPE_2
3743 #undef DEF_FUNCTION_TYPE_3
3744 #undef DEF_FUNCTION_TYPE_4
3745 #undef DEF_FUNCTION_TYPE_5
3746 #undef DEF_FUNCTION_TYPE_6
3747 #undef DEF_FUNCTION_TYPE_7
3748 #undef DEF_FUNCTION_TYPE_VAR_0
3749 #undef DEF_FUNCTION_TYPE_VAR_1
3750 #undef DEF_FUNCTION_TYPE_VAR_2
3751 #undef DEF_FUNCTION_TYPE_VAR_3
3752 #undef DEF_FUNCTION_TYPE_VAR_4
3753 #undef DEF_FUNCTION_TYPE_VAR_5
3754 #undef DEF_POINTER_TYPE
3755 BT_LAST
3756 };
3757
3758 typedef enum c_builtin_type builtin_type;
3759
3760 /* A temporary array for c_common_nodes_and_builtins. Used in
3761 communication with def_fn_type. */
3762 static tree builtin_types[(int) BT_LAST + 1];
3763
3764 /* A helper function for c_common_nodes_and_builtins. Build function type
3765 for DEF with return type RET and N arguments. If VAR is true, then the
3766 function should be variadic after those N arguments.
3767
3768 Takes special care not to ICE if any of the types involved are
3769 error_mark_node, which indicates that said type is not in fact available
3770 (see builtin_type_for_size). In which case the function type as a whole
3771 should be error_mark_node. */
3772
3773 static void
3774 def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
3775 {
3776 tree args = NULL, t;
3777 va_list list;
3778 int i;
3779
3780 va_start (list, n);
3781 for (i = 0; i < n; ++i)
3782 {
3783 builtin_type a = (builtin_type) va_arg (list, int);
3784 t = builtin_types[a];
3785 if (t == error_mark_node)
3786 goto egress;
3787 args = tree_cons (NULL_TREE, t, args);
3788 }
3789 va_end (list);
3790
3791 args = nreverse (args);
3792 if (!var)
3793 args = chainon (args, void_list_node);
3794
3795 t = builtin_types[ret];
3796 if (t == error_mark_node)
3797 goto egress;
3798 t = build_function_type (t, args);
3799
3800 egress:
3801 builtin_types[def] = t;
3802 }
3803
3804 /* Build builtin functions common to both C and C++ language
3805 frontends. */
3806
3807 static void
3808 c_define_builtins (tree va_list_ref_type_node, tree va_list_arg_type_node)
3809 {
3810 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
3811 builtin_types[ENUM] = VALUE;
3812 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
3813 def_fn_type (ENUM, RETURN, 0, 0);
3814 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
3815 def_fn_type (ENUM, RETURN, 0, 1, ARG1);
3816 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
3817 def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
3818 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3819 def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
3820 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3821 def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4);
3822 #define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3823 def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3824 #define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3825 ARG6) \
3826 def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
3827 #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3828 ARG6, ARG7) \
3829 def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
3830 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
3831 def_fn_type (ENUM, RETURN, 1, 0);
3832 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
3833 def_fn_type (ENUM, RETURN, 1, 1, ARG1);
3834 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
3835 def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
3836 #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3837 def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
3838 #define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3839 def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4);
3840 #define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3841 def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3842 #define DEF_POINTER_TYPE(ENUM, TYPE) \
3843 builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]);
3844
3845 #include "builtin-types.def"
3846
3847 #undef DEF_PRIMITIVE_TYPE
3848 #undef DEF_FUNCTION_TYPE_1
3849 #undef DEF_FUNCTION_TYPE_2
3850 #undef DEF_FUNCTION_TYPE_3
3851 #undef DEF_FUNCTION_TYPE_4
3852 #undef DEF_FUNCTION_TYPE_5
3853 #undef DEF_FUNCTION_TYPE_6
3854 #undef DEF_FUNCTION_TYPE_VAR_0
3855 #undef DEF_FUNCTION_TYPE_VAR_1
3856 #undef DEF_FUNCTION_TYPE_VAR_2
3857 #undef DEF_FUNCTION_TYPE_VAR_3
3858 #undef DEF_FUNCTION_TYPE_VAR_4
3859 #undef DEF_FUNCTION_TYPE_VAR_5
3860 #undef DEF_POINTER_TYPE
3861 builtin_types[(int) BT_LAST] = NULL_TREE;
3862
3863 c_init_attributes ();
3864
3865 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
3866 NONANSI_P, ATTRS, IMPLICIT, COND) \
3867 if (NAME && COND) \
3868 def_builtin_1 (ENUM, NAME, CLASS, \
3869 builtin_types[(int) TYPE], \
3870 builtin_types[(int) LIBTYPE], \
3871 BOTH_P, FALLBACK_P, NONANSI_P, \
3872 built_in_attributes[(int) ATTRS], IMPLICIT);
3873 #include "builtins.def"
3874 #undef DEF_BUILTIN
3875
3876 targetm.init_builtins ();
3877
3878 build_common_builtin_nodes ();
3879
3880 if (flag_mudflap)
3881 mudflap_init ();
3882 }
3883
3884 /* Build tree nodes and builtin functions common to both C and C++ language
3885 frontends. */
3886
3887 void
3888 c_common_nodes_and_builtins (void)
3889 {
3890 int char16_type_size;
3891 int char32_type_size;
3892 int wchar_type_size;
3893 tree array_domain_type;
3894 tree va_list_ref_type_node;
3895 tree va_list_arg_type_node;
3896
3897 /* Define `int' and `char' first so that dbx will output them first. */
3898 record_builtin_type (RID_INT, NULL, integer_type_node);
3899 record_builtin_type (RID_CHAR, "char", char_type_node);
3900
3901 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
3902 "unsigned long", "long long unsigned" and "unsigned short" were in C++
3903 but not C. Are the conditionals here needed? */
3904 if (c_dialect_cxx ())
3905 record_builtin_type (RID_SIGNED, NULL, integer_type_node);
3906 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
3907 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
3908 record_builtin_type (RID_MAX, "long unsigned int",
3909 long_unsigned_type_node);
3910 if (c_dialect_cxx ())
3911 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
3912 record_builtin_type (RID_MAX, "long long int",
3913 long_long_integer_type_node);
3914 record_builtin_type (RID_MAX, "long long unsigned int",
3915 long_long_unsigned_type_node);
3916 if (c_dialect_cxx ())
3917 record_builtin_type (RID_MAX, "long long unsigned",
3918 long_long_unsigned_type_node);
3919 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
3920 record_builtin_type (RID_MAX, "short unsigned int",
3921 short_unsigned_type_node);
3922 if (c_dialect_cxx ())
3923 record_builtin_type (RID_MAX, "unsigned short",
3924 short_unsigned_type_node);
3925
3926 /* Define both `signed char' and `unsigned char'. */
3927 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
3928 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
3929
3930 /* These are types that c_common_type_for_size and
3931 c_common_type_for_mode use. */
3932 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3933 intQI_type_node));
3934 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3935 intHI_type_node));
3936 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3937 intSI_type_node));
3938 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3939 intDI_type_node));
3940 #if HOST_BITS_PER_WIDE_INT >= 64
3941 if (targetm.scalar_mode_supported_p (TImode))
3942 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3943 get_identifier ("__int128_t"),
3944 intTI_type_node));
3945 #endif
3946 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3947 unsigned_intQI_type_node));
3948 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3949 unsigned_intHI_type_node));
3950 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3951 unsigned_intSI_type_node));
3952 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3953 unsigned_intDI_type_node));
3954 #if HOST_BITS_PER_WIDE_INT >= 64
3955 if (targetm.scalar_mode_supported_p (TImode))
3956 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3957 get_identifier ("__uint128_t"),
3958 unsigned_intTI_type_node));
3959 #endif
3960
3961 /* Create the widest literal types. */
3962 widest_integer_literal_type_node
3963 = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
3964 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3965 widest_integer_literal_type_node));
3966
3967 widest_unsigned_literal_type_node
3968 = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
3969 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3970 widest_unsigned_literal_type_node));
3971
3972 /* `unsigned long' is the standard type for sizeof.
3973 Note that stddef.h uses `unsigned long',
3974 and this must agree, even if long and int are the same size. */
3975 size_type_node =
3976 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
3977 signed_size_type_node = c_common_signed_type (size_type_node);
3978 set_sizetype (size_type_node);
3979
3980 pid_type_node =
3981 TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
3982
3983 build_common_tree_nodes_2 (flag_short_double);
3984
3985 record_builtin_type (RID_FLOAT, NULL, float_type_node);
3986 record_builtin_type (RID_DOUBLE, NULL, double_type_node);
3987 record_builtin_type (RID_MAX, "long double", long_double_type_node);
3988
3989 /* Only supported decimal floating point extension if the target
3990 actually supports underlying modes. */
3991 if (targetm.scalar_mode_supported_p (SDmode)
3992 && targetm.scalar_mode_supported_p (DDmode)
3993 && targetm.scalar_mode_supported_p (TDmode))
3994 {
3995 record_builtin_type (RID_DFLOAT32, NULL, dfloat32_type_node);
3996 record_builtin_type (RID_DFLOAT64, NULL, dfloat64_type_node);
3997 record_builtin_type (RID_DFLOAT128, NULL, dfloat128_type_node);
3998 }
3999
4000 if (targetm.fixed_point_supported_p ())
4001 {
4002 record_builtin_type (RID_MAX, "short _Fract", short_fract_type_node);
4003 record_builtin_type (RID_FRACT, NULL, fract_type_node);
4004 record_builtin_type (RID_MAX, "long _Fract", long_fract_type_node);
4005 record_builtin_type (RID_MAX, "long long _Fract",
4006 long_long_fract_type_node);
4007 record_builtin_type (RID_MAX, "unsigned short _Fract",
4008 unsigned_short_fract_type_node);
4009 record_builtin_type (RID_MAX, "unsigned _Fract",
4010 unsigned_fract_type_node);
4011 record_builtin_type (RID_MAX, "unsigned long _Fract",
4012 unsigned_long_fract_type_node);
4013 record_builtin_type (RID_MAX, "unsigned long long _Fract",
4014 unsigned_long_long_fract_type_node);
4015 record_builtin_type (RID_MAX, "_Sat short _Fract",
4016 sat_short_fract_type_node);
4017 record_builtin_type (RID_MAX, "_Sat _Fract", sat_fract_type_node);
4018 record_builtin_type (RID_MAX, "_Sat long _Fract",
4019 sat_long_fract_type_node);
4020 record_builtin_type (RID_MAX, "_Sat long long _Fract",
4021 sat_long_long_fract_type_node);
4022 record_builtin_type (RID_MAX, "_Sat unsigned short _Fract",
4023 sat_unsigned_short_fract_type_node);
4024 record_builtin_type (RID_MAX, "_Sat unsigned _Fract",
4025 sat_unsigned_fract_type_node);
4026 record_builtin_type (RID_MAX, "_Sat unsigned long _Fract",
4027 sat_unsigned_long_fract_type_node);
4028 record_builtin_type (RID_MAX, "_Sat unsigned long long _Fract",
4029 sat_unsigned_long_long_fract_type_node);
4030 record_builtin_type (RID_MAX, "short _Accum", short_accum_type_node);
4031 record_builtin_type (RID_ACCUM, NULL, accum_type_node);
4032 record_builtin_type (RID_MAX, "long _Accum", long_accum_type_node);
4033 record_builtin_type (RID_MAX, "long long _Accum",
4034 long_long_accum_type_node);
4035 record_builtin_type (RID_MAX, "unsigned short _Accum",
4036 unsigned_short_accum_type_node);
4037 record_builtin_type (RID_MAX, "unsigned _Accum",
4038 unsigned_accum_type_node);
4039 record_builtin_type (RID_MAX, "unsigned long _Accum",
4040 unsigned_long_accum_type_node);
4041 record_builtin_type (RID_MAX, "unsigned long long _Accum",
4042 unsigned_long_long_accum_type_node);
4043 record_builtin_type (RID_MAX, "_Sat short _Accum",
4044 sat_short_accum_type_node);
4045 record_builtin_type (RID_MAX, "_Sat _Accum", sat_accum_type_node);
4046 record_builtin_type (RID_MAX, "_Sat long _Accum",
4047 sat_long_accum_type_node);
4048 record_builtin_type (RID_MAX, "_Sat long long _Accum",
4049 sat_long_long_accum_type_node);
4050 record_builtin_type (RID_MAX, "_Sat unsigned short _Accum",
4051 sat_unsigned_short_accum_type_node);
4052 record_builtin_type (RID_MAX, "_Sat unsigned _Accum",
4053 sat_unsigned_accum_type_node);
4054 record_builtin_type (RID_MAX, "_Sat unsigned long _Accum",
4055 sat_unsigned_long_accum_type_node);
4056 record_builtin_type (RID_MAX, "_Sat unsigned long long _Accum",
4057 sat_unsigned_long_long_accum_type_node);
4058
4059 }
4060
4061 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
4062 get_identifier ("complex int"),
4063 complex_integer_type_node));
4064 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
4065 get_identifier ("complex float"),
4066 complex_float_type_node));
4067 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
4068 get_identifier ("complex double"),
4069 complex_double_type_node));
4070 lang_hooks.decls.pushdecl
4071 (build_decl (TYPE_DECL, get_identifier ("complex long double"),
4072 complex_long_double_type_node));
4073
4074 if (c_dialect_cxx ())
4075 /* For C++, make fileptr_type_node a distinct void * type until
4076 FILE type is defined. */
4077 fileptr_type_node = build_variant_type_copy (ptr_type_node);
4078
4079 record_builtin_type (RID_VOID, NULL, void_type_node);
4080
4081 /* Set the TYPE_NAME for any variants that were built before
4082 record_builtin_type gave names to the built-in types. */
4083 {
4084 tree void_name = TYPE_NAME (void_type_node);
4085 TYPE_NAME (void_type_node) = NULL_TREE;
4086 TYPE_NAME (build_qualified_type (void_type_node, TYPE_QUAL_CONST))
4087 = void_name;
4088 TYPE_NAME (void_type_node) = void_name;
4089 }
4090
4091 /* This node must not be shared. */
4092 void_zero_node = make_node (INTEGER_CST);
4093 TREE_TYPE (void_zero_node) = void_type_node;
4094
4095 void_list_node = build_void_list_node ();
4096
4097 /* Make a type to be the domain of a few array types
4098 whose domains don't really matter.
4099 200 is small enough that it always fits in size_t
4100 and large enough that it can hold most function names for the
4101 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
4102 array_domain_type = build_index_type (size_int (200));
4103
4104 /* Make a type for arrays of characters.
4105 With luck nothing will ever really depend on the length of this
4106 array type. */
4107 char_array_type_node
4108 = build_array_type (char_type_node, array_domain_type);
4109
4110 /* Likewise for arrays of ints. */
4111 int_array_type_node
4112 = build_array_type (integer_type_node, array_domain_type);
4113
4114 string_type_node = build_pointer_type (char_type_node);
4115 const_string_type_node
4116 = build_pointer_type (build_qualified_type
4117 (char_type_node, TYPE_QUAL_CONST));
4118
4119 /* This is special for C++ so functions can be overloaded. */
4120 wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
4121 wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
4122 wchar_type_size = TYPE_PRECISION (wchar_type_node);
4123 if (c_dialect_cxx ())
4124 {
4125 if (TYPE_UNSIGNED (wchar_type_node))
4126 wchar_type_node = make_unsigned_type (wchar_type_size);
4127 else
4128 wchar_type_node = make_signed_type (wchar_type_size);
4129 record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
4130 }
4131 else
4132 {
4133 signed_wchar_type_node = c_common_signed_type (wchar_type_node);
4134 unsigned_wchar_type_node = c_common_unsigned_type (wchar_type_node);
4135 }
4136
4137 /* This is for wide string constants. */
4138 wchar_array_type_node
4139 = build_array_type (wchar_type_node, array_domain_type);
4140
4141 /* Define 'char16_t'. */
4142 char16_type_node = get_identifier (CHAR16_TYPE);
4143 char16_type_node = TREE_TYPE (identifier_global_value (char16_type_node));
4144 char16_type_size = TYPE_PRECISION (char16_type_node);
4145 if (c_dialect_cxx ())
4146 {
4147 char16_type_node = make_unsigned_type (char16_type_size);
4148
4149 if (cxx_dialect == cxx0x)
4150 record_builtin_type (RID_CHAR16, "char16_t", char16_type_node);
4151 }
4152
4153 /* This is for UTF-16 string constants. */
4154 char16_array_type_node
4155 = build_array_type (char16_type_node, array_domain_type);
4156
4157 /* Define 'char32_t'. */
4158 char32_type_node = get_identifier (CHAR32_TYPE);
4159 char32_type_node = TREE_TYPE (identifier_global_value (char32_type_node));
4160 char32_type_size = TYPE_PRECISION (char32_type_node);
4161 if (c_dialect_cxx ())
4162 {
4163 char32_type_node = make_unsigned_type (char32_type_size);
4164
4165 if (cxx_dialect == cxx0x)
4166 record_builtin_type (RID_CHAR32, "char32_t", char32_type_node);
4167 }
4168
4169 /* This is for UTF-32 string constants. */
4170 char32_array_type_node
4171 = build_array_type (char32_type_node, array_domain_type);
4172
4173 wint_type_node =
4174 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
4175
4176 intmax_type_node =
4177 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
4178 uintmax_type_node =
4179 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
4180
4181 default_function_type = build_function_type (integer_type_node, NULL_TREE);
4182 ptrdiff_type_node
4183 = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
4184 unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
4185
4186 lang_hooks.decls.pushdecl
4187 (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
4188 va_list_type_node));
4189 #ifdef TARGET_ENUM_VA_LIST
4190 {
4191 int l;
4192 const char *pname;
4193 tree ptype;
4194 for (l = 0; TARGET_ENUM_VA_LIST (l, &pname, &ptype); ++l)
4195 {
4196 lang_hooks.decls.pushdecl
4197 (build_decl (TYPE_DECL, get_identifier (pname),
4198 ptype));
4199
4200 }
4201 }
4202 #endif
4203
4204 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
4205 {
4206 va_list_arg_type_node = va_list_ref_type_node =
4207 build_pointer_type (TREE_TYPE (va_list_type_node));
4208 }
4209 else
4210 {
4211 va_list_arg_type_node = va_list_type_node;
4212 va_list_ref_type_node = build_reference_type (va_list_type_node);
4213 }
4214
4215 if (!flag_preprocess_only)
4216 c_define_builtins (va_list_ref_type_node, va_list_arg_type_node);
4217
4218 main_identifier_node = get_identifier ("main");
4219
4220 /* Create the built-in __null node. It is important that this is
4221 not shared. */
4222 null_node = make_node (INTEGER_CST);
4223 TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
4224
4225 /* Since builtin_types isn't gc'ed, don't export these nodes. */
4226 memset (builtin_types, 0, sizeof (builtin_types));
4227 }
4228
4229 /* Look up the function in built_in_decls that corresponds to DECL
4230 and set ASMSPEC as its user assembler name. DECL must be a
4231 function decl that declares a builtin. */
4232
4233 void
4234 set_builtin_user_assembler_name (tree decl, const char *asmspec)
4235 {
4236 tree builtin;
4237 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
4238 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
4239 && asmspec != 0);
4240
4241 builtin = built_in_decls [DECL_FUNCTION_CODE (decl)];
4242 set_user_assembler_name (builtin, asmspec);
4243 if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMCPY)
4244 init_block_move_fn (asmspec);
4245 else if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMSET)
4246 init_block_clear_fn (asmspec);
4247 }
4248
4249 /* The number of named compound-literals generated thus far. */
4250 static GTY(()) int compound_literal_number;
4251
4252 /* Set DECL_NAME for DECL, a VAR_DECL for a compound-literal. */
4253
4254 void
4255 set_compound_literal_name (tree decl)
4256 {
4257 char *name;
4258 ASM_FORMAT_PRIVATE_NAME (name, "__compound_literal",
4259 compound_literal_number);
4260 compound_literal_number++;
4261 DECL_NAME (decl) = get_identifier (name);
4262 }
4263
4264 tree
4265 build_va_arg (tree expr, tree type)
4266 {
4267 return build1 (VA_ARG_EXPR, type, expr);
4268 }
4269
4270
4271 /* Linked list of disabled built-in functions. */
4272
4273 typedef struct disabled_builtin
4274 {
4275 const char *name;
4276 struct disabled_builtin *next;
4277 } disabled_builtin;
4278 static disabled_builtin *disabled_builtins = NULL;
4279
4280 static bool builtin_function_disabled_p (const char *);
4281
4282 /* Disable a built-in function specified by -fno-builtin-NAME. If NAME
4283 begins with "__builtin_", give an error. */
4284
4285 void
4286 disable_builtin_function (const char *name)
4287 {
4288 if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
4289 error ("cannot disable built-in function %qs", name);
4290 else
4291 {
4292 disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
4293 new_disabled_builtin->name = name;
4294 new_disabled_builtin->next = disabled_builtins;
4295 disabled_builtins = new_disabled_builtin;
4296 }
4297 }
4298
4299
4300 /* Return true if the built-in function NAME has been disabled, false
4301 otherwise. */
4302
4303 static bool
4304 builtin_function_disabled_p (const char *name)
4305 {
4306 disabled_builtin *p;
4307 for (p = disabled_builtins; p != NULL; p = p->next)
4308 {
4309 if (strcmp (name, p->name) == 0)
4310 return true;
4311 }
4312 return false;
4313 }
4314
4315
4316 /* Worker for DEF_BUILTIN.
4317 Possibly define a builtin function with one or two names.
4318 Does not declare a non-__builtin_ function if flag_no_builtin, or if
4319 nonansi_p and flag_no_nonansi_builtin. */
4320
4321 static void
4322 def_builtin_1 (enum built_in_function fncode,
4323 const char *name,
4324 enum built_in_class fnclass,
4325 tree fntype, tree libtype,
4326 bool both_p, bool fallback_p, bool nonansi_p,
4327 tree fnattrs, bool implicit_p)
4328 {
4329 tree decl;
4330 const char *libname;
4331
4332 if (fntype == error_mark_node)
4333 return;
4334
4335 gcc_assert ((!both_p && !fallback_p)
4336 || !strncmp (name, "__builtin_",
4337 strlen ("__builtin_")));
4338
4339 libname = name + strlen ("__builtin_");
4340 decl = add_builtin_function (name, fntype, fncode, fnclass,
4341 (fallback_p ? libname : NULL),
4342 fnattrs);
4343 if (both_p
4344 && !flag_no_builtin && !builtin_function_disabled_p (libname)
4345 && !(nonansi_p && flag_no_nonansi_builtin))
4346 add_builtin_function (libname, libtype, fncode, fnclass,
4347 NULL, fnattrs);
4348
4349 built_in_decls[(int) fncode] = decl;
4350 if (implicit_p)
4351 implicit_built_in_decls[(int) fncode] = decl;
4352 }
4353 \f
4354 /* Nonzero if the type T promotes to int. This is (nearly) the
4355 integral promotions defined in ISO C99 6.3.1.1/2. */
4356
4357 bool
4358 c_promoting_integer_type_p (const_tree t)
4359 {
4360 switch (TREE_CODE (t))
4361 {
4362 case INTEGER_TYPE:
4363 return (TYPE_MAIN_VARIANT (t) == char_type_node
4364 || TYPE_MAIN_VARIANT (t) == signed_char_type_node
4365 || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
4366 || TYPE_MAIN_VARIANT (t) == short_integer_type_node
4367 || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
4368 || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
4369
4370 case ENUMERAL_TYPE:
4371 /* ??? Technically all enumerations not larger than an int
4372 promote to an int. But this is used along code paths
4373 that only want to notice a size change. */
4374 return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
4375
4376 case BOOLEAN_TYPE:
4377 return 1;
4378
4379 default:
4380 return 0;
4381 }
4382 }
4383
4384 /* Return 1 if PARMS specifies a fixed number of parameters
4385 and none of their types is affected by default promotions. */
4386
4387 int
4388 self_promoting_args_p (const_tree parms)
4389 {
4390 const_tree t;
4391 for (t = parms; t; t = TREE_CHAIN (t))
4392 {
4393 tree type = TREE_VALUE (t);
4394
4395 if (type == error_mark_node)
4396 continue;
4397
4398 if (TREE_CHAIN (t) == 0 && type != void_type_node)
4399 return 0;
4400
4401 if (type == 0)
4402 return 0;
4403
4404 if (TYPE_MAIN_VARIANT (type) == float_type_node)
4405 return 0;
4406
4407 if (c_promoting_integer_type_p (type))
4408 return 0;
4409 }
4410 return 1;
4411 }
4412
4413 /* Recursively remove any '*' or '&' operator from TYPE. */
4414 tree
4415 strip_pointer_operator (tree t)
4416 {
4417 while (POINTER_TYPE_P (t))
4418 t = TREE_TYPE (t);
4419 return t;
4420 }
4421
4422 /* Recursively remove pointer or array type from TYPE. */
4423 tree
4424 strip_pointer_or_array_types (tree t)
4425 {
4426 while (TREE_CODE (t) == ARRAY_TYPE || POINTER_TYPE_P (t))
4427 t = TREE_TYPE (t);
4428 return t;
4429 }
4430
4431 /* Used to compare case labels. K1 and K2 are actually tree nodes
4432 representing case labels, or NULL_TREE for a `default' label.
4433 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
4434 K2, and 0 if K1 and K2 are equal. */
4435
4436 int
4437 case_compare (splay_tree_key k1, splay_tree_key k2)
4438 {
4439 /* Consider a NULL key (such as arises with a `default' label) to be
4440 smaller than anything else. */
4441 if (!k1)
4442 return k2 ? -1 : 0;
4443 else if (!k2)
4444 return k1 ? 1 : 0;
4445
4446 return tree_int_cst_compare ((tree) k1, (tree) k2);
4447 }
4448
4449 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE. If
4450 LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
4451 actually a `default' label. If only HIGH_VALUE is NULL_TREE, then
4452 case label was declared using the usual C/C++ syntax, rather than
4453 the GNU case range extension. CASES is a tree containing all the
4454 case ranges processed so far; COND is the condition for the
4455 switch-statement itself. Returns the CASE_LABEL_EXPR created, or
4456 ERROR_MARK_NODE if no CASE_LABEL_EXPR is created. */
4457
4458 tree
4459 c_add_case_label (splay_tree cases, tree cond, tree orig_type,
4460 tree low_value, tree high_value)
4461 {
4462 tree type;
4463 tree label;
4464 tree case_label;
4465 splay_tree_node node;
4466
4467 /* Create the LABEL_DECL itself. */
4468 label = create_artificial_label ();
4469
4470 /* If there was an error processing the switch condition, bail now
4471 before we get more confused. */
4472 if (!cond || cond == error_mark_node)
4473 goto error_out;
4474
4475 if ((low_value && TREE_TYPE (low_value)
4476 && POINTER_TYPE_P (TREE_TYPE (low_value)))
4477 || (high_value && TREE_TYPE (high_value)
4478 && POINTER_TYPE_P (TREE_TYPE (high_value))))
4479 {
4480 error ("pointers are not permitted as case values");
4481 goto error_out;
4482 }
4483
4484 /* Case ranges are a GNU extension. */
4485 if (high_value)
4486 pedwarn (OPT_pedantic,
4487 "range expressions in switch statements are non-standard");
4488
4489 type = TREE_TYPE (cond);
4490 if (low_value)
4491 {
4492 low_value = check_case_value (low_value);
4493 low_value = convert_and_check (type, low_value);
4494 if (low_value == error_mark_node)
4495 goto error_out;
4496 }
4497 if (high_value)
4498 {
4499 high_value = check_case_value (high_value);
4500 high_value = convert_and_check (type, high_value);
4501 if (high_value == error_mark_node)
4502 goto error_out;
4503 }
4504
4505 if (low_value && high_value)
4506 {
4507 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
4508 really a case range, even though it was written that way.
4509 Remove the HIGH_VALUE to simplify later processing. */
4510 if (tree_int_cst_equal (low_value, high_value))
4511 high_value = NULL_TREE;
4512 else if (!tree_int_cst_lt (low_value, high_value))
4513 warning (0, "empty range specified");
4514 }
4515
4516 /* See if the case is in range of the type of the original testing
4517 expression. If both low_value and high_value are out of range,
4518 don't insert the case label and return NULL_TREE. */
4519 if (low_value
4520 && !check_case_bounds (type, orig_type,
4521 &low_value, high_value ? &high_value : NULL))
4522 return NULL_TREE;
4523
4524 /* Look up the LOW_VALUE in the table of case labels we already
4525 have. */
4526 node = splay_tree_lookup (cases, (splay_tree_key) low_value);
4527 /* If there was not an exact match, check for overlapping ranges.
4528 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
4529 that's a `default' label and the only overlap is an exact match. */
4530 if (!node && (low_value || high_value))
4531 {
4532 splay_tree_node low_bound;
4533 splay_tree_node high_bound;
4534
4535 /* Even though there wasn't an exact match, there might be an
4536 overlap between this case range and another case range.
4537 Since we've (inductively) not allowed any overlapping case
4538 ranges, we simply need to find the greatest low case label
4539 that is smaller that LOW_VALUE, and the smallest low case
4540 label that is greater than LOW_VALUE. If there is an overlap
4541 it will occur in one of these two ranges. */
4542 low_bound = splay_tree_predecessor (cases,
4543 (splay_tree_key) low_value);
4544 high_bound = splay_tree_successor (cases,
4545 (splay_tree_key) low_value);
4546
4547 /* Check to see if the LOW_BOUND overlaps. It is smaller than
4548 the LOW_VALUE, so there is no need to check unless the
4549 LOW_BOUND is in fact itself a case range. */
4550 if (low_bound
4551 && CASE_HIGH ((tree) low_bound->value)
4552 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
4553 low_value) >= 0)
4554 node = low_bound;
4555 /* Check to see if the HIGH_BOUND overlaps. The low end of that
4556 range is bigger than the low end of the current range, so we
4557 are only interested if the current range is a real range, and
4558 not an ordinary case label. */
4559 else if (high_bound
4560 && high_value
4561 && (tree_int_cst_compare ((tree) high_bound->key,
4562 high_value)
4563 <= 0))
4564 node = high_bound;
4565 }
4566 /* If there was an overlap, issue an error. */
4567 if (node)
4568 {
4569 tree duplicate = CASE_LABEL ((tree) node->value);
4570
4571 if (high_value)
4572 {
4573 error ("duplicate (or overlapping) case value");
4574 error ("%Jthis is the first entry overlapping that value", duplicate);
4575 }
4576 else if (low_value)
4577 {
4578 error ("duplicate case value") ;
4579 error ("%Jpreviously used here", duplicate);
4580 }
4581 else
4582 {
4583 error ("multiple default labels in one switch");
4584 error ("%Jthis is the first default label", duplicate);
4585 }
4586 goto error_out;
4587 }
4588
4589 /* Add a CASE_LABEL to the statement-tree. */
4590 case_label = add_stmt (build_case_label (low_value, high_value, label));
4591 /* Register this case label in the splay tree. */
4592 splay_tree_insert (cases,
4593 (splay_tree_key) low_value,
4594 (splay_tree_value) case_label);
4595
4596 return case_label;
4597
4598 error_out:
4599 /* Add a label so that the back-end doesn't think that the beginning of
4600 the switch is unreachable. Note that we do not add a case label, as
4601 that just leads to duplicates and thence to failure later on. */
4602 if (!cases->root)
4603 {
4604 tree t = create_artificial_label ();
4605 add_stmt (build_stmt (LABEL_EXPR, t));
4606 }
4607 return error_mark_node;
4608 }
4609
4610 /* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
4611 Used to verify that case values match up with enumerator values. */
4612
4613 static void
4614 match_case_to_enum_1 (tree key, tree type, tree label)
4615 {
4616 char buf[2 + 2*HOST_BITS_PER_WIDE_INT/4 + 1];
4617
4618 /* ??? Not working too hard to print the double-word value.
4619 Should perhaps be done with %lwd in the diagnostic routines? */
4620 if (TREE_INT_CST_HIGH (key) == 0)
4621 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_UNSIGNED,
4622 TREE_INT_CST_LOW (key));
4623 else if (!TYPE_UNSIGNED (type)
4624 && TREE_INT_CST_HIGH (key) == -1
4625 && TREE_INT_CST_LOW (key) != 0)
4626 snprintf (buf, sizeof (buf), "-" HOST_WIDE_INT_PRINT_UNSIGNED,
4627 -TREE_INT_CST_LOW (key));
4628 else
4629 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_DOUBLE_HEX,
4630 (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (key),
4631 (unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (key));
4632
4633 if (TYPE_NAME (type) == 0)
4634 warning (warn_switch ? OPT_Wswitch : OPT_Wswitch_enum,
4635 "%Jcase value %qs not in enumerated type",
4636 CASE_LABEL (label), buf);
4637 else
4638 warning (warn_switch ? OPT_Wswitch : OPT_Wswitch_enum,
4639 "%Jcase value %qs not in enumerated type %qT",
4640 CASE_LABEL (label), buf, type);
4641 }
4642
4643 /* Subroutine of c_do_switch_warnings, called via splay_tree_foreach.
4644 Used to verify that case values match up with enumerator values. */
4645
4646 static int
4647 match_case_to_enum (splay_tree_node node, void *data)
4648 {
4649 tree label = (tree) node->value;
4650 tree type = (tree) data;
4651
4652 /* Skip default case. */
4653 if (!CASE_LOW (label))
4654 return 0;
4655
4656 /* If CASE_LOW_SEEN is not set, that means CASE_LOW did not appear
4657 when we did our enum->case scan. Reset our scratch bit after. */
4658 if (!CASE_LOW_SEEN (label))
4659 match_case_to_enum_1 (CASE_LOW (label), type, label);
4660 else
4661 CASE_LOW_SEEN (label) = 0;
4662
4663 /* If CASE_HIGH is non-null, we have a range. If CASE_HIGH_SEEN is
4664 not set, that means that CASE_HIGH did not appear when we did our
4665 enum->case scan. Reset our scratch bit after. */
4666 if (CASE_HIGH (label))
4667 {
4668 if (!CASE_HIGH_SEEN (label))
4669 match_case_to_enum_1 (CASE_HIGH (label), type, label);
4670 else
4671 CASE_HIGH_SEEN (label) = 0;
4672 }
4673
4674 return 0;
4675 }
4676
4677 /* Handle -Wswitch*. Called from the front end after parsing the
4678 switch construct. */
4679 /* ??? Should probably be somewhere generic, since other languages
4680 besides C and C++ would want this. At the moment, however, C/C++
4681 are the only tree-ssa languages that support enumerations at all,
4682 so the point is moot. */
4683
4684 void
4685 c_do_switch_warnings (splay_tree cases, location_t switch_location,
4686 tree type, tree cond)
4687 {
4688 splay_tree_node default_node;
4689 splay_tree_node node;
4690 tree chain;
4691 int saved_warn_switch;
4692
4693 if (!warn_switch && !warn_switch_enum && !warn_switch_default)
4694 return;
4695
4696 default_node = splay_tree_lookup (cases, (splay_tree_key) NULL);
4697 if (!default_node)
4698 warning (OPT_Wswitch_default, "%Hswitch missing default case",
4699 &switch_location);
4700
4701 /* From here on, we only care about about enumerated types. */
4702 if (!type || TREE_CODE (type) != ENUMERAL_TYPE)
4703 return;
4704
4705 /* If the switch expression was an enumerated type, check that
4706 exactly all enumeration literals are covered by the cases.
4707 The check is made when -Wswitch was specified and there is no
4708 default case, or when -Wswitch-enum was specified. */
4709
4710 if (!warn_switch_enum
4711 && !(warn_switch && !default_node))
4712 return;
4713
4714 /* Clearing COND if it is not an integer constant simplifies
4715 the tests inside the loop below. */
4716 if (TREE_CODE (cond) != INTEGER_CST)
4717 cond = NULL_TREE;
4718
4719 /* The time complexity here is O(N*lg(N)) worst case, but for the
4720 common case of monotonically increasing enumerators, it is
4721 O(N), since the nature of the splay tree will keep the next
4722 element adjacent to the root at all times. */
4723
4724 for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain))
4725 {
4726 tree value = TREE_VALUE (chain);
4727 node = splay_tree_lookup (cases, (splay_tree_key) value);
4728 if (node)
4729 {
4730 /* Mark the CASE_LOW part of the case entry as seen. */
4731 tree label = (tree) node->value;
4732 CASE_LOW_SEEN (label) = 1;
4733 continue;
4734 }
4735
4736 /* Even though there wasn't an exact match, there might be a
4737 case range which includes the enumerator's value. */
4738 node = splay_tree_predecessor (cases, (splay_tree_key) value);
4739 if (node && CASE_HIGH ((tree) node->value))
4740 {
4741 tree label = (tree) node->value;
4742 int cmp = tree_int_cst_compare (CASE_HIGH (label), value);
4743 if (cmp >= 0)
4744 {
4745 /* If we match the upper bound exactly, mark the CASE_HIGH
4746 part of the case entry as seen. */
4747 if (cmp == 0)
4748 CASE_HIGH_SEEN (label) = 1;
4749 continue;
4750 }
4751 }
4752
4753 /* We've now determined that this enumerated literal isn't
4754 handled by the case labels of the switch statement. */
4755
4756 /* If the switch expression is a constant, we only really care
4757 about whether that constant is handled by the switch. */
4758 if (cond && tree_int_cst_compare (cond, value))
4759 continue;
4760
4761 /* If there is a default_node, the only relevant option is
4762 Wswitch-enum. Otherwise, if both are enabled then we prefer
4763 to warn using -Wswitch because -Wswitch is enabled by -Wall
4764 while -Wswitch-enum is explicit. */
4765 warning ((default_node || !warn_switch)
4766 ? OPT_Wswitch_enum : OPT_Wswitch,
4767 "%Henumeration value %qE not handled in switch",
4768 &switch_location, TREE_PURPOSE (chain));
4769 }
4770
4771 /* Warn if there are case expressions that don't correspond to
4772 enumerators. This can occur since C and C++ don't enforce
4773 type-checking of assignments to enumeration variables.
4774
4775 The time complexity here is now always O(N) worst case, since
4776 we should have marked both the lower bound and upper bound of
4777 every disjoint case label, with CASE_LOW_SEEN and CASE_HIGH_SEEN
4778 above. This scan also resets those fields. */
4779
4780 /* If there is a default_node, the only relevant option is
4781 Wswitch-enum. Otherwise, if both are enabled then we prefer
4782 to warn using -Wswitch because -Wswitch is enabled by -Wall
4783 while -Wswitch-enum is explicit. */
4784 saved_warn_switch = warn_switch;
4785 if (default_node)
4786 warn_switch = 0;
4787 splay_tree_foreach (cases, match_case_to_enum, type);
4788 warn_switch = saved_warn_switch;
4789
4790 }
4791
4792 /* Finish an expression taking the address of LABEL (an
4793 IDENTIFIER_NODE). Returns an expression for the address. */
4794
4795 tree
4796 finish_label_address_expr (tree label)
4797 {
4798 tree result;
4799
4800 pedwarn (OPT_pedantic, "taking the address of a label is non-standard");
4801
4802 if (label == error_mark_node)
4803 return error_mark_node;
4804
4805 label = lookup_label (label);
4806 if (label == NULL_TREE)
4807 result = null_pointer_node;
4808 else
4809 {
4810 TREE_USED (label) = 1;
4811 result = build1 (ADDR_EXPR, ptr_type_node, label);
4812 /* The current function in not necessarily uninlinable.
4813 Computed gotos are incompatible with inlining, but the value
4814 here could be used only in a diagnostic, for example. */
4815 }
4816
4817 return result;
4818 }
4819
4820 /* Hook used by expand_expr to expand language-specific tree codes. */
4821 /* The only things that should go here are bits needed to expand
4822 constant initializers. Everything else should be handled by the
4823 gimplification routines. */
4824
4825 rtx
4826 c_expand_expr (tree exp, rtx target, enum machine_mode tmode,
4827 int modifiera /* Actually enum expand_modifier. */,
4828 rtx *alt_rtl)
4829 {
4830 enum expand_modifier modifier = (enum expand_modifier) modifiera;
4831 switch (TREE_CODE (exp))
4832 {
4833 case COMPOUND_LITERAL_EXPR:
4834 {
4835 /* Initialize the anonymous variable declared in the compound
4836 literal, then return the variable. */
4837 tree decl = COMPOUND_LITERAL_EXPR_DECL (exp);
4838 emit_local_var (decl);
4839 return expand_expr_real (decl, target, tmode, modifier, alt_rtl);
4840 }
4841
4842 default:
4843 gcc_unreachable ();
4844 }
4845 }
4846
4847 /* Hook used by staticp to handle language-specific tree codes. */
4848
4849 tree
4850 c_staticp (tree exp)
4851 {
4852 return (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
4853 && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp))
4854 ? exp : NULL);
4855 }
4856 \f
4857
4858 /* Given a boolean expression ARG, return a tree representing an increment
4859 or decrement (as indicated by CODE) of ARG. The front end must check for
4860 invalid cases (e.g., decrement in C++). */
4861 tree
4862 boolean_increment (enum tree_code code, tree arg)
4863 {
4864 tree val;
4865 tree true_res = build_int_cst (TREE_TYPE (arg), 1);
4866
4867 arg = stabilize_reference (arg);
4868 switch (code)
4869 {
4870 case PREINCREMENT_EXPR:
4871 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4872 break;
4873 case POSTINCREMENT_EXPR:
4874 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4875 arg = save_expr (arg);
4876 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4877 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4878 break;
4879 case PREDECREMENT_EXPR:
4880 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
4881 invert_truthvalue (arg));
4882 break;
4883 case POSTDECREMENT_EXPR:
4884 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
4885 invert_truthvalue (arg));
4886 arg = save_expr (arg);
4887 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4888 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4889 break;
4890 default:
4891 gcc_unreachable ();
4892 }
4893 TREE_SIDE_EFFECTS (val) = 1;
4894 return val;
4895 }
4896 \f
4897 /* Built-in macros for stddef.h, that require macros defined in this
4898 file. */
4899 void
4900 c_stddef_cpp_builtins(void)
4901 {
4902 builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
4903 builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
4904 builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
4905 builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
4906 builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE, 0);
4907 builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE, 0);
4908 builtin_define_with_value ("__CHAR16_TYPE__", CHAR16_TYPE, 0);
4909 builtin_define_with_value ("__CHAR32_TYPE__", CHAR32_TYPE, 0);
4910 }
4911
4912 static void
4913 c_init_attributes (void)
4914 {
4915 /* Fill in the built_in_attributes array. */
4916 #define DEF_ATTR_NULL_TREE(ENUM) \
4917 built_in_attributes[(int) ENUM] = NULL_TREE;
4918 #define DEF_ATTR_INT(ENUM, VALUE) \
4919 built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
4920 #define DEF_ATTR_IDENT(ENUM, STRING) \
4921 built_in_attributes[(int) ENUM] = get_identifier (STRING);
4922 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
4923 built_in_attributes[(int) ENUM] \
4924 = tree_cons (built_in_attributes[(int) PURPOSE], \
4925 built_in_attributes[(int) VALUE], \
4926 built_in_attributes[(int) CHAIN]);
4927 #include "builtin-attrs.def"
4928 #undef DEF_ATTR_NULL_TREE
4929 #undef DEF_ATTR_INT
4930 #undef DEF_ATTR_IDENT
4931 #undef DEF_ATTR_TREE_LIST
4932 }
4933
4934 /* Attribute handlers common to C front ends. */
4935
4936 /* Handle a "packed" attribute; arguments as in
4937 struct attribute_spec.handler. */
4938
4939 static tree
4940 handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4941 int flags, bool *no_add_attrs)
4942 {
4943 if (TYPE_P (*node))
4944 {
4945 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4946 *node = build_variant_type_copy (*node);
4947 TYPE_PACKED (*node) = 1;
4948 }
4949 else if (TREE_CODE (*node) == FIELD_DECL)
4950 {
4951 if (TYPE_ALIGN (TREE_TYPE (*node)) <= BITS_PER_UNIT)
4952 warning (OPT_Wattributes,
4953 "%qE attribute ignored for field of type %qT",
4954 name, TREE_TYPE (*node));
4955 else
4956 DECL_PACKED (*node) = 1;
4957 }
4958 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
4959 used for DECL_REGISTER. It wouldn't mean anything anyway.
4960 We can't set DECL_PACKED on the type of a TYPE_DECL, because
4961 that changes what the typedef is typing. */
4962 else
4963 {
4964 warning (OPT_Wattributes, "%qE attribute ignored", name);
4965 *no_add_attrs = true;
4966 }
4967
4968 return NULL_TREE;
4969 }
4970
4971 /* Handle a "nocommon" attribute; arguments as in
4972 struct attribute_spec.handler. */
4973
4974 static tree
4975 handle_nocommon_attribute (tree *node, tree name,
4976 tree ARG_UNUSED (args),
4977 int ARG_UNUSED (flags), bool *no_add_attrs)
4978 {
4979 if (TREE_CODE (*node) == VAR_DECL)
4980 DECL_COMMON (*node) = 0;
4981 else
4982 {
4983 warning (OPT_Wattributes, "%qE attribute ignored", name);
4984 *no_add_attrs = true;
4985 }
4986
4987 return NULL_TREE;
4988 }
4989
4990 /* Handle a "common" attribute; arguments as in
4991 struct attribute_spec.handler. */
4992
4993 static tree
4994 handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4995 int ARG_UNUSED (flags), bool *no_add_attrs)
4996 {
4997 if (TREE_CODE (*node) == VAR_DECL)
4998 DECL_COMMON (*node) = 1;
4999 else
5000 {
5001 warning (OPT_Wattributes, "%qE attribute ignored", name);
5002 *no_add_attrs = true;
5003 }
5004
5005 return NULL_TREE;
5006 }
5007
5008 /* Handle a "noreturn" attribute; arguments as in
5009 struct attribute_spec.handler. */
5010
5011 static tree
5012 handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5013 int ARG_UNUSED (flags), bool *no_add_attrs)
5014 {
5015 tree type = TREE_TYPE (*node);
5016
5017 /* See FIXME comment in c_common_attribute_table. */
5018 if (TREE_CODE (*node) == FUNCTION_DECL)
5019 TREE_THIS_VOLATILE (*node) = 1;
5020 else if (TREE_CODE (type) == POINTER_TYPE
5021 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
5022 TREE_TYPE (*node)
5023 = build_pointer_type
5024 (build_type_variant (TREE_TYPE (type),
5025 TYPE_READONLY (TREE_TYPE (type)), 1));
5026 else
5027 {
5028 warning (OPT_Wattributes, "%qE attribute ignored", name);
5029 *no_add_attrs = true;
5030 }
5031
5032 return NULL_TREE;
5033 }
5034
5035 /* Handle a "hot" and attribute; arguments as in
5036 struct attribute_spec.handler. */
5037
5038 static tree
5039 handle_hot_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5040 int ARG_UNUSED (flags), bool *no_add_attrs)
5041 {
5042 if (TREE_CODE (*node) == FUNCTION_DECL)
5043 {
5044 if (lookup_attribute ("cold", DECL_ATTRIBUTES (*node)) != NULL)
5045 {
5046 warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
5047 name, "cold");
5048 *no_add_attrs = true;
5049 }
5050 else
5051 {
5052 tree old_opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node);
5053
5054 /* If we are not at -O3, but are optimizing, turn on -O3
5055 optimizations just for this one function. */
5056 if (((optimize > 0 && optimize < 3) || optimize_size)
5057 && targetm.target_option.hot_attribute_sets_optimization
5058 && (!old_opts || old_opts == optimization_default_node))
5059 {
5060 /* Create the hot optimization node if needed. */
5061 if (!optimization_hot_node)
5062 {
5063 struct cl_optimization current_options;
5064 static const char *os_argv[] = { NULL, "-O3", NULL };
5065
5066 cl_optimization_save (&current_options);
5067 decode_options (2, os_argv);
5068 optimization_hot_node = build_optimization_node ();
5069 cl_optimization_restore (&current_options);
5070 }
5071
5072 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node)
5073 = optimization_hot_node;
5074 }
5075 /* Most of the rest of the hot processing is done later with
5076 lookup_attribute. */
5077 }
5078 }
5079 else
5080 {
5081 warning (OPT_Wattributes, "%qE attribute ignored", name);
5082 *no_add_attrs = true;
5083 }
5084
5085 return NULL_TREE;
5086 }
5087 /* Handle a "cold" and attribute; arguments as in
5088 struct attribute_spec.handler. */
5089
5090 static tree
5091 handle_cold_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5092 int ARG_UNUSED (flags), bool *no_add_attrs)
5093 {
5094 if (TREE_CODE (*node) == FUNCTION_DECL)
5095 {
5096 if (lookup_attribute ("hot", DECL_ATTRIBUTES (*node)) != NULL)
5097 {
5098 warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
5099 name, "hot");
5100 *no_add_attrs = true;
5101 }
5102 else
5103 {
5104 tree old_opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node);
5105
5106 /* If we are optimizing, but not optimizing for space, turn on -Os
5107 optimizations just for this one function. */
5108 if (optimize && !optimize_size
5109 && targetm.target_option.cold_attribute_sets_optimization
5110 && (!old_opts || old_opts == optimization_default_node))
5111 {
5112 /* Create the cold optimization node if needed. */
5113 if (!optimization_cold_node)
5114 {
5115 struct cl_optimization current_options;
5116 static const char *os_argv[] = { NULL, "-Os", NULL };
5117
5118 cl_optimization_save (&current_options);
5119 decode_options (2, os_argv);
5120 optimization_cold_node = build_optimization_node ();
5121 cl_optimization_restore (&current_options);
5122 }
5123
5124 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node)
5125 = optimization_cold_node;
5126 }
5127 /* Most of the rest of the cold processing is done later with
5128 lookup_attribute. */
5129 }
5130 }
5131 else
5132 {
5133 warning (OPT_Wattributes, "%qE attribute ignored", name);
5134 *no_add_attrs = true;
5135 }
5136
5137 return NULL_TREE;
5138 }
5139
5140 /* Handle a "noinline" attribute; arguments as in
5141 struct attribute_spec.handler. */
5142
5143 static tree
5144 handle_noinline_attribute (tree *node, tree name,
5145 tree ARG_UNUSED (args),
5146 int ARG_UNUSED (flags), bool *no_add_attrs)
5147 {
5148 if (TREE_CODE (*node) == FUNCTION_DECL)
5149 DECL_UNINLINABLE (*node) = 1;
5150 else
5151 {
5152 warning (OPT_Wattributes, "%qE attribute ignored", name);
5153 *no_add_attrs = true;
5154 }
5155
5156 return NULL_TREE;
5157 }
5158
5159 /* Handle a "always_inline" attribute; arguments as in
5160 struct attribute_spec.handler. */
5161
5162 static tree
5163 handle_always_inline_attribute (tree *node, tree name,
5164 tree ARG_UNUSED (args),
5165 int ARG_UNUSED (flags),
5166 bool *no_add_attrs)
5167 {
5168 if (TREE_CODE (*node) == FUNCTION_DECL)
5169 {
5170 /* Set the attribute and mark it for disregarding inline
5171 limits. */
5172 DECL_DISREGARD_INLINE_LIMITS (*node) = 1;
5173 }
5174 else
5175 {
5176 warning (OPT_Wattributes, "%qE attribute ignored", name);
5177 *no_add_attrs = true;
5178 }
5179
5180 return NULL_TREE;
5181 }
5182
5183 /* Handle a "gnu_inline" attribute; arguments as in
5184 struct attribute_spec.handler. */
5185
5186 static tree
5187 handle_gnu_inline_attribute (tree *node, tree name,
5188 tree ARG_UNUSED (args),
5189 int ARG_UNUSED (flags),
5190 bool *no_add_attrs)
5191 {
5192 if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
5193 {
5194 /* Do nothing else, just set the attribute. We'll get at
5195 it later with lookup_attribute. */
5196 }
5197 else
5198 {
5199 warning (OPT_Wattributes, "%qE attribute ignored", name);
5200 *no_add_attrs = true;
5201 }
5202
5203 return NULL_TREE;
5204 }
5205
5206 /* Handle an "artificial" attribute; arguments as in
5207 struct attribute_spec.handler. */
5208
5209 static tree
5210 handle_artificial_attribute (tree *node, tree name,
5211 tree ARG_UNUSED (args),
5212 int ARG_UNUSED (flags),
5213 bool *no_add_attrs)
5214 {
5215 if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
5216 {
5217 /* Do nothing else, just set the attribute. We'll get at
5218 it later with lookup_attribute. */
5219 }
5220 else
5221 {
5222 warning (OPT_Wattributes, "%qE attribute ignored", name);
5223 *no_add_attrs = true;
5224 }
5225
5226 return NULL_TREE;
5227 }
5228
5229 /* Handle a "flatten" attribute; arguments as in
5230 struct attribute_spec.handler. */
5231
5232 static tree
5233 handle_flatten_attribute (tree *node, tree name,
5234 tree args ATTRIBUTE_UNUSED,
5235 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
5236 {
5237 if (TREE_CODE (*node) == FUNCTION_DECL)
5238 /* Do nothing else, just set the attribute. We'll get at
5239 it later with lookup_attribute. */
5240 ;
5241 else
5242 {
5243 warning (OPT_Wattributes, "%qE attribute ignored", name);
5244 *no_add_attrs = true;
5245 }
5246
5247 return NULL_TREE;
5248 }
5249
5250 /* Handle a "warning" or "error" attribute; arguments as in
5251 struct attribute_spec.handler. */
5252
5253 static tree
5254 handle_error_attribute (tree *node, tree name, tree args,
5255 int ARG_UNUSED (flags), bool *no_add_attrs)
5256 {
5257 if (TREE_CODE (*node) == FUNCTION_DECL
5258 || TREE_CODE (TREE_VALUE (args)) == STRING_CST)
5259 /* Do nothing else, just set the attribute. We'll get at
5260 it later with lookup_attribute. */
5261 ;
5262 else
5263 {
5264 warning (OPT_Wattributes, "%qE attribute ignored", name);
5265 *no_add_attrs = true;
5266 }
5267
5268 return NULL_TREE;
5269 }
5270
5271 /* Handle a "used" attribute; arguments as in
5272 struct attribute_spec.handler. */
5273
5274 static tree
5275 handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
5276 int ARG_UNUSED (flags), bool *no_add_attrs)
5277 {
5278 tree node = *pnode;
5279
5280 if (TREE_CODE (node) == FUNCTION_DECL
5281 || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
5282 {
5283 TREE_USED (node) = 1;
5284 DECL_PRESERVE_P (node) = 1;
5285 }
5286 else
5287 {
5288 warning (OPT_Wattributes, "%qE attribute ignored", name);
5289 *no_add_attrs = true;
5290 }
5291
5292 return NULL_TREE;
5293 }
5294
5295 /* Handle a "unused" attribute; arguments as in
5296 struct attribute_spec.handler. */
5297
5298 static tree
5299 handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5300 int flags, bool *no_add_attrs)
5301 {
5302 if (DECL_P (*node))
5303 {
5304 tree decl = *node;
5305
5306 if (TREE_CODE (decl) == PARM_DECL
5307 || TREE_CODE (decl) == VAR_DECL
5308 || TREE_CODE (decl) == FUNCTION_DECL
5309 || TREE_CODE (decl) == LABEL_DECL
5310 || TREE_CODE (decl) == TYPE_DECL)
5311 TREE_USED (decl) = 1;
5312 else
5313 {
5314 warning (OPT_Wattributes, "%qE attribute ignored", name);
5315 *no_add_attrs = true;
5316 }
5317 }
5318 else
5319 {
5320 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5321 *node = build_variant_type_copy (*node);
5322 TREE_USED (*node) = 1;
5323 }
5324
5325 return NULL_TREE;
5326 }
5327
5328 /* Handle a "externally_visible" attribute; arguments as in
5329 struct attribute_spec.handler. */
5330
5331 static tree
5332 handle_externally_visible_attribute (tree *pnode, tree name,
5333 tree ARG_UNUSED (args),
5334 int ARG_UNUSED (flags),
5335 bool *no_add_attrs)
5336 {
5337 tree node = *pnode;
5338
5339 if (TREE_CODE (node) == FUNCTION_DECL || TREE_CODE (node) == VAR_DECL)
5340 {
5341 if ((!TREE_STATIC (node) && TREE_CODE (node) != FUNCTION_DECL
5342 && !DECL_EXTERNAL (node)) || !TREE_PUBLIC (node))
5343 {
5344 warning (OPT_Wattributes,
5345 "%qE attribute have effect only on public objects", name);
5346 *no_add_attrs = true;
5347 }
5348 }
5349 else
5350 {
5351 warning (OPT_Wattributes, "%qE attribute ignored", name);
5352 *no_add_attrs = true;
5353 }
5354
5355 return NULL_TREE;
5356 }
5357
5358 /* Handle a "const" attribute; arguments as in
5359 struct attribute_spec.handler. */
5360
5361 static tree
5362 handle_const_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5363 int ARG_UNUSED (flags), bool *no_add_attrs)
5364 {
5365 tree type = TREE_TYPE (*node);
5366
5367 /* See FIXME comment on noreturn in c_common_attribute_table. */
5368 if (TREE_CODE (*node) == FUNCTION_DECL)
5369 TREE_READONLY (*node) = 1;
5370 else if (TREE_CODE (type) == POINTER_TYPE
5371 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
5372 TREE_TYPE (*node)
5373 = build_pointer_type
5374 (build_type_variant (TREE_TYPE (type), 1,
5375 TREE_THIS_VOLATILE (TREE_TYPE (type))));
5376 else
5377 {
5378 warning (OPT_Wattributes, "%qE attribute ignored", name);
5379 *no_add_attrs = true;
5380 }
5381
5382 return NULL_TREE;
5383 }
5384
5385 /* Handle a "transparent_union" attribute; arguments as in
5386 struct attribute_spec.handler. */
5387
5388 static tree
5389 handle_transparent_union_attribute (tree *node, tree name,
5390 tree ARG_UNUSED (args), int flags,
5391 bool *no_add_attrs)
5392 {
5393 tree type;
5394
5395 *no_add_attrs = true;
5396
5397 if (TREE_CODE (*node) == TYPE_DECL)
5398 node = &TREE_TYPE (*node);
5399 type = *node;
5400
5401 if (TREE_CODE (type) == UNION_TYPE)
5402 {
5403 /* When IN_PLACE is set, leave the check for FIELDS and MODE to
5404 the code in finish_struct. */
5405 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5406 {
5407 if (TYPE_FIELDS (type) == NULL_TREE
5408 || TYPE_MODE (type) != DECL_MODE (TYPE_FIELDS (type)))
5409 goto ignored;
5410
5411 /* A type variant isn't good enough, since we don't a cast
5412 to such a type removed as a no-op. */
5413 *node = type = build_duplicate_type (type);
5414 }
5415
5416 TYPE_TRANSPARENT_UNION (type) = 1;
5417 return NULL_TREE;
5418 }
5419
5420 ignored:
5421 warning (OPT_Wattributes, "%qE attribute ignored", name);
5422 return NULL_TREE;
5423 }
5424
5425 /* Subroutine of handle_{con,de}structor_attribute. Evaluate ARGS to
5426 get the requested priority for a constructor or destructor,
5427 possibly issuing diagnostics for invalid or reserved
5428 priorities. */
5429
5430 static priority_type
5431 get_priority (tree args, bool is_destructor)
5432 {
5433 HOST_WIDE_INT pri;
5434 tree arg;
5435
5436 if (!args)
5437 return DEFAULT_INIT_PRIORITY;
5438
5439 if (!SUPPORTS_INIT_PRIORITY)
5440 {
5441 if (is_destructor)
5442 error ("destructor priorities are not supported");
5443 else
5444 error ("constructor priorities are not supported");
5445 return DEFAULT_INIT_PRIORITY;
5446 }
5447
5448 arg = TREE_VALUE (args);
5449 if (!host_integerp (arg, /*pos=*/0)
5450 || !INTEGRAL_TYPE_P (TREE_TYPE (arg)))
5451 goto invalid;
5452
5453 pri = tree_low_cst (TREE_VALUE (args), /*pos=*/0);
5454 if (pri < 0 || pri > MAX_INIT_PRIORITY)
5455 goto invalid;
5456
5457 if (pri <= MAX_RESERVED_INIT_PRIORITY)
5458 {
5459 if (is_destructor)
5460 warning (0,
5461 "destructor priorities from 0 to %d are reserved "
5462 "for the implementation",
5463 MAX_RESERVED_INIT_PRIORITY);
5464 else
5465 warning (0,
5466 "constructor priorities from 0 to %d are reserved "
5467 "for the implementation",
5468 MAX_RESERVED_INIT_PRIORITY);
5469 }
5470 return pri;
5471
5472 invalid:
5473 if (is_destructor)
5474 error ("destructor priorities must be integers from 0 to %d inclusive",
5475 MAX_INIT_PRIORITY);
5476 else
5477 error ("constructor priorities must be integers from 0 to %d inclusive",
5478 MAX_INIT_PRIORITY);
5479 return DEFAULT_INIT_PRIORITY;
5480 }
5481
5482 /* Handle a "constructor" attribute; arguments as in
5483 struct attribute_spec.handler. */
5484
5485 static tree
5486 handle_constructor_attribute (tree *node, tree name, tree args,
5487 int ARG_UNUSED (flags),
5488 bool *no_add_attrs)
5489 {
5490 tree decl = *node;
5491 tree type = TREE_TYPE (decl);
5492
5493 if (TREE_CODE (decl) == FUNCTION_DECL
5494 && TREE_CODE (type) == FUNCTION_TYPE
5495 && decl_function_context (decl) == 0)
5496 {
5497 priority_type priority;
5498 DECL_STATIC_CONSTRUCTOR (decl) = 1;
5499 priority = get_priority (args, /*is_destructor=*/false);
5500 SET_DECL_INIT_PRIORITY (decl, priority);
5501 TREE_USED (decl) = 1;
5502 }
5503 else
5504 {
5505 warning (OPT_Wattributes, "%qE attribute ignored", name);
5506 *no_add_attrs = true;
5507 }
5508
5509 return NULL_TREE;
5510 }
5511
5512 /* Handle a "destructor" attribute; arguments as in
5513 struct attribute_spec.handler. */
5514
5515 static tree
5516 handle_destructor_attribute (tree *node, tree name, tree args,
5517 int ARG_UNUSED (flags),
5518 bool *no_add_attrs)
5519 {
5520 tree decl = *node;
5521 tree type = TREE_TYPE (decl);
5522
5523 if (TREE_CODE (decl) == FUNCTION_DECL
5524 && TREE_CODE (type) == FUNCTION_TYPE
5525 && decl_function_context (decl) == 0)
5526 {
5527 priority_type priority;
5528 DECL_STATIC_DESTRUCTOR (decl) = 1;
5529 priority = get_priority (args, /*is_destructor=*/true);
5530 SET_DECL_FINI_PRIORITY (decl, priority);
5531 TREE_USED (decl) = 1;
5532 }
5533 else
5534 {
5535 warning (OPT_Wattributes, "%qE attribute ignored", name);
5536 *no_add_attrs = true;
5537 }
5538
5539 return NULL_TREE;
5540 }
5541
5542 /* Handle a "mode" attribute; arguments as in
5543 struct attribute_spec.handler. */
5544
5545 static tree
5546 handle_mode_attribute (tree *node, tree name, tree args,
5547 int ARG_UNUSED (flags), bool *no_add_attrs)
5548 {
5549 tree type = *node;
5550
5551 *no_add_attrs = true;
5552
5553 if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
5554 warning (OPT_Wattributes, "%qE attribute ignored", name);
5555 else
5556 {
5557 int j;
5558 const char *p = IDENTIFIER_POINTER (TREE_VALUE (args));
5559 int len = strlen (p);
5560 enum machine_mode mode = VOIDmode;
5561 tree typefm;
5562 bool valid_mode;
5563
5564 if (len > 4 && p[0] == '_' && p[1] == '_'
5565 && p[len - 1] == '_' && p[len - 2] == '_')
5566 {
5567 char *newp = (char *) alloca (len - 1);
5568
5569 strcpy (newp, &p[2]);
5570 newp[len - 4] = '\0';
5571 p = newp;
5572 }
5573
5574 /* Change this type to have a type with the specified mode.
5575 First check for the special modes. */
5576 if (!strcmp (p, "byte"))
5577 mode = byte_mode;
5578 else if (!strcmp (p, "word"))
5579 mode = word_mode;
5580 else if (!strcmp (p, "pointer"))
5581 mode = ptr_mode;
5582 else if (!strcmp (p, "libgcc_cmp_return"))
5583 mode = targetm.libgcc_cmp_return_mode ();
5584 else if (!strcmp (p, "libgcc_shift_count"))
5585 mode = targetm.libgcc_shift_count_mode ();
5586 else if (!strcmp (p, "unwind_word"))
5587 mode = targetm.unwind_word_mode ();
5588 else
5589 for (j = 0; j < NUM_MACHINE_MODES; j++)
5590 if (!strcmp (p, GET_MODE_NAME (j)))
5591 {
5592 mode = (enum machine_mode) j;
5593 break;
5594 }
5595
5596 if (mode == VOIDmode)
5597 {
5598 error ("unknown machine mode %qs", p);
5599 return NULL_TREE;
5600 }
5601
5602 valid_mode = false;
5603 switch (GET_MODE_CLASS (mode))
5604 {
5605 case MODE_INT:
5606 case MODE_PARTIAL_INT:
5607 case MODE_FLOAT:
5608 case MODE_DECIMAL_FLOAT:
5609 case MODE_FRACT:
5610 case MODE_UFRACT:
5611 case MODE_ACCUM:
5612 case MODE_UACCUM:
5613 valid_mode = targetm.scalar_mode_supported_p (mode);
5614 break;
5615
5616 case MODE_COMPLEX_INT:
5617 case MODE_COMPLEX_FLOAT:
5618 valid_mode = targetm.scalar_mode_supported_p (GET_MODE_INNER (mode));
5619 break;
5620
5621 case MODE_VECTOR_INT:
5622 case MODE_VECTOR_FLOAT:
5623 case MODE_VECTOR_FRACT:
5624 case MODE_VECTOR_UFRACT:
5625 case MODE_VECTOR_ACCUM:
5626 case MODE_VECTOR_UACCUM:
5627 warning (OPT_Wattributes, "specifying vector types with "
5628 "__attribute__ ((mode)) is deprecated");
5629 warning (OPT_Wattributes,
5630 "use __attribute__ ((vector_size)) instead");
5631 valid_mode = vector_mode_valid_p (mode);
5632 break;
5633
5634 default:
5635 break;
5636 }
5637 if (!valid_mode)
5638 {
5639 error ("unable to emulate %qs", p);
5640 return NULL_TREE;
5641 }
5642
5643 if (POINTER_TYPE_P (type))
5644 {
5645 tree (*fn)(tree, enum machine_mode, bool);
5646
5647 if (!targetm.valid_pointer_mode (mode))
5648 {
5649 error ("invalid pointer mode %qs", p);
5650 return NULL_TREE;
5651 }
5652
5653 if (TREE_CODE (type) == POINTER_TYPE)
5654 fn = build_pointer_type_for_mode;
5655 else
5656 fn = build_reference_type_for_mode;
5657 typefm = fn (TREE_TYPE (type), mode, false);
5658 }
5659 else
5660 {
5661 /* For fixed-point modes, we need to test if the signness of type
5662 and the machine mode are consistent. */
5663 if (ALL_FIXED_POINT_MODE_P (mode)
5664 && TYPE_UNSIGNED (type) != UNSIGNED_FIXED_POINT_MODE_P (mode))
5665 {
5666 error ("signness of type and machine mode %qs don't match", p);
5667 return NULL_TREE;
5668 }
5669 /* For fixed-point modes, we need to pass saturating info. */
5670 typefm = lang_hooks.types.type_for_mode (mode,
5671 ALL_FIXED_POINT_MODE_P (mode) ? TYPE_SATURATING (type)
5672 : TYPE_UNSIGNED (type));
5673 }
5674
5675 if (typefm == NULL_TREE)
5676 {
5677 error ("no data type for mode %qs", p);
5678 return NULL_TREE;
5679 }
5680 else if (TREE_CODE (type) == ENUMERAL_TYPE)
5681 {
5682 /* For enumeral types, copy the precision from the integer
5683 type returned above. If not an INTEGER_TYPE, we can't use
5684 this mode for this type. */
5685 if (TREE_CODE (typefm) != INTEGER_TYPE)
5686 {
5687 error ("cannot use mode %qs for enumeral types", p);
5688 return NULL_TREE;
5689 }
5690
5691 if (flags & ATTR_FLAG_TYPE_IN_PLACE)
5692 {
5693 TYPE_PRECISION (type) = TYPE_PRECISION (typefm);
5694 typefm = type;
5695 }
5696 else
5697 {
5698 /* We cannot build a type variant, as there's code that assumes
5699 that TYPE_MAIN_VARIANT has the same mode. This includes the
5700 debug generators. Instead, create a subrange type. This
5701 results in all of the enumeral values being emitted only once
5702 in the original, and the subtype gets them by reference. */
5703 if (TYPE_UNSIGNED (type))
5704 typefm = make_unsigned_type (TYPE_PRECISION (typefm));
5705 else
5706 typefm = make_signed_type (TYPE_PRECISION (typefm));
5707 TREE_TYPE (typefm) = type;
5708 }
5709 }
5710 else if (VECTOR_MODE_P (mode)
5711 ? TREE_CODE (type) != TREE_CODE (TREE_TYPE (typefm))
5712 : TREE_CODE (type) != TREE_CODE (typefm))
5713 {
5714 error ("mode %qs applied to inappropriate type", p);
5715 return NULL_TREE;
5716 }
5717
5718 *node = typefm;
5719 }
5720
5721 return NULL_TREE;
5722 }
5723
5724 /* Handle a "section" attribute; arguments as in
5725 struct attribute_spec.handler. */
5726
5727 static tree
5728 handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5729 int ARG_UNUSED (flags), bool *no_add_attrs)
5730 {
5731 tree decl = *node;
5732
5733 if (targetm.have_named_sections)
5734 {
5735 user_defined_section_attribute = true;
5736
5737 if ((TREE_CODE (decl) == FUNCTION_DECL
5738 || TREE_CODE (decl) == VAR_DECL)
5739 && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
5740 {
5741 if (TREE_CODE (decl) == VAR_DECL
5742 && current_function_decl != NULL_TREE
5743 && !TREE_STATIC (decl))
5744 {
5745 error ("%Jsection attribute cannot be specified for "
5746 "local variables", decl);
5747 *no_add_attrs = true;
5748 }
5749
5750 /* The decl may have already been given a section attribute
5751 from a previous declaration. Ensure they match. */
5752 else if (DECL_SECTION_NAME (decl) != NULL_TREE
5753 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
5754 TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
5755 {
5756 error ("section of %q+D conflicts with previous declaration",
5757 *node);
5758 *no_add_attrs = true;
5759 }
5760 else if (TREE_CODE (decl) == VAR_DECL
5761 && !targetm.have_tls && targetm.emutls.tmpl_section
5762 && DECL_THREAD_LOCAL_P (decl))
5763 {
5764 error ("section of %q+D cannot be overridden", *node);
5765 *no_add_attrs = true;
5766 }
5767 else
5768 DECL_SECTION_NAME (decl) = TREE_VALUE (args);
5769 }
5770 else
5771 {
5772 error ("section attribute not allowed for %q+D", *node);
5773 *no_add_attrs = true;
5774 }
5775 }
5776 else
5777 {
5778 error ("%Jsection attributes are not supported for this target", *node);
5779 *no_add_attrs = true;
5780 }
5781
5782 return NULL_TREE;
5783 }
5784
5785 /* Handle a "aligned" attribute; arguments as in
5786 struct attribute_spec.handler. */
5787
5788 static tree
5789 handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5790 int flags, bool *no_add_attrs)
5791 {
5792 tree decl = NULL_TREE;
5793 tree *type = NULL;
5794 int is_type = 0;
5795 tree align_expr = (args ? TREE_VALUE (args)
5796 : size_int (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
5797 int i;
5798
5799 if (DECL_P (*node))
5800 {
5801 decl = *node;
5802 type = &TREE_TYPE (decl);
5803 is_type = TREE_CODE (*node) == TYPE_DECL;
5804 }
5805 else if (TYPE_P (*node))
5806 type = node, is_type = 1;
5807
5808 if (TREE_CODE (align_expr) != INTEGER_CST)
5809 {
5810 error ("requested alignment is not a constant");
5811 *no_add_attrs = true;
5812 }
5813 else if ((i = tree_log2 (align_expr)) == -1)
5814 {
5815 error ("requested alignment is not a power of 2");
5816 *no_add_attrs = true;
5817 }
5818 else if (i > HOST_BITS_PER_INT - 2)
5819 {
5820 error ("requested alignment is too large");
5821 *no_add_attrs = true;
5822 }
5823 else if (is_type)
5824 {
5825 /* If we have a TYPE_DECL, then copy the type, so that we
5826 don't accidentally modify a builtin type. See pushdecl. */
5827 if (decl && TREE_TYPE (decl) != error_mark_node
5828 && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
5829 {
5830 tree tt = TREE_TYPE (decl);
5831 *type = build_variant_type_copy (*type);
5832 DECL_ORIGINAL_TYPE (decl) = tt;
5833 TYPE_NAME (*type) = decl;
5834 TREE_USED (*type) = TREE_USED (decl);
5835 TREE_TYPE (decl) = *type;
5836 }
5837 else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5838 *type = build_variant_type_copy (*type);
5839
5840 TYPE_ALIGN (*type) = (1 << i) * BITS_PER_UNIT;
5841 TYPE_USER_ALIGN (*type) = 1;
5842 }
5843 else if (! VAR_OR_FUNCTION_DECL_P (decl)
5844 && TREE_CODE (decl) != FIELD_DECL)
5845 {
5846 error ("alignment may not be specified for %q+D", decl);
5847 *no_add_attrs = true;
5848 }
5849 else if (TREE_CODE (decl) == FUNCTION_DECL
5850 && DECL_ALIGN (decl) > (1 << i) * BITS_PER_UNIT)
5851 {
5852 if (DECL_USER_ALIGN (decl))
5853 error ("alignment for %q+D was previously specified as %d "
5854 "and may not be decreased", decl,
5855 DECL_ALIGN (decl) / BITS_PER_UNIT);
5856 else
5857 error ("alignment for %q+D must be at least %d", decl,
5858 DECL_ALIGN (decl) / BITS_PER_UNIT);
5859 *no_add_attrs = true;
5860 }
5861 else
5862 {
5863 DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT;
5864 DECL_USER_ALIGN (decl) = 1;
5865 }
5866
5867 return NULL_TREE;
5868 }
5869
5870 /* Handle a "weak" attribute; arguments as in
5871 struct attribute_spec.handler. */
5872
5873 static tree
5874 handle_weak_attribute (tree *node, tree name,
5875 tree ARG_UNUSED (args),
5876 int ARG_UNUSED (flags),
5877 bool * ARG_UNUSED (no_add_attrs))
5878 {
5879 if (TREE_CODE (*node) == FUNCTION_DECL
5880 && DECL_DECLARED_INLINE_P (*node))
5881 {
5882 error ("inline function %q+D cannot be declared weak", *node);
5883 *no_add_attrs = true;
5884 }
5885 else if (TREE_CODE (*node) == FUNCTION_DECL
5886 || TREE_CODE (*node) == VAR_DECL)
5887 declare_weak (*node);
5888 else
5889 warning (OPT_Wattributes, "%qE attribute ignored", name);
5890
5891 return NULL_TREE;
5892 }
5893
5894 /* Handle an "alias" attribute; arguments as in
5895 struct attribute_spec.handler. */
5896
5897 static tree
5898 handle_alias_attribute (tree *node, tree name, tree args,
5899 int ARG_UNUSED (flags), bool *no_add_attrs)
5900 {
5901 tree decl = *node;
5902
5903 if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
5904 || (TREE_CODE (decl) != FUNCTION_DECL
5905 && TREE_PUBLIC (decl) && !DECL_EXTERNAL (decl))
5906 /* A static variable declaration is always a tentative definition,
5907 but the alias is a non-tentative definition which overrides. */
5908 || (TREE_CODE (decl) != FUNCTION_DECL
5909 && ! TREE_PUBLIC (decl) && DECL_INITIAL (decl)))
5910 {
5911 error ("%q+D defined both normally and as an alias", decl);
5912 *no_add_attrs = true;
5913 }
5914
5915 /* Note that the very first time we process a nested declaration,
5916 decl_function_context will not be set. Indeed, *would* never
5917 be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
5918 we do below. After such frobbery, pushdecl would set the context.
5919 In any case, this is never what we want. */
5920 else if (decl_function_context (decl) == 0 && current_function_decl == NULL)
5921 {
5922 tree id;
5923
5924 id = TREE_VALUE (args);
5925 if (TREE_CODE (id) != STRING_CST)
5926 {
5927 error ("alias argument not a string");
5928 *no_add_attrs = true;
5929 return NULL_TREE;
5930 }
5931 id = get_identifier (TREE_STRING_POINTER (id));
5932 /* This counts as a use of the object pointed to. */
5933 TREE_USED (id) = 1;
5934
5935 if (TREE_CODE (decl) == FUNCTION_DECL)
5936 DECL_INITIAL (decl) = error_mark_node;
5937 else
5938 {
5939 if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
5940 DECL_EXTERNAL (decl) = 1;
5941 else
5942 DECL_EXTERNAL (decl) = 0;
5943 TREE_STATIC (decl) = 1;
5944 }
5945 }
5946 else
5947 {
5948 warning (OPT_Wattributes, "%qE attribute ignored", name);
5949 *no_add_attrs = true;
5950 }
5951
5952 return NULL_TREE;
5953 }
5954
5955 /* Handle a "weakref" attribute; arguments as in struct
5956 attribute_spec.handler. */
5957
5958 static tree
5959 handle_weakref_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5960 int flags, bool *no_add_attrs)
5961 {
5962 tree attr = NULL_TREE;
5963
5964 /* We must ignore the attribute when it is associated with
5965 local-scoped decls, since attribute alias is ignored and many
5966 such symbols do not even have a DECL_WEAK field. */
5967 if (decl_function_context (*node) || current_function_decl)
5968 {
5969 warning (OPT_Wattributes, "%qE attribute ignored", name);
5970 *no_add_attrs = true;
5971 return NULL_TREE;
5972 }
5973
5974 /* The idea here is that `weakref("name")' mutates into `weakref,
5975 alias("name")', and weakref without arguments, in turn,
5976 implicitly adds weak. */
5977
5978 if (args)
5979 {
5980 attr = tree_cons (get_identifier ("alias"), args, attr);
5981 attr = tree_cons (get_identifier ("weakref"), NULL_TREE, attr);
5982
5983 *no_add_attrs = true;
5984
5985 decl_attributes (node, attr, flags);
5986 }
5987 else
5988 {
5989 if (lookup_attribute ("alias", DECL_ATTRIBUTES (*node)))
5990 error ("%Jweakref attribute must appear before alias attribute",
5991 *node);
5992
5993 /* Can't call declare_weak because it wants this to be TREE_PUBLIC,
5994 and that isn't supported; and because it wants to add it to
5995 the list of weak decls, which isn't helpful. */
5996 DECL_WEAK (*node) = 1;
5997 }
5998
5999 return NULL_TREE;
6000 }
6001
6002 /* Handle an "visibility" attribute; arguments as in
6003 struct attribute_spec.handler. */
6004
6005 static tree
6006 handle_visibility_attribute (tree *node, tree name, tree args,
6007 int ARG_UNUSED (flags),
6008 bool *ARG_UNUSED (no_add_attrs))
6009 {
6010 tree decl = *node;
6011 tree id = TREE_VALUE (args);
6012 enum symbol_visibility vis;
6013
6014 if (TYPE_P (*node))
6015 {
6016 if (TREE_CODE (*node) == ENUMERAL_TYPE)
6017 /* OK */;
6018 else if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE)
6019 {
6020 warning (OPT_Wattributes, "%qE attribute ignored on non-class types",
6021 name);
6022 return NULL_TREE;
6023 }
6024 else if (TYPE_FIELDS (*node))
6025 {
6026 error ("%qE attribute ignored because %qT is already defined",
6027 name, *node);
6028 return NULL_TREE;
6029 }
6030 }
6031 else if (decl_function_context (decl) != 0 || !TREE_PUBLIC (decl))
6032 {
6033 warning (OPT_Wattributes, "%qE attribute ignored", name);
6034 return NULL_TREE;
6035 }
6036
6037 if (TREE_CODE (id) != STRING_CST)
6038 {
6039 error ("visibility argument not a string");
6040 return NULL_TREE;
6041 }
6042
6043 /* If this is a type, set the visibility on the type decl. */
6044 if (TYPE_P (decl))
6045 {
6046 decl = TYPE_NAME (decl);
6047 if (!decl)
6048 return NULL_TREE;
6049 if (TREE_CODE (decl) == IDENTIFIER_NODE)
6050 {
6051 warning (OPT_Wattributes, "%qE attribute ignored on types",
6052 name);
6053 return NULL_TREE;
6054 }
6055 }
6056
6057 if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
6058 vis = VISIBILITY_DEFAULT;
6059 else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
6060 vis = VISIBILITY_INTERNAL;
6061 else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
6062 vis = VISIBILITY_HIDDEN;
6063 else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
6064 vis = VISIBILITY_PROTECTED;
6065 else
6066 {
6067 error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
6068 vis = VISIBILITY_DEFAULT;
6069 }
6070
6071 if (DECL_VISIBILITY_SPECIFIED (decl)
6072 && vis != DECL_VISIBILITY (decl))
6073 {
6074 tree attributes = (TYPE_P (*node)
6075 ? TYPE_ATTRIBUTES (*node)
6076 : DECL_ATTRIBUTES (decl));
6077 if (lookup_attribute ("visibility", attributes))
6078 error ("%qD redeclared with different visibility", decl);
6079 else if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
6080 && lookup_attribute ("dllimport", attributes))
6081 error ("%qD was declared %qs which implies default visibility",
6082 decl, "dllimport");
6083 else if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
6084 && lookup_attribute ("dllexport", attributes))
6085 error ("%qD was declared %qs which implies default visibility",
6086 decl, "dllexport");
6087 }
6088
6089 DECL_VISIBILITY (decl) = vis;
6090 DECL_VISIBILITY_SPECIFIED (decl) = 1;
6091
6092 /* Go ahead and attach the attribute to the node as well. This is needed
6093 so we can determine whether we have VISIBILITY_DEFAULT because the
6094 visibility was not specified, or because it was explicitly overridden
6095 from the containing scope. */
6096
6097 return NULL_TREE;
6098 }
6099
6100 /* Determine the ELF symbol visibility for DECL, which is either a
6101 variable or a function. It is an error to use this function if a
6102 definition of DECL is not available in this translation unit.
6103 Returns true if the final visibility has been determined by this
6104 function; false if the caller is free to make additional
6105 modifications. */
6106
6107 bool
6108 c_determine_visibility (tree decl)
6109 {
6110 gcc_assert (TREE_CODE (decl) == VAR_DECL
6111 || TREE_CODE (decl) == FUNCTION_DECL);
6112
6113 /* If the user explicitly specified the visibility with an
6114 attribute, honor that. DECL_VISIBILITY will have been set during
6115 the processing of the attribute. We check for an explicit
6116 attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
6117 to distinguish the use of an attribute from the use of a "#pragma
6118 GCC visibility push(...)"; in the latter case we still want other
6119 considerations to be able to overrule the #pragma. */
6120 if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl))
6121 || (TARGET_DLLIMPORT_DECL_ATTRIBUTES
6122 && (lookup_attribute ("dllimport", DECL_ATTRIBUTES (decl))
6123 || lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))))
6124 return true;
6125
6126 /* Set default visibility to whatever the user supplied with
6127 visibility_specified depending on #pragma GCC visibility. */
6128 if (!DECL_VISIBILITY_SPECIFIED (decl))
6129 {
6130 DECL_VISIBILITY (decl) = default_visibility;
6131 DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
6132 }
6133 return false;
6134 }
6135
6136 /* Handle an "tls_model" attribute; arguments as in
6137 struct attribute_spec.handler. */
6138
6139 static tree
6140 handle_tls_model_attribute (tree *node, tree name, tree args,
6141 int ARG_UNUSED (flags), bool *no_add_attrs)
6142 {
6143 tree id;
6144 tree decl = *node;
6145 enum tls_model kind;
6146
6147 *no_add_attrs = true;
6148
6149 if (!DECL_THREAD_LOCAL_P (decl))
6150 {
6151 warning (OPT_Wattributes, "%qE attribute ignored", name);
6152 return NULL_TREE;
6153 }
6154
6155 kind = DECL_TLS_MODEL (decl);
6156 id = TREE_VALUE (args);
6157 if (TREE_CODE (id) != STRING_CST)
6158 {
6159 error ("tls_model argument not a string");
6160 return NULL_TREE;
6161 }
6162
6163 if (!strcmp (TREE_STRING_POINTER (id), "local-exec"))
6164 kind = TLS_MODEL_LOCAL_EXEC;
6165 else if (!strcmp (TREE_STRING_POINTER (id), "initial-exec"))
6166 kind = TLS_MODEL_INITIAL_EXEC;
6167 else if (!strcmp (TREE_STRING_POINTER (id), "local-dynamic"))
6168 kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
6169 else if (!strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
6170 kind = TLS_MODEL_GLOBAL_DYNAMIC;
6171 else
6172 error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
6173
6174 DECL_TLS_MODEL (decl) = kind;
6175 return NULL_TREE;
6176 }
6177
6178 /* Handle a "no_instrument_function" attribute; arguments as in
6179 struct attribute_spec.handler. */
6180
6181 static tree
6182 handle_no_instrument_function_attribute (tree *node, tree name,
6183 tree ARG_UNUSED (args),
6184 int ARG_UNUSED (flags),
6185 bool *no_add_attrs)
6186 {
6187 tree decl = *node;
6188
6189 if (TREE_CODE (decl) != FUNCTION_DECL)
6190 {
6191 error ("%J%qE attribute applies only to functions", decl, name);
6192 *no_add_attrs = true;
6193 }
6194 else if (DECL_INITIAL (decl))
6195 {
6196 error ("%Jcan%'t set %qE attribute after definition", decl, name);
6197 *no_add_attrs = true;
6198 }
6199 else
6200 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
6201
6202 return NULL_TREE;
6203 }
6204
6205 /* Handle a "malloc" attribute; arguments as in
6206 struct attribute_spec.handler. */
6207
6208 static tree
6209 handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
6210 int ARG_UNUSED (flags), bool *no_add_attrs)
6211 {
6212 if (TREE_CODE (*node) == FUNCTION_DECL
6213 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
6214 DECL_IS_MALLOC (*node) = 1;
6215 else
6216 {
6217 warning (OPT_Wattributes, "%qE attribute ignored", name);
6218 *no_add_attrs = true;
6219 }
6220
6221 return NULL_TREE;
6222 }
6223
6224 /* Handle a "alloc_size" attribute; arguments as in
6225 struct attribute_spec.handler. */
6226
6227 static tree
6228 handle_alloc_size_attribute (tree *node, tree ARG_UNUSED (name), tree args,
6229 int ARG_UNUSED (flags), bool *no_add_attrs)
6230 {
6231 unsigned arg_count = type_num_arguments (*node);
6232 for (; args; args = TREE_CHAIN (args))
6233 {
6234 tree position = TREE_VALUE (args);
6235
6236 if (TREE_CODE (position) != INTEGER_CST
6237 || TREE_INT_CST_HIGH (position)
6238 || TREE_INT_CST_LOW (position) < 1
6239 || TREE_INT_CST_LOW (position) > arg_count )
6240 {
6241 warning (OPT_Wattributes,
6242 "alloc_size parameter outside range");
6243 *no_add_attrs = true;
6244 return NULL_TREE;
6245 }
6246 }
6247 return NULL_TREE;
6248 }
6249
6250 /* Handle a "returns_twice" attribute; arguments as in
6251 struct attribute_spec.handler. */
6252
6253 static tree
6254 handle_returns_twice_attribute (tree *node, tree name, tree ARG_UNUSED (args),
6255 int ARG_UNUSED (flags), bool *no_add_attrs)
6256 {
6257 if (TREE_CODE (*node) == FUNCTION_DECL)
6258 DECL_IS_RETURNS_TWICE (*node) = 1;
6259 else
6260 {
6261 warning (OPT_Wattributes, "%qE attribute ignored", name);
6262 *no_add_attrs = true;
6263 }
6264
6265 return NULL_TREE;
6266 }
6267
6268 /* Handle a "no_limit_stack" attribute; arguments as in
6269 struct attribute_spec.handler. */
6270
6271 static tree
6272 handle_no_limit_stack_attribute (tree *node, tree name,
6273 tree ARG_UNUSED (args),
6274 int ARG_UNUSED (flags),
6275 bool *no_add_attrs)
6276 {
6277 tree decl = *node;
6278
6279 if (TREE_CODE (decl) != FUNCTION_DECL)
6280 {
6281 error ("%J%qE attribute applies only to functions", decl, name);
6282 *no_add_attrs = true;
6283 }
6284 else if (DECL_INITIAL (decl))
6285 {
6286 error ("%Jcan%'t set %qE attribute after definition", decl, name);
6287 *no_add_attrs = true;
6288 }
6289 else
6290 DECL_NO_LIMIT_STACK (decl) = 1;
6291
6292 return NULL_TREE;
6293 }
6294
6295 /* Handle a "pure" attribute; arguments as in
6296 struct attribute_spec.handler. */
6297
6298 static tree
6299 handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
6300 int ARG_UNUSED (flags), bool *no_add_attrs)
6301 {
6302 if (TREE_CODE (*node) == FUNCTION_DECL)
6303 DECL_PURE_P (*node) = 1;
6304 /* ??? TODO: Support types. */
6305 else
6306 {
6307 warning (OPT_Wattributes, "%qE attribute ignored", name);
6308 *no_add_attrs = true;
6309 }
6310
6311 return NULL_TREE;
6312 }
6313
6314 /* Handle a "no vops" attribute; arguments as in
6315 struct attribute_spec.handler. */
6316
6317 static tree
6318 handle_novops_attribute (tree *node, tree ARG_UNUSED (name),
6319 tree ARG_UNUSED (args), int ARG_UNUSED (flags),
6320 bool *ARG_UNUSED (no_add_attrs))
6321 {
6322 gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
6323 DECL_IS_NOVOPS (*node) = 1;
6324 return NULL_TREE;
6325 }
6326
6327 /* Handle a "deprecated" attribute; arguments as in
6328 struct attribute_spec.handler. */
6329
6330 static tree
6331 handle_deprecated_attribute (tree *node, tree name,
6332 tree ARG_UNUSED (args), int flags,
6333 bool *no_add_attrs)
6334 {
6335 tree type = NULL_TREE;
6336 int warn = 0;
6337 tree what = NULL_TREE;
6338
6339 if (DECL_P (*node))
6340 {
6341 tree decl = *node;
6342 type = TREE_TYPE (decl);
6343
6344 if (TREE_CODE (decl) == TYPE_DECL
6345 || TREE_CODE (decl) == PARM_DECL
6346 || TREE_CODE (decl) == VAR_DECL
6347 || TREE_CODE (decl) == FUNCTION_DECL
6348 || TREE_CODE (decl) == FIELD_DECL)
6349 TREE_DEPRECATED (decl) = 1;
6350 else
6351 warn = 1;
6352 }
6353 else if (TYPE_P (*node))
6354 {
6355 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
6356 *node = build_variant_type_copy (*node);
6357 TREE_DEPRECATED (*node) = 1;
6358 type = *node;
6359 }
6360 else
6361 warn = 1;
6362
6363 if (warn)
6364 {
6365 *no_add_attrs = true;
6366 if (type && TYPE_NAME (type))
6367 {
6368 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
6369 what = TYPE_NAME (*node);
6370 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
6371 && DECL_NAME (TYPE_NAME (type)))
6372 what = DECL_NAME (TYPE_NAME (type));
6373 }
6374 if (what)
6375 warning (OPT_Wattributes, "%qE attribute ignored for %qE", name, what);
6376 else
6377 warning (OPT_Wattributes, "%qE attribute ignored", name);
6378 }
6379
6380 return NULL_TREE;
6381 }
6382
6383 /* Handle a "vector_size" attribute; arguments as in
6384 struct attribute_spec.handler. */
6385
6386 static tree
6387 handle_vector_size_attribute (tree *node, tree name, tree args,
6388 int ARG_UNUSED (flags),
6389 bool *no_add_attrs)
6390 {
6391 unsigned HOST_WIDE_INT vecsize, nunits;
6392 enum machine_mode orig_mode;
6393 tree type = *node, new_type, size;
6394
6395 *no_add_attrs = true;
6396
6397 size = TREE_VALUE (args);
6398
6399 if (!host_integerp (size, 1))
6400 {
6401 warning (OPT_Wattributes, "%qE attribute ignored", name);
6402 return NULL_TREE;
6403 }
6404
6405 /* Get the vector size (in bytes). */
6406 vecsize = tree_low_cst (size, 1);
6407
6408 /* We need to provide for vector pointers, vector arrays, and
6409 functions returning vectors. For example:
6410
6411 __attribute__((vector_size(16))) short *foo;
6412
6413 In this case, the mode is SI, but the type being modified is
6414 HI, so we need to look further. */
6415
6416 while (POINTER_TYPE_P (type)
6417 || TREE_CODE (type) == FUNCTION_TYPE
6418 || TREE_CODE (type) == METHOD_TYPE
6419 || TREE_CODE (type) == ARRAY_TYPE
6420 || TREE_CODE (type) == OFFSET_TYPE)
6421 type = TREE_TYPE (type);
6422
6423 /* Get the mode of the type being modified. */
6424 orig_mode = TYPE_MODE (type);
6425
6426 if ((!INTEGRAL_TYPE_P (type)
6427 && !SCALAR_FLOAT_TYPE_P (type)
6428 && !FIXED_POINT_TYPE_P (type))
6429 || (!SCALAR_FLOAT_MODE_P (orig_mode)
6430 && GET_MODE_CLASS (orig_mode) != MODE_INT
6431 && !ALL_SCALAR_FIXED_POINT_MODE_P (orig_mode))
6432 || !host_integerp (TYPE_SIZE_UNIT (type), 1))
6433 {
6434 error ("invalid vector type for attribute %qE", name);
6435 return NULL_TREE;
6436 }
6437
6438 if (vecsize % tree_low_cst (TYPE_SIZE_UNIT (type), 1))
6439 {
6440 error ("vector size not an integral multiple of component size");
6441 return NULL;
6442 }
6443
6444 if (vecsize == 0)
6445 {
6446 error ("zero vector size");
6447 return NULL;
6448 }
6449
6450 /* Calculate how many units fit in the vector. */
6451 nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
6452 if (nunits & (nunits - 1))
6453 {
6454 error ("number of components of the vector not a power of two");
6455 return NULL_TREE;
6456 }
6457
6458 new_type = build_vector_type (type, nunits);
6459
6460 /* Build back pointers if needed. */
6461 *node = lang_hooks.types.reconstruct_complex_type (*node, new_type);
6462
6463 return NULL_TREE;
6464 }
6465
6466 /* Handle the "nonnull" attribute. */
6467 static tree
6468 handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
6469 tree args, int ARG_UNUSED (flags),
6470 bool *no_add_attrs)
6471 {
6472 tree type = *node;
6473 unsigned HOST_WIDE_INT attr_arg_num;
6474
6475 /* If no arguments are specified, all pointer arguments should be
6476 non-null. Verify a full prototype is given so that the arguments
6477 will have the correct types when we actually check them later. */
6478 if (!args)
6479 {
6480 if (!TYPE_ARG_TYPES (type))
6481 {
6482 error ("nonnull attribute without arguments on a non-prototype");
6483 *no_add_attrs = true;
6484 }
6485 return NULL_TREE;
6486 }
6487
6488 /* Argument list specified. Verify that each argument number references
6489 a pointer argument. */
6490 for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
6491 {
6492 tree argument;
6493 unsigned HOST_WIDE_INT arg_num = 0, ck_num;
6494
6495 if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
6496 {
6497 error ("nonnull argument has invalid operand number (argument %lu)",
6498 (unsigned long) attr_arg_num);
6499 *no_add_attrs = true;
6500 return NULL_TREE;
6501 }
6502
6503 argument = TYPE_ARG_TYPES (type);
6504 if (argument)
6505 {
6506 for (ck_num = 1; ; ck_num++)
6507 {
6508 if (!argument || ck_num == arg_num)
6509 break;
6510 argument = TREE_CHAIN (argument);
6511 }
6512
6513 if (!argument
6514 || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
6515 {
6516 error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
6517 (unsigned long) attr_arg_num, (unsigned long) arg_num);
6518 *no_add_attrs = true;
6519 return NULL_TREE;
6520 }
6521
6522 if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
6523 {
6524 error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
6525 (unsigned long) attr_arg_num, (unsigned long) arg_num);
6526 *no_add_attrs = true;
6527 return NULL_TREE;
6528 }
6529 }
6530 }
6531
6532 return NULL_TREE;
6533 }
6534
6535 /* Check the argument list of a function call for null in argument slots
6536 that are marked as requiring a non-null pointer argument. The NARGS
6537 arguments are passed in the array ARGARRAY.
6538 */
6539
6540 static void
6541 check_function_nonnull (tree attrs, int nargs, tree *argarray)
6542 {
6543 tree a, args;
6544 int i;
6545
6546 for (a = attrs; a; a = TREE_CHAIN (a))
6547 {
6548 if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
6549 {
6550 args = TREE_VALUE (a);
6551
6552 /* Walk the argument list. If we encounter an argument number we
6553 should check for non-null, do it. If the attribute has no args,
6554 then every pointer argument is checked (in which case the check
6555 for pointer type is done in check_nonnull_arg). */
6556 for (i = 0; i < nargs; i++)
6557 {
6558 if (!args || nonnull_check_p (args, i + 1))
6559 check_function_arguments_recurse (check_nonnull_arg, NULL,
6560 argarray[i],
6561 i + 1);
6562 }
6563 }
6564 }
6565 }
6566
6567 /* Check that the Nth argument of a function call (counting backwards
6568 from the end) is a (pointer)0. The NARGS arguments are passed in the
6569 array ARGARRAY. */
6570
6571 static void
6572 check_function_sentinel (tree attrs, int nargs, tree *argarray, tree typelist)
6573 {
6574 tree attr = lookup_attribute ("sentinel", attrs);
6575
6576 if (attr)
6577 {
6578 int len = 0;
6579 int pos = 0;
6580 tree sentinel;
6581
6582 /* Skip over the named arguments. */
6583 while (typelist && len < nargs)
6584 {
6585 typelist = TREE_CHAIN (typelist);
6586 len++;
6587 }
6588
6589 if (TREE_VALUE (attr))
6590 {
6591 tree p = TREE_VALUE (TREE_VALUE (attr));
6592 pos = TREE_INT_CST_LOW (p);
6593 }
6594
6595 /* The sentinel must be one of the varargs, i.e.
6596 in position >= the number of fixed arguments. */
6597 if ((nargs - 1 - pos) < len)
6598 {
6599 warning (OPT_Wformat,
6600 "not enough variable arguments to fit a sentinel");
6601 return;
6602 }
6603
6604 /* Validate the sentinel. */
6605 sentinel = argarray[nargs - 1 - pos];
6606 if ((!POINTER_TYPE_P (TREE_TYPE (sentinel))
6607 || !integer_zerop (sentinel))
6608 /* Although __null (in C++) is only an integer we allow it
6609 nevertheless, as we are guaranteed that it's exactly
6610 as wide as a pointer, and we don't want to force
6611 users to cast the NULL they have written there.
6612 We warn with -Wstrict-null-sentinel, though. */
6613 && (warn_strict_null_sentinel || null_node != sentinel))
6614 warning (OPT_Wformat, "missing sentinel in function call");
6615 }
6616 }
6617
6618 /* Helper for check_function_nonnull; given a list of operands which
6619 must be non-null in ARGS, determine if operand PARAM_NUM should be
6620 checked. */
6621
6622 static bool
6623 nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
6624 {
6625 unsigned HOST_WIDE_INT arg_num = 0;
6626
6627 for (; args; args = TREE_CHAIN (args))
6628 {
6629 bool found = get_nonnull_operand (TREE_VALUE (args), &arg_num);
6630
6631 gcc_assert (found);
6632
6633 if (arg_num == param_num)
6634 return true;
6635 }
6636 return false;
6637 }
6638
6639 /* Check that the function argument PARAM (which is operand number
6640 PARAM_NUM) is non-null. This is called by check_function_nonnull
6641 via check_function_arguments_recurse. */
6642
6643 static void
6644 check_nonnull_arg (void * ARG_UNUSED (ctx), tree param,
6645 unsigned HOST_WIDE_INT param_num)
6646 {
6647 /* Just skip checking the argument if it's not a pointer. This can
6648 happen if the "nonnull" attribute was given without an operand
6649 list (which means to check every pointer argument). */
6650
6651 if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
6652 return;
6653
6654 if (integer_zerop (param))
6655 warning (OPT_Wnonnull, "null argument where non-null required "
6656 "(argument %lu)", (unsigned long) param_num);
6657 }
6658
6659 /* Helper for nonnull attribute handling; fetch the operand number
6660 from the attribute argument list. */
6661
6662 static bool
6663 get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
6664 {
6665 /* Verify the arg number is a constant. */
6666 if (TREE_CODE (arg_num_expr) != INTEGER_CST
6667 || TREE_INT_CST_HIGH (arg_num_expr) != 0)
6668 return false;
6669
6670 *valp = TREE_INT_CST_LOW (arg_num_expr);
6671 return true;
6672 }
6673
6674 /* Handle a "nothrow" attribute; arguments as in
6675 struct attribute_spec.handler. */
6676
6677 static tree
6678 handle_nothrow_attribute (tree *node, tree name, tree ARG_UNUSED (args),
6679 int ARG_UNUSED (flags), bool *no_add_attrs)
6680 {
6681 if (TREE_CODE (*node) == FUNCTION_DECL)
6682 TREE_NOTHROW (*node) = 1;
6683 /* ??? TODO: Support types. */
6684 else
6685 {
6686 warning (OPT_Wattributes, "%qE attribute ignored", name);
6687 *no_add_attrs = true;
6688 }
6689
6690 return NULL_TREE;
6691 }
6692
6693 /* Handle a "cleanup" attribute; arguments as in
6694 struct attribute_spec.handler. */
6695
6696 static tree
6697 handle_cleanup_attribute (tree *node, tree name, tree args,
6698 int ARG_UNUSED (flags), bool *no_add_attrs)
6699 {
6700 tree decl = *node;
6701 tree cleanup_id, cleanup_decl;
6702
6703 /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
6704 for global destructors in C++. This requires infrastructure that
6705 we don't have generically at the moment. It's also not a feature
6706 we'd be missing too much, since we do have attribute constructor. */
6707 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
6708 {
6709 warning (OPT_Wattributes, "%qE attribute ignored", name);
6710 *no_add_attrs = true;
6711 return NULL_TREE;
6712 }
6713
6714 /* Verify that the argument is a function in scope. */
6715 /* ??? We could support pointers to functions here as well, if
6716 that was considered desirable. */
6717 cleanup_id = TREE_VALUE (args);
6718 if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
6719 {
6720 error ("cleanup argument not an identifier");
6721 *no_add_attrs = true;
6722 return NULL_TREE;
6723 }
6724 cleanup_decl = lookup_name (cleanup_id);
6725 if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
6726 {
6727 error ("cleanup argument not a function");
6728 *no_add_attrs = true;
6729 return NULL_TREE;
6730 }
6731
6732 /* That the function has proper type is checked with the
6733 eventual call to build_function_call. */
6734
6735 return NULL_TREE;
6736 }
6737
6738 /* Handle a "warn_unused_result" attribute. No special handling. */
6739
6740 static tree
6741 handle_warn_unused_result_attribute (tree *node, tree name,
6742 tree ARG_UNUSED (args),
6743 int ARG_UNUSED (flags), bool *no_add_attrs)
6744 {
6745 /* Ignore the attribute for functions not returning any value. */
6746 if (VOID_TYPE_P (TREE_TYPE (*node)))
6747 {
6748 warning (OPT_Wattributes, "%qE attribute ignored", name);
6749 *no_add_attrs = true;
6750 }
6751
6752 return NULL_TREE;
6753 }
6754
6755 /* Handle a "sentinel" attribute. */
6756
6757 static tree
6758 handle_sentinel_attribute (tree *node, tree name, tree args,
6759 int ARG_UNUSED (flags), bool *no_add_attrs)
6760 {
6761 tree params = TYPE_ARG_TYPES (*node);
6762
6763 if (!params)
6764 {
6765 warning (OPT_Wattributes,
6766 "%qE attribute requires prototypes with named arguments", name);
6767 *no_add_attrs = true;
6768 }
6769 else
6770 {
6771 while (TREE_CHAIN (params))
6772 params = TREE_CHAIN (params);
6773
6774 if (VOID_TYPE_P (TREE_VALUE (params)))
6775 {
6776 warning (OPT_Wattributes,
6777 "%qE attribute only applies to variadic functions", name);
6778 *no_add_attrs = true;
6779 }
6780 }
6781
6782 if (args)
6783 {
6784 tree position = TREE_VALUE (args);
6785
6786 if (TREE_CODE (position) != INTEGER_CST)
6787 {
6788 warning (OPT_Wattributes,
6789 "requested position is not an integer constant");
6790 *no_add_attrs = true;
6791 }
6792 else
6793 {
6794 if (tree_int_cst_lt (position, integer_zero_node))
6795 {
6796 warning (OPT_Wattributes,
6797 "requested position is less than zero");
6798 *no_add_attrs = true;
6799 }
6800 }
6801 }
6802
6803 return NULL_TREE;
6804 }
6805
6806 /* Handle a "type_generic" attribute. */
6807
6808 static tree
6809 handle_type_generic_attribute (tree *node, tree ARG_UNUSED (name),
6810 tree ARG_UNUSED (args), int ARG_UNUSED (flags),
6811 bool * ARG_UNUSED (no_add_attrs))
6812 {
6813 tree params;
6814
6815 /* Ensure we have a function type. */
6816 gcc_assert (TREE_CODE (*node) == FUNCTION_TYPE);
6817
6818 params = TYPE_ARG_TYPES (*node);
6819 while (params && ! VOID_TYPE_P (TREE_VALUE (params)))
6820 params = TREE_CHAIN (params);
6821
6822 /* Ensure we have a variadic function. */
6823 gcc_assert (!params);
6824
6825 return NULL_TREE;
6826 }
6827
6828 /* For handling "option" attribute. arguments as in
6829 struct attribute_spec.handler. */
6830
6831 static tree
6832 handle_option_attribute (tree *node, tree name, tree args, int flags,
6833 bool *no_add_attrs)
6834 {
6835 /* Ensure we have a function type. */
6836 if (TREE_CODE (*node) != FUNCTION_DECL)
6837 {
6838 warning (OPT_Wattributes, "%qE attribute ignored", name);
6839 *no_add_attrs = true;
6840 }
6841 else if (targetm.target_option.valid_attribute_p
6842 == default_target_option_valid_attribute_p)
6843 {
6844 warning (OPT_Wattributes,
6845 "%qE attribute is not supported on this machine",
6846 name);
6847 *no_add_attrs = true;
6848 }
6849 else if (! targetm.target_option.valid_attribute_p (*node, name, args,
6850 flags))
6851 *no_add_attrs = true;
6852
6853 return NULL_TREE;
6854 }
6855
6856 /* Arguments being collected for optimization. */
6857 typedef const char *const_char_p; /* For DEF_VEC_P. */
6858 DEF_VEC_P(const_char_p);
6859 DEF_VEC_ALLOC_P(const_char_p, gc);
6860 static GTY(()) VEC(const_char_p, gc) *optimize_args;
6861
6862
6863 /* Inner function to convert a TREE_LIST to argv string to parse the optimize
6864 options in ARGS. ATTR_P is true if this is for attribute(optimize), and
6865 false for #pragma GCC optimize. */
6866
6867 bool
6868 parse_optimize_options (tree args, bool attr_p)
6869 {
6870 bool ret = true;
6871 unsigned opt_argc;
6872 unsigned i;
6873 const char **opt_argv;
6874 tree ap;
6875
6876 /* Build up argv vector. Just in case the string is stored away, use garbage
6877 collected strings. */
6878 VEC_truncate (const_char_p, optimize_args, 0);
6879 VEC_safe_push (const_char_p, gc, optimize_args, NULL);
6880
6881 for (ap = args; ap != NULL_TREE; ap = TREE_CHAIN (ap))
6882 {
6883 tree value = TREE_VALUE (ap);
6884
6885 if (TREE_CODE (value) == INTEGER_CST)
6886 {
6887 char buffer[20];
6888 sprintf (buffer, "-O%ld", (long) TREE_INT_CST_LOW (value));
6889 VEC_safe_push (const_char_p, gc, optimize_args, ggc_strdup (buffer));
6890 }
6891
6892 else if (TREE_CODE (value) == STRING_CST)
6893 {
6894 /* Split string into multiple substrings. */
6895 size_t len = TREE_STRING_LENGTH (value);
6896 char *p = ASTRDUP (TREE_STRING_POINTER (value));
6897 char *end = p + len;
6898 char *comma;
6899 char *next_p = p;
6900
6901 while (next_p != NULL)
6902 {
6903 size_t len2;
6904 char *q, *r;
6905
6906 p = next_p;
6907 comma = strchr (p, ',');
6908 if (comma)
6909 {
6910 len2 = comma - p;
6911 *comma = '\0';
6912 next_p = comma+1;
6913 }
6914 else
6915 {
6916 len2 = end - p;
6917 next_p = NULL;
6918 }
6919
6920 r = q = (char *) ggc_alloc (len2 + 3);
6921
6922 /* If the user supplied -Oxxx or -fxxx, only allow -Oxxx or -fxxx
6923 options. */
6924 if (*p == '-' && p[1] != 'O' && p[1] != 'f')
6925 {
6926 ret = false;
6927 if (attr_p)
6928 warning (OPT_Wattributes,
6929 "Bad option %s to optimize attribute.", p);
6930 else
6931 warning (OPT_Wpragmas,
6932 "Bad option %s to pragma attribute", p);
6933 continue;
6934 }
6935
6936 if (*p != '-')
6937 {
6938 *r++ = '-';
6939
6940 /* Assume that Ox is -Ox, a numeric value is -Ox, a s by
6941 itself is -Os, and any other switch begins with a -f. */
6942 if ((*p >= '0' && *p <= '9')
6943 || (p[0] == 's' && p[1] == '\0'))
6944 *r++ = 'O';
6945 else if (*p != 'O')
6946 *r++ = 'f';
6947 }
6948
6949 memcpy (r, p, len2);
6950 r[len2] = '\0';
6951 VEC_safe_push (const_char_p, gc, optimize_args, q);
6952 }
6953
6954 }
6955 }
6956
6957 opt_argc = VEC_length (const_char_p, optimize_args);
6958 opt_argv = (const char **) alloca (sizeof (char *) * (opt_argc + 1));
6959
6960 for (i = 1; i < opt_argc; i++)
6961 opt_argv[i] = VEC_index (const_char_p, optimize_args, i);
6962
6963 /* Now parse the options. */
6964 decode_options (opt_argc, opt_argv);
6965
6966 VEC_truncate (const_char_p, optimize_args, 0);
6967 return ret;
6968 }
6969
6970 /* For handling "optimize" attribute. arguments as in
6971 struct attribute_spec.handler. */
6972
6973 static tree
6974 handle_optimize_attribute (tree *node, tree name, tree args,
6975 int ARG_UNUSED (flags), bool *no_add_attrs)
6976 {
6977 /* Ensure we have a function type. */
6978 if (TREE_CODE (*node) != FUNCTION_DECL)
6979 {
6980 warning (OPT_Wattributes, "%qE attribute ignored", name);
6981 *no_add_attrs = true;
6982 }
6983 else
6984 {
6985 struct cl_optimization cur_opts;
6986 tree old_opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node);
6987
6988 /* Save current options. */
6989 cl_optimization_save (&cur_opts);
6990
6991 /* If we previously had some optimization options, use them as the
6992 default. */
6993 if (old_opts)
6994 cl_optimization_restore (TREE_OPTIMIZATION (old_opts));
6995
6996 /* Parse options, and update the vector. */
6997 parse_optimize_options (args, true);
6998 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node)
6999 = build_optimization_node ();
7000
7001 /* Restore current options. */
7002 cl_optimization_restore (&cur_opts);
7003 }
7004
7005 return NULL_TREE;
7006 }
7007 \f
7008 /* Check for valid arguments being passed to a function.
7009 ATTRS is a list of attributes. There are NARGS arguments in the array
7010 ARGARRAY. TYPELIST is the list of argument types for the function.
7011 */
7012 void
7013 check_function_arguments (tree attrs, int nargs, tree *argarray, tree typelist)
7014 {
7015 /* Check for null being passed in a pointer argument that must be
7016 non-null. We also need to do this if format checking is enabled. */
7017
7018 if (warn_nonnull)
7019 check_function_nonnull (attrs, nargs, argarray);
7020
7021 /* Check for errors in format strings. */
7022
7023 if (warn_format || warn_missing_format_attribute)
7024 check_function_format (attrs, nargs, argarray);
7025
7026 if (warn_format)
7027 check_function_sentinel (attrs, nargs, argarray, typelist);
7028 }
7029
7030 /* Generic argument checking recursion routine. PARAM is the argument to
7031 be checked. PARAM_NUM is the number of the argument. CALLBACK is invoked
7032 once the argument is resolved. CTX is context for the callback. */
7033 void
7034 check_function_arguments_recurse (void (*callback)
7035 (void *, tree, unsigned HOST_WIDE_INT),
7036 void *ctx, tree param,
7037 unsigned HOST_WIDE_INT param_num)
7038 {
7039 if (CONVERT_EXPR_P (param)
7040 && (TYPE_PRECISION (TREE_TYPE (param))
7041 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (param, 0)))))
7042 {
7043 /* Strip coercion. */
7044 check_function_arguments_recurse (callback, ctx,
7045 TREE_OPERAND (param, 0), param_num);
7046 return;
7047 }
7048
7049 if (TREE_CODE (param) == CALL_EXPR)
7050 {
7051 tree type = TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (param)));
7052 tree attrs;
7053 bool found_format_arg = false;
7054
7055 /* See if this is a call to a known internationalization function
7056 that modifies a format arg. Such a function may have multiple
7057 format_arg attributes (for example, ngettext). */
7058
7059 for (attrs = TYPE_ATTRIBUTES (type);
7060 attrs;
7061 attrs = TREE_CHAIN (attrs))
7062 if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
7063 {
7064 tree inner_arg;
7065 tree format_num_expr;
7066 int format_num;
7067 int i;
7068 call_expr_arg_iterator iter;
7069
7070 /* Extract the argument number, which was previously checked
7071 to be valid. */
7072 format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
7073
7074 gcc_assert (TREE_CODE (format_num_expr) == INTEGER_CST
7075 && !TREE_INT_CST_HIGH (format_num_expr));
7076
7077 format_num = TREE_INT_CST_LOW (format_num_expr);
7078
7079 for (inner_arg = first_call_expr_arg (param, &iter), i = 1;
7080 inner_arg != 0;
7081 inner_arg = next_call_expr_arg (&iter), i++)
7082 if (i == format_num)
7083 {
7084 check_function_arguments_recurse (callback, ctx,
7085 inner_arg, param_num);
7086 found_format_arg = true;
7087 break;
7088 }
7089 }
7090
7091 /* If we found a format_arg attribute and did a recursive check,
7092 we are done with checking this argument. Otherwise, we continue
7093 and this will be considered a non-literal. */
7094 if (found_format_arg)
7095 return;
7096 }
7097
7098 if (TREE_CODE (param) == COND_EXPR)
7099 {
7100 /* Check both halves of the conditional expression. */
7101 check_function_arguments_recurse (callback, ctx,
7102 TREE_OPERAND (param, 1), param_num);
7103 check_function_arguments_recurse (callback, ctx,
7104 TREE_OPERAND (param, 2), param_num);
7105 return;
7106 }
7107
7108 (*callback) (ctx, param, param_num);
7109 }
7110
7111 /* Checks the number of arguments NARGS against the required number
7112 REQUIRED and issues an error if there is a mismatch. Returns true
7113 if the number of arguments is correct, otherwise false. */
7114
7115 static bool
7116 validate_nargs (tree fndecl, int nargs, int required)
7117 {
7118 if (nargs < required)
7119 {
7120 error ("not enough arguments to function %qE", fndecl);
7121 return false;
7122 }
7123 else if (nargs > required)
7124 {
7125 error ("too many arguments to function %qE", fndecl);
7126 return false;
7127 }
7128 return true;
7129 }
7130
7131 /* Verifies the NARGS arguments ARGS to the builtin function FNDECL.
7132 Returns false if there was an error, otherwise true. */
7133
7134 bool
7135 check_builtin_function_arguments (tree fndecl, int nargs, tree *args)
7136 {
7137 if (!DECL_BUILT_IN (fndecl)
7138 || DECL_BUILT_IN_CLASS (fndecl) != BUILT_IN_NORMAL)
7139 return true;
7140
7141 switch (DECL_FUNCTION_CODE (fndecl))
7142 {
7143 case BUILT_IN_CONSTANT_P:
7144 return validate_nargs (fndecl, nargs, 1);
7145
7146 case BUILT_IN_ISFINITE:
7147 case BUILT_IN_ISINF:
7148 case BUILT_IN_ISINF_SIGN:
7149 case BUILT_IN_ISNAN:
7150 case BUILT_IN_ISNORMAL:
7151 if (validate_nargs (fndecl, nargs, 1))
7152 {
7153 if (TREE_CODE (TREE_TYPE (args[0])) != REAL_TYPE)
7154 {
7155 error ("non-floating-point argument in call to "
7156 "function %qE", fndecl);
7157 return false;
7158 }
7159 return true;
7160 }
7161 return false;
7162
7163 case BUILT_IN_ISGREATER:
7164 case BUILT_IN_ISGREATEREQUAL:
7165 case BUILT_IN_ISLESS:
7166 case BUILT_IN_ISLESSEQUAL:
7167 case BUILT_IN_ISLESSGREATER:
7168 case BUILT_IN_ISUNORDERED:
7169 if (validate_nargs (fndecl, nargs, 2))
7170 {
7171 enum tree_code code0, code1;
7172 code0 = TREE_CODE (TREE_TYPE (args[0]));
7173 code1 = TREE_CODE (TREE_TYPE (args[1]));
7174 if (!((code0 == REAL_TYPE && code1 == REAL_TYPE)
7175 || (code0 == REAL_TYPE && code1 == INTEGER_TYPE)
7176 || (code0 == INTEGER_TYPE && code1 == REAL_TYPE)))
7177 {
7178 error ("non-floating-point arguments in call to "
7179 "function %qE", fndecl);
7180 return false;
7181 }
7182 return true;
7183 }
7184 return false;
7185
7186 case BUILT_IN_FPCLASSIFY:
7187 if (validate_nargs (fndecl, nargs, 6))
7188 {
7189 unsigned i;
7190
7191 for (i=0; i<5; i++)
7192 if (TREE_CODE (args[i]) != INTEGER_CST)
7193 {
7194 error ("non-const integer argument %u in call to function %qE",
7195 i+1, fndecl);
7196 return false;
7197 }
7198
7199 if (TREE_CODE (TREE_TYPE (args[5])) != REAL_TYPE)
7200 {
7201 error ("non-floating-point argument in call to function %qE",
7202 fndecl);
7203 return false;
7204 }
7205 return true;
7206 }
7207 return false;
7208
7209 default:
7210 return true;
7211 }
7212 }
7213
7214 /* Function to help qsort sort FIELD_DECLs by name order. */
7215
7216 int
7217 field_decl_cmp (const void *x_p, const void *y_p)
7218 {
7219 const tree *const x = (const tree *const) x_p;
7220 const tree *const y = (const tree *const) y_p;
7221
7222 if (DECL_NAME (*x) == DECL_NAME (*y))
7223 /* A nontype is "greater" than a type. */
7224 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
7225 if (DECL_NAME (*x) == NULL_TREE)
7226 return -1;
7227 if (DECL_NAME (*y) == NULL_TREE)
7228 return 1;
7229 if (DECL_NAME (*x) < DECL_NAME (*y))
7230 return -1;
7231 return 1;
7232 }
7233
7234 static struct {
7235 gt_pointer_operator new_value;
7236 void *cookie;
7237 } resort_data;
7238
7239 /* This routine compares two fields like field_decl_cmp but using the
7240 pointer operator in resort_data. */
7241
7242 static int
7243 resort_field_decl_cmp (const void *x_p, const void *y_p)
7244 {
7245 const tree *const x = (const tree *const) x_p;
7246 const tree *const y = (const tree *const) y_p;
7247
7248 if (DECL_NAME (*x) == DECL_NAME (*y))
7249 /* A nontype is "greater" than a type. */
7250 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
7251 if (DECL_NAME (*x) == NULL_TREE)
7252 return -1;
7253 if (DECL_NAME (*y) == NULL_TREE)
7254 return 1;
7255 {
7256 tree d1 = DECL_NAME (*x);
7257 tree d2 = DECL_NAME (*y);
7258 resort_data.new_value (&d1, resort_data.cookie);
7259 resort_data.new_value (&d2, resort_data.cookie);
7260 if (d1 < d2)
7261 return -1;
7262 }
7263 return 1;
7264 }
7265
7266 /* Resort DECL_SORTED_FIELDS because pointers have been reordered. */
7267
7268 void
7269 resort_sorted_fields (void *obj,
7270 void * ARG_UNUSED (orig_obj),
7271 gt_pointer_operator new_value,
7272 void *cookie)
7273 {
7274 struct sorted_fields_type *sf = (struct sorted_fields_type *) obj;
7275 resort_data.new_value = new_value;
7276 resort_data.cookie = cookie;
7277 qsort (&sf->elts[0], sf->len, sizeof (tree),
7278 resort_field_decl_cmp);
7279 }
7280
7281 /* Subroutine of c_parse_error.
7282 Return the result of concatenating LHS and RHS. RHS is really
7283 a string literal, its first character is indicated by RHS_START and
7284 RHS_SIZE is its length (including the terminating NUL character).
7285
7286 The caller is responsible for deleting the returned pointer. */
7287
7288 static char *
7289 catenate_strings (const char *lhs, const char *rhs_start, int rhs_size)
7290 {
7291 const int lhs_size = strlen (lhs);
7292 char *result = XNEWVEC (char, lhs_size + rhs_size);
7293 strncpy (result, lhs, lhs_size);
7294 strncpy (result + lhs_size, rhs_start, rhs_size);
7295 return result;
7296 }
7297
7298 /* Issue the error given by GMSGID, indicating that it occurred before
7299 TOKEN, which had the associated VALUE. */
7300
7301 void
7302 c_parse_error (const char *gmsgid, enum cpp_ttype token, tree value)
7303 {
7304 #define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
7305
7306 char *message = NULL;
7307
7308 if (token == CPP_EOF)
7309 message = catenate_messages (gmsgid, " at end of input");
7310 else if (token == CPP_CHAR || token == CPP_WCHAR || token == CPP_CHAR16
7311 || token == CPP_CHAR32)
7312 {
7313 unsigned int val = TREE_INT_CST_LOW (value);
7314 const char *prefix;
7315
7316 switch (token)
7317 {
7318 default:
7319 prefix = "";
7320 break;
7321 case CPP_WCHAR:
7322 prefix = "L";
7323 break;
7324 case CPP_CHAR16:
7325 prefix = "u";
7326 break;
7327 case CPP_CHAR32:
7328 prefix = "U";
7329 break;
7330 }
7331
7332 if (val <= UCHAR_MAX && ISGRAPH (val))
7333 message = catenate_messages (gmsgid, " before %s'%c'");
7334 else
7335 message = catenate_messages (gmsgid, " before %s'\\x%x'");
7336
7337 error (message, prefix, val);
7338 free (message);
7339 message = NULL;
7340 }
7341 else if (token == CPP_STRING || token == CPP_WSTRING || token == CPP_STRING16
7342 || token == CPP_STRING32)
7343 message = catenate_messages (gmsgid, " before string constant");
7344 else if (token == CPP_NUMBER)
7345 message = catenate_messages (gmsgid, " before numeric constant");
7346 else if (token == CPP_NAME)
7347 {
7348 message = catenate_messages (gmsgid, " before %qE");
7349 error (message, value);
7350 free (message);
7351 message = NULL;
7352 }
7353 else if (token == CPP_PRAGMA)
7354 message = catenate_messages (gmsgid, " before %<#pragma%>");
7355 else if (token == CPP_PRAGMA_EOL)
7356 message = catenate_messages (gmsgid, " before end of line");
7357 else if (token < N_TTYPES)
7358 {
7359 message = catenate_messages (gmsgid, " before %qs token");
7360 error (message, cpp_type2name (token));
7361 free (message);
7362 message = NULL;
7363 }
7364 else
7365 error (gmsgid);
7366
7367 if (message)
7368 {
7369 error (message);
7370 free (message);
7371 }
7372 #undef catenate_messages
7373 }
7374
7375 /* Walk a gimplified function and warn for functions whose return value is
7376 ignored and attribute((warn_unused_result)) is set. This is done before
7377 inlining, so we don't have to worry about that. */
7378
7379 void
7380 c_warn_unused_result (gimple_seq seq)
7381 {
7382 tree fdecl, ftype;
7383 gimple_stmt_iterator i;
7384
7385 for (i = gsi_start (seq); !gsi_end_p (i); gsi_next (&i))
7386 {
7387 gimple g = gsi_stmt (i);
7388
7389 switch (gimple_code (g))
7390 {
7391 case GIMPLE_BIND:
7392 c_warn_unused_result (gimple_bind_body (g));
7393 break;
7394 case GIMPLE_TRY:
7395 c_warn_unused_result (gimple_try_eval (g));
7396 c_warn_unused_result (gimple_try_cleanup (g));
7397 break;
7398 case GIMPLE_CATCH:
7399 c_warn_unused_result (gimple_catch_handler (g));
7400 break;
7401 case GIMPLE_EH_FILTER:
7402 c_warn_unused_result (gimple_eh_filter_failure (g));
7403 break;
7404
7405 case GIMPLE_CALL:
7406 if (gimple_call_lhs (g))
7407 break;
7408
7409 /* This is a naked call, as opposed to a GIMPLE_CALL with an
7410 LHS. All calls whose value is ignored should be
7411 represented like this. Look for the attribute. */
7412 fdecl = gimple_call_fn (g);
7413 if (TREE_CODE (fdecl) == FUNCTION_DECL)
7414 ftype = TREE_TYPE (fdecl);
7415 else
7416 {
7417 ftype = TREE_TYPE (fdecl);
7418 /* Look past pointer-to-function to the function type itself. */
7419 ftype = TREE_TYPE (ftype);
7420 }
7421
7422 if (lookup_attribute ("warn_unused_result", TYPE_ATTRIBUTES (ftype)))
7423 {
7424 location_t loc = gimple_location (g);
7425
7426 if (fdecl)
7427 warning (0, "%Hignoring return value of %qD, "
7428 "declared with attribute warn_unused_result",
7429 &loc, fdecl);
7430 else
7431 warning (0, "%Hignoring return value of function "
7432 "declared with attribute warn_unused_result",
7433 &loc);
7434 }
7435 break;
7436
7437 default:
7438 /* Not a container, not a call, or a call whose value is used. */
7439 break;
7440 }
7441 }
7442 }
7443
7444 /* Convert a character from the host to the target execution character
7445 set. cpplib handles this, mostly. */
7446
7447 HOST_WIDE_INT
7448 c_common_to_target_charset (HOST_WIDE_INT c)
7449 {
7450 /* Character constants in GCC proper are sign-extended under -fsigned-char,
7451 zero-extended under -fno-signed-char. cpplib insists that characters
7452 and character constants are always unsigned. Hence we must convert
7453 back and forth. */
7454 cppchar_t uc = ((cppchar_t)c) & ((((cppchar_t)1) << CHAR_BIT)-1);
7455
7456 uc = cpp_host_to_exec_charset (parse_in, uc);
7457
7458 if (flag_signed_char)
7459 return ((HOST_WIDE_INT)uc) << (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE)
7460 >> (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE);
7461 else
7462 return uc;
7463 }
7464
7465 /* Build the result of __builtin_offsetof. EXPR is a nested sequence of
7466 component references, with STOP_REF, or alternatively an INDIRECT_REF of
7467 NULL, at the bottom; much like the traditional rendering of offsetof as a
7468 macro. Returns the folded and properly cast result. */
7469
7470 static tree
7471 fold_offsetof_1 (tree expr, tree stop_ref)
7472 {
7473 enum tree_code code = PLUS_EXPR;
7474 tree base, off, t;
7475
7476 if (expr == stop_ref && TREE_CODE (expr) != ERROR_MARK)
7477 return size_zero_node;
7478
7479 switch (TREE_CODE (expr))
7480 {
7481 case ERROR_MARK:
7482 return expr;
7483
7484 case VAR_DECL:
7485 error ("cannot apply %<offsetof%> to static data member %qD", expr);
7486 return error_mark_node;
7487
7488 case CALL_EXPR:
7489 error ("cannot apply %<offsetof%> when %<operator[]%> is overloaded");
7490 return error_mark_node;
7491
7492 case INTEGER_CST:
7493 gcc_assert (integer_zerop (expr));
7494 return size_zero_node;
7495
7496 case NOP_EXPR:
7497 case INDIRECT_REF:
7498 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
7499 gcc_assert (base == error_mark_node || base == size_zero_node);
7500 return base;
7501
7502 case COMPONENT_REF:
7503 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
7504 if (base == error_mark_node)
7505 return base;
7506
7507 t = TREE_OPERAND (expr, 1);
7508 if (DECL_C_BIT_FIELD (t))
7509 {
7510 error ("attempt to take address of bit-field structure "
7511 "member %qD", t);
7512 return error_mark_node;
7513 }
7514 off = size_binop (PLUS_EXPR, DECL_FIELD_OFFSET (t),
7515 size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t), 1)
7516 / BITS_PER_UNIT));
7517 break;
7518
7519 case ARRAY_REF:
7520 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
7521 if (base == error_mark_node)
7522 return base;
7523
7524 t = TREE_OPERAND (expr, 1);
7525 if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
7526 {
7527 code = MINUS_EXPR;
7528 t = fold_build1 (NEGATE_EXPR, TREE_TYPE (t), t);
7529 }
7530 t = convert (sizetype, t);
7531 off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
7532 break;
7533
7534 case COMPOUND_EXPR:
7535 /* Handle static members of volatile structs. */
7536 t = TREE_OPERAND (expr, 1);
7537 gcc_assert (TREE_CODE (t) == VAR_DECL);
7538 return fold_offsetof_1 (t, stop_ref);
7539
7540 default:
7541 gcc_unreachable ();
7542 }
7543
7544 return size_binop (code, base, off);
7545 }
7546
7547 tree
7548 fold_offsetof (tree expr, tree stop_ref)
7549 {
7550 /* Convert back from the internal sizetype to size_t. */
7551 return convert (size_type_node, fold_offsetof_1 (expr, stop_ref));
7552 }
7553
7554 /* Print an error message for an invalid lvalue. USE says
7555 how the lvalue is being used and so selects the error message. */
7556
7557 void
7558 lvalue_error (enum lvalue_use use)
7559 {
7560 switch (use)
7561 {
7562 case lv_assign:
7563 error ("lvalue required as left operand of assignment");
7564 break;
7565 case lv_increment:
7566 error ("lvalue required as increment operand");
7567 break;
7568 case lv_decrement:
7569 error ("lvalue required as decrement operand");
7570 break;
7571 case lv_addressof:
7572 error ("lvalue required as unary %<&%> operand");
7573 break;
7574 case lv_asm:
7575 error ("lvalue required in asm statement");
7576 break;
7577 default:
7578 gcc_unreachable ();
7579 }
7580 }
7581 \f
7582 /* *PTYPE is an incomplete array. Complete it with a domain based on
7583 INITIAL_VALUE. If INITIAL_VALUE is not present, use 1 if DO_DEFAULT
7584 is true. Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
7585 2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty. */
7586
7587 int
7588 complete_array_type (tree *ptype, tree initial_value, bool do_default)
7589 {
7590 tree maxindex, type, main_type, elt, unqual_elt;
7591 int failure = 0, quals;
7592 hashval_t hashcode = 0;
7593
7594 maxindex = size_zero_node;
7595 if (initial_value)
7596 {
7597 if (TREE_CODE (initial_value) == STRING_CST)
7598 {
7599 int eltsize
7600 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
7601 maxindex = size_int (TREE_STRING_LENGTH (initial_value)/eltsize - 1);
7602 }
7603 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
7604 {
7605 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
7606
7607 if (VEC_empty (constructor_elt, v))
7608 {
7609 if (pedantic)
7610 failure = 3;
7611 maxindex = integer_minus_one_node;
7612 }
7613 else
7614 {
7615 tree curindex;
7616 unsigned HOST_WIDE_INT cnt;
7617 constructor_elt *ce;
7618
7619 if (VEC_index (constructor_elt, v, 0)->index)
7620 maxindex = fold_convert (sizetype,
7621 VEC_index (constructor_elt,
7622 v, 0)->index);
7623 curindex = maxindex;
7624
7625 for (cnt = 1;
7626 VEC_iterate (constructor_elt, v, cnt, ce);
7627 cnt++)
7628 {
7629 if (ce->index)
7630 curindex = fold_convert (sizetype, ce->index);
7631 else
7632 curindex = size_binop (PLUS_EXPR, curindex, size_one_node);
7633
7634 if (tree_int_cst_lt (maxindex, curindex))
7635 maxindex = curindex;
7636 }
7637 }
7638 }
7639 else
7640 {
7641 /* Make an error message unless that happened already. */
7642 if (initial_value != error_mark_node)
7643 failure = 1;
7644 }
7645 }
7646 else
7647 {
7648 failure = 2;
7649 if (!do_default)
7650 return failure;
7651 }
7652
7653 type = *ptype;
7654 elt = TREE_TYPE (type);
7655 quals = TYPE_QUALS (strip_array_types (elt));
7656 if (quals == 0)
7657 unqual_elt = elt;
7658 else
7659 unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
7660
7661 /* Using build_distinct_type_copy and modifying things afterward instead
7662 of using build_array_type to create a new type preserves all of the
7663 TYPE_LANG_FLAG_? bits that the front end may have set. */
7664 main_type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
7665 TREE_TYPE (main_type) = unqual_elt;
7666 TYPE_DOMAIN (main_type) = build_index_type (maxindex);
7667 layout_type (main_type);
7668
7669 /* Make sure we have the canonical MAIN_TYPE. */
7670 hashcode = iterative_hash_object (TYPE_HASH (unqual_elt), hashcode);
7671 hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (main_type)),
7672 hashcode);
7673 main_type = type_hash_canon (hashcode, main_type);
7674
7675 /* Fix the canonical type. */
7676 if (TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (main_type))
7677 || TYPE_STRUCTURAL_EQUALITY_P (TYPE_DOMAIN (main_type)))
7678 SET_TYPE_STRUCTURAL_EQUALITY (main_type);
7679 else if (TYPE_CANONICAL (TREE_TYPE (main_type)) != TREE_TYPE (main_type)
7680 || (TYPE_CANONICAL (TYPE_DOMAIN (main_type))
7681 != TYPE_DOMAIN (main_type)))
7682 TYPE_CANONICAL (main_type)
7683 = build_array_type (TYPE_CANONICAL (TREE_TYPE (main_type)),
7684 TYPE_CANONICAL (TYPE_DOMAIN (main_type)));
7685 else
7686 TYPE_CANONICAL (main_type) = main_type;
7687
7688 if (quals == 0)
7689 type = main_type;
7690 else
7691 type = c_build_qualified_type (main_type, quals);
7692
7693 if (COMPLETE_TYPE_P (type)
7694 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
7695 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
7696 {
7697 error ("size of array is too large");
7698 /* If we proceed with the array type as it is, we'll eventually
7699 crash in tree_low_cst(). */
7700 type = error_mark_node;
7701 }
7702
7703 *ptype = type;
7704 return failure;
7705 }
7706
7707 \f
7708 /* Used to help initialize the builtin-types.def table. When a type of
7709 the correct size doesn't exist, use error_mark_node instead of NULL.
7710 The later results in segfaults even when a decl using the type doesn't
7711 get invoked. */
7712
7713 tree
7714 builtin_type_for_size (int size, bool unsignedp)
7715 {
7716 tree type = lang_hooks.types.type_for_size (size, unsignedp);
7717 return type ? type : error_mark_node;
7718 }
7719
7720 /* A helper function for resolve_overloaded_builtin in resolving the
7721 overloaded __sync_ builtins. Returns a positive power of 2 if the
7722 first operand of PARAMS is a pointer to a supported data type.
7723 Returns 0 if an error is encountered. */
7724
7725 static int
7726 sync_resolve_size (tree function, tree params)
7727 {
7728 tree type;
7729 int size;
7730
7731 if (params == NULL)
7732 {
7733 error ("too few arguments to function %qE", function);
7734 return 0;
7735 }
7736
7737 type = TREE_TYPE (TREE_VALUE (params));
7738 if (TREE_CODE (type) != POINTER_TYPE)
7739 goto incompatible;
7740
7741 type = TREE_TYPE (type);
7742 if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
7743 goto incompatible;
7744
7745 size = tree_low_cst (TYPE_SIZE_UNIT (type), 1);
7746 if (size == 1 || size == 2 || size == 4 || size == 8 || size == 16)
7747 return size;
7748
7749 incompatible:
7750 error ("incompatible type for argument %d of %qE", 1, function);
7751 return 0;
7752 }
7753
7754 /* A helper function for resolve_overloaded_builtin. Adds casts to
7755 PARAMS to make arguments match up with those of FUNCTION. Drops
7756 the variadic arguments at the end. Returns false if some error
7757 was encountered; true on success. */
7758
7759 static bool
7760 sync_resolve_params (tree orig_function, tree function, tree params)
7761 {
7762 tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (function));
7763 tree ptype;
7764 int number;
7765
7766 /* We've declared the implementation functions to use "volatile void *"
7767 as the pointer parameter, so we shouldn't get any complaints from the
7768 call to check_function_arguments what ever type the user used. */
7769 arg_types = TREE_CHAIN (arg_types);
7770 ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
7771 number = 2;
7772
7773 /* For the rest of the values, we need to cast these to FTYPE, so that we
7774 don't get warnings for passing pointer types, etc. */
7775 while (arg_types != void_list_node)
7776 {
7777 tree val;
7778
7779 params = TREE_CHAIN (params);
7780 if (params == NULL)
7781 {
7782 error ("too few arguments to function %qE", orig_function);
7783 return false;
7784 }
7785
7786 /* ??? Ideally for the first conversion we'd use convert_for_assignment
7787 so that we get warnings for anything that doesn't match the pointer
7788 type. This isn't portable across the C and C++ front ends atm. */
7789 val = TREE_VALUE (params);
7790 val = convert (ptype, val);
7791 val = convert (TREE_VALUE (arg_types), val);
7792 TREE_VALUE (params) = val;
7793
7794 arg_types = TREE_CHAIN (arg_types);
7795 number++;
7796 }
7797
7798 /* The definition of these primitives is variadic, with the remaining
7799 being "an optional list of variables protected by the memory barrier".
7800 No clue what that's supposed to mean, precisely, but we consider all
7801 call-clobbered variables to be protected so we're safe. */
7802 TREE_CHAIN (params) = NULL;
7803
7804 return true;
7805 }
7806
7807 /* A helper function for resolve_overloaded_builtin. Adds a cast to
7808 RESULT to make it match the type of the first pointer argument in
7809 PARAMS. */
7810
7811 static tree
7812 sync_resolve_return (tree params, tree result)
7813 {
7814 tree ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
7815 ptype = TYPE_MAIN_VARIANT (ptype);
7816 return convert (ptype, result);
7817 }
7818
7819 /* Some builtin functions are placeholders for other expressions. This
7820 function should be called immediately after parsing the call expression
7821 before surrounding code has committed to the type of the expression.
7822
7823 FUNCTION is the DECL that has been invoked; it is known to be a builtin.
7824 PARAMS is the argument list for the call. The return value is non-null
7825 when expansion is complete, and null if normal processing should
7826 continue. */
7827
7828 tree
7829 resolve_overloaded_builtin (tree function, tree params)
7830 {
7831 enum built_in_function orig_code = DECL_FUNCTION_CODE (function);
7832 switch (DECL_BUILT_IN_CLASS (function))
7833 {
7834 case BUILT_IN_NORMAL:
7835 break;
7836 case BUILT_IN_MD:
7837 if (targetm.resolve_overloaded_builtin)
7838 return targetm.resolve_overloaded_builtin (function, params);
7839 else
7840 return NULL_TREE;
7841 default:
7842 return NULL_TREE;
7843 }
7844
7845 /* Handle BUILT_IN_NORMAL here. */
7846 switch (orig_code)
7847 {
7848 case BUILT_IN_FETCH_AND_ADD_N:
7849 case BUILT_IN_FETCH_AND_SUB_N:
7850 case BUILT_IN_FETCH_AND_OR_N:
7851 case BUILT_IN_FETCH_AND_AND_N:
7852 case BUILT_IN_FETCH_AND_XOR_N:
7853 case BUILT_IN_FETCH_AND_NAND_N:
7854 case BUILT_IN_ADD_AND_FETCH_N:
7855 case BUILT_IN_SUB_AND_FETCH_N:
7856 case BUILT_IN_OR_AND_FETCH_N:
7857 case BUILT_IN_AND_AND_FETCH_N:
7858 case BUILT_IN_XOR_AND_FETCH_N:
7859 case BUILT_IN_NAND_AND_FETCH_N:
7860 case BUILT_IN_BOOL_COMPARE_AND_SWAP_N:
7861 case BUILT_IN_VAL_COMPARE_AND_SWAP_N:
7862 case BUILT_IN_LOCK_TEST_AND_SET_N:
7863 case BUILT_IN_LOCK_RELEASE_N:
7864 {
7865 int n = sync_resolve_size (function, params);
7866 tree new_function, result;
7867
7868 if (n == 0)
7869 return error_mark_node;
7870
7871 new_function = built_in_decls[orig_code + exact_log2 (n) + 1];
7872 if (!sync_resolve_params (function, new_function, params))
7873 return error_mark_node;
7874
7875 result = build_function_call (new_function, params);
7876 if (orig_code != BUILT_IN_BOOL_COMPARE_AND_SWAP_N
7877 && orig_code != BUILT_IN_LOCK_RELEASE_N)
7878 result = sync_resolve_return (params, result);
7879
7880 return result;
7881 }
7882
7883 default:
7884 return NULL_TREE;
7885 }
7886 }
7887
7888 /* Ignoring their sign, return true if two scalar types are the same. */
7889 bool
7890 same_scalar_type_ignoring_signedness (tree t1, tree t2)
7891 {
7892 enum tree_code c1 = TREE_CODE (t1), c2 = TREE_CODE (t2);
7893
7894 gcc_assert ((c1 == INTEGER_TYPE || c1 == REAL_TYPE || c1 == FIXED_POINT_TYPE)
7895 && (c2 == INTEGER_TYPE || c2 == REAL_TYPE
7896 || c2 == FIXED_POINT_TYPE));
7897
7898 /* Equality works here because c_common_signed_type uses
7899 TYPE_MAIN_VARIANT. */
7900 return c_common_signed_type (t1)
7901 == c_common_signed_type (t2);
7902 }
7903
7904 /* Check for missing format attributes on function pointers. LTYPE is
7905 the new type or left-hand side type. RTYPE is the old type or
7906 right-hand side type. Returns TRUE if LTYPE is missing the desired
7907 attribute. */
7908
7909 bool
7910 check_missing_format_attribute (tree ltype, tree rtype)
7911 {
7912 tree const ttr = TREE_TYPE (rtype), ttl = TREE_TYPE (ltype);
7913 tree ra;
7914
7915 for (ra = TYPE_ATTRIBUTES (ttr); ra; ra = TREE_CHAIN (ra))
7916 if (is_attribute_p ("format", TREE_PURPOSE (ra)))
7917 break;
7918 if (ra)
7919 {
7920 tree la;
7921 for (la = TYPE_ATTRIBUTES (ttl); la; la = TREE_CHAIN (la))
7922 if (is_attribute_p ("format", TREE_PURPOSE (la)))
7923 break;
7924 return !la;
7925 }
7926 else
7927 return false;
7928 }
7929
7930 /* Subscripting with type char is likely to lose on a machine where
7931 chars are signed. So warn on any machine, but optionally. Don't
7932 warn for unsigned char since that type is safe. Don't warn for
7933 signed char because anyone who uses that must have done so
7934 deliberately. Furthermore, we reduce the false positive load by
7935 warning only for non-constant value of type char. */
7936
7937 void
7938 warn_array_subscript_with_type_char (tree index)
7939 {
7940 if (TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node
7941 && TREE_CODE (index) != INTEGER_CST)
7942 warning (OPT_Wchar_subscripts, "array subscript has type %<char%>");
7943 }
7944
7945 /* Implement -Wparentheses for the unexpected C precedence rules, to
7946 cover cases like x + y << z which readers are likely to
7947 misinterpret. We have seen an expression in which CODE is a binary
7948 operator used to combine expressions headed by CODE_LEFT and
7949 CODE_RIGHT. CODE_LEFT and CODE_RIGHT may be ERROR_MARK, which
7950 means that that side of the expression was not formed using a
7951 binary operator, or it was enclosed in parentheses. */
7952
7953 void
7954 warn_about_parentheses (enum tree_code code, enum tree_code code_left,
7955 enum tree_code code_right)
7956 {
7957 if (!warn_parentheses)
7958 return;
7959
7960 if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
7961 {
7962 if (code_left == PLUS_EXPR || code_left == MINUS_EXPR
7963 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
7964 warning (OPT_Wparentheses,
7965 "suggest parentheses around + or - inside shift");
7966 }
7967
7968 if (code == TRUTH_ORIF_EXPR)
7969 {
7970 if (code_left == TRUTH_ANDIF_EXPR
7971 || code_right == TRUTH_ANDIF_EXPR)
7972 warning (OPT_Wparentheses,
7973 "suggest parentheses around && within ||");
7974 }
7975
7976 if (code == BIT_IOR_EXPR)
7977 {
7978 if (code_left == BIT_AND_EXPR || code_left == BIT_XOR_EXPR
7979 || code_left == PLUS_EXPR || code_left == MINUS_EXPR
7980 || code_right == BIT_AND_EXPR || code_right == BIT_XOR_EXPR
7981 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
7982 warning (OPT_Wparentheses,
7983 "suggest parentheses around arithmetic in operand of |");
7984 /* Check cases like x|y==z */
7985 if (TREE_CODE_CLASS (code_left) == tcc_comparison
7986 || TREE_CODE_CLASS (code_right) == tcc_comparison)
7987 warning (OPT_Wparentheses,
7988 "suggest parentheses around comparison in operand of |");
7989 }
7990
7991 if (code == BIT_XOR_EXPR)
7992 {
7993 if (code_left == BIT_AND_EXPR
7994 || code_left == PLUS_EXPR || code_left == MINUS_EXPR
7995 || code_right == BIT_AND_EXPR
7996 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
7997 warning (OPT_Wparentheses,
7998 "suggest parentheses around arithmetic in operand of ^");
7999 /* Check cases like x^y==z */
8000 if (TREE_CODE_CLASS (code_left) == tcc_comparison
8001 || TREE_CODE_CLASS (code_right) == tcc_comparison)
8002 warning (OPT_Wparentheses,
8003 "suggest parentheses around comparison in operand of ^");
8004 }
8005
8006 if (code == BIT_AND_EXPR)
8007 {
8008 if (code_left == PLUS_EXPR || code_left == MINUS_EXPR
8009 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
8010 warning (OPT_Wparentheses,
8011 "suggest parentheses around + or - in operand of &");
8012 /* Check cases like x&y==z */
8013 if (TREE_CODE_CLASS (code_left) == tcc_comparison
8014 || TREE_CODE_CLASS (code_right) == tcc_comparison)
8015 warning (OPT_Wparentheses,
8016 "suggest parentheses around comparison in operand of &");
8017 }
8018
8019 if (code == EQ_EXPR || code == NE_EXPR)
8020 {
8021 if (TREE_CODE_CLASS (code_left) == tcc_comparison
8022 || TREE_CODE_CLASS (code_right) == tcc_comparison)
8023 warning (OPT_Wparentheses,
8024 "suggest parentheses around comparison in operand of %s",
8025 code == EQ_EXPR ? "==" : "!=");
8026 }
8027 else if (TREE_CODE_CLASS (code) == tcc_comparison)
8028 {
8029 if ((TREE_CODE_CLASS (code_left) == tcc_comparison
8030 && code_left != NE_EXPR && code_left != EQ_EXPR)
8031 || (TREE_CODE_CLASS (code_right) == tcc_comparison
8032 && code_right != NE_EXPR && code_right != EQ_EXPR))
8033 warning (OPT_Wparentheses, "comparisons like X<=Y<=Z do not "
8034 "have their mathematical meaning");
8035 }
8036 }
8037
8038 /* If LABEL (a LABEL_DECL) has not been used, issue a warning. */
8039
8040 void
8041 warn_for_unused_label (tree label)
8042 {
8043 if (!TREE_USED (label))
8044 {
8045 if (DECL_INITIAL (label))
8046 warning (OPT_Wunused_label, "label %q+D defined but not used", label);
8047 else
8048 warning (OPT_Wunused_label, "label %q+D declared but not defined", label);
8049 }
8050 }
8051
8052 #ifndef TARGET_HAS_TARGETCM
8053 struct gcc_targetcm targetcm = TARGETCM_INITIALIZER;
8054 #endif
8055
8056 /* Warn for division by zero according to the value of DIVISOR. */
8057
8058 void
8059 warn_for_div_by_zero (tree divisor)
8060 {
8061 /* If DIVISOR is zero, and has integral or fixed-point type, issue a warning
8062 about division by zero. Do not issue a warning if DIVISOR has a
8063 floating-point type, since we consider 0.0/0.0 a valid way of
8064 generating a NaN. */
8065 if (skip_evaluation == 0
8066 && (integer_zerop (divisor) || fixed_zerop (divisor)))
8067 warning (OPT_Wdiv_by_zero, "division by zero");
8068 }
8069
8070 #include "gt-c-common.h"
This page took 0.392787 seconds and 5 git commands to generate.