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