* builtin-attrs.def (ATTR_NOTHROW_SENTINEL_1): New.
[official-gcc.git] / gcc / c-common.c
blob1a105701eb08f0f781b6d7e2670876b415bdc50c
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.
5 This file is part of GCC.
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.
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.
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. */
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"
50 cpp_reader *parse_in; /* Declared in c-pragma.h. */
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. */
58 #ifndef SIZE_TYPE
59 #define SIZE_TYPE "long unsigned int"
60 #endif
62 #ifndef PID_TYPE
63 #define PID_TYPE "int"
64 #endif
66 #ifndef WCHAR_TYPE
67 #define WCHAR_TYPE "int"
68 #endif
70 /* WCHAR_TYPE gets overridden by -fshort-wchar. */
71 #define MODIFIED_WCHAR_TYPE \
72 (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
74 #ifndef PTRDIFF_TYPE
75 #define PTRDIFF_TYPE "long int"
76 #endif
78 #ifndef WINT_TYPE
79 #define WINT_TYPE "unsigned int"
80 #endif
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
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
98 /* The following symbols are subsumed in the c_global_trees array, and
99 listed here individually for documentation purposes.
101 INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
103 tree short_integer_type_node;
104 tree long_integer_type_node;
105 tree long_long_integer_type_node;
107 tree short_unsigned_type_node;
108 tree long_unsigned_type_node;
109 tree long_long_unsigned_type_node;
111 tree truthvalue_type_node;
112 tree truthvalue_false_node;
113 tree truthvalue_true_node;
115 tree ptrdiff_type_node;
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;
123 tree float_type_node;
124 tree double_type_node;
125 tree long_double_type_node;
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;
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;
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;
144 tree widest_integer_literal_type_node;
145 tree widest_unsigned_literal_type_node;
147 Nodes for types `void *' and `const void *'.
149 tree ptr_type_node, const_ptr_type_node;
151 Nodes for types `char *' and `const char *'.
153 tree string_type_node, const_string_type_node;
155 Type `char[SOMENUMBER]'.
156 Used when an array of char is needed and the size is irrelevant.
158 tree char_array_type_node;
160 Type `int[SOMENUMBER]' or something like it.
161 Used when an array of int needed and the size is irrelevant.
163 tree int_array_type_node;
165 Type `wchar_t[SOMENUMBER]' or something like it.
166 Used when a wide string literal is created.
168 tree wchar_array_type_node;
170 Type `int ()' -- used for implicit declaration of functions.
172 tree default_function_type;
174 A VOID_TYPE node, packaged in a TREE_LIST.
176 tree void_list_node;
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.)
182 tree function_name_decl_node;
183 tree pretty_function_name_decl_node;
184 tree c99_function_name_decl_node;
186 Stack of nested function name VAR_DECLs.
188 tree saved_function_name_decls;
192 tree c_global_trees[CTI_MAX];
194 /* TRUE if a code represents a statement. The front end init
195 langhook should take care of initialization of this array. */
197 bool statement_code_p[MAX_TREE_CODES];
199 /* Switches common to the C front ends. */
201 /* Nonzero if prepreprocessing only. */
203 int flag_preprocess_only;
205 /* Nonzero means don't output line number information. */
207 char flag_no_line_commands;
209 /* Nonzero causes -E output not to be done, but directives such as
210 #define that have side effects are still obeyed. */
212 char flag_no_output;
214 /* Nonzero means dump macros in some fashion. */
216 char flag_dump_macros;
218 /* Nonzero means pass #include lines through to the output. */
220 char flag_dump_includes;
222 /* Nonzero means process PCH files while preprocessing. */
224 bool flag_pch_preprocess;
226 /* The file name to which we should write a precompiled header, or
227 NULL if no header will be written in this compile. */
229 const char *pch_file;
231 /* Nonzero if an ISO standard was selected. It rejects macros in the
232 user's namespace. */
233 int flag_iso;
235 /* Nonzero if -undef was given. It suppresses target built-in macros
236 and assertions. */
237 int flag_undef;
239 /* Nonzero means don't recognize the non-ANSI builtin functions. */
241 int flag_no_builtin;
243 /* Nonzero means don't recognize the non-ANSI builtin functions.
244 -ansi sets this. */
246 int flag_no_nonansi_builtin;
248 /* Nonzero means give `double' the same size as `float'. */
250 int flag_short_double;
252 /* Nonzero means give `wchar_t' the same size as `short'. */
254 int flag_short_wchar;
256 /* Nonzero means allow Microsoft extensions without warnings or errors. */
257 int flag_ms_extensions;
259 /* Nonzero means don't recognize the keyword `asm'. */
261 int flag_no_asm;
263 /* Nonzero means give string constants the type `const char *', as mandated
264 by the standard. */
266 int flag_const_strings;
268 /* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
270 int flag_signed_bitfields = 1;
271 int explicit_flag_signed_bitfields;
273 /* Nonzero means warn about deprecated conversion from string constant to
274 `char *'. */
276 int warn_write_strings;
278 /* Warn about #pragma directives that are not recognized. */
280 int warn_unknown_pragmas; /* Tri state variable. */
282 /* Warn about format/argument anomalies in calls to formatted I/O functions
283 (*printf, *scanf, strftime, strfmon, etc.). */
285 int warn_format;
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;
292 /* Nonzero means that we will allow new ObjC exception syntax (@throw,
293 @try, etc.) in source code. */
294 int flag_objc_exceptions = 0;
296 /* Nonzero means that we generate NeXT setjmp based exceptions. */
297 int flag_objc_sjlj_exceptions = -1;
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;
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;
309 /* C/ObjC language option variables. */
312 /* Nonzero means allow type mismatches in conditional expressions;
313 just make their values `void'. */
315 int flag_cond_mismatch;
317 /* Nonzero means enable C89 Amendment 1 features. */
319 int flag_isoc94;
321 /* Nonzero means use the ISO C99 dialect of C. */
323 int flag_isoc99;
325 /* Nonzero means that we have builtin functions, and main is an int. */
327 int flag_hosted = 1;
329 /* Warn if main is suspicious. */
331 int warn_main;
334 /* ObjC language option variables. */
337 /* Open and close the file for outputting class declarations, if
338 requested (ObjC). */
340 int flag_gen_declaration;
342 /* Generate code for GNU or NeXT runtime environment. */
344 #ifdef NEXT_OBJC_RUNTIME
345 int flag_next_runtime = 1;
346 #else
347 int flag_next_runtime = 0;
348 #endif
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. */
354 int print_struct_values;
356 /* ???. Undocumented. */
358 const char *constant_string_class_name;
361 /* C++ language option variables. */
364 /* Nonzero means don't recognize any extension keywords. */
366 int flag_no_gnu_keywords;
368 /* Nonzero means do emit exported implementations of functions even if
369 they can be inlined. */
371 int flag_implement_inlines = 1;
373 /* Nonzero means that implicit instantiations will be emitted if needed. */
375 int flag_implicit_templates = 1;
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. */
381 int flag_implicit_inline_templates = 1;
383 /* Nonzero means generate separate instantiation control files and
384 juggle them at link time. */
386 int flag_use_repository;
388 /* Nonzero if we want to issue diagnostics that the standard says are not
389 required. */
391 int flag_optional_diags = 1;
393 /* Nonzero means we should attempt to elide constructors when possible. */
395 int flag_elide_constructors = 1;
397 /* Nonzero means that member functions defined in class scope are
398 inline by default. */
400 int flag_default_inline = 1;
402 /* Controls whether compiler generates 'type descriptor' that give
403 run-time type information. */
405 int flag_rtti = 1;
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. */
412 int flag_conserve_space;
414 /* Nonzero if we want to obey access control semantics. */
416 int flag_access_control = 1;
418 /* Nonzero if we want to check the return value of new and avoid calling
419 constructors if it is a null pointer. */
421 int flag_check_new;
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. */
430 int flag_new_for_scope = 1;
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. */
436 int flag_weak = 1;
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. */
443 int flag_working_directory = -1;
445 /* Nonzero to use __cxa_atexit, rather than atexit, to register
446 destructors for local statics and global objects. */
448 int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
450 /* Nonzero means make the default pedwarns warnings instead of errors.
451 The value of this flag is ignored if -pedantic is specified. */
453 int flag_permissive;
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. */
460 int flag_enforce_eh_specs = 1;
462 /* Nonzero means to generate thread-safe code for initializing local
463 statics. */
465 int flag_threadsafe_statics = 1;
467 /* Nonzero means warn about implicit declarations. */
469 int warn_implicit = 1;
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. */
475 int max_tinst_depth = 500;
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;
483 tree (*make_fname_decl) (tree, int);
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);
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);
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;
497 /* Information about how a function name is generated. */
498 struct fname_var_t
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? */
505 /* The three ways of getting then name of the current function. */
507 const struct fname_var_t fname_vars[] =
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},
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 *);
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 *);
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 *);
568 /* Table of machine-independent attributes common to all C-like languages. */
569 const struct attribute_spec c_common_attribute_table[] =
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 }
644 /* Give the specifications for the format attributes, used by C and all
645 descendants. */
647 const struct attribute_spec c_common_format_attribute_table[] =
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 }
657 /* Push current bindings for the function name VAR_DECLS. */
659 void
660 start_fname_decls (void)
662 unsigned ix;
663 tree saved = NULL_TREE;
665 for (ix = 0; fname_vars[ix].decl; ix++)
667 tree decl = *fname_vars[ix].decl;
669 if (decl)
671 saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
672 *fname_vars[ix].decl = NULL_TREE;
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);
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. */
687 void
688 finish_fname_decls (void)
690 unsigned ix;
691 tree stmts = NULL_TREE;
692 tree stack = saved_function_name_decls;
694 for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
695 append_to_statement_list (TREE_VALUE (stack), &stmts);
697 if (stmts)
699 tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
701 if (TREE_CODE (*bodyp) == BIND_EXPR)
702 bodyp = &BIND_EXPR_BODY (*bodyp);
704 append_to_statement_list (*bodyp, &stmts);
705 *bodyp = stmts;
708 for (ix = 0; fname_vars[ix].decl; ix++)
709 *fname_vars[ix].decl = NULL_TREE;
711 if (stack)
713 /* We had saved values, restore them. */
714 tree saved;
716 for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
718 tree decl = TREE_PURPOSE (saved);
719 unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
721 *fname_vars[ix].decl = decl;
723 stack = TREE_CHAIN (stack);
725 saved_function_name_decls = stack;
728 /* Return the text name of the current function, suitably prettified
729 by PRETTY_P. Return string must be freed by caller. */
731 const char *
732 fname_as_string (int pretty_p)
734 const char *name = "top level";
735 char *namep;
736 int vrb = 2;
738 if (! pretty_p)
740 name = "";
741 vrb = 0;
744 if (current_function_decl)
745 name = lang_hooks.decl_printable_name (current_function_decl, vrb);
747 if (c_lex_string_translate)
749 int len = strlen (name) + 3; /* Two for '"'s. One for NULL. */
750 cpp_string cstr = { 0, 0 }, strname;
752 namep = XNEWVEC (char, len);
753 snprintf (namep, len, "\"%s\"", name);
754 strname.text = (unsigned char *) namep;
755 strname.len = len - 1;
757 if (cpp_interpret_string (parse_in, &strname, 1, &cstr, false))
758 return (char *) cstr.text;
760 else
761 namep = xstrdup (name);
763 return namep;
766 /* Expand DECL if it declares an entity not handled by the
767 common code. */
770 c_expand_decl (tree decl)
772 if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
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));
781 else
782 return 0;
784 return 1;
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. */
795 tree
796 fname_decl (unsigned int rid, tree id)
798 unsigned ix;
799 tree decl = NULL_TREE;
801 for (ix = 0; fname_vars[ix].decl; ix++)
802 if (fname_vars[ix].rid == rid)
803 break;
805 decl = *fname_vars[ix].decl;
806 if (!decl)
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
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;
830 if (!ix && !current_function_decl)
831 pedwarn ("%J'%D' is not defined outside of function scope", decl, decl);
833 return decl;
836 /* Given a STRING_CST, give it a suitable array-of-chars data type. */
838 tree
839 fix_string_type (tree value)
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;
848 /* Compute the number of elements, for the array type. */
849 nchars = wide_flag ? length / wchar_bytes : length;
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);
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);
865 TREE_CONSTANT (value) = 1;
866 TREE_INVARIANT (value) = 1;
867 TREE_READONLY (value) = 1;
868 TREE_STATIC (value) = 1;
869 return value;
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. */
878 void
879 constant_expression_warning (tree value)
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");
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. */
895 void
896 overflow_warning (tree value)
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))
903 TREE_OVERFLOW (value) = 0;
904 if (skip_evaluation == 0)
905 warning ("integer overflow in expression");
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))
912 TREE_OVERFLOW (value) = 0;
913 if (skip_evaluation == 0)
914 warning ("floating point overflow in expression");
916 else if (TREE_CODE (value) == VECTOR_CST && TREE_OVERFLOW (value))
918 TREE_OVERFLOW (value) = 0;
919 if (skip_evaluation == 0)
920 warning ("vector overflow in expression");
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. */
929 void
930 unsigned_conversion_warning (tree result, tree operand)
932 tree type = TREE_TYPE (result);
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))
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");
948 /* Nonzero if constant C has a value that is permissible
949 for type TYPE (an INTEGER_TYPE). */
951 static int
952 constant_fits_type_p (tree c, tree type)
954 if (TREE_CODE (c) == INTEGER_CST)
955 return int_fits_type_p (c, type);
957 c = convert (type, c);
958 return !TREE_OVERFLOW (c);
961 /* Nonzero if vector types T1 and T2 can be converted to each other
962 without an explicit cast. */
964 vector_types_convertible_p (tree t1, tree t2)
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)));
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. */
977 tree
978 convert_and_check (tree type, tree expr)
980 tree t = convert (type, expr);
981 if (TREE_CODE (t) == INTEGER_CST)
983 if (TREE_OVERFLOW (t))
985 TREE_OVERFLOW (t) = 0;
987 /* Do not diagnose overflow in a constant expression merely
988 because a conversion overflowed. */
989 TREE_CONSTANT_OVERFLOW (t) = TREE_CONSTANT_OVERFLOW (expr);
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");
1004 else
1005 unsigned_conversion_warning (t, expr);
1007 return t;
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
1015 struct tlist *next;
1016 tree expr, writer;
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
1023 struct tlist_cache *next;
1024 struct tlist *cache_before_sp;
1025 struct tlist *cache_after_sp;
1026 tree expr;
1029 /* Obstack to use when allocating tlist structures, and corresponding
1030 firstobj. */
1031 static struct obstack tlist_obstack;
1032 static char *tlist_firstobj = 0;
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;
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);
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)
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;
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. */
1064 static void
1065 add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
1067 while (add)
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;
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. */
1084 static void
1085 merge_tlist (struct tlist **to, struct tlist *add, int copy)
1087 struct tlist **end = to;
1089 while (*end)
1090 end = &(*end)->next;
1092 while (add)
1094 int found = 0;
1095 struct tlist *tmp2;
1096 struct tlist *next = add->next;
1098 for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
1099 if (tmp2->expr == add->expr)
1101 found = 1;
1102 if (! tmp2->writer)
1103 tmp2->writer = add->writer;
1105 if (! found)
1107 *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
1108 end = &(*end)->next;
1109 *end = 0;
1111 add = next;
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. */
1119 static void
1120 warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
1121 int only_writes)
1123 struct tlist *tmp;
1125 /* Avoid duplicate warnings. */
1126 for (tmp = warned_ids; tmp; tmp = tmp->next)
1127 if (tmp->expr == written)
1128 return;
1130 while (list)
1132 if (list->expr == written
1133 && list->writer != writer
1134 && (! only_writes || list->writer)
1135 && DECL_NAME (list->expr))
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)));
1141 list = list->next;
1145 /* Given a list LIST of references to variables, find whether any of these
1146 can cause conflicts due to missing sequence points. */
1148 static void
1149 warn_for_collisions (struct tlist *list)
1151 struct tlist *tmp;
1153 for (tmp = list; tmp; tmp = tmp->next)
1155 if (tmp->writer)
1156 warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
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)
1165 return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
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.
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.
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. */
1193 static void
1194 verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
1195 tree writer)
1197 struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1198 enum tree_code code;
1199 char cl;
1201 /* X may be NULL if it is the operand of an empty statement expression
1202 ({ }). */
1203 if (x == NULL)
1204 return;
1206 restart:
1207 code = TREE_CODE (x);
1208 cl = TREE_CODE_CLASS (code);
1210 if (warning_candidate_p (x))
1212 *pno_sp = new_tlist (*pno_sp, x, writer);
1213 return;
1216 switch (code)
1218 case CONSTRUCTOR:
1219 return;
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;
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);
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);
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;
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;
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);
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;
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;
1304 case TREE_LIST:
1305 /* Scan all the list, e.g. indices of multi dimensional array. */
1306 while (x)
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);
1314 return;
1316 case SAVE_EXPR:
1318 struct tlist_cache *t;
1319 for (t = save_expr_cache; t; t = t->next)
1320 if (t->expr == x)
1321 break;
1323 if (! t)
1325 t = XOBNEW (&tlist_obstack, struct tlist_cache);
1326 t->next = save_expr_cache;
1327 t->expr = x;
1328 save_expr_cache = t;
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);
1334 tmp_list3 = 0;
1335 while (tmp_nosp)
1337 struct tlist *t = tmp_nosp;
1338 tmp_nosp = t->next;
1339 merge_tlist (&tmp_list3, t, 0);
1341 t->cache_before_sp = tmp_before;
1342 t->cache_after_sp = tmp_list3;
1344 merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1345 add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1346 return;
1348 default:
1349 break;
1352 if (cl == '1')
1354 if (first_rtl_op (code) == 0)
1355 return;
1356 x = TREE_OPERAND (x, 0);
1357 writer = 0;
1358 goto restart;
1361 switch (cl)
1363 case 'r':
1364 case '<':
1365 case '2':
1366 case 'e':
1367 case 's':
1368 case 'x':
1370 int lp;
1371 int max = first_rtl_op (TREE_CODE (x));
1372 for (lp = 0; lp < max; lp++)
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);
1379 break;
1384 /* Try to warn for undefined behavior in EXPR due to missing sequence
1385 points. */
1387 void
1388 verify_sequence_points (tree expr)
1390 struct tlist *before_sp = 0, *after_sp = 0;
1392 warned_ids = 0;
1393 save_expr_cache = 0;
1394 if (tlist_firstobj == 0)
1396 gcc_obstack_init (&tlist_obstack);
1397 tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
1400 verify_tree (expr, &before_sp, &after_sp, 0);
1401 warn_for_collisions (after_sp);
1402 obstack_free (&tlist_obstack, tlist_firstobj);
1405 /* Validate the expression after `case' and apply default promotions. */
1407 static tree
1408 check_case_value (tree value)
1410 if (value == NULL_TREE)
1411 return value;
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:
1417 const int i = 3;
1418 switch (...) { case i: ... }
1420 So, we try to reduce the VALUE to a constant that way. */
1421 if (c_dialect_cxx ())
1423 value = decl_constant_value (value);
1424 STRIP_TYPE_NOPS (value);
1425 value = fold (value);
1428 if (TREE_CODE (value) != INTEGER_CST
1429 && value != error_mark_node)
1431 error ("case label does not reduce to an integer constant");
1432 value = error_mark_node;
1434 else
1435 /* Promote char or short to int. */
1436 value = default_conversion (value);
1438 constant_expression_warning (value);
1440 return value;
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. */
1455 static bool
1456 check_case_bounds (tree type, tree orig_type,
1457 tree *case_low_p, tree *case_high_p)
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;
1463 /* If there was a problem with the original type, do nothing. */
1464 if (orig_type == error_mark_node)
1465 return true;
1467 min_value = TYPE_MIN_VALUE (orig_type);
1468 max_value = TYPE_MAX_VALUE (orig_type);
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)
1474 warning ("case label value is less than minimum value for type");
1475 return false;
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)
1482 warning ("case label value exceeds maximum value for type");
1483 return false;
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)
1490 warning ("lower value in case label range"
1491 " less than minimum value for type");
1492 case_low = min_value;
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)
1499 warning ("upper value in case label range"
1500 " exceeds maximum value for type");
1501 case_high = max_value;
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);
1509 return true;
1512 /* Return an integer type with BITS bits of precision,
1513 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
1515 tree
1516 c_common_type_for_size (unsigned int bits, int unsignedp)
1518 if (bits == TYPE_PRECISION (integer_type_node))
1519 return unsignedp ? unsigned_type_node : integer_type_node;
1521 if (bits == TYPE_PRECISION (signed_char_type_node))
1522 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1524 if (bits == TYPE_PRECISION (short_integer_type_node))
1525 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1527 if (bits == TYPE_PRECISION (long_integer_type_node))
1528 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1530 if (bits == TYPE_PRECISION (long_long_integer_type_node))
1531 return (unsignedp ? long_long_unsigned_type_node
1532 : long_long_integer_type_node);
1534 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
1535 return (unsignedp ? widest_unsigned_literal_type_node
1536 : widest_integer_literal_type_node);
1538 if (bits <= TYPE_PRECISION (intQI_type_node))
1539 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1541 if (bits <= TYPE_PRECISION (intHI_type_node))
1542 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1544 if (bits <= TYPE_PRECISION (intSI_type_node))
1545 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1547 if (bits <= TYPE_PRECISION (intDI_type_node))
1548 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1550 return 0;
1553 /* Used for communication between c_common_type_for_mode and
1554 c_register_builtin_type. */
1555 static GTY(()) tree registered_builtin_types;
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. */
1561 tree
1562 c_common_type_for_mode (enum machine_mode mode, int unsignedp)
1564 tree t;
1566 if (mode == TYPE_MODE (integer_type_node))
1567 return unsignedp ? unsigned_type_node : integer_type_node;
1569 if (mode == TYPE_MODE (signed_char_type_node))
1570 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1572 if (mode == TYPE_MODE (short_integer_type_node))
1573 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1575 if (mode == TYPE_MODE (long_integer_type_node))
1576 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1578 if (mode == TYPE_MODE (long_long_integer_type_node))
1579 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
1581 if (mode == TYPE_MODE (widest_integer_literal_type_node))
1582 return unsignedp ? widest_unsigned_literal_type_node
1583 : widest_integer_literal_type_node;
1585 if (mode == QImode)
1586 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1588 if (mode == HImode)
1589 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1591 if (mode == SImode)
1592 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1594 if (mode == DImode)
1595 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
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
1602 if (mode == TYPE_MODE (float_type_node))
1603 return float_type_node;
1605 if (mode == TYPE_MODE (double_type_node))
1606 return double_type_node;
1608 if (mode == TYPE_MODE (long_double_type_node))
1609 return long_double_type_node;
1611 if (mode == TYPE_MODE (void_type_node))
1612 return void_type_node;
1614 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
1615 return unsignedp ? make_unsigned_type (mode) : make_signed_type (mode);
1617 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
1618 return unsignedp ? make_unsigned_type (mode) : make_signed_type (mode);
1620 if (VECTOR_MODE_P (mode))
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);
1628 for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
1629 if (TYPE_MODE (TREE_VALUE (t)) == mode)
1630 return TREE_VALUE (t);
1632 return 0;
1635 /* Return an unsigned type the same as TYPE in other respects. */
1636 tree
1637 c_common_unsigned_type (tree type)
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;
1665 return c_common_signed_or_unsigned_type (1, type);
1668 /* Return a signed type the same as TYPE in other respects. */
1670 tree
1671 c_common_signed_type (tree type)
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;
1699 return c_common_signed_or_unsigned_type (0, type);
1702 /* Return a type the same as TYPE except unsigned or
1703 signed according to UNSIGNEDP. */
1705 tree
1706 c_common_signed_or_unsigned_type (int unsignedp, tree type)
1708 if (! INTEGRAL_TYPE_P (type)
1709 || TYPE_UNSIGNED (type) == unsignedp)
1710 return type;
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. */
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);
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
1753 if (c_dialect_cxx ())
1754 return type;
1755 else
1756 return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
1759 /* The C version of the register_builtin_type langhook. */
1761 void
1762 c_register_builtin_type (tree type, const char* name)
1764 tree decl;
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);
1772 registered_builtin_types = tree_cons (0, type, registered_builtin_types);
1776 /* Return the minimum number of bits needed to represent VALUE in a
1777 signed or unsigned type, UNSIGNEDP says which. */
1779 unsigned int
1780 min_precision (tree value, int unsignedp)
1782 int log;
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. */
1789 if (tree_int_cst_sgn (value) < 0)
1790 value = fold (build1 (BIT_NOT_EXPR, TREE_TYPE (value), value));
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. */
1795 if (integer_zerop (value))
1796 log = 0;
1797 else
1798 log = tree_floor_log2 (value);
1800 return log + 1 + ! unsignedp;
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). */
1807 void
1808 binary_op_error (enum tree_code code)
1810 const char *opname;
1812 switch (code)
1814 case NOP_EXPR:
1815 error ("invalid truth-value expression");
1816 return;
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;
1866 error ("invalid operands to binary %s", opname);
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.
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.
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. */
1883 tree
1884 shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
1885 enum tree_code *rescode_ptr)
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;
1895 /* Throw away any conversions to wider types
1896 already present in the operands. */
1898 primop0 = get_narrower (op0, &unsignedp0);
1899 primop1 = get_narrower (op1, &unsignedp1);
1901 /* Handle the case that OP0 does not *contain* a conversion
1902 but it *requires* conversion to FINAL_TYPE. */
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));
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;
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. */
1917 if (TREE_CONSTANT (primop0)
1918 && ! integer_zerop (primop1) && ! real_zerop (primop1))
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;
1935 switch (code)
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;
1952 *rescode_ptr = code;
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.
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. */
1972 if (!real1 && !real2
1973 && TREE_CODE (primop1) == INTEGER_CST
1974 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
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;
1982 type = c_common_signed_or_unsigned_type (unsignedp0,
1983 TREE_TYPE (primop0));
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);
1993 maxval = TYPE_MAX_VALUE (type);
1994 minval = TYPE_MIN_VALUE (type);
1996 if (unsignedp && !unsignedp0)
1997 *restype_ptr = c_common_signed_type (*restype_ptr);
1999 if (TREE_TYPE (primop1) != *restype_ptr)
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));
2007 primop1 = force_fit_type (tmp, 0, TREE_OVERFLOW (primop1),
2008 TREE_CONSTANT_OVERFLOW (primop1));
2010 if (type != *restype_ptr)
2012 minval = convert (*restype_ptr, minval);
2013 maxval = convert (*restype_ptr, maxval);
2016 if (unsignedp && unsignedp0)
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);
2023 else
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);
2031 val = 0;
2032 /* This used to be a switch, but Genix compiler can't handle that. */
2033 if (code == NE_EXPR)
2035 if (max_lt || min_gt)
2036 val = truthvalue_true_node;
2038 else if (code == EQ_EXPR)
2040 if (max_lt || min_gt)
2041 val = truthvalue_false_node;
2043 else if (code == LT_EXPR)
2045 if (max_lt)
2046 val = truthvalue_true_node;
2047 if (!min_lt)
2048 val = truthvalue_false_node;
2050 else if (code == GT_EXPR)
2052 if (min_gt)
2053 val = truthvalue_true_node;
2054 if (!max_gt)
2055 val = truthvalue_false_node;
2057 else if (code == LE_EXPR)
2059 if (!max_gt)
2060 val = truthvalue_true_node;
2061 if (min_gt)
2062 val = truthvalue_false_node;
2064 else if (code == GE_EXPR)
2066 if (!min_lt)
2067 val = truthvalue_true_node;
2068 if (max_lt)
2069 val = truthvalue_false_node;
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.
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. */
2083 if (unsignedp && !unsignedp0)
2085 if (val != 0)
2086 switch (code)
2088 case LT_EXPR:
2089 case GE_EXPR:
2090 primop1 = TYPE_MIN_VALUE (type);
2091 val = 0;
2092 break;
2094 case LE_EXPR:
2095 case GT_EXPR:
2096 primop1 = TYPE_MAX_VALUE (type);
2097 val = 0;
2098 break;
2100 default:
2101 break;
2103 type = c_common_unsigned_type (type);
2106 if (TREE_CODE (primop0) != INTEGER_CST)
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");
2114 if (val != 0)
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;
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. */
2126 else if (real1 && real2
2127 && (TYPE_PRECISION (TREE_TYPE (primop0))
2128 == TYPE_PRECISION (TREE_TYPE (primop1))))
2129 type = TREE_TYPE (primop0);
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.) */
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))
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);
2158 else
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;
2166 if (!real1 && !real2 && integer_zerop (primop1)
2167 && TYPE_UNSIGNED (*restype_ptr))
2169 tree value = 0;
2170 switch (code)
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;
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;
2194 default:
2195 break;
2198 if (value != 0)
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;
2209 *op0_ptr = convert (type, primop0);
2210 *op1_ptr = convert (type, primop1);
2212 *restype_ptr = truthvalue_type_node;
2214 return 0;
2217 /* Return a tree for the sum or difference (RESULTCODE says which)
2218 of pointer PTROP and integer INTOP. */
2220 tree
2221 pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
2223 tree size_exp;
2225 /* The result is a pointer of the same type that is being added. */
2227 tree result_type = TREE_TYPE (ptrop);
2229 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2231 if (pedantic || warn_pointer_arith)
2232 pedwarn ("pointer of type `void *' used in arithmetic");
2233 size_exp = integer_one_node;
2235 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2237 if (pedantic || warn_pointer_arith)
2238 pedwarn ("pointer to a function used in arithmetic");
2239 size_exp = integer_one_node;
2241 else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
2243 if (pedantic || warn_pointer_arith)
2244 pedwarn ("pointer to member function used in arithmetic");
2245 size_exp = integer_one_node;
2247 else
2248 size_exp = size_in_bytes (TREE_TYPE (result_type));
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. */
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)))))
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));
2281 /* Convert the integer argument to a type the same size as sizetype
2282 so the multiply won't overflow spuriously. */
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);
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). */
2293 intop = convert (result_type,
2294 build_binary_op (MULT_EXPR, intop,
2295 convert (TREE_TYPE (intop), size_exp), 1));
2297 /* Create the sum or difference. */
2298 return fold (build2 (resultcode, result_type, ptrop, intop));
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.
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 !.
2310 The resulting type should always be `truthvalue_type_node'. */
2312 tree
2313 c_common_truthvalue_conversion (tree expr)
2315 if (TREE_CODE (expr) == ERROR_MARK)
2316 return expr;
2318 if (TREE_CODE (expr) == FUNCTION_DECL)
2319 expr = build_unary_op (ADDR_EXPR, expr, 0);
2321 switch (TREE_CODE (expr))
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;
2336 case ERROR_MARK:
2337 return expr;
2339 case INTEGER_CST:
2340 return integer_zerop (expr) ? truthvalue_false_node : truthvalue_true_node;
2342 case REAL_CST:
2343 return real_zerop (expr) ? truthvalue_false_node : truthvalue_true_node;
2345 case ADDR_EXPR:
2347 if (TREE_CODE (TREE_OPERAND (expr, 0)) == FUNCTION_DECL
2348 && ! DECL_WEAK (TREE_OPERAND (expr, 0)))
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;
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;
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;
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)),
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));
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));
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))));
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;
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.
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);
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;
2446 case MODIFY_EXPR:
2447 if (warn_parentheses && !TREE_NO_WARNING (expr))
2448 warning ("suggest parentheses around assignment used as truth value");
2449 break;
2451 default:
2452 break;
2455 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
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));
2466 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
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);
2476 /* Make a variant type in the proper way for C/C++, propagating qualifiers
2477 down to the element type of an array. */
2479 tree
2480 c_build_qualified_type (tree type, int type_quals)
2482 if (type == error_mark_node)
2483 return type;
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));
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))))
2497 error ("invalid use of `restrict'");
2498 type_quals &= ~TYPE_QUAL_RESTRICT;
2501 return build_qualified_type (type, type_quals);
2504 /* Apply the TYPE_QUALS to the new DECL. */
2506 void
2507 c_apply_type_quals_to_decl (int type_quals, tree decl)
2509 tree type = TREE_TYPE (decl);
2511 if (type == error_mark_node)
2512 return;
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)
2525 TREE_SIDE_EFFECTS (decl) = 1;
2526 TREE_THIS_VOLATILE (decl) = 1;
2528 if (type_quals & TYPE_QUAL_RESTRICT)
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;
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. */
2551 static hashval_t
2552 c_type_hash (const void *p)
2554 int i = 0;
2555 int shift, size;
2556 tree t = (tree)p;
2557 tree t2;
2558 switch (TREE_CODE (t))
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 ();
2583 for (; t2; t2 = TREE_CHAIN (t2))
2584 i++;
2585 size = TREE_INT_CST_LOW (TYPE_SIZE (t));
2586 return ((size << 24) | (i << shift));
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. */
2592 HOST_WIDE_INT
2593 c_common_get_alias_set (tree t)
2595 tree u;
2596 PTR *slot;
2597 static htab_t type_hash_table;
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;
2612 /* That's all the expressions we handle specially. */
2613 if (! TYPE_P (t))
2614 return -1;
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;
2623 /* If it has the may_alias attribute, it can alias anything. */
2624 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t)))
2625 return 0;
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))
2632 tree t1 = c_common_signed_type (t);
2634 /* t1 == t can happen for boolean nodes which are always unsigned. */
2635 if (t1 != t)
2636 return get_alias_set (t1);
2638 else if (POINTER_TYPE_P (t))
2640 tree t1;
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.
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.
2654 But, the standard is wrong. In particular, this code is
2655 legal C++:
2657 int *ip;
2658 int **ipp = &ip;
2659 const int* const* cipp = ipp;
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);
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.) */
2677 if (c_language != clk_c || flag_isoc99)
2678 return -1;
2680 /* Save time if there's only one input file. */
2681 if (num_in_fnames == 1)
2682 return -1;
2684 /* Pointers need special handling if they point to any type that
2685 needs special handling (below). */
2686 if (TREE_CODE (t) == POINTER_TYPE)
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))
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;
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;
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)
2722 TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
2723 return TYPE_ALIAS_SET ((tree)*slot);
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;
2730 return -1;
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)
2740 const char *op_name;
2741 tree value = NULL;
2742 enum tree_code type_code = TREE_CODE (type);
2744 gcc_assert (op == SIZEOF_EXPR || op == ALIGNOF_EXPR);
2745 op_name = op == SIZEOF_EXPR ? "sizeof" : "__alignof__";
2747 if (type_code == FUNCTION_TYPE)
2749 if (op == SIZEOF_EXPR)
2751 if (complain && (pedantic || warn_pointer_arith))
2752 pedwarn ("invalid application of `sizeof' to a function type");
2753 value = size_one_node;
2755 else
2756 value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
2758 else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
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;
2765 else if (!COMPLETE_TYPE_P (type))
2767 if (complain)
2768 error ("invalid application of `%s' to incomplete type `%T' ",
2769 op_name, type);
2770 value = size_zero_node;
2772 else
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));
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)));
2790 return value;
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). */
2798 tree
2799 c_alignof_expr (tree expr)
2801 tree t;
2803 if (TREE_CODE (expr) == VAR_DECL)
2804 t = size_int (DECL_ALIGN_UNIT (expr));
2806 else if (TREE_CODE (expr) == COMPONENT_REF
2807 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
2809 error ("`__alignof' applied to a bit-field");
2810 t = size_one_node;
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)));
2816 else if (TREE_CODE (expr) == INDIRECT_REF)
2818 tree t = TREE_OPERAND (expr, 0);
2819 tree best = t;
2820 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2822 while (TREE_CODE (t) == NOP_EXPR
2823 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
2825 int thisalign;
2827 t = TREE_OPERAND (t, 0);
2828 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2829 if (thisalign > bestalign)
2830 best = t, bestalign = thisalign;
2832 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
2834 else
2835 return c_alignof (TREE_TYPE (expr));
2837 return fold (build1 (NOP_EXPR, size_type_node, t));
2840 /* Handle C and C++ default attributes. */
2842 enum built_in_attribute
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
2856 static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
2858 static void c_init_attributes (void);
2860 /* Build tree nodes and builtin functions common to both C and C++ language
2861 frontends. */
2863 void
2864 c_common_nodes_and_builtins (void)
2866 enum builtin_type
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
2894 typedef enum builtin_type builtin_type;
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;
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);
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);
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);
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
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));
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));
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);
2983 pid_type_node =
2984 TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
2986 build_common_tree_nodes_2 (flag_short_double);
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);
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));
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);
3010 record_builtin_type (RID_VOID, NULL, void_type_node);
3012 /* This node must not be shared. */
3013 void_zero_node = make_node (INTEGER_CST);
3014 TREE_TYPE (void_zero_node) = void_type_node;
3016 void_list_node = build_void_list_node ();
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));
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);
3031 /* Likewise for arrays of ints. */
3032 int_array_type_node
3033 = build_array_type (integer_type_node, array_domain_type);
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));
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 ())
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);
3052 else
3054 signed_wchar_type_node = c_common_signed_type (wchar_type_node);
3055 unsigned_wchar_type_node = c_common_unsigned_type (wchar_type_node);
3058 /* This is for wide string constants. */
3059 wchar_array_type_node
3060 = build_array_type (wchar_type_node, array_domain_type);
3062 wint_type_node =
3063 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
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)));
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);
3075 lang_hooks.decls.pushdecl
3076 (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
3077 va_list_type_node));
3079 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
3081 va_list_arg_type_node = va_list_ref_type_node =
3082 build_pointer_type (TREE_TYPE (va_list_type_node));
3084 else
3086 va_list_arg_type_node = va_list_type_node;
3087 va_list_ref_type_node = build_reference_type (va_list_type_node);
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));
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)));
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))));
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
3183 c_init_attributes ();
3185 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, \
3186 BOTH_P, FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT) \
3187 if (NAME) \
3189 tree decl; \
3191 if (strncmp (NAME, "__builtin_", strlen ("__builtin_")) != 0) \
3192 abort (); \
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]); \
3213 built_in_decls[(int) ENUM] = decl; \
3214 if (IMPLICIT) \
3215 implicit_built_in_decls[(int) ENUM] = decl; \
3217 #include "builtins.def"
3218 #undef DEF_BUILTIN
3220 targetm.init_builtins ();
3221 if (flag_mudflap)
3222 mudflap_init ();
3224 main_identifier_node = get_identifier ("main");
3227 tree
3228 build_va_arg (tree expr, tree type)
3230 return build1 (VA_ARG_EXPR, type, expr);
3234 /* Linked list of disabled built-in functions. */
3236 typedef struct disabled_builtin
3238 const char *name;
3239 struct disabled_builtin *next;
3240 } disabled_builtin;
3241 static disabled_builtin *disabled_builtins = NULL;
3243 static bool builtin_function_disabled_p (const char *);
3245 /* Disable a built-in function specified by -fno-builtin-NAME. If NAME
3246 begins with "__builtin_", give an error. */
3248 void
3249 disable_builtin_function (const char *name)
3251 if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
3252 error ("cannot disable built-in function `%s'", name);
3253 else
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;
3263 /* Return true if the built-in function NAME has been disabled, false
3264 otherwise. */
3266 static bool
3267 builtin_function_disabled_p (const char *name)
3269 disabled_builtin *p;
3270 for (p = disabled_builtins; p != NULL; p = p->next)
3272 if (strcmp (name, p->name) == 0)
3273 return true;
3275 return false;
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. */
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)
3301 tree bdecl = NULL_TREE;
3302 tree decl = NULL_TREE;
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);
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);
3314 return (bdecl != 0 ? bdecl : decl);
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. */
3320 bool
3321 c_promoting_integer_type_p (tree t)
3323 switch (TREE_CODE (t))
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));
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);
3339 case BOOLEAN_TYPE:
3340 return 1;
3342 default:
3343 return 0;
3347 /* Return 1 if PARMS specifies a fixed number of parameters
3348 and none of their types is affected by default promotions. */
3351 self_promoting_args_p (tree parms)
3353 tree t;
3354 for (t = parms; t; t = TREE_CHAIN (t))
3356 tree type = TREE_VALUE (t);
3358 if (TREE_CHAIN (t) == 0 && type != void_type_node)
3359 return 0;
3361 if (type == 0)
3362 return 0;
3364 if (TYPE_MAIN_VARIANT (type) == float_type_node)
3365 return 0;
3367 if (c_promoting_integer_type_p (type))
3368 return 0;
3370 return 1;
3373 /* Recursively examines the array elements of TYPE, until a non-array
3374 element type is found. */
3376 tree
3377 strip_array_types (tree type)
3379 while (TREE_CODE (type) == ARRAY_TYPE)
3380 type = TREE_TYPE (type);
3382 return type;
3385 /* Recursively remove any '*' or '&' operator from TYPE. */
3386 tree
3387 strip_pointer_operator (tree t)
3389 while (POINTER_TYPE_P (t))
3390 t = TREE_TYPE (t);
3391 return t;
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.
3401 We don't need a without_duplicates variant of this one because the
3402 statement tree is a tree, not a graph. */
3404 tree
3405 walk_stmt_tree (tree *tp, walk_tree_fn func, void *data)
3407 enum tree_code code;
3408 int walk_subtrees;
3409 tree result;
3410 int i, len;
3412 #define WALK_SUBTREE(NODE) \
3413 do \
3415 result = walk_stmt_tree (&(NODE), func, data); \
3416 if (result) \
3417 return result; \
3419 while (0)
3421 /* Skip empty subtrees. */
3422 if (!*tp)
3423 return NULL_TREE;
3425 /* Skip subtrees below non-statement nodes. */
3426 if (!STATEMENT_CODE_P (TREE_CODE (*tp)))
3427 return NULL_TREE;
3429 /* Call the function. */
3430 walk_subtrees = 1;
3431 result = (*func) (tp, &walk_subtrees, data);
3433 /* If we found something, return it. */
3434 if (result)
3435 return result;
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;
3443 /* Visit the subtrees unless FUNC decided that there was nothing
3444 interesting below this point in the tree. */
3445 if (walk_subtrees)
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);
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));
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);
3461 #undef WALK_SUBTREE
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. */
3470 case_compare (splay_tree_key k1, splay_tree_key k2)
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;
3479 return tree_int_cst_compare ((tree) k1, (tree) k2);
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. */
3491 tree
3492 c_add_case_label (splay_tree cases, tree cond, tree orig_type,
3493 tree low_value, tree high_value)
3495 tree type;
3496 tree label;
3497 tree case_label;
3498 splay_tree_node node;
3500 /* Create the LABEL_DECL itself. */
3501 label = create_artificial_label ();
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;
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");
3514 /* Case ranges are a GNU extension. */
3515 if (high_value && pedantic)
3516 pedwarn ("range expressions in switch statements are non-standard");
3518 type = TREE_TYPE (cond);
3519 if (low_value)
3521 low_value = check_case_value (low_value);
3522 low_value = convert_and_check (type, low_value);
3524 if (high_value)
3526 high_value = check_case_value (high_value);
3527 high_value = convert_and_check (type, high_value);
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;
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");
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;
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))
3559 splay_tree_node low_bound;
3560 splay_tree_node high_bound;
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);
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;
3593 /* If there was an overlap, issue an error. */
3594 if (node)
3596 tree duplicate = CASE_LABEL ((tree) node->value);
3598 if (high_value)
3600 error ("duplicate (or overlapping) case value");
3601 error ("%Jthis is the first entry overlapping that value", duplicate);
3603 else if (low_value)
3605 error ("duplicate case value") ;
3606 error ("%Jpreviously used here", duplicate);
3608 else
3610 error ("multiple default labels in one switch");
3611 error ("%Jthis is the first default label", duplicate);
3613 goto error_out;
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);
3623 return case_label;
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)
3631 tree t = create_artificial_label ();
3632 add_stmt (build_stmt (LABEL_EXPR, t));
3634 return error_mark_node;
3637 /* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
3638 Used to verify that case values match up with enumerator values. */
3640 static void
3641 match_case_to_enum_1 (tree key, tree type, tree label)
3643 char buf[2 + 2*HOST_BITS_PER_WIDE_INT/4 + 1];
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));
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);
3667 static int
3668 match_case_to_enum (splay_tree_node node, void *data)
3670 tree label = (tree) node->value;
3671 tree type = (tree) data;
3673 /* Skip default case. */
3674 if (!CASE_LOW (label))
3675 return 0;
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;
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))
3689 tree chain, key = CASE_HIGH (label);
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);
3699 return 0;
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. */
3711 void
3712 c_do_switch_warnings (splay_tree cases, tree switch_stmt)
3714 splay_tree_node default_node;
3715 location_t switch_location;
3716 tree type;
3718 if (!warn_switch && !warn_switch_enum && !warn_switch_default)
3719 return;
3721 if (EXPR_HAS_LOCATION (switch_stmt))
3722 switch_location = EXPR_LOCATION (switch_stmt);
3723 else
3724 switch_location = input_location;
3726 type = SWITCH_TYPE (switch_stmt);
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);
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)
3740 tree chain;
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. */
3747 for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain))
3749 splay_tree_node node
3750 = splay_tree_lookup (cases, (splay_tree_key) TREE_VALUE (chain));
3752 if (node)
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;
3760 else
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));
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.
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. */
3778 splay_tree_foreach (cases, match_case_to_enum, type);
3782 /* Finish an expression taking the address of LABEL (an
3783 IDENTIFIER_NODE). Returns an expression for the address. */
3785 tree
3786 finish_label_address_expr (tree label)
3788 tree result;
3790 if (pedantic)
3791 pedwarn ("taking the address of a label is non-standard");
3793 if (label == error_mark_node)
3794 return error_mark_node;
3796 label = lookup_label (label);
3797 if (label == NULL_TREE)
3798 result = null_pointer_node;
3799 else
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. */
3808 return result;
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. */
3817 c_expand_expr (tree exp, rtx target, enum machine_mode tmode,
3818 int modifier /* Actually enum_modifier. */,
3819 rtx *alt_rtl)
3821 switch (TREE_CODE (exp))
3823 case COMPOUND_LITERAL_EXPR:
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);
3832 default:
3833 abort ();
3837 /* Hook used by staticp to handle language-specific tree codes. */
3839 tree
3840 c_staticp (tree exp)
3842 return (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
3843 && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp))
3844 ? exp : NULL);
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)
3854 tree val;
3855 tree true_res = boolean_true_node;
3857 arg = stabilize_reference (arg);
3858 switch (code)
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 ();
3883 TREE_SIDE_EFFECTS (val) = 1;
3884 return val;
3887 /* Built-in macros for stddef.h, that require macros defined in this
3888 file. */
3889 void
3890 c_stddef_cpp_builtins(void)
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);
3900 static void
3901 c_init_attributes (void)
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
3922 /* Attribute handlers common to C front ends. */
3924 /* Handle a "packed" attribute; arguments as in
3925 struct attribute_spec.handler. */
3927 static tree
3928 handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args),
3929 int flags, bool *no_add_attrs)
3931 if (TYPE_P (*node))
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)
3938 /* If it is the main variant, then pack the other variants
3939 too. This happens in,
3941 struct Foo {
3942 struct Foo const *ptr; // creates a variant w/o packed flag
3943 } __ attribute__((packed)); // packs it now.
3945 tree probe;
3947 for (probe = *node; probe; probe = TYPE_NEXT_VARIANT (probe))
3948 TYPE_PACKED (probe) = 1;
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
3960 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
3961 *no_add_attrs = true;
3964 return NULL_TREE;
3967 /* Handle a "nocommon" attribute; arguments as in
3968 struct attribute_spec.handler. */
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)
3975 if (TREE_CODE (*node) == VAR_DECL)
3976 DECL_COMMON (*node) = 0;
3977 else
3979 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
3980 *no_add_attrs = true;
3983 return NULL_TREE;
3986 /* Handle a "common" attribute; arguments as in
3987 struct attribute_spec.handler. */
3989 static tree
3990 handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
3991 int ARG_UNUSED (flags), bool *no_add_attrs)
3993 if (TREE_CODE (*node) == VAR_DECL)
3994 DECL_COMMON (*node) = 1;
3995 else
3997 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
3998 *no_add_attrs = true;
4001 return NULL_TREE;
4004 /* Handle a "noreturn" attribute; arguments as in
4005 struct attribute_spec.handler. */
4007 static tree
4008 handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4009 int ARG_UNUSED (flags), bool *no_add_attrs)
4011 tree type = TREE_TYPE (*node);
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
4024 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4025 *no_add_attrs = true;
4028 return NULL_TREE;
4031 /* Handle a "noinline" attribute; arguments as in
4032 struct attribute_spec.handler. */
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)
4039 if (TREE_CODE (*node) == FUNCTION_DECL)
4040 DECL_UNINLINABLE (*node) = 1;
4041 else
4043 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4044 *no_add_attrs = true;
4047 return NULL_TREE;
4050 /* Handle a "always_inline" attribute; arguments as in
4051 struct attribute_spec.handler. */
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)
4059 if (TREE_CODE (*node) == FUNCTION_DECL)
4061 /* Do nothing else, just set the attribute. We'll get at
4062 it later with lookup_attribute. */
4064 else
4066 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4067 *no_add_attrs = true;
4070 return NULL_TREE;
4073 /* Handle a "used" attribute; arguments as in
4074 struct attribute_spec.handler. */
4076 static tree
4077 handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
4078 int ARG_UNUSED (flags), bool *no_add_attrs)
4080 tree node = *pnode;
4082 if (TREE_CODE (node) == FUNCTION_DECL
4083 || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
4085 TREE_USED (node) = 1;
4086 DECL_PRESERVE_P (node) = 1;
4088 else
4090 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4091 *no_add_attrs = true;
4094 return NULL_TREE;
4097 /* Handle a "unused" attribute; arguments as in
4098 struct attribute_spec.handler. */
4100 static tree
4101 handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4102 int flags, bool *no_add_attrs)
4104 if (DECL_P (*node))
4106 tree decl = *node;
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
4116 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4117 *no_add_attrs = true;
4120 else
4122 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4123 *node = build_variant_type_copy (*node);
4124 TREE_USED (*node) = 1;
4127 return NULL_TREE;
4130 /* Handle a "const" attribute; arguments as in
4131 struct attribute_spec.handler. */
4133 static tree
4134 handle_const_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4135 int ARG_UNUSED (flags), bool *no_add_attrs)
4137 tree type = TREE_TYPE (*node);
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
4150 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4151 *no_add_attrs = true;
4154 return NULL_TREE;
4157 /* Handle a "transparent_union" attribute; arguments as in
4158 struct attribute_spec.handler. */
4160 static tree
4161 handle_transparent_union_attribute (tree *node, tree name,
4162 tree ARG_UNUSED (args), int flags,
4163 bool *no_add_attrs)
4165 tree decl = NULL_TREE;
4166 tree *type = NULL;
4167 int is_type = 0;
4169 if (DECL_P (*node))
4171 decl = *node;
4172 type = &TREE_TYPE (decl);
4173 is_type = TREE_CODE (*node) == TYPE_DECL;
4175 else if (TYPE_P (*node))
4176 type = node, is_type = 1;
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)))))
4184 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4185 *type = build_variant_type_copy (*type);
4186 TYPE_TRANSPARENT_UNION (*type) = 1;
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
4194 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4195 *no_add_attrs = true;
4198 return NULL_TREE;
4201 /* Handle a "constructor" attribute; arguments as in
4202 struct attribute_spec.handler. */
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)
4210 tree decl = *node;
4211 tree type = TREE_TYPE (decl);
4213 if (TREE_CODE (decl) == FUNCTION_DECL
4214 && TREE_CODE (type) == FUNCTION_TYPE
4215 && decl_function_context (decl) == 0)
4217 DECL_STATIC_CONSTRUCTOR (decl) = 1;
4218 TREE_USED (decl) = 1;
4220 else
4222 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4223 *no_add_attrs = true;
4226 return NULL_TREE;
4229 /* Handle a "destructor" attribute; arguments as in
4230 struct attribute_spec.handler. */
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)
4238 tree decl = *node;
4239 tree type = TREE_TYPE (decl);
4241 if (TREE_CODE (decl) == FUNCTION_DECL
4242 && TREE_CODE (type) == FUNCTION_TYPE
4243 && decl_function_context (decl) == 0)
4245 DECL_STATIC_DESTRUCTOR (decl) = 1;
4246 TREE_USED (decl) = 1;
4248 else
4250 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4251 *no_add_attrs = true;
4254 return NULL_TREE;
4257 /* Handle a "mode" attribute; arguments as in
4258 struct attribute_spec.handler. */
4260 static tree
4261 handle_mode_attribute (tree *node, tree name, tree args,
4262 int ARG_UNUSED (flags), bool *no_add_attrs)
4264 tree type = *node;
4266 *no_add_attrs = true;
4268 if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
4269 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4270 else
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;
4279 if (len > 4 && p[0] == '_' && p[1] == '_'
4280 && p[len - 1] == '_' && p[len - 2] == '_')
4282 char *newp = (char *) alloca (len - 1);
4284 strcpy (newp, &p[2]);
4285 newp[len - 4] = '\0';
4286 p = newp;
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;
4302 if (mode == VOIDmode)
4304 error ("unknown machine mode %<%s%>", p);
4305 return NULL_TREE;
4308 valid_mode = false;
4309 switch (GET_MODE_CLASS (mode))
4311 case MODE_INT:
4312 case MODE_PARTIAL_INT:
4313 case MODE_FLOAT:
4314 valid_mode = targetm.scalar_mode_supported_p (mode);
4315 break;
4317 case MODE_COMPLEX_INT:
4318 case MODE_COMPLEX_FLOAT:
4319 valid_mode = targetm.scalar_mode_supported_p (GET_MODE_INNER (mode));
4320 break;
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;
4330 default:
4331 break;
4333 if (!valid_mode)
4335 error ("unable to emulate %<%s%>", p);
4336 return NULL_TREE;
4339 if (POINTER_TYPE_P (type))
4341 tree (*fn)(tree, enum machine_mode, bool);
4343 if (!targetm.valid_pointer_mode (mode))
4345 error ("invalid pointer mode %<%s%>", p);
4346 return NULL_TREE;
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);
4355 else
4356 typefm = lang_hooks.types.type_for_mode (mode, TYPE_UNSIGNED (type));
4358 if (typefm == NULL_TREE)
4360 error ("no data type for mode %<%s%>", p);
4361 return NULL_TREE;
4363 else if (TREE_CODE (type) == ENUMERAL_TYPE)
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)
4370 error ("cannot use mode '%s' for enumeral types",
4371 GET_MODE_NAME (mode));
4372 return NULL_TREE;
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;
4380 *node = typefm;
4382 /* No need to layout the type here. The caller should do this. */
4385 return NULL_TREE;
4388 /* Handle a "section" attribute; arguments as in
4389 struct attribute_spec.handler. */
4391 static tree
4392 handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
4393 int ARG_UNUSED (flags), bool *no_add_attrs)
4395 tree decl = *node;
4397 if (targetm.have_named_sections)
4399 user_defined_section_attribute = true;
4401 if ((TREE_CODE (decl) == FUNCTION_DECL
4402 || TREE_CODE (decl) == VAR_DECL)
4403 && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
4405 if (TREE_CODE (decl) == VAR_DECL
4406 && current_function_decl != NULL_TREE
4407 && ! TREE_STATIC (decl))
4409 error ("%Jsection attribute cannot be specified for "
4410 "local variables", decl);
4411 *no_add_attrs = true;
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)
4420 error ("%Jsection of '%D' conflicts with previous declaration",
4421 *node, *node);
4422 *no_add_attrs = true;
4424 else
4425 DECL_SECTION_NAME (decl) = TREE_VALUE (args);
4427 else
4429 error ("%Jsection attribute not allowed for '%D'", *node, *node);
4430 *no_add_attrs = true;
4433 else
4435 error ("%Jsection attributes are not supported for this target", *node);
4436 *no_add_attrs = true;
4439 return NULL_TREE;
4442 /* Handle a "aligned" attribute; arguments as in
4443 struct attribute_spec.handler. */
4445 static tree
4446 handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
4447 int flags, bool *no_add_attrs)
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;
4456 if (DECL_P (*node))
4458 decl = *node;
4459 type = &TREE_TYPE (decl);
4460 is_type = TREE_CODE (*node) == TYPE_DECL;
4462 else if (TYPE_P (*node))
4463 type = node, is_type = 1;
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);
4471 if (TREE_CODE (align_expr) != INTEGER_CST)
4473 error ("requested alignment is not a constant");
4474 *no_add_attrs = true;
4476 else if ((i = tree_log2 (align_expr)) == -1)
4478 error ("requested alignment is not a power of 2");
4479 *no_add_attrs = true;
4481 else if (i > HOST_BITS_PER_INT - 2)
4483 error ("requested alignment is too large");
4484 *no_add_attrs = true;
4486 else if (is_type)
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)
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;
4500 else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4501 *type = build_variant_type_copy (*type);
4503 TYPE_ALIGN (*type) = (1 << i) * BITS_PER_UNIT;
4504 TYPE_USER_ALIGN (*type) = 1;
4506 else if (TREE_CODE (decl) != VAR_DECL
4507 && TREE_CODE (decl) != FIELD_DECL)
4509 error ("%Jalignment may not be specified for '%D'", decl, decl);
4510 *no_add_attrs = true;
4512 else
4514 DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT;
4515 DECL_USER_ALIGN (decl) = 1;
4518 return NULL_TREE;
4521 /* Handle a "weak" attribute; arguments as in
4522 struct attribute_spec.handler. */
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))
4530 declare_weak (*node);
4532 return NULL_TREE;
4535 /* Handle an "alias" attribute; arguments as in
4536 struct attribute_spec.handler. */
4538 static tree
4539 handle_alias_attribute (tree *node, tree name, tree args,
4540 int ARG_UNUSED (flags), bool *no_add_attrs)
4542 tree decl = *node;
4544 if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
4545 || (TREE_CODE (decl) != FUNCTION_DECL && ! DECL_EXTERNAL (decl)))
4547 error ("%J'%D' defined both normally and as an alias", decl, decl);
4548 *no_add_attrs = true;
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)
4558 tree id;
4560 id = TREE_VALUE (args);
4561 if (TREE_CODE (id) != STRING_CST)
4563 error ("alias arg not a string");
4564 *no_add_attrs = true;
4565 return NULL_TREE;
4567 id = get_identifier (TREE_STRING_POINTER (id));
4568 /* This counts as a use of the object pointed to. */
4569 TREE_USED (id) = 1;
4571 if (TREE_CODE (decl) == FUNCTION_DECL)
4572 DECL_INITIAL (decl) = error_mark_node;
4573 else
4575 DECL_EXTERNAL (decl) = 0;
4576 TREE_STATIC (decl) = 1;
4579 else
4581 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4582 *no_add_attrs = true;
4585 return NULL_TREE;
4588 /* Handle an "visibility" attribute; arguments as in
4589 struct attribute_spec.handler. */
4591 static tree
4592 handle_visibility_attribute (tree *node, tree name, tree args,
4593 int ARG_UNUSED (flags),
4594 bool *no_add_attrs)
4596 tree decl = *node;
4597 tree id = TREE_VALUE (args);
4599 *no_add_attrs = true;
4601 if (TYPE_P (*node))
4603 if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE)
4605 warning ("`%s' attribute ignored on non-class types",
4606 IDENTIFIER_POINTER (name));
4607 return NULL_TREE;
4610 else if (decl_function_context (decl) != 0 || ! TREE_PUBLIC (decl))
4612 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4613 return NULL_TREE;
4616 if (TREE_CODE (id) != STRING_CST)
4618 error ("visibility arg not a string");
4619 return NULL_TREE;
4622 /* If this is a type, set the visibility on the type decl. */
4623 if (TYPE_P (decl))
4625 decl = TYPE_NAME (decl);
4626 if (! decl)
4627 return NULL_TREE;
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;
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;
4649 return NULL_TREE;
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. */
4659 bool
4660 c_determine_visibility (tree decl)
4662 gcc_assert (TREE_CODE (decl) == VAR_DECL
4663 || TREE_CODE (decl) == FUNCTION_DECL);
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;
4675 /* Anything that is exported must have default visibility. */
4676 if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
4677 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
4679 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4680 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4681 return true;
4684 return false;
4687 /* Handle an "tls_model" attribute; arguments as in
4688 struct attribute_spec.handler. */
4690 static tree
4691 handle_tls_model_attribute (tree *node, tree name, tree args,
4692 int ARG_UNUSED (flags), bool *no_add_attrs)
4694 tree decl = *node;
4696 if (! DECL_THREAD_LOCAL (decl))
4698 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4699 *no_add_attrs = true;
4701 else
4703 tree id;
4705 id = TREE_VALUE (args);
4706 if (TREE_CODE (id) != STRING_CST)
4708 error ("tls_model arg not a string");
4709 *no_add_attrs = true;
4710 return NULL_TREE;
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"))
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;
4723 return NULL_TREE;
4726 /* Handle a "no_instrument_function" attribute; arguments as in
4727 struct attribute_spec.handler. */
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)
4735 tree decl = *node;
4737 if (TREE_CODE (decl) != FUNCTION_DECL)
4739 error ("%J'%E' attribute applies only to functions", decl, name);
4740 *no_add_attrs = true;
4742 else if (DECL_INITIAL (decl))
4744 error ("%Jcan't set '%E' attribute after definition", decl, name);
4745 *no_add_attrs = true;
4747 else
4748 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
4750 return NULL_TREE;
4753 /* Handle a "malloc" attribute; arguments as in
4754 struct attribute_spec.handler. */
4756 static tree
4757 handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4758 int ARG_UNUSED (flags), bool *no_add_attrs)
4760 if (TREE_CODE (*node) == FUNCTION_DECL)
4761 DECL_IS_MALLOC (*node) = 1;
4762 /* ??? TODO: Support types. */
4763 else
4765 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4766 *no_add_attrs = true;
4769 return NULL_TREE;
4772 /* Handle a "no_limit_stack" attribute; arguments as in
4773 struct attribute_spec.handler. */
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)
4781 tree decl = *node;
4783 if (TREE_CODE (decl) != FUNCTION_DECL)
4785 error ("%J'%E' attribute applies only to functions", decl, name);
4786 *no_add_attrs = true;
4788 else if (DECL_INITIAL (decl))
4790 error ("%Jcan't set '%E' attribute after definition", decl, name);
4791 *no_add_attrs = true;
4793 else
4794 DECL_NO_LIMIT_STACK (decl) = 1;
4796 return NULL_TREE;
4799 /* Handle a "pure" attribute; arguments as in
4800 struct attribute_spec.handler. */
4802 static tree
4803 handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4804 int ARG_UNUSED (flags), bool *no_add_attrs)
4806 if (TREE_CODE (*node) == FUNCTION_DECL)
4807 DECL_IS_PURE (*node) = 1;
4808 /* ??? TODO: Support types. */
4809 else
4811 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4812 *no_add_attrs = true;
4815 return NULL_TREE;
4818 /* Handle a "deprecated" attribute; arguments as in
4819 struct attribute_spec.handler. */
4821 static tree
4822 handle_deprecated_attribute (tree *node, tree name,
4823 tree ARG_UNUSED (args), int flags,
4824 bool *no_add_attrs)
4826 tree type = NULL_TREE;
4827 int warn = 0;
4828 const char *what = NULL;
4830 if (DECL_P (*node))
4832 tree decl = *node;
4833 type = TREE_TYPE (decl);
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;
4844 else if (TYPE_P (*node))
4846 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4847 *node = build_variant_type_copy (*node);
4848 TREE_DEPRECATED (*node) = 1;
4849 type = *node;
4851 else
4852 warn = 1;
4854 if (warn)
4856 *no_add_attrs = true;
4857 if (type && TYPE_NAME (type))
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)));
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));
4873 return NULL_TREE;
4876 /* Handle a "vector_size" attribute; arguments as in
4877 struct attribute_spec.handler. */
4879 static tree
4880 handle_vector_size_attribute (tree *node, tree name, tree args,
4881 int ARG_UNUSED (flags),
4882 bool *no_add_attrs)
4884 unsigned HOST_WIDE_INT vecsize, nunits;
4885 enum machine_mode orig_mode;
4886 tree type = *node, new_type, size;
4888 *no_add_attrs = true;
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);
4896 if (! host_integerp (size, 1))
4898 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4899 return NULL_TREE;
4902 /* Get the vector size (in bytes). */
4903 vecsize = tree_low_cst (size, 1);
4905 /* We need to provide for vector pointers, vector arrays, and
4906 functions returning vectors. For example:
4908 __attribute__((vector_size(16))) short *foo;
4910 In this case, the mode is SI, but the type being modified is
4911 HI, so we need to look further. */
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);
4919 /* Get the mode of the type being modified. */
4920 orig_mode = TYPE_MODE (type);
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))
4927 error ("invalid vector type for attribute `%s'",
4928 IDENTIFIER_POINTER (name));
4929 return NULL_TREE;
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))
4936 error ("number of components of the vector not a power of two");
4937 return NULL_TREE;
4940 new_type = build_vector_type (type, nunits);
4942 /* Build back pointers if needed. */
4943 *node = reconstruct_complex_type (*node, new_type);
4945 return NULL_TREE;
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)
4954 tree type = *node;
4955 unsigned HOST_WIDE_INT attr_arg_num;
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)
4962 if (! TYPE_ARG_TYPES (type))
4964 error ("nonnull attribute without arguments on a non-prototype");
4965 *no_add_attrs = true;
4967 return NULL_TREE;
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))
4974 tree argument;
4975 unsigned HOST_WIDE_INT arg_num = 0, ck_num;
4977 if (! get_nonnull_operand (TREE_VALUE (args), &arg_num))
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;
4985 argument = TYPE_ARG_TYPES (type);
4986 if (argument)
4988 for (ck_num = 1; ; ck_num++)
4990 if (! argument || ck_num == arg_num)
4991 break;
4992 argument = TREE_CHAIN (argument);
4995 if (! argument
4996 || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
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;
5004 if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
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;
5014 return NULL_TREE;
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. */
5020 static void
5021 check_function_nonnull (tree attrs, tree params)
5023 tree a, args, param;
5024 int param_num;
5026 for (a = attrs; a; a = TREE_CHAIN (a))
5028 if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
5030 args = TREE_VALUE (a);
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))
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);
5050 /* Check that the Nth argument of a function call (counting backwards
5051 from the end) is a (pointer)0. */
5053 static void
5054 check_function_sentinel (tree attrs, tree params)
5056 tree attr = lookup_attribute ("sentinel", attrs);
5058 if (attr)
5060 if (!params)
5061 warning ("missing sentinel in function call");
5062 else
5064 tree sentinel, end;
5065 unsigned pos = 0;
5067 if (TREE_VALUE (attr))
5069 tree p = TREE_VALUE (TREE_VALUE (attr));
5070 STRIP_NOPS (p);
5071 pos = TREE_INT_CST_LOW (p);
5074 sentinel = end = params;
5076 /* Advance `end' ahead of `sentinel' by `pos' positions. */
5077 while (pos > 0 && TREE_CHAIN (end))
5079 pos--;
5080 end = TREE_CHAIN (end);
5082 if (pos > 0)
5084 warning ("not enough arguments to fit a sentinel");
5085 return;
5088 /* Now advance both until we find the last parameter. */
5089 while (TREE_CHAIN (end))
5091 end = TREE_CHAIN (end);
5092 sentinel = TREE_CHAIN (sentinel);
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");
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. */
5107 static bool
5108 nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
5110 unsigned HOST_WIDE_INT arg_num = 0;
5112 for (; args; args = TREE_CHAIN (args))
5114 if (! get_nonnull_operand (TREE_VALUE (args), &arg_num))
5115 abort ();
5117 if (arg_num == param_num)
5118 return true;
5120 return false;
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. */
5127 static void
5128 check_nonnull_arg (void * ARG_UNUSED (ctx), tree param,
5129 unsigned HOST_WIDE_INT param_num)
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). */
5135 if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
5136 return;
5138 if (integer_zerop (param))
5139 warning ("null argument where non-null required (arg %lu)",
5140 (unsigned long) param_num);
5143 /* Helper for nonnull attribute handling; fetch the operand number
5144 from the attribute argument list. */
5146 static bool
5147 get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
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);
5156 if (TREE_CODE (arg_num_expr) != INTEGER_CST
5157 || TREE_INT_CST_HIGH (arg_num_expr) != 0)
5158 return false;
5160 *valp = TREE_INT_CST_LOW (arg_num_expr);
5161 return true;
5164 /* Handle a "nothrow" attribute; arguments as in
5165 struct attribute_spec.handler. */
5167 static tree
5168 handle_nothrow_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5169 int ARG_UNUSED (flags), bool *no_add_attrs)
5171 if (TREE_CODE (*node) == FUNCTION_DECL)
5172 TREE_NOTHROW (*node) = 1;
5173 /* ??? TODO: Support types. */
5174 else
5176 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5177 *no_add_attrs = true;
5180 return NULL_TREE;
5183 /* Handle a "cleanup" attribute; arguments as in
5184 struct attribute_spec.handler. */
5186 static tree
5187 handle_cleanup_attribute (tree *node, tree name, tree args,
5188 int ARG_UNUSED (flags), bool *no_add_attrs)
5190 tree decl = *node;
5191 tree cleanup_id, cleanup_decl;
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))
5199 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5200 *no_add_attrs = true;
5201 return NULL_TREE;
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)
5210 error ("cleanup arg not an identifier");
5211 *no_add_attrs = true;
5212 return NULL_TREE;
5214 cleanup_decl = lookup_name (cleanup_id);
5215 if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
5217 error ("cleanup arg not a function");
5218 *no_add_attrs = true;
5219 return NULL_TREE;
5222 /* That the function has proper type is checked with the
5223 eventual call to build_function_call. */
5225 return NULL_TREE;
5228 /* Handle a "warn_unused_result" attribute. No special handling. */
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)
5235 /* Ignore the attribute for functions not returning any value. */
5236 if (VOID_TYPE_P (TREE_TYPE (*node)))
5238 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5239 *no_add_attrs = true;
5242 return NULL_TREE;
5245 /* Handle a "sentinel" attribute. */
5247 static tree
5248 handle_sentinel_attribute (tree *node, tree name, tree args,
5249 int ARG_UNUSED (flags), bool *no_add_attrs)
5251 tree params = TYPE_ARG_TYPES (*node);
5253 if (!params)
5255 warning ("`%s' attribute requires prototypes with named arguments",
5256 IDENTIFIER_POINTER (name));
5257 *no_add_attrs = true;
5259 else
5261 while (TREE_CHAIN (params))
5262 params = TREE_CHAIN (params);
5264 if (VOID_TYPE_P (TREE_VALUE (params)))
5266 warning ("`%s' attribute only applies to variadic functions",
5267 IDENTIFIER_POINTER (name));
5268 *no_add_attrs = true;
5272 if (args)
5274 tree position = TREE_VALUE (args);
5276 STRIP_NOPS (position);
5277 if (TREE_CODE (position) != INTEGER_CST)
5279 warning ("requested position is not an integer constant");
5280 *no_add_attrs = true;
5282 else
5284 if (tree_int_cst_lt (position, integer_zero_node))
5286 warning ("requested position is less than zero");
5287 *no_add_attrs = true;
5292 return NULL_TREE;
5295 /* Check for valid arguments being passed to a function. */
5296 void
5297 check_function_arguments (tree attrs, tree params)
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. */
5302 if (warn_nonnull)
5303 check_function_nonnull (attrs, params);
5305 /* Check for errors in format strings. */
5307 if (warn_format)
5309 check_function_format (attrs, params);
5310 check_function_sentinel (attrs, params);
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)
5323 if (TREE_CODE (param) == NOP_EXPR)
5325 /* Strip coercion. */
5326 check_function_arguments_recurse (callback, ctx,
5327 TREE_OPERAND (param, 0), param_num);
5328 return;
5331 if (TREE_CODE (param) == CALL_EXPR)
5333 tree type = TREE_TYPE (TREE_TYPE (TREE_OPERAND (param, 0)));
5334 tree attrs;
5335 bool found_format_arg = false;
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). */
5341 for (attrs = TYPE_ATTRIBUTES (type);
5342 attrs;
5343 attrs = TREE_CHAIN (attrs))
5344 if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
5346 tree inner_args;
5347 tree format_num_expr;
5348 int format_num;
5349 int i;
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);
5359 if (TREE_CODE (format_num_expr) != INTEGER_CST
5360 || TREE_INT_CST_HIGH (format_num_expr) != 0)
5361 abort ();
5363 format_num = TREE_INT_CST_LOW (format_num_expr);
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)
5370 check_function_arguments_recurse (callback, ctx,
5371 TREE_VALUE (inner_args),
5372 param_num);
5373 found_format_arg = true;
5374 break;
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;
5385 if (TREE_CODE (param) == COND_EXPR)
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;
5395 (*callback) (ctx, param, param_num);
5398 /* Function to help qsort sort FIELD_DECLs by name order. */
5401 field_decl_cmp (const void *x_p, const void *y_p)
5403 const tree *const x = (const tree *const) x_p;
5404 const tree *const y = (const tree *const) y_p;
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;
5418 static struct {
5419 gt_pointer_operator new_value;
5420 void *cookie;
5421 } resort_data;
5423 /* This routine compares two fields like field_decl_cmp but using the
5424 pointer operator in resort_data. */
5426 static int
5427 resort_field_decl_cmp (const void *x_p, const void *y_p)
5429 const tree *const x = (const tree *const) x_p;
5430 const tree *const y = (const tree *const) y_p;
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;
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;
5447 return 1;
5450 /* Resort DECL_SORTED_FIELDS because pointers have been reordered. */
5452 void
5453 resort_sorted_fields (void *obj,
5454 void * ARG_UNUSED (orig_obj),
5455 gt_pointer_operator new_value,
5456 void *cookie)
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);
5465 /* Issue the error given by MSGID, indicating that it occurred before
5466 TOKEN, which had the associated VALUE. */
5468 void
5469 c_parse_error (const char *msgid, enum cpp_ttype token, tree value)
5471 const char *string = _(msgid);
5473 if (token == CPP_EOF)
5474 error ("%s at end of input", string);
5475 else if (token == CPP_CHAR || token == CPP_WCHAR)
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);
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);
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. */
5501 void
5502 c_warn_unused_result (tree *top_p)
5504 tree t = *top_p;
5505 tree_stmt_iterator i;
5506 tree fdecl, ftype;
5508 switch (TREE_CODE (t))
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;
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;
5534 case CALL_EXPR:
5535 if (TREE_USED (t))
5536 break;
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
5546 ftype = TREE_TYPE (TREE_OPERAND (t, 0));
5547 /* Look past pointer-to-function to the function type itself. */
5548 ftype = TREE_TYPE (ftype);
5551 if (lookup_attribute ("warn_unused_result", TYPE_ATTRIBUTES (ftype)))
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));
5562 break;
5564 default:
5565 /* Not a container, not a call, or a call whose value is used. */
5566 break;
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. */
5575 static tree
5576 fold_offsetof_1 (tree expr)
5578 enum tree_code code = PLUS_EXPR;
5579 tree base, off, t;
5581 switch (TREE_CODE (expr))
5583 case ERROR_MARK:
5584 return expr;
5586 case INDIRECT_REF:
5587 return size_zero_node;
5589 case COMPONENT_REF:
5590 base = fold_offsetof_1 (TREE_OPERAND (expr, 0));
5591 if (base == error_mark_node)
5592 return base;
5594 t = TREE_OPERAND (expr, 1);
5595 if (DECL_C_BIT_FIELD (t))
5597 error ("attempt to take address of bit-field structure "
5598 "member `%s'", IDENTIFIER_POINTER (DECL_NAME (t)));
5599 return error_mark_node;
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;
5606 case ARRAY_REF:
5607 base = fold_offsetof_1 (TREE_OPERAND (expr, 0));
5608 if (base == error_mark_node)
5609 return base;
5611 t = TREE_OPERAND (expr, 1);
5612 if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
5614 code = MINUS_EXPR;
5615 t = fold (build1 (NEGATE_EXPR, TREE_TYPE (t), t));
5617 t = convert (sizetype, t);
5618 off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
5619 break;
5621 default:
5622 abort ();
5625 return size_binop (code, base, off);
5628 tree
5629 fold_offsetof (tree expr)
5631 /* Convert back from the internal sizetype to size_t. */
5632 return convert (size_type_node, fold_offsetof_1 (expr));
5635 #include "gt-c-common.h"