* config/arm/arm.c (arm_expand_epilogue): Count blocks of 4 regs.
[official-gcc.git] / gcc / c-common.c
blobc4f012920590e3f4c940c296e39e05ea97cd4021
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"
46 cpp_reader *parse_in; /* Declared in c-pragma.h. */
48 /* We let tm.h override the types used here, to handle trivial differences
49 such as the choice of unsigned int or long unsigned int for size_t.
50 When machines start needing nontrivial differences in the size type,
51 it would be best to do something here to figure out automatically
52 from other information what type to use. */
54 #ifndef SIZE_TYPE
55 #define SIZE_TYPE "long unsigned int"
56 #endif
58 #ifndef PID_TYPE
59 #define PID_TYPE "int"
60 #endif
62 #ifndef WCHAR_TYPE
63 #define WCHAR_TYPE "int"
64 #endif
66 /* WCHAR_TYPE gets overridden by -fshort-wchar. */
67 #define MODIFIED_WCHAR_TYPE \
68 (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
70 #ifndef PTRDIFF_TYPE
71 #define PTRDIFF_TYPE "long int"
72 #endif
74 #ifndef WINT_TYPE
75 #define WINT_TYPE "unsigned int"
76 #endif
78 #ifndef INTMAX_TYPE
79 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
80 ? "int" \
81 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
82 ? "long int" \
83 : "long long int"))
84 #endif
86 #ifndef UINTMAX_TYPE
87 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
88 ? "unsigned int" \
89 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
90 ? "long unsigned int" \
91 : "long long unsigned int"))
92 #endif
94 /* The following symbols are subsumed in the c_global_trees array, and
95 listed here individually for documentation purposes.
97 INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
99 tree short_integer_type_node;
100 tree long_integer_type_node;
101 tree long_long_integer_type_node;
103 tree short_unsigned_type_node;
104 tree long_unsigned_type_node;
105 tree long_long_unsigned_type_node;
107 tree truthvalue_type_node;
108 tree truthvalue_false_node;
109 tree truthvalue_true_node;
111 tree ptrdiff_type_node;
113 tree unsigned_char_type_node;
114 tree signed_char_type_node;
115 tree wchar_type_node;
116 tree signed_wchar_type_node;
117 tree unsigned_wchar_type_node;
119 tree float_type_node;
120 tree double_type_node;
121 tree long_double_type_node;
123 tree complex_integer_type_node;
124 tree complex_float_type_node;
125 tree complex_double_type_node;
126 tree complex_long_double_type_node;
128 tree intQI_type_node;
129 tree intHI_type_node;
130 tree intSI_type_node;
131 tree intDI_type_node;
132 tree intTI_type_node;
134 tree unsigned_intQI_type_node;
135 tree unsigned_intHI_type_node;
136 tree unsigned_intSI_type_node;
137 tree unsigned_intDI_type_node;
138 tree unsigned_intTI_type_node;
140 tree widest_integer_literal_type_node;
141 tree widest_unsigned_literal_type_node;
143 Nodes for types `void *' and `const void *'.
145 tree ptr_type_node, const_ptr_type_node;
147 Nodes for types `char *' and `const char *'.
149 tree string_type_node, const_string_type_node;
151 Type `char[SOMENUMBER]'.
152 Used when an array of char is needed and the size is irrelevant.
154 tree char_array_type_node;
156 Type `int[SOMENUMBER]' or something like it.
157 Used when an array of int needed and the size is irrelevant.
159 tree int_array_type_node;
161 Type `wchar_t[SOMENUMBER]' or something like it.
162 Used when a wide string literal is created.
164 tree wchar_array_type_node;
166 Type `int ()' -- used for implicit declaration of functions.
168 tree default_function_type;
170 A VOID_TYPE node, packaged in a TREE_LIST.
172 tree void_list_node;
174 The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
175 and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
176 VAR_DECLS, but C++ does.)
178 tree function_name_decl_node;
179 tree pretty_function_name_decl_node;
180 tree c99_function_name_decl_node;
182 Stack of nested function name VAR_DECLs.
184 tree saved_function_name_decls;
188 tree c_global_trees[CTI_MAX];
190 /* TRUE if a code represents a statement. The front end init
191 langhook should take care of initialization of this array. */
193 bool statement_code_p[MAX_TREE_CODES];
195 /* Switches common to the C front ends. */
197 /* Nonzero if prepreprocessing only. */
199 int flag_preprocess_only;
201 /* Nonzero means don't output line number information. */
203 char flag_no_line_commands;
205 /* Nonzero causes -E output not to be done, but directives such as
206 #define that have side effects are still obeyed. */
208 char flag_no_output;
210 /* Nonzero means dump macros in some fashion. */
212 char flag_dump_macros;
214 /* Nonzero means pass #include lines through to the output. */
216 char flag_dump_includes;
218 /* The file name to which we should write a precompiled header, or
219 NULL if no header will be written in this compile. */
221 const char *pch_file;
223 /* Nonzero if an ISO standard was selected. It rejects macros in the
224 user's namespace. */
225 int flag_iso;
227 /* Nonzero if -undef was given. It suppresses target built-in macros
228 and assertions. */
229 int flag_undef;
231 /* Nonzero means don't recognize the non-ANSI builtin functions. */
233 int flag_no_builtin;
235 /* Nonzero means don't recognize the non-ANSI builtin functions.
236 -ansi sets this. */
238 int flag_no_nonansi_builtin;
240 /* Nonzero means give `double' the same size as `float'. */
242 int flag_short_double;
244 /* Nonzero means give `wchar_t' the same size as `short'. */
246 int flag_short_wchar;
248 /* Nonzero means allow Microsoft extensions without warnings or errors. */
249 int flag_ms_extensions;
251 /* Nonzero means don't recognize the keyword `asm'. */
253 int flag_no_asm;
255 /* Nonzero means give string constants the type `const char *', as mandated
256 by the standard. */
258 int flag_const_strings;
260 /* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
262 int flag_signed_bitfields = 1;
263 int explicit_flag_signed_bitfields;
265 /* Nonzero means warn about pointer casts that can drop a type qualifier
266 from the pointer target type. */
268 int warn_cast_qual;
270 /* Warn about functions which might be candidates for format attributes. */
272 int warn_missing_format_attribute;
274 /* Nonzero means warn about sizeof(function) or addition/subtraction
275 of function pointers. */
277 int warn_pointer_arith;
279 /* Nonzero means warn for any global function def
280 without separate previous prototype decl. */
282 int warn_missing_prototypes;
284 /* Warn if adding () is suggested. */
286 int warn_parentheses;
288 /* Warn if initializer is not completely bracketed. */
290 int warn_missing_braces;
292 /* Warn about comparison of signed and unsigned values.
293 If -1, neither -Wsign-compare nor -Wno-sign-compare has been specified
294 (in which case -Wextra gets to decide). */
296 int warn_sign_compare = -1;
298 /* Nonzero means warn about usage of long long when `-pedantic'. */
300 int warn_long_long = 1;
302 /* Nonzero means warn about deprecated conversion from string constant to
303 `char *'. */
305 int warn_write_strings;
307 /* Nonzero means warn about multiple (redundant) decls for the same single
308 variable or function. */
310 int warn_redundant_decls;
312 /* Warn about testing equality of floating point numbers. */
314 int warn_float_equal;
316 /* Warn about a subscript that has type char. */
318 int warn_char_subscripts;
320 /* Warn if a type conversion is done that might have confusing results. */
322 int warn_conversion;
324 /* Warn about #pragma directives that are not recognized. */
326 int warn_unknown_pragmas; /* Tri state variable. */
328 /* Warn about format/argument anomalies in calls to formatted I/O functions
329 (*printf, *scanf, strftime, strfmon, etc.). */
331 int warn_format;
333 /* Warn about Y2K problems with strftime formats. */
335 int warn_format_y2k;
337 /* Warn about excess arguments to formats. */
339 int warn_format_extra_args;
341 /* Warn about zero-length formats. */
343 int warn_format_zero_length;
345 /* Warn about non-literal format arguments. */
347 int warn_format_nonliteral;
349 /* Warn about possible security problems with calls to format functions. */
351 int warn_format_security;
353 /* Zero means that faster, ...NonNil variants of objc_msgSend...
354 calls will be used in ObjC; passing nil receivers to such calls
355 will most likely result in crashes. */
356 int flag_nil_receivers = 1;
358 /* Nonzero means that we will allow new ObjC exception syntax (@throw,
359 @try, etc.) in source code. */
360 int flag_objc_exceptions = 0;
362 /* Nonzero means that code generation will be altered to support
363 "zero-link" execution. This currently affects ObjC only, but may
364 affect other languages in the future. */
365 int flag_zero_link = 0;
367 /* Nonzero means emit an '__OBJC, __image_info' for the current translation
368 unit. It will inform the ObjC runtime that class definition(s) herein
369 contained are to replace one(s) previously loaded. */
370 int flag_replace_objc_classes = 0;
372 /* C/ObjC language option variables. */
375 /* Nonzero means message about use of implicit function declarations;
376 1 means warning; 2 means error. */
378 int mesg_implicit_function_declaration = -1;
380 /* Nonzero means allow type mismatches in conditional expressions;
381 just make their values `void'. */
383 int flag_cond_mismatch;
385 /* Nonzero means enable C89 Amendment 1 features. */
387 int flag_isoc94;
389 /* Nonzero means use the ISO C99 dialect of C. */
391 int flag_isoc99;
393 /* Nonzero means that we have builtin functions, and main is an int. */
395 int flag_hosted = 1;
397 /* Nonzero means warn when casting a function call to a type that does
398 not match the return type (e.g. (float)sqrt() or (anything*)malloc()
399 when there is no previous declaration of sqrt or malloc. */
401 int warn_bad_function_cast;
403 /* Warn about traditional constructs whose meanings changed in ANSI C. */
405 int warn_traditional;
407 /* Nonzero means warn for a declaration found after a statement. */
409 int warn_declaration_after_statement;
411 /* Nonzero means warn for non-prototype function decls
412 or non-prototyped defs without previous prototype. */
414 int warn_strict_prototypes;
416 /* Nonzero means warn for any global function def
417 without separate previous decl. */
419 int warn_missing_declarations;
421 /* Nonzero means warn about declarations of objects not at
422 file-scope level and about *all* declarations of functions (whether
423 or static) not at file-scope level. Note that we exclude
424 implicit function declarations. To get warnings about those, use
425 -Wimplicit. */
427 int warn_nested_externs;
429 /* Warn if main is suspicious. */
431 int warn_main;
433 /* Nonzero means warn about possible violations of sequence point rules. */
435 int warn_sequence_point;
437 /* Nonzero means warn about uninitialized variable when it is initialized with itself.
438 For example: int i = i;, GCC will not warn about this when warn_init_self is nonzero. */
440 int warn_init_self;
442 /* Nonzero means to warn about compile-time division by zero. */
443 int warn_div_by_zero = 1;
445 /* Nonzero means warn about use of implicit int. */
447 int warn_implicit_int;
449 /* Warn about NULL being passed to argument slots marked as requiring
450 non-NULL. */
452 int warn_nonnull;
454 /* Warn about old-style parameter declaration. */
456 int warn_old_style_definition;
459 /* ObjC language option variables. */
462 /* Open and close the file for outputting class declarations, if
463 requested (ObjC). */
465 int flag_gen_declaration;
467 /* Generate code for GNU or NeXT runtime environment. */
469 #ifdef NEXT_OBJC_RUNTIME
470 int flag_next_runtime = 1;
471 #else
472 int flag_next_runtime = 0;
473 #endif
475 /* Tells the compiler that this is a special run. Do not perform any
476 compiling, instead we are to test some platform dependent features
477 and output a C header file with appropriate definitions. */
479 int print_struct_values;
481 /* ???. Undocumented. */
483 const char *constant_string_class_name;
485 /* Warn if multiple methods are seen for the same selector, but with
486 different argument types. Performs the check on the whole selector
487 table at the end of compilation. */
489 int warn_selector;
491 /* Warn if a @selector() is found, and no method with that selector
492 has been previously declared. The check is done on each
493 @selector() as soon as it is found - so it warns about forward
494 declarations. */
496 int warn_undeclared_selector;
498 /* Warn if methods required by a protocol are not implemented in the
499 class adopting it. When turned off, methods inherited to that
500 class are also considered implemented. */
502 int warn_protocol = 1;
505 /* C++ language option variables. */
508 /* Nonzero means don't recognize any extension keywords. */
510 int flag_no_gnu_keywords;
512 /* Nonzero means do emit exported implementations of functions even if
513 they can be inlined. */
515 int flag_implement_inlines = 1;
517 /* Nonzero means that implicit instantiations will be emitted if needed. */
519 int flag_implicit_templates = 1;
521 /* Nonzero means that implicit instantiations of inline templates will be
522 emitted if needed, even if instantiations of non-inline templates
523 aren't. */
525 int flag_implicit_inline_templates = 1;
527 /* Nonzero means generate separate instantiation control files and
528 juggle them at link time. */
530 int flag_use_repository;
532 /* Nonzero if we want to issue diagnostics that the standard says are not
533 required. */
535 int flag_optional_diags = 1;
537 /* Nonzero means we should attempt to elide constructors when possible. */
539 int flag_elide_constructors = 1;
541 /* Nonzero means that member functions defined in class scope are
542 inline by default. */
544 int flag_default_inline = 1;
546 /* Controls whether compiler generates 'type descriptor' that give
547 run-time type information. */
549 int flag_rtti = 1;
551 /* Nonzero if we want to conserve space in the .o files. We do this
552 by putting uninitialized data and runtime initialized data into
553 .common instead of .data at the expense of not flagging multiple
554 definitions. */
556 int flag_conserve_space;
558 /* Nonzero if we want to obey access control semantics. */
560 int flag_access_control = 1;
562 /* Nonzero if we want to check the return value of new and avoid calling
563 constructors if it is a null pointer. */
565 int flag_check_new;
567 /* Nonzero if we want the new ISO rules for pushing a new scope for `for'
568 initialization variables.
569 0: Old rules, set by -fno-for-scope.
570 2: New ISO rules, set by -ffor-scope.
571 1: Try to implement new ISO rules, but with backup compatibility
572 (and warnings). This is the default, for now. */
574 int flag_new_for_scope = 1;
576 /* Nonzero if we want to emit defined symbols with common-like linkage as
577 weak symbols where possible, in order to conform to C++ semantics.
578 Otherwise, emit them as local symbols. */
580 int flag_weak = 1;
582 /* 0 means we want the preprocessor to not emit line directives for
583 the current working directory. 1 means we want it to do it. -1
584 means we should decide depending on whether debugging information
585 is being emitted or not. */
587 int flag_working_directory = -1;
589 /* Nonzero to use __cxa_atexit, rather than atexit, to register
590 destructors for local statics and global objects. */
592 int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
594 /* Nonzero means make the default pedwarns warnings instead of errors.
595 The value of this flag is ignored if -pedantic is specified. */
597 int flag_permissive;
599 /* Nonzero means to implement standard semantics for exception
600 specifications, calling unexpected if an exception is thrown that
601 doesn't match the specification. Zero means to treat them as
602 assertions and optimize accordingly, but not check them. */
604 int flag_enforce_eh_specs = 1;
606 /* Nonzero means warn about things that will change when compiling
607 with an ABI-compliant compiler. */
609 int warn_abi = 0;
611 /* Nonzero means warn about invalid uses of offsetof. */
613 int warn_invalid_offsetof = 1;
615 /* Nonzero means warn about implicit declarations. */
617 int warn_implicit = 1;
619 /* Nonzero means warn when all ctors or dtors are private, and the class
620 has no friends. */
622 int warn_ctor_dtor_privacy = 0;
624 /* Nonzero means warn in function declared in derived class has the
625 same name as a virtual in the base class, but fails to match the
626 type signature of any virtual function in the base class. */
628 int warn_overloaded_virtual;
630 /* Nonzero means warn when declaring a class that has a non virtual
631 destructor, when it really ought to have a virtual one. */
633 int warn_nonvdtor;
635 /* Nonzero means warn when the compiler will reorder code. */
637 int warn_reorder;
639 /* Nonzero means warn when synthesis behavior differs from Cfront's. */
641 int warn_synth;
643 /* Nonzero means warn when we convert a pointer to member function
644 into a pointer to (void or function). */
646 int warn_pmf2ptr = 1;
648 /* Nonzero means warn about violation of some Effective C++ style rules. */
650 int warn_ecpp;
652 /* Nonzero means warn where overload resolution chooses a promotion from
653 unsigned to signed over a conversion to an unsigned of the same size. */
655 int warn_sign_promo;
657 /* Nonzero means warn when an old-style cast is used. */
659 int warn_old_style_cast;
661 /* Nonzero means warn when non-templatized friend functions are
662 declared within a template */
664 int warn_nontemplate_friend = 1;
666 /* Nonzero means complain about deprecated features. */
668 int warn_deprecated = 1;
670 /* Maximum template instantiation depth. This limit is rather
671 arbitrary, but it exists to limit the time it takes to notice
672 infinite template instantiations. */
674 int max_tinst_depth = 500;
678 /* The elements of `ridpointers' are identifier nodes for the reserved
679 type names and storage classes. It is indexed by a RID_... value. */
680 tree *ridpointers;
682 tree (*make_fname_decl) (tree, int);
684 /* If non-NULL, the address of a language-specific function that takes
685 any action required right before expand_function_end is called. */
686 void (*lang_expand_function_end) (void);
688 /* Nonzero means the expression being parsed will never be evaluated.
689 This is a count, since unevaluated expressions can nest. */
690 int skip_evaluation;
692 /* Information about how a function name is generated. */
693 struct fname_var_t
695 tree *const decl; /* pointer to the VAR_DECL. */
696 const unsigned rid; /* RID number for the identifier. */
697 const int pretty; /* How pretty is it? */
700 /* The three ways of getting then name of the current function. */
702 const struct fname_var_t fname_vars[] =
704 /* C99 compliant __func__, must be first. */
705 {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
706 /* GCC __FUNCTION__ compliant. */
707 {&function_name_decl_node, RID_FUNCTION_NAME, 0},
708 /* GCC __PRETTY_FUNCTION__ compliant. */
709 {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
710 {NULL, 0, 0},
713 static int constant_fits_type_p (tree, tree);
715 /* Keep a stack of if statements. We record the number of compound
716 statements seen up to the if keyword, as well as the line number
717 and file of the if. If a potentially ambiguous else is seen, that
718 fact is recorded; the warning is issued when we can be sure that
719 the enclosing if statement does not have an else branch. */
720 typedef struct
722 int compstmt_count;
723 location_t locus;
724 int needs_warning;
725 tree if_stmt;
726 } if_elt;
728 static if_elt *if_stack;
730 /* Amount of space in the if statement stack. */
731 static int if_stack_space = 0;
733 /* Stack pointer. */
734 static int if_stack_pointer = 0;
736 static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
737 static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
738 static tree handle_common_attribute (tree *, tree, tree, int, bool *);
739 static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
740 static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
741 static tree handle_always_inline_attribute (tree *, tree, tree, int,
742 bool *);
743 static tree handle_used_attribute (tree *, tree, tree, int, bool *);
744 static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
745 static tree handle_const_attribute (tree *, tree, tree, int, bool *);
746 static tree handle_transparent_union_attribute (tree *, tree, tree,
747 int, bool *);
748 static tree handle_constructor_attribute (tree *, tree, tree, int, bool *);
749 static tree handle_destructor_attribute (tree *, tree, tree, int, bool *);
750 static tree handle_mode_attribute (tree *, tree, tree, int, bool *);
751 static tree handle_section_attribute (tree *, tree, tree, int, bool *);
752 static tree handle_aligned_attribute (tree *, tree, tree, int, bool *);
753 static tree handle_weak_attribute (tree *, tree, tree, int, bool *) ;
754 static tree handle_alias_attribute (tree *, tree, tree, int, bool *);
755 static tree handle_visibility_attribute (tree *, tree, tree, int,
756 bool *);
757 static tree handle_tls_model_attribute (tree *, tree, tree, int,
758 bool *);
759 static tree handle_no_instrument_function_attribute (tree *, tree,
760 tree, int, bool *);
761 static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
762 static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
763 bool *);
764 static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
765 static tree handle_deprecated_attribute (tree *, tree, tree, int,
766 bool *);
767 static tree handle_vector_size_attribute (tree *, tree, tree, int,
768 bool *);
769 static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
770 static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
771 static tree handle_cleanup_attribute (tree *, tree, tree, int, bool *);
772 static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
773 bool *);
775 static void check_function_nonnull (tree, tree);
776 static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
777 static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
778 static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
779 static int resort_field_decl_cmp (const void *, const void *);
781 /* Table of machine-independent attributes common to all C-like languages. */
782 const struct attribute_spec c_common_attribute_table[] =
784 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
785 { "packed", 0, 0, false, false, false,
786 handle_packed_attribute },
787 { "nocommon", 0, 0, true, false, false,
788 handle_nocommon_attribute },
789 { "common", 0, 0, true, false, false,
790 handle_common_attribute },
791 /* FIXME: logically, noreturn attributes should be listed as
792 "false, true, true" and apply to function types. But implementing this
793 would require all the places in the compiler that use TREE_THIS_VOLATILE
794 on a decl to identify non-returning functions to be located and fixed
795 to check the function type instead. */
796 { "noreturn", 0, 0, true, false, false,
797 handle_noreturn_attribute },
798 { "volatile", 0, 0, true, false, false,
799 handle_noreturn_attribute },
800 { "noinline", 0, 0, true, false, false,
801 handle_noinline_attribute },
802 { "always_inline", 0, 0, true, false, false,
803 handle_always_inline_attribute },
804 { "used", 0, 0, true, false, false,
805 handle_used_attribute },
806 { "unused", 0, 0, false, false, false,
807 handle_unused_attribute },
808 /* The same comments as for noreturn attributes apply to const ones. */
809 { "const", 0, 0, true, false, false,
810 handle_const_attribute },
811 { "transparent_union", 0, 0, false, false, false,
812 handle_transparent_union_attribute },
813 { "constructor", 0, 0, true, false, false,
814 handle_constructor_attribute },
815 { "destructor", 0, 0, true, false, false,
816 handle_destructor_attribute },
817 { "mode", 1, 1, false, true, false,
818 handle_mode_attribute },
819 { "section", 1, 1, true, false, false,
820 handle_section_attribute },
821 { "aligned", 0, 1, false, false, false,
822 handle_aligned_attribute },
823 { "weak", 0, 0, true, false, false,
824 handle_weak_attribute },
825 { "alias", 1, 1, true, false, false,
826 handle_alias_attribute },
827 { "no_instrument_function", 0, 0, true, false, false,
828 handle_no_instrument_function_attribute },
829 { "malloc", 0, 0, true, false, false,
830 handle_malloc_attribute },
831 { "no_stack_limit", 0, 0, true, false, false,
832 handle_no_limit_stack_attribute },
833 { "pure", 0, 0, true, false, false,
834 handle_pure_attribute },
835 { "deprecated", 0, 0, false, false, false,
836 handle_deprecated_attribute },
837 { "vector_size", 1, 1, false, true, false,
838 handle_vector_size_attribute },
839 { "visibility", 1, 1, true, false, false,
840 handle_visibility_attribute },
841 { "tls_model", 1, 1, true, false, false,
842 handle_tls_model_attribute },
843 { "nonnull", 0, -1, false, true, true,
844 handle_nonnull_attribute },
845 { "nothrow", 0, 0, true, false, false,
846 handle_nothrow_attribute },
847 { "may_alias", 0, 0, false, true, false, NULL },
848 { "cleanup", 1, 1, true, false, false,
849 handle_cleanup_attribute },
850 { "warn_unused_result", 0, 0, false, true, true,
851 handle_warn_unused_result_attribute },
852 { NULL, 0, 0, false, false, false, NULL }
855 /* Give the specifications for the format attributes, used by C and all
856 descendants. */
858 const struct attribute_spec c_common_format_attribute_table[] =
860 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
861 { "format", 3, 3, false, true, true,
862 handle_format_attribute },
863 { "format_arg", 1, 1, false, true, true,
864 handle_format_arg_attribute },
865 { NULL, 0, 0, false, false, false, NULL }
868 /* Record the start of an if-then, and record the start of it
869 for ambiguous else detection.
871 COND is the condition for the if-then statement.
873 IF_STMT is the statement node that has already been created for
874 this if-then statement. It is created before parsing the
875 condition to keep line number information accurate. */
877 void
878 c_expand_start_cond (tree cond, int compstmt_count, tree if_stmt)
880 /* Make sure there is enough space on the stack. */
881 if (if_stack_space == 0)
883 if_stack_space = 10;
884 if_stack = xmalloc (10 * sizeof (if_elt));
886 else if (if_stack_space == if_stack_pointer)
888 if_stack_space += 10;
889 if_stack = xrealloc (if_stack, if_stack_space * sizeof (if_elt));
892 IF_COND (if_stmt) = cond;
893 add_stmt (if_stmt);
895 /* Record this if statement. */
896 if_stack[if_stack_pointer].compstmt_count = compstmt_count;
897 if_stack[if_stack_pointer].locus = input_location;
898 if_stack[if_stack_pointer].needs_warning = 0;
899 if_stack[if_stack_pointer].if_stmt = if_stmt;
900 if_stack_pointer++;
903 /* Called after the then-clause for an if-statement is processed. */
905 void
906 c_finish_then (void)
908 tree if_stmt = if_stack[if_stack_pointer - 1].if_stmt;
909 RECHAIN_STMTS (if_stmt, THEN_CLAUSE (if_stmt));
912 /* Record the end of an if-then. Optionally warn if a nested
913 if statement had an ambiguous else clause. */
915 void
916 c_expand_end_cond (void)
918 if_stack_pointer--;
919 if (if_stack[if_stack_pointer].needs_warning)
920 warning ("%Hsuggest explicit braces to avoid ambiguous `else'",
921 &if_stack[if_stack_pointer].locus);
922 last_expr_type = NULL_TREE;
925 /* Called between the then-clause and the else-clause
926 of an if-then-else. */
928 void
929 c_expand_start_else (void)
931 /* An ambiguous else warning must be generated for the enclosing if
932 statement, unless we see an else branch for that one, too. */
933 if (warn_parentheses
934 && if_stack_pointer > 1
935 && (if_stack[if_stack_pointer - 1].compstmt_count
936 == if_stack[if_stack_pointer - 2].compstmt_count))
937 if_stack[if_stack_pointer - 2].needs_warning = 1;
939 /* Even if a nested if statement had an else branch, it can't be
940 ambiguous if this one also has an else. So don't warn in that
941 case. Also don't warn for any if statements nested in this else. */
942 if_stack[if_stack_pointer - 1].needs_warning = 0;
943 if_stack[if_stack_pointer - 1].compstmt_count--;
946 /* Called after the else-clause for an if-statement is processed. */
948 void
949 c_finish_else (void)
951 tree if_stmt = if_stack[if_stack_pointer - 1].if_stmt;
952 RECHAIN_STMTS (if_stmt, ELSE_CLAUSE (if_stmt));
955 /* Begin an if-statement. Returns a newly created IF_STMT if
956 appropriate.
958 Unlike the C++ front-end, we do not call add_stmt here; it is
959 probably safe to do so, but I am not very familiar with this
960 code so I am being extra careful not to change its behavior
961 beyond what is strictly necessary for correctness. */
963 tree
964 c_begin_if_stmt (void)
966 tree r;
967 r = build_stmt (IF_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
968 return r;
971 /* Begin a while statement. Returns a newly created WHILE_STMT if
972 appropriate.
974 Unlike the C++ front-end, we do not call add_stmt here; it is
975 probably safe to do so, but I am not very familiar with this
976 code so I am being extra careful not to change its behavior
977 beyond what is strictly necessary for correctness. */
979 tree
980 c_begin_while_stmt (void)
982 tree r;
983 r = build_stmt (WHILE_STMT, NULL_TREE, NULL_TREE);
984 return r;
987 void
988 c_finish_while_stmt_cond (tree cond, tree while_stmt)
990 WHILE_COND (while_stmt) = cond;
993 /* Push current bindings for the function name VAR_DECLS. */
995 void
996 start_fname_decls (void)
998 unsigned ix;
999 tree saved = NULL_TREE;
1001 for (ix = 0; fname_vars[ix].decl; ix++)
1003 tree decl = *fname_vars[ix].decl;
1005 if (decl)
1007 saved = tree_cons (decl, build_int_2 (ix, 0), saved);
1008 *fname_vars[ix].decl = NULL_TREE;
1011 if (saved || saved_function_name_decls)
1012 /* Normally they'll have been NULL, so only push if we've got a
1013 stack, or they are non-NULL. */
1014 saved_function_name_decls = tree_cons (saved, NULL_TREE,
1015 saved_function_name_decls);
1018 /* Finish up the current bindings, adding them into the
1019 current function's statement tree. This is done by wrapping the
1020 function's body in a COMPOUND_STMT containing these decls too. This
1021 must be done _before_ finish_stmt_tree is called. If there is no
1022 current function, we must be at file scope and no statements are
1023 involved. Pop the previous bindings. */
1025 void
1026 finish_fname_decls (void)
1028 unsigned ix;
1029 tree body = NULL_TREE;
1030 tree stack = saved_function_name_decls;
1032 for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
1033 body = chainon (TREE_VALUE (stack), body);
1035 if (body)
1037 /* They were called into existence, so add to statement tree. Add
1038 the DECL_STMTs inside the outermost scope. */
1039 tree *p = &DECL_SAVED_TREE (current_function_decl);
1040 /* Skip the dummy EXPR_STMT and any EH_SPEC_BLOCK. */
1041 while (TREE_CODE (*p) != COMPOUND_STMT)
1043 if (TREE_CODE (*p) == EXPR_STMT)
1044 p = &TREE_CHAIN (*p);
1045 else
1046 p = &TREE_OPERAND(*p, 0);
1049 p = &COMPOUND_BODY (*p);
1050 if (TREE_CODE (*p) == SCOPE_STMT)
1051 p = &TREE_CHAIN (*p);
1053 body = chainon (body, *p);
1054 *p = body;
1057 for (ix = 0; fname_vars[ix].decl; ix++)
1058 *fname_vars[ix].decl = NULL_TREE;
1060 if (stack)
1062 /* We had saved values, restore them. */
1063 tree saved;
1065 for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
1067 tree decl = TREE_PURPOSE (saved);
1068 unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
1070 *fname_vars[ix].decl = decl;
1072 stack = TREE_CHAIN (stack);
1074 saved_function_name_decls = stack;
1077 /* Return the text name of the current function, suitably prettified
1078 by PRETTY_P. */
1080 const char *
1081 fname_as_string (int pretty_p)
1083 const char *name = "top level";
1084 int vrb = 2;
1086 if (! pretty_p)
1088 name = "";
1089 vrb = 0;
1092 if (current_function_decl)
1093 name = lang_hooks.decl_printable_name (current_function_decl, vrb);
1095 return name;
1098 /* Return the VAR_DECL for a const char array naming the current
1099 function. If the VAR_DECL has not yet been created, create it
1100 now. RID indicates how it should be formatted and IDENTIFIER_NODE
1101 ID is its name (unfortunately C and C++ hold the RID values of
1102 keywords in different places, so we can't derive RID from ID in
1103 this language independent code. */
1105 tree
1106 fname_decl (unsigned int rid, tree id)
1108 unsigned ix;
1109 tree decl = NULL_TREE;
1111 for (ix = 0; fname_vars[ix].decl; ix++)
1112 if (fname_vars[ix].rid == rid)
1113 break;
1115 decl = *fname_vars[ix].decl;
1116 if (!decl)
1118 tree saved_last_tree = last_tree;
1119 /* If a tree is built here, it would normally have the lineno of
1120 the current statement. Later this tree will be moved to the
1121 beginning of the function and this line number will be wrong.
1122 To avoid this problem set the lineno to 0 here; that prevents
1123 it from appearing in the RTL. */
1124 int saved_lineno = input_line;
1125 input_line = 0;
1127 decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
1128 if (last_tree != saved_last_tree)
1130 /* We created some statement tree for the decl. This belongs
1131 at the start of the function, so remove it now and reinsert
1132 it after the function is complete. */
1133 tree stmts = TREE_CHAIN (saved_last_tree);
1135 TREE_CHAIN (saved_last_tree) = NULL_TREE;
1136 last_tree = saved_last_tree;
1137 saved_function_name_decls = tree_cons (decl, stmts,
1138 saved_function_name_decls);
1140 *fname_vars[ix].decl = decl;
1141 input_line = saved_lineno;
1143 if (!ix && !current_function_decl)
1144 pedwarn ("%J'%D' is not defined outside of function scope", decl, decl);
1146 return decl;
1149 /* Given a STRING_CST, give it a suitable array-of-chars data type. */
1151 tree
1152 fix_string_type (tree value)
1154 const int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
1155 const int wide_flag = TREE_TYPE (value) == wchar_array_type_node;
1156 const int nchars_max = flag_isoc99 ? 4095 : 509;
1157 int length = TREE_STRING_LENGTH (value);
1158 int nchars;
1160 /* Compute the number of elements, for the array type. */
1161 nchars = wide_flag ? length / wchar_bytes : length;
1163 if (pedantic && nchars - 1 > nchars_max && !c_dialect_cxx ())
1164 pedwarn ("string length `%d' is greater than the length `%d' ISO C%d compilers are required to support",
1165 nchars - 1, nchars_max, flag_isoc99 ? 99 : 89);
1167 /* Create the array type for the string constant.
1168 -Wwrite-strings says make the string constant an array of const char
1169 so that copying it to a non-const pointer will get a warning.
1170 For C++, this is the standard behavior. */
1171 if (flag_const_strings)
1173 tree elements
1174 = build_type_variant (wide_flag ? wchar_type_node : char_type_node,
1175 1, 0);
1176 TREE_TYPE (value)
1177 = build_array_type (elements,
1178 build_index_type (build_int_2 (nchars - 1, 0)));
1180 else
1181 TREE_TYPE (value)
1182 = build_array_type (wide_flag ? wchar_type_node : char_type_node,
1183 build_index_type (build_int_2 (nchars - 1, 0)));
1185 TREE_CONSTANT (value) = 1;
1186 TREE_READONLY (value) = 1;
1187 TREE_STATIC (value) = 1;
1188 return value;
1191 /* Print a warning if a constant expression had overflow in folding.
1192 Invoke this function on every expression that the language
1193 requires to be a constant expression.
1194 Note the ANSI C standard says it is erroneous for a
1195 constant expression to overflow. */
1197 void
1198 constant_expression_warning (tree value)
1200 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
1201 || TREE_CODE (value) == VECTOR_CST
1202 || TREE_CODE (value) == COMPLEX_CST)
1203 && TREE_CONSTANT_OVERFLOW (value) && pedantic)
1204 pedwarn ("overflow in constant expression");
1207 /* Print a warning if an expression had overflow in folding.
1208 Invoke this function on every expression that
1209 (1) appears in the source code, and
1210 (2) might be a constant expression that overflowed, and
1211 (3) is not already checked by convert_and_check;
1212 however, do not invoke this function on operands of explicit casts. */
1214 void
1215 overflow_warning (tree value)
1217 if ((TREE_CODE (value) == INTEGER_CST
1218 || (TREE_CODE (value) == COMPLEX_CST
1219 && TREE_CODE (TREE_REALPART (value)) == INTEGER_CST))
1220 && TREE_OVERFLOW (value))
1222 TREE_OVERFLOW (value) = 0;
1223 if (skip_evaluation == 0)
1224 warning ("integer overflow in expression");
1226 else if ((TREE_CODE (value) == REAL_CST
1227 || (TREE_CODE (value) == COMPLEX_CST
1228 && TREE_CODE (TREE_REALPART (value)) == REAL_CST))
1229 && TREE_OVERFLOW (value))
1231 TREE_OVERFLOW (value) = 0;
1232 if (skip_evaluation == 0)
1233 warning ("floating point overflow in expression");
1235 else if (TREE_CODE (value) == VECTOR_CST && TREE_OVERFLOW (value))
1237 TREE_OVERFLOW (value) = 0;
1238 if (skip_evaluation == 0)
1239 warning ("vector overflow in expression");
1243 /* Print a warning if a large constant is truncated to unsigned,
1244 or if -Wconversion is used and a constant < 0 is converted to unsigned.
1245 Invoke this function on every expression that might be implicitly
1246 converted to an unsigned type. */
1248 void
1249 unsigned_conversion_warning (tree result, tree operand)
1251 tree type = TREE_TYPE (result);
1253 if (TREE_CODE (operand) == INTEGER_CST
1254 && TREE_CODE (type) == INTEGER_TYPE
1255 && TYPE_UNSIGNED (type)
1256 && skip_evaluation == 0
1257 && !int_fits_type_p (operand, type))
1259 if (!int_fits_type_p (operand, c_common_signed_type (type)))
1260 /* This detects cases like converting -129 or 256 to unsigned char. */
1261 warning ("large integer implicitly truncated to unsigned type");
1262 else if (warn_conversion)
1263 warning ("negative integer implicitly converted to unsigned type");
1267 /* Nonzero if constant C has a value that is permissible
1268 for type TYPE (an INTEGER_TYPE). */
1270 static int
1271 constant_fits_type_p (tree c, tree type)
1273 if (TREE_CODE (c) == INTEGER_CST)
1274 return int_fits_type_p (c, type);
1276 c = convert (type, c);
1277 return !TREE_OVERFLOW (c);
1280 /* Convert EXPR to TYPE, warning about conversion problems with constants.
1281 Invoke this function on every expression that is converted implicitly,
1282 i.e. because of language rules and not because of an explicit cast. */
1284 tree
1285 convert_and_check (tree type, tree expr)
1287 tree t = convert (type, expr);
1288 if (TREE_CODE (t) == INTEGER_CST)
1290 if (TREE_OVERFLOW (t))
1292 TREE_OVERFLOW (t) = 0;
1294 /* Do not diagnose overflow in a constant expression merely
1295 because a conversion overflowed. */
1296 TREE_CONSTANT_OVERFLOW (t) = TREE_CONSTANT_OVERFLOW (expr);
1298 /* No warning for converting 0x80000000 to int. */
1299 if (!(TYPE_UNSIGNED (type) < TYPE_UNSIGNED (TREE_TYPE (expr))
1300 && TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1301 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (expr))))
1302 /* If EXPR fits in the unsigned version of TYPE,
1303 don't warn unless pedantic. */
1304 if ((pedantic
1305 || TYPE_UNSIGNED (type)
1306 || ! constant_fits_type_p (expr,
1307 c_common_unsigned_type (type)))
1308 && skip_evaluation == 0)
1309 warning ("overflow in implicit constant conversion");
1311 else
1312 unsigned_conversion_warning (t, expr);
1314 return t;
1317 /* A node in a list that describes references to variables (EXPR), which are
1318 either read accesses if WRITER is zero, or write accesses, in which case
1319 WRITER is the parent of EXPR. */
1320 struct tlist
1322 struct tlist *next;
1323 tree expr, writer;
1326 /* Used to implement a cache the results of a call to verify_tree. We only
1327 use this for SAVE_EXPRs. */
1328 struct tlist_cache
1330 struct tlist_cache *next;
1331 struct tlist *cache_before_sp;
1332 struct tlist *cache_after_sp;
1333 tree expr;
1336 /* Obstack to use when allocating tlist structures, and corresponding
1337 firstobj. */
1338 static struct obstack tlist_obstack;
1339 static char *tlist_firstobj = 0;
1341 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
1342 warnings. */
1343 static struct tlist *warned_ids;
1344 /* SAVE_EXPRs need special treatment. We process them only once and then
1345 cache the results. */
1346 static struct tlist_cache *save_expr_cache;
1348 static void add_tlist (struct tlist **, struct tlist *, tree, int);
1349 static void merge_tlist (struct tlist **, struct tlist *, int);
1350 static void verify_tree (tree, struct tlist **, struct tlist **, tree);
1351 static int warning_candidate_p (tree);
1352 static void warn_for_collisions (struct tlist *);
1353 static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
1354 static struct tlist *new_tlist (struct tlist *, tree, tree);
1355 static void verify_sequence_points (tree);
1357 /* Create a new struct tlist and fill in its fields. */
1358 static struct tlist *
1359 new_tlist (struct tlist *next, tree t, tree writer)
1361 struct tlist *l;
1362 l = obstack_alloc (&tlist_obstack, sizeof *l);
1363 l->next = next;
1364 l->expr = t;
1365 l->writer = writer;
1366 return l;
1369 /* Add duplicates of the nodes found in ADD to the list *TO. If EXCLUDE_WRITER
1370 is nonnull, we ignore any node we find which has a writer equal to it. */
1372 static void
1373 add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
1375 while (add)
1377 struct tlist *next = add->next;
1378 if (! copy)
1379 add->next = *to;
1380 if (! exclude_writer || add->writer != exclude_writer)
1381 *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
1382 add = next;
1386 /* Merge the nodes of ADD into TO. This merging process is done so that for
1387 each variable that already exists in TO, no new node is added; however if
1388 there is a write access recorded in ADD, and an occurrence on TO is only
1389 a read access, then the occurrence in TO will be modified to record the
1390 write. */
1392 static void
1393 merge_tlist (struct tlist **to, struct tlist *add, int copy)
1395 struct tlist **end = to;
1397 while (*end)
1398 end = &(*end)->next;
1400 while (add)
1402 int found = 0;
1403 struct tlist *tmp2;
1404 struct tlist *next = add->next;
1406 for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
1407 if (tmp2->expr == add->expr)
1409 found = 1;
1410 if (! tmp2->writer)
1411 tmp2->writer = add->writer;
1413 if (! found)
1415 *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
1416 end = &(*end)->next;
1417 *end = 0;
1419 add = next;
1423 /* WRITTEN is a variable, WRITER is its parent. Warn if any of the variable
1424 references in list LIST conflict with it, excluding reads if ONLY writers
1425 is nonzero. */
1427 static void
1428 warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
1429 int only_writes)
1431 struct tlist *tmp;
1433 /* Avoid duplicate warnings. */
1434 for (tmp = warned_ids; tmp; tmp = tmp->next)
1435 if (tmp->expr == written)
1436 return;
1438 while (list)
1440 if (list->expr == written
1441 && list->writer != writer
1442 && (! only_writes || list->writer))
1444 warned_ids = new_tlist (warned_ids, written, NULL_TREE);
1445 warning ("operation on `%s' may be undefined",
1446 IDENTIFIER_POINTER (DECL_NAME (list->expr)));
1448 list = list->next;
1452 /* Given a list LIST of references to variables, find whether any of these
1453 can cause conflicts due to missing sequence points. */
1455 static void
1456 warn_for_collisions (struct tlist *list)
1458 struct tlist *tmp;
1460 for (tmp = list; tmp; tmp = tmp->next)
1462 if (tmp->writer)
1463 warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
1467 /* Return nonzero if X is a tree that can be verified by the sequence point
1468 warnings. */
1469 static int
1470 warning_candidate_p (tree x)
1472 return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
1475 /* Walk the tree X, and record accesses to variables. If X is written by the
1476 parent tree, WRITER is the parent.
1477 We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP. If this
1478 expression or its only operand forces a sequence point, then everything up
1479 to the sequence point is stored in PBEFORE_SP. Everything else gets stored
1480 in PNO_SP.
1481 Once we return, we will have emitted warnings if any subexpression before
1482 such a sequence point could be undefined. On a higher level, however, the
1483 sequence point may not be relevant, and we'll merge the two lists.
1485 Example: (b++, a) + b;
1486 The call that processes the COMPOUND_EXPR will store the increment of B
1487 in PBEFORE_SP, and the use of A in PNO_SP. The higher-level call that
1488 processes the PLUS_EXPR will need to merge the two lists so that
1489 eventually, all accesses end up on the same list (and we'll warn about the
1490 unordered subexpressions b++ and b.
1492 A note on merging. If we modify the former example so that our expression
1493 becomes
1494 (b++, b) + a
1495 care must be taken not simply to add all three expressions into the final
1496 PNO_SP list. The function merge_tlist takes care of that by merging the
1497 before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1498 way, so that no more than one access to B is recorded. */
1500 static void
1501 verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
1502 tree writer)
1504 struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1505 enum tree_code code;
1506 char class;
1508 /* X may be NULL if it is the operand of an empty statement expression
1509 ({ }). */
1510 if (x == NULL)
1511 return;
1513 restart:
1514 code = TREE_CODE (x);
1515 class = TREE_CODE_CLASS (code);
1517 if (warning_candidate_p (x))
1519 *pno_sp = new_tlist (*pno_sp, x, writer);
1520 return;
1523 switch (code)
1525 case CONSTRUCTOR:
1526 return;
1528 case COMPOUND_EXPR:
1529 case TRUTH_ANDIF_EXPR:
1530 case TRUTH_ORIF_EXPR:
1531 tmp_before = tmp_nosp = tmp_list3 = 0;
1532 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1533 warn_for_collisions (tmp_nosp);
1534 merge_tlist (pbefore_sp, tmp_before, 0);
1535 merge_tlist (pbefore_sp, tmp_nosp, 0);
1536 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
1537 merge_tlist (pbefore_sp, tmp_list3, 0);
1538 return;
1540 case COND_EXPR:
1541 tmp_before = tmp_list2 = 0;
1542 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
1543 warn_for_collisions (tmp_list2);
1544 merge_tlist (pbefore_sp, tmp_before, 0);
1545 merge_tlist (pbefore_sp, tmp_list2, 1);
1547 tmp_list3 = tmp_nosp = 0;
1548 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
1549 warn_for_collisions (tmp_nosp);
1550 merge_tlist (pbefore_sp, tmp_list3, 0);
1552 tmp_list3 = tmp_list2 = 0;
1553 verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
1554 warn_for_collisions (tmp_list2);
1555 merge_tlist (pbefore_sp, tmp_list3, 0);
1556 /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1557 two first, to avoid warning for (a ? b++ : b++). */
1558 merge_tlist (&tmp_nosp, tmp_list2, 0);
1559 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1560 return;
1562 case PREDECREMENT_EXPR:
1563 case PREINCREMENT_EXPR:
1564 case POSTDECREMENT_EXPR:
1565 case POSTINCREMENT_EXPR:
1566 verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
1567 return;
1569 case MODIFY_EXPR:
1570 tmp_before = tmp_nosp = tmp_list3 = 0;
1571 verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
1572 verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
1573 /* Expressions inside the LHS are not ordered wrt. the sequence points
1574 in the RHS. Example:
1575 *a = (a++, 2)
1576 Despite the fact that the modification of "a" is in the before_sp
1577 list (tmp_before), it conflicts with the use of "a" in the LHS.
1578 We can handle this by adding the contents of tmp_list3
1579 to those of tmp_before, and redoing the collision warnings for that
1580 list. */
1581 add_tlist (&tmp_before, tmp_list3, x, 1);
1582 warn_for_collisions (tmp_before);
1583 /* Exclude the LHS itself here; we first have to merge it into the
1584 tmp_nosp list. This is done to avoid warning for "a = a"; if we
1585 didn't exclude the LHS, we'd get it twice, once as a read and once
1586 as a write. */
1587 add_tlist (pno_sp, tmp_list3, x, 0);
1588 warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
1590 merge_tlist (pbefore_sp, tmp_before, 0);
1591 if (warning_candidate_p (TREE_OPERAND (x, 0)))
1592 merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
1593 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
1594 return;
1596 case CALL_EXPR:
1597 /* We need to warn about conflicts among arguments and conflicts between
1598 args and the function address. Side effects of the function address,
1599 however, are not ordered by the sequence point of the call. */
1600 tmp_before = tmp_nosp = tmp_list2 = tmp_list3 = 0;
1601 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1602 if (TREE_OPERAND (x, 1))
1603 verify_tree (TREE_OPERAND (x, 1), &tmp_list2, &tmp_list3, NULL_TREE);
1604 merge_tlist (&tmp_list3, tmp_list2, 0);
1605 add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
1606 add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
1607 warn_for_collisions (tmp_before);
1608 add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
1609 return;
1611 case TREE_LIST:
1612 /* Scan all the list, e.g. indices of multi dimensional array. */
1613 while (x)
1615 tmp_before = tmp_nosp = 0;
1616 verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
1617 merge_tlist (&tmp_nosp, tmp_before, 0);
1618 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1619 x = TREE_CHAIN (x);
1621 return;
1623 case SAVE_EXPR:
1625 struct tlist_cache *t;
1626 for (t = save_expr_cache; t; t = t->next)
1627 if (t->expr == x)
1628 break;
1630 if (! t)
1632 t = obstack_alloc (&tlist_obstack, sizeof *t);
1633 t->next = save_expr_cache;
1634 t->expr = x;
1635 save_expr_cache = t;
1637 tmp_before = tmp_nosp = 0;
1638 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1639 warn_for_collisions (tmp_nosp);
1641 tmp_list3 = 0;
1642 while (tmp_nosp)
1644 struct tlist *t = tmp_nosp;
1645 tmp_nosp = t->next;
1646 merge_tlist (&tmp_list3, t, 0);
1648 t->cache_before_sp = tmp_before;
1649 t->cache_after_sp = tmp_list3;
1651 merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1652 add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1653 return;
1655 default:
1656 break;
1659 if (class == '1')
1661 if (first_rtl_op (code) == 0)
1662 return;
1663 x = TREE_OPERAND (x, 0);
1664 writer = 0;
1665 goto restart;
1668 switch (class)
1670 case 'r':
1671 case '<':
1672 case '2':
1673 case 'b':
1674 case 'e':
1675 case 's':
1676 case 'x':
1678 int lp;
1679 int max = first_rtl_op (TREE_CODE (x));
1680 for (lp = 0; lp < max; lp++)
1682 tmp_before = tmp_nosp = 0;
1683 verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, NULL_TREE);
1684 merge_tlist (&tmp_nosp, tmp_before, 0);
1685 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1687 break;
1692 /* Try to warn for undefined behavior in EXPR due to missing sequence
1693 points. */
1695 static void
1696 verify_sequence_points (tree expr)
1698 struct tlist *before_sp = 0, *after_sp = 0;
1700 warned_ids = 0;
1701 save_expr_cache = 0;
1702 if (tlist_firstobj == 0)
1704 gcc_obstack_init (&tlist_obstack);
1705 tlist_firstobj = obstack_alloc (&tlist_obstack, 0);
1708 verify_tree (expr, &before_sp, &after_sp, 0);
1709 warn_for_collisions (after_sp);
1710 obstack_free (&tlist_obstack, tlist_firstobj);
1713 tree
1714 c_expand_expr_stmt (tree expr)
1716 /* Do default conversion if safe and possibly important,
1717 in case within ({...}). */
1718 if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE
1719 && (flag_isoc99 || lvalue_p (expr)))
1720 || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
1721 expr = default_conversion (expr);
1723 if (warn_sequence_point)
1724 verify_sequence_points (expr);
1726 if (TREE_TYPE (expr) != error_mark_node
1727 && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
1728 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
1729 error ("expression statement has incomplete type");
1731 last_expr_type = TREE_TYPE (expr);
1732 return add_stmt (build_stmt (EXPR_STMT, expr));
1735 /* Validate the expression after `case' and apply default promotions. */
1737 tree
1738 check_case_value (tree value)
1740 if (value == NULL_TREE)
1741 return value;
1743 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
1744 STRIP_TYPE_NOPS (value);
1745 /* In C++, the following is allowed:
1747 const int i = 3;
1748 switch (...) { case i: ... }
1750 So, we try to reduce the VALUE to a constant that way. */
1751 if (c_dialect_cxx ())
1753 value = decl_constant_value (value);
1754 STRIP_TYPE_NOPS (value);
1755 value = fold (value);
1758 if (TREE_CODE (value) != INTEGER_CST
1759 && value != error_mark_node)
1761 error ("case label does not reduce to an integer constant");
1762 value = error_mark_node;
1764 else
1765 /* Promote char or short to int. */
1766 value = default_conversion (value);
1768 constant_expression_warning (value);
1770 return value;
1773 /* Return an integer type with BITS bits of precision,
1774 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
1776 tree
1777 c_common_type_for_size (unsigned int bits, int unsignedp)
1779 if (bits == TYPE_PRECISION (integer_type_node))
1780 return unsignedp ? unsigned_type_node : integer_type_node;
1782 if (bits == TYPE_PRECISION (signed_char_type_node))
1783 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1785 if (bits == TYPE_PRECISION (short_integer_type_node))
1786 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1788 if (bits == TYPE_PRECISION (long_integer_type_node))
1789 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1791 if (bits == TYPE_PRECISION (long_long_integer_type_node))
1792 return (unsignedp ? long_long_unsigned_type_node
1793 : long_long_integer_type_node);
1795 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
1796 return (unsignedp ? widest_unsigned_literal_type_node
1797 : widest_integer_literal_type_node);
1799 if (bits <= TYPE_PRECISION (intQI_type_node))
1800 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1802 if (bits <= TYPE_PRECISION (intHI_type_node))
1803 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1805 if (bits <= TYPE_PRECISION (intSI_type_node))
1806 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1808 if (bits <= TYPE_PRECISION (intDI_type_node))
1809 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1811 return 0;
1814 /* Used for communication between c_common_type_for_mode and
1815 c_register_builtin_type. */
1816 static GTY(()) tree registered_builtin_types;
1818 /* Return a data type that has machine mode MODE.
1819 If the mode is an integer,
1820 then UNSIGNEDP selects between signed and unsigned types. */
1822 tree
1823 c_common_type_for_mode (enum machine_mode mode, int unsignedp)
1825 tree t;
1827 if (mode == TYPE_MODE (integer_type_node))
1828 return unsignedp ? unsigned_type_node : integer_type_node;
1830 if (mode == TYPE_MODE (signed_char_type_node))
1831 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1833 if (mode == TYPE_MODE (short_integer_type_node))
1834 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1836 if (mode == TYPE_MODE (long_integer_type_node))
1837 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1839 if (mode == TYPE_MODE (long_long_integer_type_node))
1840 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
1842 if (mode == TYPE_MODE (widest_integer_literal_type_node))
1843 return unsignedp ? widest_unsigned_literal_type_node
1844 : widest_integer_literal_type_node;
1846 if (mode == QImode)
1847 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1849 if (mode == HImode)
1850 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1852 if (mode == SImode)
1853 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1855 if (mode == DImode)
1856 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1858 #if HOST_BITS_PER_WIDE_INT >= 64
1859 if (mode == TYPE_MODE (intTI_type_node))
1860 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1861 #endif
1863 if (mode == TYPE_MODE (float_type_node))
1864 return float_type_node;
1866 if (mode == TYPE_MODE (double_type_node))
1867 return double_type_node;
1869 if (mode == TYPE_MODE (long_double_type_node))
1870 return long_double_type_node;
1872 if (mode == TYPE_MODE (void_type_node))
1873 return void_type_node;
1875 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
1876 return unsignedp ? make_unsigned_type (mode) : make_signed_type (mode);
1878 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
1879 return unsignedp ? make_unsigned_type (mode) : make_signed_type (mode);
1881 if (VECTOR_MODE_P (mode))
1883 enum machine_mode inner_mode = GET_MODE_INNER (mode);
1884 tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
1885 if (inner_type != NULL_TREE)
1886 return build_vector_type_for_mode (inner_type, mode);
1889 for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
1890 if (TYPE_MODE (TREE_VALUE (t)) == mode)
1891 return TREE_VALUE (t);
1893 return 0;
1896 /* Return an unsigned type the same as TYPE in other respects. */
1897 tree
1898 c_common_unsigned_type (tree type)
1900 tree type1 = TYPE_MAIN_VARIANT (type);
1901 if (type1 == signed_char_type_node || type1 == char_type_node)
1902 return unsigned_char_type_node;
1903 if (type1 == integer_type_node)
1904 return unsigned_type_node;
1905 if (type1 == short_integer_type_node)
1906 return short_unsigned_type_node;
1907 if (type1 == long_integer_type_node)
1908 return long_unsigned_type_node;
1909 if (type1 == long_long_integer_type_node)
1910 return long_long_unsigned_type_node;
1911 if (type1 == widest_integer_literal_type_node)
1912 return widest_unsigned_literal_type_node;
1913 #if HOST_BITS_PER_WIDE_INT >= 64
1914 if (type1 == intTI_type_node)
1915 return unsigned_intTI_type_node;
1916 #endif
1917 if (type1 == intDI_type_node)
1918 return unsigned_intDI_type_node;
1919 if (type1 == intSI_type_node)
1920 return unsigned_intSI_type_node;
1921 if (type1 == intHI_type_node)
1922 return unsigned_intHI_type_node;
1923 if (type1 == intQI_type_node)
1924 return unsigned_intQI_type_node;
1926 return c_common_signed_or_unsigned_type (1, type);
1929 /* Return a signed type the same as TYPE in other respects. */
1931 tree
1932 c_common_signed_type (tree type)
1934 tree type1 = TYPE_MAIN_VARIANT (type);
1935 if (type1 == unsigned_char_type_node || type1 == char_type_node)
1936 return signed_char_type_node;
1937 if (type1 == unsigned_type_node)
1938 return integer_type_node;
1939 if (type1 == short_unsigned_type_node)
1940 return short_integer_type_node;
1941 if (type1 == long_unsigned_type_node)
1942 return long_integer_type_node;
1943 if (type1 == long_long_unsigned_type_node)
1944 return long_long_integer_type_node;
1945 if (type1 == widest_unsigned_literal_type_node)
1946 return widest_integer_literal_type_node;
1947 #if HOST_BITS_PER_WIDE_INT >= 64
1948 if (type1 == unsigned_intTI_type_node)
1949 return intTI_type_node;
1950 #endif
1951 if (type1 == unsigned_intDI_type_node)
1952 return intDI_type_node;
1953 if (type1 == unsigned_intSI_type_node)
1954 return intSI_type_node;
1955 if (type1 == unsigned_intHI_type_node)
1956 return intHI_type_node;
1957 if (type1 == unsigned_intQI_type_node)
1958 return intQI_type_node;
1960 return c_common_signed_or_unsigned_type (0, type);
1963 /* Return a type the same as TYPE except unsigned or
1964 signed according to UNSIGNEDP. */
1966 tree
1967 c_common_signed_or_unsigned_type (int unsignedp, tree type)
1969 if (! INTEGRAL_TYPE_P (type)
1970 || TYPE_UNSIGNED (type) == unsignedp)
1971 return type;
1973 /* Must check the mode of the types, not the precision. Enumeral types
1974 in C++ have precision set to match their range, but may use a wider
1975 mode to match an ABI. If we change modes, we may wind up with bad
1976 conversions. */
1978 if (TYPE_MODE (type) == TYPE_MODE (signed_char_type_node))
1979 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1980 if (TYPE_MODE (type) == TYPE_MODE (integer_type_node))
1981 return unsignedp ? unsigned_type_node : integer_type_node;
1982 if (TYPE_MODE (type) == TYPE_MODE (short_integer_type_node))
1983 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1984 if (TYPE_MODE (type) == TYPE_MODE (long_integer_type_node))
1985 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1986 if (TYPE_MODE (type) == TYPE_MODE (long_long_integer_type_node))
1987 return (unsignedp ? long_long_unsigned_type_node
1988 : long_long_integer_type_node);
1989 if (TYPE_MODE (type) == TYPE_MODE (widest_integer_literal_type_node))
1990 return (unsignedp ? widest_unsigned_literal_type_node
1991 : widest_integer_literal_type_node);
1993 #if HOST_BITS_PER_WIDE_INT >= 64
1994 if (TYPE_MODE (type) == TYPE_MODE (intTI_type_node))
1995 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1996 #endif
1997 if (TYPE_MODE (type) == TYPE_MODE (intDI_type_node))
1998 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1999 if (TYPE_MODE (type) == TYPE_MODE (intSI_type_node))
2000 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2001 if (TYPE_MODE (type) == TYPE_MODE (intHI_type_node))
2002 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2003 if (TYPE_MODE (type) == TYPE_MODE (intQI_type_node))
2004 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2006 return type;
2009 /* The C version of the register_builtin_type langhook. */
2011 void
2012 c_register_builtin_type (tree type, const char* name)
2014 tree decl;
2016 decl = build_decl (TYPE_DECL, get_identifier (name), type);
2017 DECL_ARTIFICIAL (decl) = 1;
2018 if (!TYPE_NAME (type))
2019 TYPE_NAME (type) = decl;
2020 pushdecl (decl);
2022 registered_builtin_types = tree_cons (0, type, registered_builtin_types);
2026 /* Return the minimum number of bits needed to represent VALUE in a
2027 signed or unsigned type, UNSIGNEDP says which. */
2029 unsigned int
2030 min_precision (tree value, int unsignedp)
2032 int log;
2034 /* If the value is negative, compute its negative minus 1. The latter
2035 adjustment is because the absolute value of the largest negative value
2036 is one larger than the largest positive value. This is equivalent to
2037 a bit-wise negation, so use that operation instead. */
2039 if (tree_int_cst_sgn (value) < 0)
2040 value = fold (build1 (BIT_NOT_EXPR, TREE_TYPE (value), value));
2042 /* Return the number of bits needed, taking into account the fact
2043 that we need one more bit for a signed than unsigned type. */
2045 if (integer_zerop (value))
2046 log = 0;
2047 else
2048 log = tree_floor_log2 (value);
2050 return log + 1 + ! unsignedp;
2053 /* Print an error message for invalid operands to arith operation
2054 CODE. NOP_EXPR is used as a special case (see
2055 c_common_truthvalue_conversion). */
2057 void
2058 binary_op_error (enum tree_code code)
2060 const char *opname;
2062 switch (code)
2064 case NOP_EXPR:
2065 error ("invalid truth-value expression");
2066 return;
2068 case PLUS_EXPR:
2069 opname = "+"; break;
2070 case MINUS_EXPR:
2071 opname = "-"; break;
2072 case MULT_EXPR:
2073 opname = "*"; break;
2074 case MAX_EXPR:
2075 opname = "max"; break;
2076 case MIN_EXPR:
2077 opname = "min"; break;
2078 case EQ_EXPR:
2079 opname = "=="; break;
2080 case NE_EXPR:
2081 opname = "!="; break;
2082 case LE_EXPR:
2083 opname = "<="; break;
2084 case GE_EXPR:
2085 opname = ">="; break;
2086 case LT_EXPR:
2087 opname = "<"; break;
2088 case GT_EXPR:
2089 opname = ">"; break;
2090 case LSHIFT_EXPR:
2091 opname = "<<"; break;
2092 case RSHIFT_EXPR:
2093 opname = ">>"; break;
2094 case TRUNC_MOD_EXPR:
2095 case FLOOR_MOD_EXPR:
2096 opname = "%"; break;
2097 case TRUNC_DIV_EXPR:
2098 case FLOOR_DIV_EXPR:
2099 opname = "/"; break;
2100 case BIT_AND_EXPR:
2101 opname = "&"; break;
2102 case BIT_IOR_EXPR:
2103 opname = "|"; break;
2104 case TRUTH_ANDIF_EXPR:
2105 opname = "&&"; break;
2106 case TRUTH_ORIF_EXPR:
2107 opname = "||"; break;
2108 case BIT_XOR_EXPR:
2109 opname = "^"; break;
2110 case LROTATE_EXPR:
2111 case RROTATE_EXPR:
2112 opname = "rotate"; break;
2113 default:
2114 opname = "unknown"; break;
2116 error ("invalid operands to binary %s", opname);
2119 /* Subroutine of build_binary_op, used for comparison operations.
2120 See if the operands have both been converted from subword integer types
2121 and, if so, perhaps change them both back to their original type.
2122 This function is also responsible for converting the two operands
2123 to the proper common type for comparison.
2125 The arguments of this function are all pointers to local variables
2126 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
2127 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
2129 If this function returns nonzero, it means that the comparison has
2130 a constant value. What this function returns is an expression for
2131 that value. */
2133 tree
2134 shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
2135 enum tree_code *rescode_ptr)
2137 tree type;
2138 tree op0 = *op0_ptr;
2139 tree op1 = *op1_ptr;
2140 int unsignedp0, unsignedp1;
2141 int real1, real2;
2142 tree primop0, primop1;
2143 enum tree_code code = *rescode_ptr;
2145 /* Throw away any conversions to wider types
2146 already present in the operands. */
2148 primop0 = get_narrower (op0, &unsignedp0);
2149 primop1 = get_narrower (op1, &unsignedp1);
2151 /* Handle the case that OP0 does not *contain* a conversion
2152 but it *requires* conversion to FINAL_TYPE. */
2154 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
2155 unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
2156 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
2157 unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
2159 /* If one of the operands must be floated, we cannot optimize. */
2160 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
2161 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
2163 /* If first arg is constant, swap the args (changing operation
2164 so value is preserved), for canonicalization. Don't do this if
2165 the second arg is 0. */
2167 if (TREE_CONSTANT (primop0)
2168 && ! integer_zerop (primop1) && ! real_zerop (primop1))
2170 tree tem = primop0;
2171 int temi = unsignedp0;
2172 primop0 = primop1;
2173 primop1 = tem;
2174 tem = op0;
2175 op0 = op1;
2176 op1 = tem;
2177 *op0_ptr = op0;
2178 *op1_ptr = op1;
2179 unsignedp0 = unsignedp1;
2180 unsignedp1 = temi;
2181 temi = real1;
2182 real1 = real2;
2183 real2 = temi;
2185 switch (code)
2187 case LT_EXPR:
2188 code = GT_EXPR;
2189 break;
2190 case GT_EXPR:
2191 code = LT_EXPR;
2192 break;
2193 case LE_EXPR:
2194 code = GE_EXPR;
2195 break;
2196 case GE_EXPR:
2197 code = LE_EXPR;
2198 break;
2199 default:
2200 break;
2202 *rescode_ptr = code;
2205 /* If comparing an integer against a constant more bits wide,
2206 maybe we can deduce a value of 1 or 0 independent of the data.
2207 Or else truncate the constant now
2208 rather than extend the variable at run time.
2210 This is only interesting if the constant is the wider arg.
2211 Also, it is not safe if the constant is unsigned and the
2212 variable arg is signed, since in this case the variable
2213 would be sign-extended and then regarded as unsigned.
2214 Our technique fails in this case because the lowest/highest
2215 possible unsigned results don't follow naturally from the
2216 lowest/highest possible values of the variable operand.
2217 For just EQ_EXPR and NE_EXPR there is another technique that
2218 could be used: see if the constant can be faithfully represented
2219 in the other operand's type, by truncating it and reextending it
2220 and see if that preserves the constant's value. */
2222 if (!real1 && !real2
2223 && TREE_CODE (primop1) == INTEGER_CST
2224 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
2226 int min_gt, max_gt, min_lt, max_lt;
2227 tree maxval, minval;
2228 /* 1 if comparison is nominally unsigned. */
2229 int unsignedp = TYPE_UNSIGNED (*restype_ptr);
2230 tree val;
2232 type = c_common_signed_or_unsigned_type (unsignedp0,
2233 TREE_TYPE (primop0));
2235 /* In C, if TYPE is an enumeration, then we need to get its
2236 min/max values from its underlying integral type, not the
2237 enumerated type itself. In C++, TYPE_MAX_VALUE and
2238 TYPE_MIN_VALUE have already been set correctly on the
2239 enumeration type. */
2240 if (!c_dialect_cxx() && TREE_CODE (type) == ENUMERAL_TYPE)
2241 type = c_common_type_for_size (TYPE_PRECISION (type), unsignedp0);
2243 maxval = TYPE_MAX_VALUE (type);
2244 minval = TYPE_MIN_VALUE (type);
2246 if (unsignedp && !unsignedp0)
2247 *restype_ptr = c_common_signed_type (*restype_ptr);
2249 if (TREE_TYPE (primop1) != *restype_ptr)
2250 primop1 = convert (*restype_ptr, primop1);
2251 if (type != *restype_ptr)
2253 minval = convert (*restype_ptr, minval);
2254 maxval = convert (*restype_ptr, maxval);
2257 if (unsignedp && unsignedp0)
2259 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
2260 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
2261 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
2262 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
2264 else
2266 min_gt = INT_CST_LT (primop1, minval);
2267 max_gt = INT_CST_LT (primop1, maxval);
2268 min_lt = INT_CST_LT (minval, primop1);
2269 max_lt = INT_CST_LT (maxval, primop1);
2272 val = 0;
2273 /* This used to be a switch, but Genix compiler can't handle that. */
2274 if (code == NE_EXPR)
2276 if (max_lt || min_gt)
2277 val = truthvalue_true_node;
2279 else if (code == EQ_EXPR)
2281 if (max_lt || min_gt)
2282 val = truthvalue_false_node;
2284 else if (code == LT_EXPR)
2286 if (max_lt)
2287 val = truthvalue_true_node;
2288 if (!min_lt)
2289 val = truthvalue_false_node;
2291 else if (code == GT_EXPR)
2293 if (min_gt)
2294 val = truthvalue_true_node;
2295 if (!max_gt)
2296 val = truthvalue_false_node;
2298 else if (code == LE_EXPR)
2300 if (!max_gt)
2301 val = truthvalue_true_node;
2302 if (min_gt)
2303 val = truthvalue_false_node;
2305 else if (code == GE_EXPR)
2307 if (!min_lt)
2308 val = truthvalue_true_node;
2309 if (max_lt)
2310 val = truthvalue_false_node;
2313 /* If primop0 was sign-extended and unsigned comparison specd,
2314 we did a signed comparison above using the signed type bounds.
2315 But the comparison we output must be unsigned.
2317 Also, for inequalities, VAL is no good; but if the signed
2318 comparison had *any* fixed result, it follows that the
2319 unsigned comparison just tests the sign in reverse
2320 (positive values are LE, negative ones GE).
2321 So we can generate an unsigned comparison
2322 against an extreme value of the signed type. */
2324 if (unsignedp && !unsignedp0)
2326 if (val != 0)
2327 switch (code)
2329 case LT_EXPR:
2330 case GE_EXPR:
2331 primop1 = TYPE_MIN_VALUE (type);
2332 val = 0;
2333 break;
2335 case LE_EXPR:
2336 case GT_EXPR:
2337 primop1 = TYPE_MAX_VALUE (type);
2338 val = 0;
2339 break;
2341 default:
2342 break;
2344 type = c_common_unsigned_type (type);
2347 if (TREE_CODE (primop0) != INTEGER_CST)
2349 if (val == truthvalue_false_node)
2350 warning ("comparison is always false due to limited range of data type");
2351 if (val == truthvalue_true_node)
2352 warning ("comparison is always true due to limited range of data type");
2355 if (val != 0)
2357 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2358 if (TREE_SIDE_EFFECTS (primop0))
2359 return build (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
2360 return val;
2363 /* Value is not predetermined, but do the comparison
2364 in the type of the operand that is not constant.
2365 TYPE is already properly set. */
2367 else if (real1 && real2
2368 && (TYPE_PRECISION (TREE_TYPE (primop0))
2369 == TYPE_PRECISION (TREE_TYPE (primop1))))
2370 type = TREE_TYPE (primop0);
2372 /* If args' natural types are both narrower than nominal type
2373 and both extend in the same manner, compare them
2374 in the type of the wider arg.
2375 Otherwise must actually extend both to the nominal
2376 common type lest different ways of extending
2377 alter the result.
2378 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
2380 else if (unsignedp0 == unsignedp1 && real1 == real2
2381 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
2382 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
2384 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2385 type = c_common_signed_or_unsigned_type (unsignedp0
2386 || TYPE_UNSIGNED (*restype_ptr),
2387 type);
2388 /* Make sure shorter operand is extended the right way
2389 to match the longer operand. */
2390 primop0
2391 = convert (c_common_signed_or_unsigned_type (unsignedp0,
2392 TREE_TYPE (primop0)),
2393 primop0);
2394 primop1
2395 = convert (c_common_signed_or_unsigned_type (unsignedp1,
2396 TREE_TYPE (primop1)),
2397 primop1);
2399 else
2401 /* Here we must do the comparison on the nominal type
2402 using the args exactly as we received them. */
2403 type = *restype_ptr;
2404 primop0 = op0;
2405 primop1 = op1;
2407 if (!real1 && !real2 && integer_zerop (primop1)
2408 && TYPE_UNSIGNED (*restype_ptr))
2410 tree value = 0;
2411 switch (code)
2413 case GE_EXPR:
2414 /* All unsigned values are >= 0, so we warn if extra warnings
2415 are requested. However, if OP0 is a constant that is
2416 >= 0, the signedness of the comparison isn't an issue,
2417 so suppress the warning. */
2418 if (extra_warnings && !in_system_header
2419 && ! (TREE_CODE (primop0) == INTEGER_CST
2420 && ! TREE_OVERFLOW (convert (c_common_signed_type (type),
2421 primop0))))
2422 warning ("comparison of unsigned expression >= 0 is always true");
2423 value = truthvalue_true_node;
2424 break;
2426 case LT_EXPR:
2427 if (extra_warnings && !in_system_header
2428 && ! (TREE_CODE (primop0) == INTEGER_CST
2429 && ! TREE_OVERFLOW (convert (c_common_signed_type (type),
2430 primop0))))
2431 warning ("comparison of unsigned expression < 0 is always false");
2432 value = truthvalue_false_node;
2433 break;
2435 default:
2436 break;
2439 if (value != 0)
2441 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2442 if (TREE_SIDE_EFFECTS (primop0))
2443 return build (COMPOUND_EXPR, TREE_TYPE (value),
2444 primop0, value);
2445 return value;
2450 *op0_ptr = convert (type, primop0);
2451 *op1_ptr = convert (type, primop1);
2453 *restype_ptr = truthvalue_type_node;
2455 return 0;
2458 /* Return a tree for the sum or difference (RESULTCODE says which)
2459 of pointer PTROP and integer INTOP. */
2461 tree
2462 pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
2464 tree size_exp;
2466 tree result;
2467 tree folded;
2469 /* The result is a pointer of the same type that is being added. */
2471 tree result_type = TREE_TYPE (ptrop);
2473 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2475 if (pedantic || warn_pointer_arith)
2476 pedwarn ("pointer of type `void *' used in arithmetic");
2477 size_exp = integer_one_node;
2479 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2481 if (pedantic || warn_pointer_arith)
2482 pedwarn ("pointer to a function used in arithmetic");
2483 size_exp = integer_one_node;
2485 else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
2487 if (pedantic || warn_pointer_arith)
2488 pedwarn ("pointer to member function used in arithmetic");
2489 size_exp = integer_one_node;
2491 else
2492 size_exp = size_in_bytes (TREE_TYPE (result_type));
2494 /* If what we are about to multiply by the size of the elements
2495 contains a constant term, apply distributive law
2496 and multiply that constant term separately.
2497 This helps produce common subexpressions. */
2499 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2500 && ! TREE_CONSTANT (intop)
2501 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2502 && TREE_CONSTANT (size_exp)
2503 /* If the constant comes from pointer subtraction,
2504 skip this optimization--it would cause an error. */
2505 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2506 /* If the constant is unsigned, and smaller than the pointer size,
2507 then we must skip this optimization. This is because it could cause
2508 an overflow error if the constant is negative but INTOP is not. */
2509 && (! TYPE_UNSIGNED (TREE_TYPE (intop))
2510 || (TYPE_PRECISION (TREE_TYPE (intop))
2511 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2513 enum tree_code subcode = resultcode;
2514 tree int_type = TREE_TYPE (intop);
2515 if (TREE_CODE (intop) == MINUS_EXPR)
2516 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2517 /* Convert both subexpression types to the type of intop,
2518 because weird cases involving pointer arithmetic
2519 can result in a sum or difference with different type args. */
2520 ptrop = build_binary_op (subcode, ptrop,
2521 convert (int_type, TREE_OPERAND (intop, 1)), 1);
2522 intop = convert (int_type, TREE_OPERAND (intop, 0));
2525 /* Convert the integer argument to a type the same size as sizetype
2526 so the multiply won't overflow spuriously. */
2528 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
2529 || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
2530 intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
2531 TYPE_UNSIGNED (sizetype)), intop);
2533 /* Replace the integer argument with a suitable product by the object size.
2534 Do this multiplication as signed, then convert to the appropriate
2535 pointer type (actually unsigned integral). */
2537 intop = convert (result_type,
2538 build_binary_op (MULT_EXPR, intop,
2539 convert (TREE_TYPE (intop), size_exp), 1));
2541 /* Create the sum or difference. */
2543 result = build (resultcode, result_type, ptrop, intop);
2545 folded = fold (result);
2546 if (folded == result)
2547 TREE_CONSTANT (folded) = TREE_CONSTANT (ptrop) & TREE_CONSTANT (intop);
2548 return folded;
2551 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
2552 or validate its data type for an `if' or `while' statement or ?..: exp.
2554 This preparation consists of taking the ordinary
2555 representation of an expression expr and producing a valid tree
2556 boolean expression describing whether expr is nonzero. We could
2557 simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
2558 but we optimize comparisons, &&, ||, and !.
2560 The resulting type should always be `truthvalue_type_node'. */
2562 tree
2563 c_common_truthvalue_conversion (tree expr)
2565 if (TREE_CODE (expr) == ERROR_MARK)
2566 return expr;
2568 if (TREE_CODE (expr) == FUNCTION_DECL)
2569 expr = build_unary_op (ADDR_EXPR, expr, 0);
2571 switch (TREE_CODE (expr))
2573 case EQ_EXPR:
2574 case NE_EXPR: case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
2575 case TRUTH_ANDIF_EXPR:
2576 case TRUTH_ORIF_EXPR:
2577 case TRUTH_AND_EXPR:
2578 case TRUTH_OR_EXPR:
2579 case TRUTH_XOR_EXPR:
2580 case TRUTH_NOT_EXPR:
2581 TREE_TYPE (expr) = truthvalue_type_node;
2582 return expr;
2584 case ERROR_MARK:
2585 return expr;
2587 case INTEGER_CST:
2588 return integer_zerop (expr) ? truthvalue_false_node : truthvalue_true_node;
2590 case REAL_CST:
2591 return real_zerop (expr) ? truthvalue_false_node : truthvalue_true_node;
2593 case ADDR_EXPR:
2595 if (TREE_CODE (TREE_OPERAND (expr, 0)) == FUNCTION_DECL
2596 && ! DECL_WEAK (TREE_OPERAND (expr, 0)))
2598 /* Common Ada/Pascal programmer's mistake. We always warn
2599 about this since it is so bad. */
2600 warning ("the address of `%D', will always evaluate as `true'",
2601 TREE_OPERAND (expr, 0));
2602 return truthvalue_true_node;
2605 /* If we are taking the address of an external decl, it might be
2606 zero if it is weak, so we cannot optimize. */
2607 if (DECL_P (TREE_OPERAND (expr, 0))
2608 && DECL_EXTERNAL (TREE_OPERAND (expr, 0)))
2609 break;
2611 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0)))
2612 return build (COMPOUND_EXPR, truthvalue_type_node,
2613 TREE_OPERAND (expr, 0), truthvalue_true_node);
2614 else
2615 return truthvalue_true_node;
2618 case COMPLEX_EXPR:
2619 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
2620 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2621 lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0)),
2622 lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 1)),
2625 case NEGATE_EXPR:
2626 case ABS_EXPR:
2627 case FLOAT_EXPR:
2628 /* These don't change whether an object is nonzero or zero. */
2629 return lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0));
2631 case LROTATE_EXPR:
2632 case RROTATE_EXPR:
2633 /* These don't change whether an object is zero or nonzero, but
2634 we can't ignore them if their second arg has side-effects. */
2635 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
2636 return build (COMPOUND_EXPR, truthvalue_type_node, TREE_OPERAND (expr, 1),
2637 lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0)));
2638 else
2639 return lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0));
2641 case COND_EXPR:
2642 /* Distribute the conversion into the arms of a COND_EXPR. */
2643 return fold (build (COND_EXPR, truthvalue_type_node, TREE_OPERAND (expr, 0),
2644 lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 1)),
2645 lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 2))));
2647 case CONVERT_EXPR:
2648 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2649 since that affects how `default_conversion' will behave. */
2650 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
2651 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2652 break;
2653 /* Fall through.... */
2654 case NOP_EXPR:
2655 /* If this is widening the argument, we can ignore it. */
2656 if (TYPE_PRECISION (TREE_TYPE (expr))
2657 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2658 return lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0));
2659 break;
2661 case MINUS_EXPR:
2662 /* Perhaps reduce (x - y) != 0 to (x != y). The expressions
2663 aren't guaranteed to the be same for modes that can represent
2664 infinity, since if x and y are both +infinity, or both
2665 -infinity, then x - y is not a number.
2667 Note that this transformation is safe when x or y is NaN.
2668 (x - y) is then NaN, and both (x - y) != 0 and x != y will
2669 be false. */
2670 if (HONOR_INFINITIES (TYPE_MODE (TREE_TYPE (TREE_OPERAND (expr, 0)))))
2671 break;
2672 /* Fall through.... */
2673 case BIT_XOR_EXPR:
2674 /* This and MINUS_EXPR can be changed into a comparison of the
2675 two objects. */
2676 if (TREE_TYPE (TREE_OPERAND (expr, 0))
2677 == TREE_TYPE (TREE_OPERAND (expr, 1)))
2678 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2679 TREE_OPERAND (expr, 1), 1);
2680 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2681 fold (build1 (NOP_EXPR,
2682 TREE_TYPE (TREE_OPERAND (expr, 0)),
2683 TREE_OPERAND (expr, 1))), 1);
2685 case BIT_AND_EXPR:
2686 if (integer_onep (TREE_OPERAND (expr, 1))
2687 && TREE_TYPE (expr) != truthvalue_type_node)
2688 /* Using convert here would cause infinite recursion. */
2689 return build1 (NOP_EXPR, truthvalue_type_node, expr);
2690 break;
2692 case MODIFY_EXPR:
2693 if (warn_parentheses && C_EXP_ORIGINAL_CODE (expr) == MODIFY_EXPR)
2694 warning ("suggest parentheses around assignment used as truth value");
2695 break;
2697 default:
2698 break;
2701 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
2703 tree t = save_expr (expr);
2704 return (build_binary_op
2705 ((TREE_SIDE_EFFECTS (expr)
2706 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2707 lang_hooks.truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
2708 lang_hooks.truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
2709 0));
2712 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
2715 static tree builtin_function_2 (const char *, const char *, tree, tree,
2716 int, enum built_in_class, int, int,
2717 tree);
2719 /* Make a variant type in the proper way for C/C++, propagating qualifiers
2720 down to the element type of an array. */
2722 tree
2723 c_build_qualified_type (tree type, int type_quals)
2725 if (type == error_mark_node)
2726 return type;
2728 if (TREE_CODE (type) == ARRAY_TYPE)
2729 return build_array_type (c_build_qualified_type (TREE_TYPE (type),
2730 type_quals),
2731 TYPE_DOMAIN (type));
2733 /* A restrict-qualified pointer type must be a pointer to object or
2734 incomplete type. Note that the use of POINTER_TYPE_P also allows
2735 REFERENCE_TYPEs, which is appropriate for C++. */
2736 if ((type_quals & TYPE_QUAL_RESTRICT)
2737 && (!POINTER_TYPE_P (type)
2738 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
2740 error ("invalid use of `restrict'");
2741 type_quals &= ~TYPE_QUAL_RESTRICT;
2744 return build_qualified_type (type, type_quals);
2747 /* Apply the TYPE_QUALS to the new DECL. */
2749 void
2750 c_apply_type_quals_to_decl (int type_quals, tree decl)
2752 tree type = TREE_TYPE (decl);
2754 if (type == error_mark_node)
2755 return;
2757 if (((type_quals & TYPE_QUAL_CONST)
2758 || (type && TREE_CODE (type) == REFERENCE_TYPE))
2759 /* An object declared 'const' is only readonly after it is
2760 initialized. We don't have any way of expressing this currently,
2761 so we need to be conservative and unset TREE_READONLY for types
2762 with constructors. Otherwise aliasing code will ignore stores in
2763 an inline constructor. */
2764 && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
2765 TREE_READONLY (decl) = 1;
2766 if (type_quals & TYPE_QUAL_VOLATILE)
2768 TREE_SIDE_EFFECTS (decl) = 1;
2769 TREE_THIS_VOLATILE (decl) = 1;
2771 if (type_quals & TYPE_QUAL_RESTRICT)
2773 while (type && TREE_CODE (type) == ARRAY_TYPE)
2774 /* Allow 'restrict' on arrays of pointers.
2775 FIXME currently we just ignore it. */
2776 type = TREE_TYPE (type);
2777 if (!type
2778 || !POINTER_TYPE_P (type)
2779 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
2780 error ("invalid use of `restrict'");
2781 else if (flag_strict_aliasing && type == TREE_TYPE (decl))
2782 /* Indicate we need to make a unique alias set for this pointer.
2783 We can't do it here because it might be pointing to an
2784 incomplete type. */
2785 DECL_POINTER_ALIAS_SET (decl) = -2;
2789 /* Return the typed-based alias set for T, which may be an expression
2790 or a type. Return -1 if we don't do anything special. */
2792 HOST_WIDE_INT
2793 c_common_get_alias_set (tree t)
2795 tree u;
2797 /* Permit type-punning when accessing a union, provided the access
2798 is directly through the union. For example, this code does not
2799 permit taking the address of a union member and then storing
2800 through it. Even the type-punning allowed here is a GCC
2801 extension, albeit a common and useful one; the C standard says
2802 that such accesses have implementation-defined behavior. */
2803 for (u = t;
2804 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
2805 u = TREE_OPERAND (u, 0))
2806 if (TREE_CODE (u) == COMPONENT_REF
2807 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
2808 return 0;
2810 /* That's all the expressions we handle specially. */
2811 if (! TYPE_P (t))
2812 return -1;
2814 /* The C standard guarantees that any object may be accessed via an
2815 lvalue that has character type. */
2816 if (t == char_type_node
2817 || t == signed_char_type_node
2818 || t == unsigned_char_type_node)
2819 return 0;
2821 /* If it has the may_alias attribute, it can alias anything. */
2822 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t)))
2823 return 0;
2825 /* The C standard specifically allows aliasing between signed and
2826 unsigned variants of the same type. We treat the signed
2827 variant as canonical. */
2828 if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
2830 tree t1 = c_common_signed_type (t);
2832 /* t1 == t can happen for boolean nodes which are always unsigned. */
2833 if (t1 != t)
2834 return get_alias_set (t1);
2836 else if (POINTER_TYPE_P (t))
2838 tree t1;
2840 /* Unfortunately, there is no canonical form of a pointer type.
2841 In particular, if we have `typedef int I', then `int *', and
2842 `I *' are different types. So, we have to pick a canonical
2843 representative. We do this below.
2845 Technically, this approach is actually more conservative that
2846 it needs to be. In particular, `const int *' and `int *'
2847 should be in different alias sets, according to the C and C++
2848 standard, since their types are not the same, and so,
2849 technically, an `int **' and `const int **' cannot point at
2850 the same thing.
2852 But, the standard is wrong. In particular, this code is
2853 legal C++:
2855 int *ip;
2856 int **ipp = &ip;
2857 const int* const* cipp = ipp;
2859 And, it doesn't make sense for that to be legal unless you
2860 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
2861 the pointed-to types. This issue has been reported to the
2862 C++ committee. */
2863 t1 = build_type_no_quals (t);
2864 if (t1 != t)
2865 return get_alias_set (t1);
2868 return -1;
2871 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
2872 second parameter indicates which OPERATOR is being applied. The COMPLAIN
2873 flag controls whether we should diagnose possibly ill-formed
2874 constructs or not. */
2875 tree
2876 c_sizeof_or_alignof_type (tree type, enum tree_code op, int complain)
2878 const char *op_name;
2879 tree value = NULL;
2880 enum tree_code type_code = TREE_CODE (type);
2882 my_friendly_assert (op == SIZEOF_EXPR || op == ALIGNOF_EXPR, 20020720);
2883 op_name = op == SIZEOF_EXPR ? "sizeof" : "__alignof__";
2885 if (type_code == FUNCTION_TYPE)
2887 if (op == SIZEOF_EXPR)
2889 if (complain && (pedantic || warn_pointer_arith))
2890 pedwarn ("invalid application of `sizeof' to a function type");
2891 value = size_one_node;
2893 else
2894 value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
2896 else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
2898 if (type_code == VOID_TYPE
2899 && complain && (pedantic || warn_pointer_arith))
2900 pedwarn ("invalid application of `%s' to a void type", op_name);
2901 value = size_one_node;
2903 else if (!COMPLETE_TYPE_P (type))
2905 if (complain)
2906 error ("invalid application of `%s' to an incomplete type", op_name);
2907 value = size_zero_node;
2909 else
2911 if (op == SIZEOF_EXPR)
2912 /* Convert in case a char is more than one unit. */
2913 value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
2914 size_int (TYPE_PRECISION (char_type_node)
2915 / BITS_PER_UNIT));
2916 else
2917 value = size_int (TYPE_ALIGN (type) / BITS_PER_UNIT);
2920 /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
2921 TYPE_IS_SIZETYPE means that certain things (like overflow) will
2922 never happen. However, this node should really have type
2923 `size_t', which is just a typedef for an ordinary integer type. */
2924 value = fold (build1 (NOP_EXPR, size_type_node, value));
2925 my_friendly_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)), 20001021);
2927 return value;
2930 /* Implement the __alignof keyword: Return the minimum required
2931 alignment of EXPR, measured in bytes. For VAR_DECL's and
2932 FIELD_DECL's return DECL_ALIGN (which can be set from an
2933 "aligned" __attribute__ specification). */
2935 tree
2936 c_alignof_expr (tree expr)
2938 tree t;
2940 if (TREE_CODE (expr) == VAR_DECL)
2941 t = size_int (DECL_ALIGN (expr) / BITS_PER_UNIT);
2943 else if (TREE_CODE (expr) == COMPONENT_REF
2944 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
2946 error ("`__alignof' applied to a bit-field");
2947 t = size_one_node;
2949 else if (TREE_CODE (expr) == COMPONENT_REF
2950 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
2951 t = size_int (DECL_ALIGN (TREE_OPERAND (expr, 1)) / BITS_PER_UNIT);
2953 else if (TREE_CODE (expr) == INDIRECT_REF)
2955 tree t = TREE_OPERAND (expr, 0);
2956 tree best = t;
2957 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2959 while (TREE_CODE (t) == NOP_EXPR
2960 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
2962 int thisalign;
2964 t = TREE_OPERAND (t, 0);
2965 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2966 if (thisalign > bestalign)
2967 best = t, bestalign = thisalign;
2969 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
2971 else
2972 return c_alignof (TREE_TYPE (expr));
2974 return fold (build1 (NOP_EXPR, size_type_node, t));
2977 /* Handle C and C++ default attributes. */
2979 enum built_in_attribute
2981 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
2982 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
2983 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
2984 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
2985 #include "builtin-attrs.def"
2986 #undef DEF_ATTR_NULL_TREE
2987 #undef DEF_ATTR_INT
2988 #undef DEF_ATTR_IDENT
2989 #undef DEF_ATTR_TREE_LIST
2990 ATTR_LAST
2993 static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
2995 static void c_init_attributes (void);
2997 /* Build tree nodes and builtin functions common to both C and C++ language
2998 frontends. */
3000 void
3001 c_common_nodes_and_builtins (void)
3003 enum builtin_type
3005 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
3006 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
3007 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
3008 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
3009 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3010 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3011 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
3012 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
3013 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
3014 #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3015 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
3016 #include "builtin-types.def"
3017 #undef DEF_PRIMITIVE_TYPE
3018 #undef DEF_FUNCTION_TYPE_0
3019 #undef DEF_FUNCTION_TYPE_1
3020 #undef DEF_FUNCTION_TYPE_2
3021 #undef DEF_FUNCTION_TYPE_3
3022 #undef DEF_FUNCTION_TYPE_4
3023 #undef DEF_FUNCTION_TYPE_VAR_0
3024 #undef DEF_FUNCTION_TYPE_VAR_1
3025 #undef DEF_FUNCTION_TYPE_VAR_2
3026 #undef DEF_FUNCTION_TYPE_VAR_3
3027 #undef DEF_POINTER_TYPE
3028 BT_LAST
3031 typedef enum builtin_type builtin_type;
3033 tree builtin_types[(int) BT_LAST];
3034 int wchar_type_size;
3035 tree array_domain_type;
3036 tree va_list_ref_type_node;
3037 tree va_list_arg_type_node;
3039 /* Define `int' and `char' first so that dbx will output them first. */
3040 record_builtin_type (RID_INT, NULL, integer_type_node);
3041 record_builtin_type (RID_CHAR, "char", char_type_node);
3043 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
3044 "unsigned long", "long long unsigned" and "unsigned short" were in C++
3045 but not C. Are the conditionals here needed? */
3046 if (c_dialect_cxx ())
3047 record_builtin_type (RID_SIGNED, NULL, integer_type_node);
3048 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
3049 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
3050 record_builtin_type (RID_MAX, "long unsigned int",
3051 long_unsigned_type_node);
3052 if (c_dialect_cxx ())
3053 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
3054 record_builtin_type (RID_MAX, "long long int",
3055 long_long_integer_type_node);
3056 record_builtin_type (RID_MAX, "long long unsigned int",
3057 long_long_unsigned_type_node);
3058 if (c_dialect_cxx ())
3059 record_builtin_type (RID_MAX, "long long unsigned",
3060 long_long_unsigned_type_node);
3061 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
3062 record_builtin_type (RID_MAX, "short unsigned int",
3063 short_unsigned_type_node);
3064 if (c_dialect_cxx ())
3065 record_builtin_type (RID_MAX, "unsigned short",
3066 short_unsigned_type_node);
3068 /* Define both `signed char' and `unsigned char'. */
3069 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
3070 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
3072 /* These are types that c_common_type_for_size and
3073 c_common_type_for_mode use. */
3074 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3075 intQI_type_node));
3076 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3077 intHI_type_node));
3078 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3079 intSI_type_node));
3080 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3081 intDI_type_node));
3082 #if HOST_BITS_PER_WIDE_INT >= 64
3083 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3084 get_identifier ("__int128_t"),
3085 intTI_type_node));
3086 #endif
3087 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3088 unsigned_intQI_type_node));
3089 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3090 unsigned_intHI_type_node));
3091 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3092 unsigned_intSI_type_node));
3093 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3094 unsigned_intDI_type_node));
3095 #if HOST_BITS_PER_WIDE_INT >= 64
3096 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3097 get_identifier ("__uint128_t"),
3098 unsigned_intTI_type_node));
3099 #endif
3101 /* Create the widest literal types. */
3102 widest_integer_literal_type_node
3103 = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
3104 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3105 widest_integer_literal_type_node));
3107 widest_unsigned_literal_type_node
3108 = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
3109 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3110 widest_unsigned_literal_type_node));
3112 /* `unsigned long' is the standard type for sizeof.
3113 Note that stddef.h uses `unsigned long',
3114 and this must agree, even if long and int are the same size. */
3115 size_type_node =
3116 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
3117 signed_size_type_node = c_common_signed_type (size_type_node);
3118 set_sizetype (size_type_node);
3120 pid_type_node =
3121 TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
3123 build_common_tree_nodes_2 (flag_short_double);
3125 record_builtin_type (RID_FLOAT, NULL, float_type_node);
3126 record_builtin_type (RID_DOUBLE, NULL, double_type_node);
3127 record_builtin_type (RID_MAX, "long double", long_double_type_node);
3129 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3130 get_identifier ("complex int"),
3131 complex_integer_type_node));
3132 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3133 get_identifier ("complex float"),
3134 complex_float_type_node));
3135 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3136 get_identifier ("complex double"),
3137 complex_double_type_node));
3138 lang_hooks.decls.pushdecl
3139 (build_decl (TYPE_DECL, get_identifier ("complex long double"),
3140 complex_long_double_type_node));
3142 /* Types which are common to the fortran compiler and libf2c. When
3143 changing these, you also need to be concerned with f/com.h. */
3145 if (TYPE_PRECISION (float_type_node)
3146 == TYPE_PRECISION (long_integer_type_node))
3148 g77_integer_type_node = long_integer_type_node;
3149 g77_uinteger_type_node = long_unsigned_type_node;
3151 else if (TYPE_PRECISION (float_type_node)
3152 == TYPE_PRECISION (integer_type_node))
3154 g77_integer_type_node = integer_type_node;
3155 g77_uinteger_type_node = unsigned_type_node;
3157 else
3158 g77_integer_type_node = g77_uinteger_type_node = NULL_TREE;
3160 if (g77_integer_type_node != NULL_TREE)
3162 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3163 get_identifier ("__g77_integer"),
3164 g77_integer_type_node));
3165 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3166 get_identifier ("__g77_uinteger"),
3167 g77_uinteger_type_node));
3170 if (TYPE_PRECISION (float_type_node) * 2
3171 == TYPE_PRECISION (long_integer_type_node))
3173 g77_longint_type_node = long_integer_type_node;
3174 g77_ulongint_type_node = long_unsigned_type_node;
3176 else if (TYPE_PRECISION (float_type_node) * 2
3177 == TYPE_PRECISION (long_long_integer_type_node))
3179 g77_longint_type_node = long_long_integer_type_node;
3180 g77_ulongint_type_node = long_long_unsigned_type_node;
3182 else
3183 g77_longint_type_node = g77_ulongint_type_node = NULL_TREE;
3185 if (g77_longint_type_node != NULL_TREE)
3187 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3188 get_identifier ("__g77_longint"),
3189 g77_longint_type_node));
3190 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3191 get_identifier ("__g77_ulongint"),
3192 g77_ulongint_type_node));
3195 record_builtin_type (RID_VOID, NULL, void_type_node);
3197 void_zero_node = build_int_2 (0, 0);
3198 TREE_TYPE (void_zero_node) = void_type_node;
3200 void_list_node = build_void_list_node ();
3202 /* Make a type to be the domain of a few array types
3203 whose domains don't really matter.
3204 200 is small enough that it always fits in size_t
3205 and large enough that it can hold most function names for the
3206 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
3207 array_domain_type = build_index_type (size_int (200));
3209 /* Make a type for arrays of characters.
3210 With luck nothing will ever really depend on the length of this
3211 array type. */
3212 char_array_type_node
3213 = build_array_type (char_type_node, array_domain_type);
3215 /* Likewise for arrays of ints. */
3216 int_array_type_node
3217 = build_array_type (integer_type_node, array_domain_type);
3219 string_type_node = build_pointer_type (char_type_node);
3220 const_string_type_node
3221 = build_pointer_type (build_qualified_type
3222 (char_type_node, TYPE_QUAL_CONST));
3224 /* This is special for C++ so functions can be overloaded. */
3225 wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
3226 wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
3227 wchar_type_size = TYPE_PRECISION (wchar_type_node);
3228 if (c_dialect_cxx ())
3230 if (TYPE_UNSIGNED (wchar_type_node))
3231 wchar_type_node = make_unsigned_type (wchar_type_size);
3232 else
3233 wchar_type_node = make_signed_type (wchar_type_size);
3234 record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
3236 else
3238 signed_wchar_type_node = c_common_signed_type (wchar_type_node);
3239 unsigned_wchar_type_node = c_common_unsigned_type (wchar_type_node);
3242 /* This is for wide string constants. */
3243 wchar_array_type_node
3244 = build_array_type (wchar_type_node, array_domain_type);
3246 wint_type_node =
3247 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
3249 intmax_type_node =
3250 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
3251 uintmax_type_node =
3252 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
3254 default_function_type = build_function_type (integer_type_node, NULL_TREE);
3255 ptrdiff_type_node
3256 = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
3257 unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
3259 lang_hooks.decls.pushdecl
3260 (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
3261 va_list_type_node));
3263 lang_hooks.decls.pushdecl
3264 (build_decl (TYPE_DECL, get_identifier ("__builtin_ptrdiff_t"),
3265 ptrdiff_type_node));
3267 lang_hooks.decls.pushdecl
3268 (build_decl (TYPE_DECL, get_identifier ("__builtin_size_t"),
3269 sizetype));
3271 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
3273 va_list_arg_type_node = va_list_ref_type_node =
3274 build_pointer_type (TREE_TYPE (va_list_type_node));
3276 else
3278 va_list_arg_type_node = va_list_type_node;
3279 va_list_ref_type_node = build_reference_type (va_list_type_node);
3282 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
3283 builtin_types[(int) ENUM] = VALUE;
3284 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
3285 builtin_types[(int) ENUM] \
3286 = build_function_type (builtin_types[(int) RETURN], \
3287 void_list_node);
3288 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
3289 builtin_types[(int) ENUM] \
3290 = build_function_type (builtin_types[(int) RETURN], \
3291 tree_cons (NULL_TREE, \
3292 builtin_types[(int) ARG1], \
3293 void_list_node));
3294 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
3295 builtin_types[(int) ENUM] \
3296 = build_function_type \
3297 (builtin_types[(int) RETURN], \
3298 tree_cons (NULL_TREE, \
3299 builtin_types[(int) ARG1], \
3300 tree_cons (NULL_TREE, \
3301 builtin_types[(int) ARG2], \
3302 void_list_node)));
3303 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3304 builtin_types[(int) ENUM] \
3305 = build_function_type \
3306 (builtin_types[(int) RETURN], \
3307 tree_cons (NULL_TREE, \
3308 builtin_types[(int) ARG1], \
3309 tree_cons (NULL_TREE, \
3310 builtin_types[(int) ARG2], \
3311 tree_cons (NULL_TREE, \
3312 builtin_types[(int) ARG3], \
3313 void_list_node))));
3314 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3315 builtin_types[(int) ENUM] \
3316 = build_function_type \
3317 (builtin_types[(int) RETURN], \
3318 tree_cons (NULL_TREE, \
3319 builtin_types[(int) ARG1], \
3320 tree_cons (NULL_TREE, \
3321 builtin_types[(int) ARG2], \
3322 tree_cons \
3323 (NULL_TREE, \
3324 builtin_types[(int) ARG3], \
3325 tree_cons (NULL_TREE, \
3326 builtin_types[(int) ARG4], \
3327 void_list_node)))));
3328 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
3329 builtin_types[(int) ENUM] \
3330 = build_function_type (builtin_types[(int) RETURN], NULL_TREE);
3331 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
3332 builtin_types[(int) ENUM] \
3333 = build_function_type (builtin_types[(int) RETURN], \
3334 tree_cons (NULL_TREE, \
3335 builtin_types[(int) ARG1], \
3336 NULL_TREE));
3338 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
3339 builtin_types[(int) ENUM] \
3340 = build_function_type \
3341 (builtin_types[(int) RETURN], \
3342 tree_cons (NULL_TREE, \
3343 builtin_types[(int) ARG1], \
3344 tree_cons (NULL_TREE, \
3345 builtin_types[(int) ARG2], \
3346 NULL_TREE)));
3348 #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3349 builtin_types[(int) ENUM] \
3350 = build_function_type \
3351 (builtin_types[(int) RETURN], \
3352 tree_cons (NULL_TREE, \
3353 builtin_types[(int) ARG1], \
3354 tree_cons (NULL_TREE, \
3355 builtin_types[(int) ARG2], \
3356 tree_cons (NULL_TREE, \
3357 builtin_types[(int) ARG3], \
3358 NULL_TREE))));
3360 #define DEF_POINTER_TYPE(ENUM, TYPE) \
3361 builtin_types[(int) ENUM] \
3362 = build_pointer_type (builtin_types[(int) TYPE]);
3363 #include "builtin-types.def"
3364 #undef DEF_PRIMITIVE_TYPE
3365 #undef DEF_FUNCTION_TYPE_1
3366 #undef DEF_FUNCTION_TYPE_2
3367 #undef DEF_FUNCTION_TYPE_3
3368 #undef DEF_FUNCTION_TYPE_4
3369 #undef DEF_FUNCTION_TYPE_VAR_0
3370 #undef DEF_FUNCTION_TYPE_VAR_1
3371 #undef DEF_FUNCTION_TYPE_VAR_2
3372 #undef DEF_FUNCTION_TYPE_VAR_3
3373 #undef DEF_POINTER_TYPE
3375 c_init_attributes ();
3377 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, \
3378 BOTH_P, FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT) \
3379 if (NAME) \
3381 tree decl; \
3383 if (strncmp (NAME, "__builtin_", strlen ("__builtin_")) != 0) \
3384 abort (); \
3386 if (!BOTH_P) \
3387 decl = builtin_function (NAME, builtin_types[TYPE], ENUM, \
3388 CLASS, \
3389 (FALLBACK_P \
3390 ? (NAME + strlen ("__builtin_")) \
3391 : NULL), \
3392 built_in_attributes[(int) ATTRS]); \
3393 else \
3394 decl = builtin_function_2 (NAME, \
3395 NAME + strlen ("__builtin_"), \
3396 builtin_types[TYPE], \
3397 builtin_types[LIBTYPE], \
3398 ENUM, \
3399 CLASS, \
3400 FALLBACK_P, \
3401 NONANSI_P, \
3402 built_in_attributes[(int) ATTRS]); \
3404 built_in_decls[(int) ENUM] = decl; \
3405 if (IMPLICIT) \
3406 implicit_built_in_decls[(int) ENUM] = decl; \
3408 #include "builtins.def"
3409 #undef DEF_BUILTIN
3411 targetm.init_builtins ();
3413 main_identifier_node = get_identifier ("main");
3416 tree
3417 build_va_arg (tree expr, tree type)
3419 return build1 (VA_ARG_EXPR, type, expr);
3423 /* Linked list of disabled built-in functions. */
3425 typedef struct disabled_builtin
3427 const char *name;
3428 struct disabled_builtin *next;
3429 } disabled_builtin;
3430 static disabled_builtin *disabled_builtins = NULL;
3432 static bool builtin_function_disabled_p (const char *);
3434 /* Disable a built-in function specified by -fno-builtin-NAME. If NAME
3435 begins with "__builtin_", give an error. */
3437 void
3438 disable_builtin_function (const char *name)
3440 if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
3441 error ("cannot disable built-in function `%s'", name);
3442 else
3444 disabled_builtin *new = xmalloc (sizeof (disabled_builtin));
3445 new->name = name;
3446 new->next = disabled_builtins;
3447 disabled_builtins = new;
3452 /* Return true if the built-in function NAME has been disabled, false
3453 otherwise. */
3455 static bool
3456 builtin_function_disabled_p (const char *name)
3458 disabled_builtin *p;
3459 for (p = disabled_builtins; p != NULL; p = p->next)
3461 if (strcmp (name, p->name) == 0)
3462 return true;
3464 return false;
3468 /* Possibly define a builtin function with one or two names. BUILTIN_NAME
3469 is an __builtin_-prefixed name; NAME is the ordinary name; one or both
3470 of these may be NULL (though both being NULL is useless).
3471 BUILTIN_TYPE is the type of the __builtin_-prefixed function;
3472 TYPE is the type of the function with the ordinary name. These
3473 may differ if the ordinary name is declared with a looser type to avoid
3474 conflicts with headers. FUNCTION_CODE and CLASS are as for
3475 builtin_function. If LIBRARY_NAME_P is nonzero, NAME is passed as
3476 the LIBRARY_NAME parameter to builtin_function when declaring BUILTIN_NAME.
3477 If NONANSI_P is nonzero, the name NAME is treated as a non-ANSI name;
3478 ATTRS is the tree list representing the builtin's function attributes.
3479 Returns the declaration of BUILTIN_NAME, if any, otherwise
3480 the declaration of NAME. Does not declare NAME if flag_no_builtin,
3481 or if NONANSI_P and flag_no_nonansi_builtin. */
3483 static tree
3484 builtin_function_2 (const char *builtin_name, const char *name,
3485 tree builtin_type, tree type, int function_code,
3486 enum built_in_class class, int library_name_p,
3487 int nonansi_p, tree attrs)
3489 tree bdecl = NULL_TREE;
3490 tree decl = NULL_TREE;
3492 if (builtin_name != 0)
3493 bdecl = builtin_function (builtin_name, builtin_type, function_code,
3494 class, library_name_p ? name : NULL, attrs);
3496 if (name != 0 && !flag_no_builtin && !builtin_function_disabled_p (name)
3497 && !(nonansi_p && flag_no_nonansi_builtin))
3498 decl = builtin_function (name, type, function_code, class, NULL, attrs);
3500 return (bdecl != 0 ? bdecl : decl);
3503 /* Nonzero if the type T promotes to int. This is (nearly) the
3504 integral promotions defined in ISO C99 6.3.1.1/2. */
3506 bool
3507 c_promoting_integer_type_p (tree t)
3509 switch (TREE_CODE (t))
3511 case INTEGER_TYPE:
3512 return (TYPE_MAIN_VARIANT (t) == char_type_node
3513 || TYPE_MAIN_VARIANT (t) == signed_char_type_node
3514 || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
3515 || TYPE_MAIN_VARIANT (t) == short_integer_type_node
3516 || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
3517 || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
3519 case ENUMERAL_TYPE:
3520 /* ??? Technically all enumerations not larger than an int
3521 promote to an int. But this is used along code paths
3522 that only want to notice a size change. */
3523 return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
3525 case BOOLEAN_TYPE:
3526 return 1;
3528 default:
3529 return 0;
3533 /* Return 1 if PARMS specifies a fixed number of parameters
3534 and none of their types is affected by default promotions. */
3537 self_promoting_args_p (tree parms)
3539 tree t;
3540 for (t = parms; t; t = TREE_CHAIN (t))
3542 tree type = TREE_VALUE (t);
3544 if (TREE_CHAIN (t) == 0 && type != void_type_node)
3545 return 0;
3547 if (type == 0)
3548 return 0;
3550 if (TYPE_MAIN_VARIANT (type) == float_type_node)
3551 return 0;
3553 if (c_promoting_integer_type_p (type))
3554 return 0;
3556 return 1;
3559 /* Recursively examines the array elements of TYPE, until a non-array
3560 element type is found. */
3562 tree
3563 strip_array_types (tree type)
3565 while (TREE_CODE (type) == ARRAY_TYPE)
3566 type = TREE_TYPE (type);
3568 return type;
3571 /* Recursively remove any '*' or '&' operator from TYPE. */
3572 tree
3573 strip_pointer_operator (tree t)
3575 while (POINTER_TYPE_P (t))
3576 t = TREE_TYPE (t);
3577 return t;
3580 static tree expand_unordered_cmp (tree, tree, enum tree_code, enum tree_code);
3582 /* Expand a call to an unordered comparison function such as
3583 __builtin_isgreater(). FUNCTION is the function's declaration and
3584 PARAMS a list of the values passed. For __builtin_isunordered(),
3585 UNORDERED_CODE is UNORDERED_EXPR and ORDERED_CODE is NOP_EXPR. In
3586 other cases, UNORDERED_CODE and ORDERED_CODE are comparison codes
3587 that give the opposite of the desired result. UNORDERED_CODE is
3588 used for modes that can hold NaNs and ORDERED_CODE is used for the
3589 rest. */
3591 static tree
3592 expand_unordered_cmp (tree function, tree params,
3593 enum tree_code unordered_code,
3594 enum tree_code ordered_code)
3596 tree arg0, arg1, type;
3597 enum tree_code code0, code1;
3599 /* Check that we have exactly two arguments. */
3600 if (params == 0 || TREE_CHAIN (params) == 0)
3602 error ("too few arguments to function `%s'",
3603 IDENTIFIER_POINTER (DECL_NAME (function)));
3604 return error_mark_node;
3606 else if (TREE_CHAIN (TREE_CHAIN (params)) != 0)
3608 error ("too many arguments to function `%s'",
3609 IDENTIFIER_POINTER (DECL_NAME (function)));
3610 return error_mark_node;
3613 arg0 = TREE_VALUE (params);
3614 arg1 = TREE_VALUE (TREE_CHAIN (params));
3616 code0 = TREE_CODE (TREE_TYPE (arg0));
3617 code1 = TREE_CODE (TREE_TYPE (arg1));
3619 /* Make sure that the arguments have a common type of REAL. */
3620 type = 0;
3621 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3622 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3623 type = common_type (TREE_TYPE (arg0), TREE_TYPE (arg1));
3625 if (type == 0 || TREE_CODE (type) != REAL_TYPE)
3627 error ("non-floating-point argument to function `%s'",
3628 IDENTIFIER_POINTER (DECL_NAME (function)));
3629 return error_mark_node;
3632 if (unordered_code == UNORDERED_EXPR)
3634 if (MODE_HAS_NANS (TYPE_MODE (type)))
3635 return build_binary_op (unordered_code,
3636 convert (type, arg0),
3637 convert (type, arg1),
3639 else
3640 return integer_zero_node;
3643 return build_unary_op (TRUTH_NOT_EXPR,
3644 build_binary_op (MODE_HAS_NANS (TYPE_MODE (type))
3645 ? unordered_code
3646 : ordered_code,
3647 convert (type, arg0),
3648 convert (type, arg1),
3654 /* Recognize certain built-in functions so we can make tree-codes
3655 other than CALL_EXPR. We do this when it enables fold-const.c
3656 to do something useful. */
3657 /* ??? By rights this should go in builtins.c, but only C and C++
3658 implement build_{binary,unary}_op. Not exactly sure what bits
3659 of functionality are actually needed from those functions, or
3660 where the similar functionality exists in the other front ends. */
3662 tree
3663 expand_tree_builtin (tree function, tree params, tree coerced_params)
3665 if (DECL_BUILT_IN_CLASS (function) != BUILT_IN_NORMAL)
3666 return NULL_TREE;
3668 switch (DECL_FUNCTION_CODE (function))
3670 case BUILT_IN_ABS:
3671 case BUILT_IN_LABS:
3672 case BUILT_IN_LLABS:
3673 case BUILT_IN_IMAXABS:
3674 case BUILT_IN_FABS:
3675 case BUILT_IN_FABSL:
3676 case BUILT_IN_FABSF:
3677 if (coerced_params == 0)
3678 return integer_zero_node;
3679 return build_unary_op (ABS_EXPR, TREE_VALUE (coerced_params), 0);
3681 case BUILT_IN_CONJ:
3682 case BUILT_IN_CONJF:
3683 case BUILT_IN_CONJL:
3684 if (coerced_params == 0)
3685 return integer_zero_node;
3686 return build_unary_op (CONJ_EXPR, TREE_VALUE (coerced_params), 0);
3688 case BUILT_IN_CREAL:
3689 case BUILT_IN_CREALF:
3690 case BUILT_IN_CREALL:
3691 if (coerced_params == 0)
3692 return integer_zero_node;
3693 return non_lvalue (build_unary_op (REALPART_EXPR,
3694 TREE_VALUE (coerced_params), 0));
3696 case BUILT_IN_CIMAG:
3697 case BUILT_IN_CIMAGF:
3698 case BUILT_IN_CIMAGL:
3699 if (coerced_params == 0)
3700 return integer_zero_node;
3701 return non_lvalue (build_unary_op (IMAGPART_EXPR,
3702 TREE_VALUE (coerced_params), 0));
3704 case BUILT_IN_ISGREATER:
3705 return expand_unordered_cmp (function, params, UNLE_EXPR, LE_EXPR);
3707 case BUILT_IN_ISGREATEREQUAL:
3708 return expand_unordered_cmp (function, params, UNLT_EXPR, LT_EXPR);
3710 case BUILT_IN_ISLESS:
3711 return expand_unordered_cmp (function, params, UNGE_EXPR, GE_EXPR);
3713 case BUILT_IN_ISLESSEQUAL:
3714 return expand_unordered_cmp (function, params, UNGT_EXPR, GT_EXPR);
3716 case BUILT_IN_ISLESSGREATER:
3717 return expand_unordered_cmp (function, params, UNEQ_EXPR, EQ_EXPR);
3719 case BUILT_IN_ISUNORDERED:
3720 return expand_unordered_cmp (function, params, UNORDERED_EXPR, NOP_EXPR);
3722 default:
3723 break;
3726 return NULL_TREE;
3729 /* Walk the statement tree, rooted at *tp. Apply FUNC to all the
3730 sub-trees of *TP in a pre-order traversal. FUNC is called with the
3731 DATA and the address of each sub-tree. If FUNC returns a non-NULL
3732 value, the traversal is aborted, and the value returned by FUNC is
3733 returned. If FUNC sets WALK_SUBTREES to zero, then the subtrees of
3734 the node being visited are not walked.
3736 We don't need a without_duplicates variant of this one because the
3737 statement tree is a tree, not a graph. */
3739 tree
3740 walk_stmt_tree (tree *tp, walk_tree_fn func, void *data)
3742 enum tree_code code;
3743 int walk_subtrees;
3744 tree result;
3745 int i, len;
3747 #define WALK_SUBTREE(NODE) \
3748 do \
3750 result = walk_stmt_tree (&(NODE), func, data); \
3751 if (result) \
3752 return result; \
3754 while (0)
3756 /* Skip empty subtrees. */
3757 if (!*tp)
3758 return NULL_TREE;
3760 /* Skip subtrees below non-statement nodes. */
3761 if (!STATEMENT_CODE_P (TREE_CODE (*tp)))
3762 return NULL_TREE;
3764 /* Call the function. */
3765 walk_subtrees = 1;
3766 result = (*func) (tp, &walk_subtrees, data);
3768 /* If we found something, return it. */
3769 if (result)
3770 return result;
3772 /* FUNC may have modified the tree, recheck that we're looking at a
3773 statement node. */
3774 code = TREE_CODE (*tp);
3775 if (!STATEMENT_CODE_P (code))
3776 return NULL_TREE;
3778 /* Visit the subtrees unless FUNC decided that there was nothing
3779 interesting below this point in the tree. */
3780 if (walk_subtrees)
3782 /* Walk over all the sub-trees of this operand. Statement nodes
3783 never contain RTL, and we needn't worry about TARGET_EXPRs. */
3784 len = TREE_CODE_LENGTH (code);
3786 /* Go through the subtrees. We need to do this in forward order so
3787 that the scope of a FOR_EXPR is handled properly. */
3788 for (i = 0; i < len; ++i)
3789 WALK_SUBTREE (TREE_OPERAND (*tp, i));
3792 /* Finally visit the chain. This can be tail-recursion optimized if
3793 we write it this way. */
3794 return walk_stmt_tree (&TREE_CHAIN (*tp), func, data);
3796 #undef WALK_SUBTREE
3799 /* Used to compare case labels. K1 and K2 are actually tree nodes
3800 representing case labels, or NULL_TREE for a `default' label.
3801 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
3802 K2, and 0 if K1 and K2 are equal. */
3805 case_compare (splay_tree_key k1, splay_tree_key k2)
3807 /* Consider a NULL key (such as arises with a `default' label) to be
3808 smaller than anything else. */
3809 if (!k1)
3810 return k2 ? -1 : 0;
3811 else if (!k2)
3812 return k1 ? 1 : 0;
3814 return tree_int_cst_compare ((tree) k1, (tree) k2);
3817 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE. If
3818 LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
3819 actually a `default' label. If only HIGH_VALUE is NULL_TREE, then
3820 case label was declared using the usual C/C++ syntax, rather than
3821 the GNU case range extension. CASES is a tree containing all the
3822 case ranges processed so far; COND is the condition for the
3823 switch-statement itself. Returns the CASE_LABEL created, or
3824 ERROR_MARK_NODE if no CASE_LABEL is created. */
3826 tree
3827 c_add_case_label (splay_tree cases, tree cond, tree low_value,
3828 tree high_value)
3830 tree type;
3831 tree label;
3832 tree case_label;
3833 splay_tree_node node;
3835 /* Create the LABEL_DECL itself. */
3836 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
3837 DECL_CONTEXT (label) = current_function_decl;
3839 /* If there was an error processing the switch condition, bail now
3840 before we get more confused. */
3841 if (!cond || cond == error_mark_node)
3843 /* Add a label anyhow so that the back-end doesn't think that
3844 the beginning of the switch is unreachable. */
3845 if (!cases->root)
3846 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
3847 return error_mark_node;
3850 if ((low_value && TREE_TYPE (low_value)
3851 && POINTER_TYPE_P (TREE_TYPE (low_value)))
3852 || (high_value && TREE_TYPE (high_value)
3853 && POINTER_TYPE_P (TREE_TYPE (high_value))))
3854 error ("pointers are not permitted as case values");
3856 /* Case ranges are a GNU extension. */
3857 if (high_value && pedantic)
3858 pedwarn ("range expressions in switch statements are non-standard");
3860 type = TREE_TYPE (cond);
3861 if (low_value)
3863 low_value = check_case_value (low_value);
3864 low_value = convert_and_check (type, low_value);
3866 if (high_value)
3868 high_value = check_case_value (high_value);
3869 high_value = convert_and_check (type, high_value);
3872 /* If an error has occurred, bail out now. */
3873 if (low_value == error_mark_node || high_value == error_mark_node)
3875 if (!cases->root)
3876 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
3877 return error_mark_node;
3880 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
3881 really a case range, even though it was written that way. Remove
3882 the HIGH_VALUE to simplify later processing. */
3883 if (tree_int_cst_equal (low_value, high_value))
3884 high_value = NULL_TREE;
3885 if (low_value && high_value
3886 && !tree_int_cst_lt (low_value, high_value))
3887 warning ("empty range specified");
3889 /* Look up the LOW_VALUE in the table of case labels we already
3890 have. */
3891 node = splay_tree_lookup (cases, (splay_tree_key) low_value);
3892 /* If there was not an exact match, check for overlapping ranges.
3893 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
3894 that's a `default' label and the only overlap is an exact match. */
3895 if (!node && (low_value || high_value))
3897 splay_tree_node low_bound;
3898 splay_tree_node high_bound;
3900 /* Even though there wasn't an exact match, there might be an
3901 overlap between this case range and another case range.
3902 Since we've (inductively) not allowed any overlapping case
3903 ranges, we simply need to find the greatest low case label
3904 that is smaller that LOW_VALUE, and the smallest low case
3905 label that is greater than LOW_VALUE. If there is an overlap
3906 it will occur in one of these two ranges. */
3907 low_bound = splay_tree_predecessor (cases,
3908 (splay_tree_key) low_value);
3909 high_bound = splay_tree_successor (cases,
3910 (splay_tree_key) low_value);
3912 /* Check to see if the LOW_BOUND overlaps. It is smaller than
3913 the LOW_VALUE, so there is no need to check unless the
3914 LOW_BOUND is in fact itself a case range. */
3915 if (low_bound
3916 && CASE_HIGH ((tree) low_bound->value)
3917 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
3918 low_value) >= 0)
3919 node = low_bound;
3920 /* Check to see if the HIGH_BOUND overlaps. The low end of that
3921 range is bigger than the low end of the current range, so we
3922 are only interested if the current range is a real range, and
3923 not an ordinary case label. */
3924 else if (high_bound
3925 && high_value
3926 && (tree_int_cst_compare ((tree) high_bound->key,
3927 high_value)
3928 <= 0))
3929 node = high_bound;
3931 /* If there was an overlap, issue an error. */
3932 if (node)
3934 tree duplicate = CASE_LABEL_DECL ((tree) node->value);
3936 if (high_value)
3938 error ("duplicate (or overlapping) case value");
3939 error ("%Jthis is the first entry overlapping that value", duplicate);
3941 else if (low_value)
3943 error ("duplicate case value") ;
3944 error ("%Jpreviously used here", duplicate);
3946 else
3948 error ("multiple default labels in one switch");
3949 error ("%Jthis is the first default label", duplicate);
3951 if (!cases->root)
3952 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
3955 /* Add a CASE_LABEL to the statement-tree. */
3956 case_label = add_stmt (build_case_label (low_value, high_value, label));
3957 /* Register this case label in the splay tree. */
3958 splay_tree_insert (cases,
3959 (splay_tree_key) low_value,
3960 (splay_tree_value) case_label);
3962 return case_label;
3965 /* Finish an expression taking the address of LABEL (an
3966 IDENTIFIER_NODE). Returns an expression for the address. */
3968 tree
3969 finish_label_address_expr (tree label)
3971 tree result;
3973 if (pedantic)
3974 pedwarn ("taking the address of a label is non-standard");
3976 if (label == error_mark_node)
3977 return error_mark_node;
3979 label = lookup_label (label);
3980 if (label == NULL_TREE)
3981 result = null_pointer_node;
3982 else
3984 TREE_USED (label) = 1;
3985 result = build1 (ADDR_EXPR, ptr_type_node, label);
3986 TREE_CONSTANT (result) = 1;
3987 /* The current function in not necessarily uninlinable.
3988 Computed gotos are incompatible with inlining, but the value
3989 here could be used only in a diagnostic, for example. */
3992 return result;
3995 /* Hook used by expand_expr to expand language-specific tree codes. */
3998 c_expand_expr (tree exp, rtx target, enum machine_mode tmode,
3999 int modifier /* Actually enum_modifier. */,
4000 rtx *alt_rtl)
4002 switch (TREE_CODE (exp))
4004 case STMT_EXPR:
4006 tree rtl_expr;
4007 rtx result;
4008 bool preserve_result = false;
4010 if (STMT_EXPR_WARN_UNUSED_RESULT (exp) && target == const0_rtx)
4012 tree stmt = STMT_EXPR_STMT (exp);
4013 tree scope;
4015 for (scope = COMPOUND_BODY (stmt);
4016 scope && TREE_CODE (scope) != SCOPE_STMT;
4017 scope = TREE_CHAIN (scope));
4019 if (scope && SCOPE_STMT_BLOCK (scope))
4020 warning ("%Hignoring return value of `%D', "
4021 "declared with attribute warn_unused_result",
4022 &expr_wfl_stack->location,
4023 BLOCK_ABSTRACT_ORIGIN (SCOPE_STMT_BLOCK (scope)));
4024 else
4025 warning ("%Hignoring return value of function "
4026 "declared with attribute warn_unused_result",
4027 &expr_wfl_stack->location);
4030 /* Since expand_expr_stmt calls free_temp_slots after every
4031 expression statement, we must call push_temp_slots here.
4032 Otherwise, any temporaries in use now would be considered
4033 out-of-scope after the first EXPR_STMT from within the
4034 STMT_EXPR. */
4035 push_temp_slots ();
4036 rtl_expr = expand_start_stmt_expr (!STMT_EXPR_NO_SCOPE (exp));
4038 /* If we want the result of this expression, find the last
4039 EXPR_STMT in the COMPOUND_STMT and mark it as addressable. */
4040 if (target != const0_rtx
4041 && TREE_CODE (STMT_EXPR_STMT (exp)) == COMPOUND_STMT
4042 && TREE_CODE (COMPOUND_BODY (STMT_EXPR_STMT (exp))) == SCOPE_STMT)
4044 tree expr = COMPOUND_BODY (STMT_EXPR_STMT (exp));
4045 tree last = TREE_CHAIN (expr);
4047 while (TREE_CHAIN (last))
4049 expr = last;
4050 last = TREE_CHAIN (last);
4053 if (TREE_CODE (last) == SCOPE_STMT
4054 && TREE_CODE (expr) == EXPR_STMT)
4056 /* Otherwise, note that we want the value from the last
4057 expression. */
4058 TREE_ADDRESSABLE (expr) = 1;
4059 preserve_result = true;
4063 expand_stmt (STMT_EXPR_STMT (exp));
4064 expand_end_stmt_expr (rtl_expr);
4066 result = expand_expr_real (rtl_expr, target, tmode, modifier, alt_rtl);
4067 if (preserve_result && GET_CODE (result) == MEM)
4069 if (GET_MODE (result) != BLKmode)
4070 result = copy_to_reg (result);
4071 else
4072 preserve_temp_slots (result);
4075 /* If the statment-expression does not have a scope, then the
4076 new temporaries we created within it must live beyond the
4077 statement-expression. */
4078 if (STMT_EXPR_NO_SCOPE (exp))
4079 preserve_temp_slots (NULL_RTX);
4081 pop_temp_slots ();
4082 return result;
4084 break;
4086 case COMPOUND_LITERAL_EXPR:
4088 /* Initialize the anonymous variable declared in the compound
4089 literal, then return the variable. */
4090 tree decl = COMPOUND_LITERAL_EXPR_DECL (exp);
4091 emit_local_var (decl);
4092 return expand_expr_real (decl, target, tmode, modifier, alt_rtl);
4095 default:
4096 abort ();
4099 abort ();
4100 return NULL;
4103 /* Hook used by safe_from_p to handle language-specific tree codes. */
4106 c_safe_from_p (rtx target, tree exp)
4108 /* We can see statements here when processing the body of a
4109 statement-expression. For a declaration statement declaring a
4110 variable, look at the variable's initializer. */
4111 if (TREE_CODE (exp) == DECL_STMT)
4113 tree decl = DECL_STMT_DECL (exp);
4115 if (TREE_CODE (decl) == VAR_DECL
4116 && DECL_INITIAL (decl)
4117 && !safe_from_p (target, DECL_INITIAL (decl), /*top_p=*/0))
4118 return 0;
4121 /* For any statement, we must follow the statement-chain. */
4122 if (STATEMENT_CODE_P (TREE_CODE (exp)) && TREE_CHAIN (exp))
4123 return safe_from_p (target, TREE_CHAIN (exp), /*top_p=*/0);
4125 /* Assume everything else is safe. */
4126 return 1;
4129 /* Hook used by unsafe_for_reeval to handle language-specific tree codes. */
4132 c_common_unsafe_for_reeval (tree exp)
4134 /* Statement expressions may not be reevaluated, likewise compound
4135 literals. */
4136 if (TREE_CODE (exp) == STMT_EXPR
4137 || TREE_CODE (exp) == COMPOUND_LITERAL_EXPR)
4138 return 2;
4140 /* Walk all other expressions. */
4141 return -1;
4144 /* Hook used by staticp to handle language-specific tree codes. */
4147 c_staticp (tree exp)
4149 if (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
4150 && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp)))
4151 return 1;
4152 return 0;
4156 /* Given a boolean expression ARG, return a tree representing an increment
4157 or decrement (as indicated by CODE) of ARG. The front end must check for
4158 invalid cases (e.g., decrement in C++). */
4159 tree
4160 boolean_increment (enum tree_code code, tree arg)
4162 tree val;
4163 tree true_res = boolean_true_node;
4165 arg = stabilize_reference (arg);
4166 switch (code)
4168 case PREINCREMENT_EXPR:
4169 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4170 break;
4171 case POSTINCREMENT_EXPR:
4172 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4173 arg = save_expr (arg);
4174 val = build (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4175 val = build (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4176 break;
4177 case PREDECREMENT_EXPR:
4178 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, invert_truthvalue (arg));
4179 break;
4180 case POSTDECREMENT_EXPR:
4181 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, invert_truthvalue (arg));
4182 arg = save_expr (arg);
4183 val = build (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4184 val = build (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4185 break;
4186 default:
4187 abort ();
4189 TREE_SIDE_EFFECTS (val) = 1;
4190 return val;
4193 /* Built-in macros for stddef.h, that require macros defined in this
4194 file. */
4195 void
4196 c_stddef_cpp_builtins(void)
4198 builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
4199 builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
4200 builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
4201 builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
4204 static void
4205 c_init_attributes (void)
4207 /* Fill in the built_in_attributes array. */
4208 #define DEF_ATTR_NULL_TREE(ENUM) \
4209 built_in_attributes[(int) ENUM] = NULL_TREE;
4210 #define DEF_ATTR_INT(ENUM, VALUE) \
4211 built_in_attributes[(int) ENUM] = build_int_2 (VALUE, VALUE < 0 ? -1 : 0);
4212 #define DEF_ATTR_IDENT(ENUM, STRING) \
4213 built_in_attributes[(int) ENUM] = get_identifier (STRING);
4214 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
4215 built_in_attributes[(int) ENUM] \
4216 = tree_cons (built_in_attributes[(int) PURPOSE], \
4217 built_in_attributes[(int) VALUE], \
4218 built_in_attributes[(int) CHAIN]);
4219 #include "builtin-attrs.def"
4220 #undef DEF_ATTR_NULL_TREE
4221 #undef DEF_ATTR_INT
4222 #undef DEF_ATTR_IDENT
4223 #undef DEF_ATTR_TREE_LIST
4226 /* Attribute handlers common to C front ends. */
4228 /* Handle a "packed" attribute; arguments as in
4229 struct attribute_spec.handler. */
4231 static tree
4232 handle_packed_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
4233 int flags, bool *no_add_attrs)
4235 if (TYPE_P (*node))
4237 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4238 *node = build_type_copy (*node);
4239 TYPE_PACKED (*node) = 1;
4240 if (TYPE_MAIN_VARIANT (*node) == *node)
4242 /* If it is the main variant, then pack the other variants
4243 too. This happens in,
4245 struct Foo {
4246 struct Foo const *ptr; // creates a variant w/o packed flag
4247 } __ attribute__((packed)); // packs it now.
4249 tree probe;
4251 for (probe = *node; probe; probe = TYPE_NEXT_VARIANT (probe))
4252 TYPE_PACKED (probe) = 1;
4256 else if (TREE_CODE (*node) == FIELD_DECL)
4257 DECL_PACKED (*node) = 1;
4258 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
4259 used for DECL_REGISTER. It wouldn't mean anything anyway.
4260 We can't set DECL_PACKED on the type of a TYPE_DECL, because
4261 that changes what the typedef is typing. */
4262 else
4264 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4265 *no_add_attrs = true;
4268 return NULL_TREE;
4271 /* Handle a "nocommon" attribute; arguments as in
4272 struct attribute_spec.handler. */
4274 static tree
4275 handle_nocommon_attribute (tree *node, tree name,
4276 tree args ATTRIBUTE_UNUSED,
4277 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4279 if (TREE_CODE (*node) == VAR_DECL)
4280 DECL_COMMON (*node) = 0;
4281 else
4283 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4284 *no_add_attrs = true;
4287 return NULL_TREE;
4290 /* Handle a "common" attribute; arguments as in
4291 struct attribute_spec.handler. */
4293 static tree
4294 handle_common_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
4295 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4297 if (TREE_CODE (*node) == VAR_DECL)
4298 DECL_COMMON (*node) = 1;
4299 else
4301 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4302 *no_add_attrs = true;
4305 return NULL_TREE;
4308 /* Handle a "noreturn" attribute; arguments as in
4309 struct attribute_spec.handler. */
4311 static tree
4312 handle_noreturn_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
4313 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4315 tree type = TREE_TYPE (*node);
4317 /* See FIXME comment in c_common_attribute_table. */
4318 if (TREE_CODE (*node) == FUNCTION_DECL)
4319 TREE_THIS_VOLATILE (*node) = 1;
4320 else if (TREE_CODE (type) == POINTER_TYPE
4321 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4322 TREE_TYPE (*node)
4323 = build_pointer_type
4324 (build_type_variant (TREE_TYPE (type),
4325 TYPE_READONLY (TREE_TYPE (type)), 1));
4326 else
4328 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4329 *no_add_attrs = true;
4332 return NULL_TREE;
4335 /* Handle a "noinline" attribute; arguments as in
4336 struct attribute_spec.handler. */
4338 static tree
4339 handle_noinline_attribute (tree *node, tree name,
4340 tree args ATTRIBUTE_UNUSED,
4341 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4343 if (TREE_CODE (*node) == FUNCTION_DECL)
4344 DECL_UNINLINABLE (*node) = 1;
4345 else
4347 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4348 *no_add_attrs = true;
4351 return NULL_TREE;
4354 /* Handle a "always_inline" attribute; arguments as in
4355 struct attribute_spec.handler. */
4357 static tree
4358 handle_always_inline_attribute (tree *node, tree name,
4359 tree args ATTRIBUTE_UNUSED,
4360 int flags ATTRIBUTE_UNUSED,
4361 bool *no_add_attrs)
4363 if (TREE_CODE (*node) == FUNCTION_DECL)
4365 /* Do nothing else, just set the attribute. We'll get at
4366 it later with lookup_attribute. */
4368 else
4370 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4371 *no_add_attrs = true;
4374 return NULL_TREE;
4377 /* Handle a "used" attribute; arguments as in
4378 struct attribute_spec.handler. */
4380 static tree
4381 handle_used_attribute (tree *pnode, tree name, tree args ATTRIBUTE_UNUSED,
4382 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4384 tree node = *pnode;
4386 if (TREE_CODE (node) == FUNCTION_DECL
4387 || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
4389 TREE_USED (node) = 1;
4391 else
4393 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4394 *no_add_attrs = true;
4397 return NULL_TREE;
4400 /* Handle a "unused" attribute; arguments as in
4401 struct attribute_spec.handler. */
4403 static tree
4404 handle_unused_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
4405 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4407 if (DECL_P (*node))
4409 tree decl = *node;
4411 if (TREE_CODE (decl) == PARM_DECL
4412 || TREE_CODE (decl) == VAR_DECL
4413 || TREE_CODE (decl) == FUNCTION_DECL
4414 || TREE_CODE (decl) == LABEL_DECL
4415 || TREE_CODE (decl) == TYPE_DECL)
4416 TREE_USED (decl) = 1;
4417 else
4419 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4420 *no_add_attrs = true;
4423 else
4425 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4426 *node = build_type_copy (*node);
4427 TREE_USED (*node) = 1;
4430 return NULL_TREE;
4433 /* Handle a "const" attribute; arguments as in
4434 struct attribute_spec.handler. */
4436 static tree
4437 handle_const_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
4438 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4440 tree type = TREE_TYPE (*node);
4442 /* See FIXME comment on noreturn in c_common_attribute_table. */
4443 if (TREE_CODE (*node) == FUNCTION_DECL)
4444 TREE_READONLY (*node) = 1;
4445 else if (TREE_CODE (type) == POINTER_TYPE
4446 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4447 TREE_TYPE (*node)
4448 = build_pointer_type
4449 (build_type_variant (TREE_TYPE (type), 1,
4450 TREE_THIS_VOLATILE (TREE_TYPE (type))));
4451 else
4453 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4454 *no_add_attrs = true;
4457 return NULL_TREE;
4460 /* Handle a "transparent_union" attribute; arguments as in
4461 struct attribute_spec.handler. */
4463 static tree
4464 handle_transparent_union_attribute (tree *node, tree name,
4465 tree args ATTRIBUTE_UNUSED, int flags,
4466 bool *no_add_attrs)
4468 tree decl = NULL_TREE;
4469 tree *type = NULL;
4470 int is_type = 0;
4472 if (DECL_P (*node))
4474 decl = *node;
4475 type = &TREE_TYPE (decl);
4476 is_type = TREE_CODE (*node) == TYPE_DECL;
4478 else if (TYPE_P (*node))
4479 type = node, is_type = 1;
4481 if (is_type
4482 && TREE_CODE (*type) == UNION_TYPE
4483 && (decl == 0
4484 || (TYPE_FIELDS (*type) != 0
4485 && TYPE_MODE (*type) == DECL_MODE (TYPE_FIELDS (*type)))))
4487 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4488 *type = build_type_copy (*type);
4489 TYPE_TRANSPARENT_UNION (*type) = 1;
4491 else if (decl != 0 && TREE_CODE (decl) == PARM_DECL
4492 && TREE_CODE (*type) == UNION_TYPE
4493 && TYPE_MODE (*type) == DECL_MODE (TYPE_FIELDS (*type)))
4494 DECL_TRANSPARENT_UNION (decl) = 1;
4495 else
4497 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4498 *no_add_attrs = true;
4501 return NULL_TREE;
4504 /* Handle a "constructor" attribute; arguments as in
4505 struct attribute_spec.handler. */
4507 static tree
4508 handle_constructor_attribute (tree *node, tree name,
4509 tree args ATTRIBUTE_UNUSED,
4510 int flags ATTRIBUTE_UNUSED,
4511 bool *no_add_attrs)
4513 tree decl = *node;
4514 tree type = TREE_TYPE (decl);
4516 if (TREE_CODE (decl) == FUNCTION_DECL
4517 && TREE_CODE (type) == FUNCTION_TYPE
4518 && decl_function_context (decl) == 0)
4520 DECL_STATIC_CONSTRUCTOR (decl) = 1;
4521 TREE_USED (decl) = 1;
4523 else
4525 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4526 *no_add_attrs = true;
4529 return NULL_TREE;
4532 /* Handle a "destructor" attribute; arguments as in
4533 struct attribute_spec.handler. */
4535 static tree
4536 handle_destructor_attribute (tree *node, tree name,
4537 tree args ATTRIBUTE_UNUSED,
4538 int flags ATTRIBUTE_UNUSED,
4539 bool *no_add_attrs)
4541 tree decl = *node;
4542 tree type = TREE_TYPE (decl);
4544 if (TREE_CODE (decl) == FUNCTION_DECL
4545 && TREE_CODE (type) == FUNCTION_TYPE
4546 && decl_function_context (decl) == 0)
4548 DECL_STATIC_DESTRUCTOR (decl) = 1;
4549 TREE_USED (decl) = 1;
4551 else
4553 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4554 *no_add_attrs = true;
4557 return NULL_TREE;
4560 /* Handle a "mode" attribute; arguments as in
4561 struct attribute_spec.handler. */
4563 static tree
4564 handle_mode_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
4565 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4567 tree type = *node;
4569 *no_add_attrs = true;
4571 if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
4572 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4573 else
4575 int j;
4576 const char *p = IDENTIFIER_POINTER (TREE_VALUE (args));
4577 int len = strlen (p);
4578 enum machine_mode mode = VOIDmode;
4579 tree typefm;
4580 tree ptr_type;
4582 if (len > 4 && p[0] == '_' && p[1] == '_'
4583 && p[len - 1] == '_' && p[len - 2] == '_')
4585 char *newp = alloca (len - 1);
4587 strcpy (newp, &p[2]);
4588 newp[len - 4] = '\0';
4589 p = newp;
4592 /* Change this type to have a type with the specified mode.
4593 First check for the special modes. */
4594 if (! strcmp (p, "byte"))
4595 mode = byte_mode;
4596 else if (!strcmp (p, "word"))
4597 mode = word_mode;
4598 else if (! strcmp (p, "pointer"))
4599 mode = ptr_mode;
4600 else
4601 for (j = 0; j < NUM_MACHINE_MODES; j++)
4602 if (!strcmp (p, GET_MODE_NAME (j)))
4603 mode = (enum machine_mode) j;
4605 if (mode == VOIDmode)
4607 error ("unknown machine mode `%s'", p);
4608 return NULL_TREE;
4611 if (VECTOR_MODE_P (mode))
4613 warning ("specifying vector types with __attribute__ ((mode)) "
4614 "is deprecated");
4615 warning ("use __attribute__ ((vector_size)) instead");
4618 typefm = lang_hooks.types.type_for_mode (mode, TYPE_UNSIGNED (type));
4619 if (typefm == NULL_TREE)
4620 error ("no data type for mode `%s'", p);
4622 else if ((TREE_CODE (type) == POINTER_TYPE
4623 || TREE_CODE (type) == REFERENCE_TYPE)
4624 && !targetm.valid_pointer_mode (mode))
4625 error ("invalid pointer mode `%s'", p);
4626 else
4628 /* If this is a vector, make sure we either have hardware
4629 support, or we can emulate it. */
4630 if (VECTOR_MODE_P (mode) && !vector_mode_valid_p (mode))
4632 error ("unable to emulate '%s'", GET_MODE_NAME (mode));
4633 return NULL_TREE;
4636 if (TREE_CODE (type) == POINTER_TYPE)
4638 ptr_type = build_pointer_type_for_mode (TREE_TYPE (type),
4639 mode, false);
4640 *node = ptr_type;
4642 else if (TREE_CODE (type) == REFERENCE_TYPE)
4644 ptr_type = build_reference_type_for_mode (TREE_TYPE (type),
4645 mode, false);
4646 *node = ptr_type;
4648 else
4649 *node = typefm;
4650 /* No need to layout the type here. The caller should do this. */
4654 return NULL_TREE;
4657 /* Handle a "section" attribute; arguments as in
4658 struct attribute_spec.handler. */
4660 static tree
4661 handle_section_attribute (tree *node, tree name ATTRIBUTE_UNUSED, tree args,
4662 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4664 tree decl = *node;
4666 if (targetm.have_named_sections)
4668 if ((TREE_CODE (decl) == FUNCTION_DECL
4669 || TREE_CODE (decl) == VAR_DECL)
4670 && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
4672 if (TREE_CODE (decl) == VAR_DECL
4673 && current_function_decl != NULL_TREE
4674 && ! TREE_STATIC (decl))
4676 error ("%Jsection attribute cannot be specified for "
4677 "local variables", decl);
4678 *no_add_attrs = true;
4681 /* The decl may have already been given a section attribute
4682 from a previous declaration. Ensure they match. */
4683 else if (DECL_SECTION_NAME (decl) != NULL_TREE
4684 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
4685 TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
4687 error ("%Jsection of '%D' conflicts with previous declaration",
4688 *node, *node);
4689 *no_add_attrs = true;
4691 else
4692 DECL_SECTION_NAME (decl) = TREE_VALUE (args);
4694 else
4696 error ("%Jsection attribute not allowed for '%D'", *node, *node);
4697 *no_add_attrs = true;
4700 else
4702 error ("%Jsection attributes are not supported for this target", *node);
4703 *no_add_attrs = true;
4706 return NULL_TREE;
4709 /* Handle a "aligned" attribute; arguments as in
4710 struct attribute_spec.handler. */
4712 static tree
4713 handle_aligned_attribute (tree *node, tree name ATTRIBUTE_UNUSED, tree args,
4714 int flags, bool *no_add_attrs)
4716 tree decl = NULL_TREE;
4717 tree *type = NULL;
4718 int is_type = 0;
4719 tree align_expr = (args ? TREE_VALUE (args)
4720 : size_int (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
4721 int i;
4723 if (DECL_P (*node))
4725 decl = *node;
4726 type = &TREE_TYPE (decl);
4727 is_type = TREE_CODE (*node) == TYPE_DECL;
4729 else if (TYPE_P (*node))
4730 type = node, is_type = 1;
4732 /* Strip any NOPs of any kind. */
4733 while (TREE_CODE (align_expr) == NOP_EXPR
4734 || TREE_CODE (align_expr) == CONVERT_EXPR
4735 || TREE_CODE (align_expr) == NON_LVALUE_EXPR)
4736 align_expr = TREE_OPERAND (align_expr, 0);
4738 if (TREE_CODE (align_expr) != INTEGER_CST)
4740 error ("requested alignment is not a constant");
4741 *no_add_attrs = true;
4743 else if ((i = tree_log2 (align_expr)) == -1)
4745 error ("requested alignment is not a power of 2");
4746 *no_add_attrs = true;
4748 else if (i > HOST_BITS_PER_INT - 2)
4750 error ("requested alignment is too large");
4751 *no_add_attrs = true;
4753 else if (is_type)
4755 /* If we have a TYPE_DECL, then copy the type, so that we
4756 don't accidentally modify a builtin type. See pushdecl. */
4757 if (decl && TREE_TYPE (decl) != error_mark_node
4758 && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
4760 tree tt = TREE_TYPE (decl);
4761 *type = build_type_copy (*type);
4762 DECL_ORIGINAL_TYPE (decl) = tt;
4763 TYPE_NAME (*type) = decl;
4764 TREE_USED (*type) = TREE_USED (decl);
4765 TREE_TYPE (decl) = *type;
4767 else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4768 *type = build_type_copy (*type);
4770 TYPE_ALIGN (*type) = (1 << i) * BITS_PER_UNIT;
4771 TYPE_USER_ALIGN (*type) = 1;
4773 else if (TREE_CODE (decl) != VAR_DECL
4774 && TREE_CODE (decl) != FIELD_DECL)
4776 error ("%Jalignment may not be specified for '%D'", decl, decl);
4777 *no_add_attrs = true;
4779 else
4781 DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT;
4782 DECL_USER_ALIGN (decl) = 1;
4785 return NULL_TREE;
4788 /* Handle a "weak" attribute; arguments as in
4789 struct attribute_spec.handler. */
4791 static tree
4792 handle_weak_attribute (tree *node, tree name ATTRIBUTE_UNUSED,
4793 tree args ATTRIBUTE_UNUSED,
4794 int flags ATTRIBUTE_UNUSED,
4795 bool *no_add_attrs ATTRIBUTE_UNUSED)
4797 declare_weak (*node);
4799 return NULL_TREE;
4802 /* Handle an "alias" attribute; arguments as in
4803 struct attribute_spec.handler. */
4805 static tree
4806 handle_alias_attribute (tree *node, tree name, tree args,
4807 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4809 tree decl = *node;
4811 if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
4812 || (TREE_CODE (decl) != FUNCTION_DECL && ! DECL_EXTERNAL (decl)))
4814 error ("%J'%D' defined both normally and as an alias", decl, decl);
4815 *no_add_attrs = true;
4818 /* Note that the very first time we process a nested declaration,
4819 decl_function_context will not be set. Indeed, *would* never
4820 be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
4821 we do below. After such frobbery, pushdecl would set the context.
4822 In any case, this is never what we want. */
4823 else if (decl_function_context (decl) == 0 && current_function_decl == NULL)
4825 tree id;
4827 id = TREE_VALUE (args);
4828 if (TREE_CODE (id) != STRING_CST)
4830 error ("alias arg not a string");
4831 *no_add_attrs = true;
4832 return NULL_TREE;
4834 id = get_identifier (TREE_STRING_POINTER (id));
4835 /* This counts as a use of the object pointed to. */
4836 TREE_USED (id) = 1;
4838 if (TREE_CODE (decl) == FUNCTION_DECL)
4839 DECL_INITIAL (decl) = error_mark_node;
4840 else
4841 DECL_EXTERNAL (decl) = 0;
4843 else
4845 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4846 *no_add_attrs = true;
4849 return NULL_TREE;
4852 /* Handle an "visibility" attribute; arguments as in
4853 struct attribute_spec.handler. */
4855 static tree
4856 handle_visibility_attribute (tree *node, tree name, tree args,
4857 int flags ATTRIBUTE_UNUSED,
4858 bool *no_add_attrs)
4860 tree decl = *node;
4861 tree id = TREE_VALUE (args);
4863 *no_add_attrs = true;
4865 if (decl_function_context (decl) != 0 || ! TREE_PUBLIC (decl))
4867 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4868 return NULL_TREE;
4871 if (TREE_CODE (id) != STRING_CST)
4873 error ("visibility arg not a string");
4874 return NULL_TREE;
4877 if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
4878 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4879 else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
4880 DECL_VISIBILITY (decl) = VISIBILITY_INTERNAL;
4881 else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
4882 DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
4883 else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
4884 DECL_VISIBILITY (decl) = VISIBILITY_PROTECTED;
4885 else
4886 error ("visibility arg must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
4888 return NULL_TREE;
4891 /* Handle an "tls_model" attribute; arguments as in
4892 struct attribute_spec.handler. */
4894 static tree
4895 handle_tls_model_attribute (tree *node, tree name, tree args,
4896 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4898 tree decl = *node;
4900 if (! DECL_THREAD_LOCAL (decl))
4902 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4903 *no_add_attrs = true;
4905 else
4907 tree id;
4909 id = TREE_VALUE (args);
4910 if (TREE_CODE (id) != STRING_CST)
4912 error ("tls_model arg not a string");
4913 *no_add_attrs = true;
4914 return NULL_TREE;
4916 if (strcmp (TREE_STRING_POINTER (id), "local-exec")
4917 && strcmp (TREE_STRING_POINTER (id), "initial-exec")
4918 && strcmp (TREE_STRING_POINTER (id), "local-dynamic")
4919 && strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
4921 error ("tls_model arg must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
4922 *no_add_attrs = true;
4923 return NULL_TREE;
4927 return NULL_TREE;
4930 /* Handle a "no_instrument_function" attribute; arguments as in
4931 struct attribute_spec.handler. */
4933 static tree
4934 handle_no_instrument_function_attribute (tree *node, tree name,
4935 tree args ATTRIBUTE_UNUSED,
4936 int flags ATTRIBUTE_UNUSED,
4937 bool *no_add_attrs)
4939 tree decl = *node;
4941 if (TREE_CODE (decl) != FUNCTION_DECL)
4943 error ("%J'%E' attribute applies only to functions", decl, name);
4944 *no_add_attrs = true;
4946 else if (DECL_INITIAL (decl))
4948 error ("%Jcan't set '%E' attribute after definition", decl, name);
4949 *no_add_attrs = true;
4951 else
4952 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
4954 return NULL_TREE;
4957 /* Handle a "malloc" attribute; arguments as in
4958 struct attribute_spec.handler. */
4960 static tree
4961 handle_malloc_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
4962 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4964 if (TREE_CODE (*node) == FUNCTION_DECL)
4965 DECL_IS_MALLOC (*node) = 1;
4966 /* ??? TODO: Support types. */
4967 else
4969 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4970 *no_add_attrs = true;
4973 return NULL_TREE;
4976 /* Handle a "no_limit_stack" attribute; arguments as in
4977 struct attribute_spec.handler. */
4979 static tree
4980 handle_no_limit_stack_attribute (tree *node, tree name,
4981 tree args ATTRIBUTE_UNUSED,
4982 int flags ATTRIBUTE_UNUSED,
4983 bool *no_add_attrs)
4985 tree decl = *node;
4987 if (TREE_CODE (decl) != FUNCTION_DECL)
4989 error ("%J'%E' attribute applies only to functions", decl, name);
4990 *no_add_attrs = true;
4992 else if (DECL_INITIAL (decl))
4994 error ("%Jcan't set '%E' attribute after definition", decl, name);
4995 *no_add_attrs = true;
4997 else
4998 DECL_NO_LIMIT_STACK (decl) = 1;
5000 return NULL_TREE;
5003 /* Handle a "pure" attribute; arguments as in
5004 struct attribute_spec.handler. */
5006 static tree
5007 handle_pure_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
5008 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
5010 if (TREE_CODE (*node) == FUNCTION_DECL)
5011 DECL_IS_PURE (*node) = 1;
5012 /* ??? TODO: Support types. */
5013 else
5015 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5016 *no_add_attrs = true;
5019 return NULL_TREE;
5022 /* Handle a "deprecated" attribute; arguments as in
5023 struct attribute_spec.handler. */
5025 static tree
5026 handle_deprecated_attribute (tree *node, tree name,
5027 tree args ATTRIBUTE_UNUSED, int flags,
5028 bool *no_add_attrs)
5030 tree type = NULL_TREE;
5031 int warn = 0;
5032 const char *what = NULL;
5034 if (DECL_P (*node))
5036 tree decl = *node;
5037 type = TREE_TYPE (decl);
5039 if (TREE_CODE (decl) == TYPE_DECL
5040 || TREE_CODE (decl) == PARM_DECL
5041 || TREE_CODE (decl) == VAR_DECL
5042 || TREE_CODE (decl) == FUNCTION_DECL
5043 || TREE_CODE (decl) == FIELD_DECL)
5044 TREE_DEPRECATED (decl) = 1;
5045 else
5046 warn = 1;
5048 else if (TYPE_P (*node))
5050 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5051 *node = build_type_copy (*node);
5052 TREE_DEPRECATED (*node) = 1;
5053 type = *node;
5055 else
5056 warn = 1;
5058 if (warn)
5060 *no_add_attrs = true;
5061 if (type && TYPE_NAME (type))
5063 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
5064 what = IDENTIFIER_POINTER (TYPE_NAME (*node));
5065 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
5066 && DECL_NAME (TYPE_NAME (type)))
5067 what = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
5069 if (what)
5070 warning ("`%s' attribute ignored for `%s'",
5071 IDENTIFIER_POINTER (name), what);
5072 else
5073 warning ("`%s' attribute ignored",
5074 IDENTIFIER_POINTER (name));
5077 return NULL_TREE;
5080 /* Handle a "vector_size" attribute; arguments as in
5081 struct attribute_spec.handler. */
5083 static tree
5084 handle_vector_size_attribute (tree *node, tree name, tree args,
5085 int flags ATTRIBUTE_UNUSED,
5086 bool *no_add_attrs)
5088 unsigned HOST_WIDE_INT vecsize, nunits;
5089 enum machine_mode mode, orig_mode, new_mode;
5090 tree type = *node, new_type, size;
5092 *no_add_attrs = true;
5094 /* Stripping NON_LVALUE_EXPR allows declarations such as
5095 typedef short v4si __attribute__((vector_size (4 * sizeof(short)))). */
5096 size = TREE_VALUE (args);
5097 if (TREE_CODE (size) == NON_LVALUE_EXPR)
5098 size = TREE_OPERAND (size, 0);
5100 if (! host_integerp (size, 1))
5102 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5103 return NULL_TREE;
5106 /* Get the vector size (in bytes). */
5107 vecsize = tree_low_cst (size, 1);
5109 /* We need to provide for vector pointers, vector arrays, and
5110 functions returning vectors. For example:
5112 __attribute__((vector_size(16))) short *foo;
5114 In this case, the mode is SI, but the type being modified is
5115 HI, so we need to look further. */
5117 while (POINTER_TYPE_P (type)
5118 || TREE_CODE (type) == FUNCTION_TYPE
5119 || TREE_CODE (type) == METHOD_TYPE
5120 || TREE_CODE (type) == ARRAY_TYPE)
5121 type = TREE_TYPE (type);
5123 /* Get the mode of the type being modified. */
5124 orig_mode = TYPE_MODE (type);
5126 if (TREE_CODE (type) == RECORD_TYPE
5127 || (GET_MODE_CLASS (orig_mode) != MODE_FLOAT
5128 && GET_MODE_CLASS (orig_mode) != MODE_INT)
5129 || ! host_integerp (TYPE_SIZE_UNIT (type), 1))
5131 error ("invalid vector type for attribute `%s'",
5132 IDENTIFIER_POINTER (name));
5133 return NULL_TREE;
5136 /* Calculate how many units fit in the vector. */
5137 nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
5139 /* Find a suitably sized vector. */
5140 new_mode = VOIDmode;
5141 for (mode = GET_CLASS_NARROWEST_MODE (GET_MODE_CLASS (orig_mode) == MODE_INT
5142 ? MODE_VECTOR_INT
5143 : MODE_VECTOR_FLOAT);
5144 mode != VOIDmode;
5145 mode = GET_MODE_WIDER_MODE (mode))
5146 if (vecsize == GET_MODE_SIZE (mode)
5147 && nunits == (unsigned HOST_WIDE_INT) GET_MODE_NUNITS (mode))
5149 new_mode = mode;
5150 break;
5153 if (new_mode == VOIDmode)
5155 error ("no vector mode with the size and type specified could be found");
5156 return NULL_TREE;
5159 new_type = build_vector_type_for_mode (type, new_mode);
5161 /* Build back pointers if needed. */
5162 *node = reconstruct_complex_type (*node, new_type);
5164 return NULL_TREE;
5167 /* Handle the "nonnull" attribute. */
5168 static tree
5169 handle_nonnull_attribute (tree *node, tree name ATTRIBUTE_UNUSED,
5170 tree args, int flags ATTRIBUTE_UNUSED,
5171 bool *no_add_attrs)
5173 tree type = *node;
5174 unsigned HOST_WIDE_INT attr_arg_num;
5176 /* If no arguments are specified, all pointer arguments should be
5177 non-null. Verify a full prototype is given so that the arguments
5178 will have the correct types when we actually check them later. */
5179 if (! args)
5181 if (! TYPE_ARG_TYPES (type))
5183 error ("nonnull attribute without arguments on a non-prototype");
5184 *no_add_attrs = true;
5186 return NULL_TREE;
5189 /* Argument list specified. Verify that each argument number references
5190 a pointer argument. */
5191 for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
5193 tree argument;
5194 unsigned HOST_WIDE_INT arg_num, ck_num;
5196 if (! get_nonnull_operand (TREE_VALUE (args), &arg_num))
5198 error ("nonnull argument has invalid operand number (arg %lu)",
5199 (unsigned long) attr_arg_num);
5200 *no_add_attrs = true;
5201 return NULL_TREE;
5204 argument = TYPE_ARG_TYPES (type);
5205 if (argument)
5207 for (ck_num = 1; ; ck_num++)
5209 if (! argument || ck_num == arg_num)
5210 break;
5211 argument = TREE_CHAIN (argument);
5214 if (! argument
5215 || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
5217 error ("nonnull argument with out-of-range operand number (arg %lu, operand %lu)",
5218 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5219 *no_add_attrs = true;
5220 return NULL_TREE;
5223 if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
5225 error ("nonnull argument references non-pointer operand (arg %lu, operand %lu)",
5226 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5227 *no_add_attrs = true;
5228 return NULL_TREE;
5233 return NULL_TREE;
5236 /* Check the argument list of a function call for null in argument slots
5237 that are marked as requiring a non-null pointer argument. */
5239 static void
5240 check_function_nonnull (tree attrs, tree params)
5242 tree a, args, param;
5243 int param_num;
5245 for (a = attrs; a; a = TREE_CHAIN (a))
5247 if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
5249 args = TREE_VALUE (a);
5251 /* Walk the argument list. If we encounter an argument number we
5252 should check for non-null, do it. If the attribute has no args,
5253 then every pointer argument is checked (in which case the check
5254 for pointer type is done in check_nonnull_arg). */
5255 for (param = params, param_num = 1; ;
5256 param_num++, param = TREE_CHAIN (param))
5258 if (! param)
5259 break;
5260 if (! args || nonnull_check_p (args, param_num))
5261 check_function_arguments_recurse (check_nonnull_arg, NULL,
5262 TREE_VALUE (param),
5263 param_num);
5269 /* Helper for check_function_nonnull; given a list of operands which
5270 must be non-null in ARGS, determine if operand PARAM_NUM should be
5271 checked. */
5273 static bool
5274 nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
5276 unsigned HOST_WIDE_INT arg_num;
5278 for (; args; args = TREE_CHAIN (args))
5280 if (! get_nonnull_operand (TREE_VALUE (args), &arg_num))
5281 abort ();
5283 if (arg_num == param_num)
5284 return true;
5286 return false;
5289 /* Check that the function argument PARAM (which is operand number
5290 PARAM_NUM) is non-null. This is called by check_function_nonnull
5291 via check_function_arguments_recurse. */
5293 static void
5294 check_nonnull_arg (void *ctx ATTRIBUTE_UNUSED, tree param,
5295 unsigned HOST_WIDE_INT param_num)
5297 /* Just skip checking the argument if it's not a pointer. This can
5298 happen if the "nonnull" attribute was given without an operand
5299 list (which means to check every pointer argument). */
5301 if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
5302 return;
5304 if (integer_zerop (param))
5305 warning ("null argument where non-null required (arg %lu)",
5306 (unsigned long) param_num);
5309 /* Helper for nonnull attribute handling; fetch the operand number
5310 from the attribute argument list. */
5312 static bool
5313 get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
5315 /* Strip any conversions from the arg number and verify they
5316 are constants. */
5317 while (TREE_CODE (arg_num_expr) == NOP_EXPR
5318 || TREE_CODE (arg_num_expr) == CONVERT_EXPR
5319 || TREE_CODE (arg_num_expr) == NON_LVALUE_EXPR)
5320 arg_num_expr = TREE_OPERAND (arg_num_expr, 0);
5322 if (TREE_CODE (arg_num_expr) != INTEGER_CST
5323 || TREE_INT_CST_HIGH (arg_num_expr) != 0)
5324 return false;
5326 *valp = TREE_INT_CST_LOW (arg_num_expr);
5327 return true;
5330 /* Handle a "nothrow" attribute; arguments as in
5331 struct attribute_spec.handler. */
5333 static tree
5334 handle_nothrow_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
5335 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
5337 if (TREE_CODE (*node) == FUNCTION_DECL)
5338 TREE_NOTHROW (*node) = 1;
5339 /* ??? TODO: Support types. */
5340 else
5342 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5343 *no_add_attrs = true;
5346 return NULL_TREE;
5349 /* Handle a "cleanup" attribute; arguments as in
5350 struct attribute_spec.handler. */
5352 static tree
5353 handle_cleanup_attribute (tree *node, tree name, tree args,
5354 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
5356 tree decl = *node;
5357 tree cleanup_id, cleanup_decl;
5359 /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
5360 for global destructors in C++. This requires infrastructure that
5361 we don't have generically at the moment. It's also not a feature
5362 we'd be missing too much, since we do have attribute constructor. */
5363 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
5365 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5366 *no_add_attrs = true;
5367 return NULL_TREE;
5370 /* Verify that the argument is a function in scope. */
5371 /* ??? We could support pointers to functions here as well, if
5372 that was considered desirable. */
5373 cleanup_id = TREE_VALUE (args);
5374 if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
5376 error ("cleanup arg not an identifier");
5377 *no_add_attrs = true;
5378 return NULL_TREE;
5380 cleanup_decl = lookup_name (cleanup_id);
5381 if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
5383 error ("cleanup arg not a function");
5384 *no_add_attrs = true;
5385 return NULL_TREE;
5388 /* That the function has proper type is checked with the
5389 eventual call to build_function_call. */
5391 return NULL_TREE;
5394 /* Handle a "warn_unused_result" attribute. No special handling. */
5396 static tree
5397 handle_warn_unused_result_attribute (tree *node, tree name,
5398 tree args ATTRIBUTE_UNUSED,
5399 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
5401 /* Ignore the attribute for functions not returning any value. */
5402 if (VOID_TYPE_P (TREE_TYPE (*node)))
5404 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5405 *no_add_attrs = true;
5408 return NULL_TREE;
5411 /* Check for valid arguments being passed to a function. */
5412 void
5413 check_function_arguments (tree attrs, tree params)
5415 /* Check for null being passed in a pointer argument that must be
5416 non-null. We also need to do this if format checking is enabled. */
5418 if (warn_nonnull)
5419 check_function_nonnull (attrs, params);
5421 /* Check for errors in format strings. */
5423 if (warn_format)
5424 check_function_format (NULL, attrs, params);
5427 /* Generic argument checking recursion routine. PARAM is the argument to
5428 be checked. PARAM_NUM is the number of the argument. CALLBACK is invoked
5429 once the argument is resolved. CTX is context for the callback. */
5430 void
5431 check_function_arguments_recurse (void (*callback)
5432 (void *, tree, unsigned HOST_WIDE_INT),
5433 void *ctx, tree param,
5434 unsigned HOST_WIDE_INT param_num)
5436 if (TREE_CODE (param) == NOP_EXPR)
5438 /* Strip coercion. */
5439 check_function_arguments_recurse (callback, ctx,
5440 TREE_OPERAND (param, 0), param_num);
5441 return;
5444 if (TREE_CODE (param) == CALL_EXPR)
5446 tree type = TREE_TYPE (TREE_TYPE (TREE_OPERAND (param, 0)));
5447 tree attrs;
5448 bool found_format_arg = false;
5450 /* See if this is a call to a known internationalization function
5451 that modifies a format arg. Such a function may have multiple
5452 format_arg attributes (for example, ngettext). */
5454 for (attrs = TYPE_ATTRIBUTES (type);
5455 attrs;
5456 attrs = TREE_CHAIN (attrs))
5457 if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
5459 tree inner_args;
5460 tree format_num_expr;
5461 int format_num;
5462 int i;
5464 /* Extract the argument number, which was previously checked
5465 to be valid. */
5466 format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
5467 while (TREE_CODE (format_num_expr) == NOP_EXPR
5468 || TREE_CODE (format_num_expr) == CONVERT_EXPR
5469 || TREE_CODE (format_num_expr) == NON_LVALUE_EXPR)
5470 format_num_expr = TREE_OPERAND (format_num_expr, 0);
5472 if (TREE_CODE (format_num_expr) != INTEGER_CST
5473 || TREE_INT_CST_HIGH (format_num_expr) != 0)
5474 abort ();
5476 format_num = TREE_INT_CST_LOW (format_num_expr);
5478 for (inner_args = TREE_OPERAND (param, 1), i = 1;
5479 inner_args != 0;
5480 inner_args = TREE_CHAIN (inner_args), i++)
5481 if (i == format_num)
5483 check_function_arguments_recurse (callback, ctx,
5484 TREE_VALUE (inner_args),
5485 param_num);
5486 found_format_arg = true;
5487 break;
5491 /* If we found a format_arg attribute and did a recursive check,
5492 we are done with checking this argument. Otherwise, we continue
5493 and this will be considered a non-literal. */
5494 if (found_format_arg)
5495 return;
5498 if (TREE_CODE (param) == COND_EXPR)
5500 /* Check both halves of the conditional expression. */
5501 check_function_arguments_recurse (callback, ctx,
5502 TREE_OPERAND (param, 1), param_num);
5503 check_function_arguments_recurse (callback, ctx,
5504 TREE_OPERAND (param, 2), param_num);
5505 return;
5508 (*callback) (ctx, param, param_num);
5511 /* Function to help qsort sort FIELD_DECLs by name order. */
5514 field_decl_cmp (const void *x_p, const void *y_p)
5516 const tree *const x = x_p;
5517 const tree *const y = y_p;
5518 if (DECL_NAME (*x) == DECL_NAME (*y))
5519 /* A nontype is "greater" than a type. */
5520 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
5521 if (DECL_NAME (*x) == NULL_TREE)
5522 return -1;
5523 if (DECL_NAME (*y) == NULL_TREE)
5524 return 1;
5525 if (DECL_NAME (*x) < DECL_NAME (*y))
5526 return -1;
5527 return 1;
5530 static struct {
5531 gt_pointer_operator new_value;
5532 void *cookie;
5533 } resort_data;
5535 /* This routine compares two fields like field_decl_cmp but using the
5536 pointer operator in resort_data. */
5538 static int
5539 resort_field_decl_cmp (const void *x_p, const void *y_p)
5541 const tree *const x = x_p;
5542 const tree *const y = y_p;
5544 if (DECL_NAME (*x) == DECL_NAME (*y))
5545 /* A nontype is "greater" than a type. */
5546 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
5547 if (DECL_NAME (*x) == NULL_TREE)
5548 return -1;
5549 if (DECL_NAME (*y) == NULL_TREE)
5550 return 1;
5552 tree d1 = DECL_NAME (*x);
5553 tree d2 = DECL_NAME (*y);
5554 resort_data.new_value (&d1, resort_data.cookie);
5555 resort_data.new_value (&d2, resort_data.cookie);
5556 if (d1 < d2)
5557 return -1;
5559 return 1;
5562 /* Resort DECL_SORTED_FIELDS because pointers have been reordered. */
5564 void
5565 resort_sorted_fields (void *obj,
5566 void *orig_obj ATTRIBUTE_UNUSED ,
5567 gt_pointer_operator new_value,
5568 void *cookie)
5570 struct sorted_fields_type *sf = obj;
5571 resort_data.new_value = new_value;
5572 resort_data.cookie = cookie;
5573 qsort (&sf->elts[0], sf->len, sizeof (tree),
5574 resort_field_decl_cmp);
5577 /* Used by estimate_num_insns. Estimate number of instructions seen
5578 by given statement. */
5579 static tree
5580 c_estimate_num_insns_1 (tree *tp, int *walk_subtrees, void *data)
5582 int *count = data;
5583 tree x = *tp;
5585 if (TYPE_P (x) || DECL_P (x))
5587 *walk_subtrees = 0;
5588 return NULL;
5590 /* Assume that constants and references counts nothing. These should
5591 be majorized by amount of operations among them we count later
5592 and are common target of CSE and similar optimizations. */
5593 if (TREE_CODE_CLASS (TREE_CODE (x)) == 'c'
5594 || TREE_CODE_CLASS (TREE_CODE (x)) == 'r')
5595 return NULL;
5596 switch (TREE_CODE (x))
5598 /* Recognize assignments of large structures and constructors of
5599 big arrays. */
5600 case MODIFY_EXPR:
5601 case CONSTRUCTOR:
5603 HOST_WIDE_INT size;
5605 size = int_size_in_bytes (TREE_TYPE (x));
5607 if (size < 0 || size > MOVE_MAX_PIECES * MOVE_RATIO)
5608 *count += 10;
5609 else
5610 *count += ((size + MOVE_MAX_PIECES - 1) / MOVE_MAX_PIECES);
5612 break;
5613 case CALL_EXPR:
5615 tree decl = get_callee_fndecl (x);
5617 if (decl && DECL_BUILT_IN (decl))
5618 switch (DECL_FUNCTION_CODE (decl))
5620 case BUILT_IN_CONSTANT_P:
5621 *walk_subtrees = 0;
5622 return NULL_TREE;
5623 case BUILT_IN_EXPECT:
5624 return NULL_TREE;
5625 default:
5626 break;
5628 *count += 10;
5629 break;
5631 /* Few special cases of expensive operations. This is useful
5632 to avoid inlining on functions having too many of these. */
5633 case TRUNC_DIV_EXPR:
5634 case CEIL_DIV_EXPR:
5635 case FLOOR_DIV_EXPR:
5636 case ROUND_DIV_EXPR:
5637 case TRUNC_MOD_EXPR:
5638 case CEIL_MOD_EXPR:
5639 case FLOOR_MOD_EXPR:
5640 case ROUND_MOD_EXPR:
5641 case RDIV_EXPR:
5642 *count += 10;
5643 break;
5644 /* Various containers that will produce no code themselves. */
5645 case INIT_EXPR:
5646 case TARGET_EXPR:
5647 case BIND_EXPR:
5648 case BLOCK:
5649 case TREE_LIST:
5650 case TREE_VEC:
5651 case IDENTIFIER_NODE:
5652 case PLACEHOLDER_EXPR:
5653 case WITH_CLEANUP_EXPR:
5654 case CLEANUP_POINT_EXPR:
5655 case NOP_EXPR:
5656 case VIEW_CONVERT_EXPR:
5657 case SAVE_EXPR:
5658 case UNSAVE_EXPR:
5659 case COMPLEX_EXPR:
5660 case REALPART_EXPR:
5661 case IMAGPART_EXPR:
5662 case TRY_CATCH_EXPR:
5663 case TRY_FINALLY_EXPR:
5664 case LABEL_EXPR:
5665 case EXIT_EXPR:
5666 case LABELED_BLOCK_EXPR:
5667 case EXIT_BLOCK_EXPR:
5668 case EXPR_WITH_FILE_LOCATION:
5670 case EXPR_STMT:
5671 case COMPOUND_STMT:
5672 case RETURN_STMT:
5673 case LABEL_STMT:
5674 case SCOPE_STMT:
5675 case FILE_STMT:
5676 case CASE_LABEL:
5677 case STMT_EXPR:
5678 case CLEANUP_STMT:
5680 case SIZEOF_EXPR:
5681 case ARROW_EXPR:
5682 case ALIGNOF_EXPR:
5683 break;
5684 case DECL_STMT:
5685 /* Do not account static initializers. */
5686 if (TREE_STATIC (TREE_OPERAND (x, 0)))
5687 *walk_subtrees = 0;
5688 break;
5689 default:
5690 (*count)++;
5692 return NULL;
5695 /* Estimate number of instructions that will be created by expanding the body. */
5697 c_estimate_num_insns (tree decl)
5699 int num = 0;
5700 walk_tree_without_duplicates (&DECL_SAVED_TREE (decl), c_estimate_num_insns_1, &num);
5701 return num;
5704 /* Used by c_decl_uninit to find where expressions like x = x + 1; */
5706 static tree
5707 c_decl_uninit_1 (tree *t, int *walk_sub_trees, void *x)
5709 /* If x = EXP(&x)EXP, then do not warn about the use of x. */
5710 if (TREE_CODE (*t) == ADDR_EXPR && TREE_OPERAND (*t, 0) == x)
5712 *walk_sub_trees = 0;
5713 return NULL_TREE;
5715 if (*t == x)
5716 return *t;
5717 return NULL_TREE;
5720 /* Find out if a variable is uninitialized based on DECL_INITIAL. */
5722 bool
5723 c_decl_uninit (tree t)
5725 /* int x = x; is GCC extension to turn off this warning, only if warn_init_self is zero. */
5726 if (DECL_INITIAL (t) == t)
5727 return warn_init_self ? true : false;
5729 /* Walk the trees looking for the variable itself. */
5730 if (walk_tree_without_duplicates (&DECL_INITIAL (t), c_decl_uninit_1, t))
5731 return true;
5732 return false;
5735 /* Issue the error given by MSGID, indicating that it occurred before
5736 TOKEN, which had the associated VALUE. */
5738 void
5739 c_parse_error (const char *msgid, enum cpp_ttype token, tree value)
5741 const char *string = _(msgid);
5743 if (token == CPP_EOF)
5744 error ("%s at end of input", string);
5745 else if (token == CPP_CHAR || token == CPP_WCHAR)
5747 unsigned int val = TREE_INT_CST_LOW (value);
5748 const char *const ell = (token == CPP_CHAR) ? "" : "L";
5749 if (val <= UCHAR_MAX && ISGRAPH (val))
5750 error ("%s before %s'%c'", string, ell, val);
5751 else
5752 error ("%s before %s'\\x%x'", string, ell, val);
5754 else if (token == CPP_STRING
5755 || token == CPP_WSTRING)
5756 error ("%s before string constant", string);
5757 else if (token == CPP_NUMBER)
5758 error ("%s before numeric constant", string);
5759 else if (token == CPP_NAME)
5760 error ("%s before \"%s\"", string, IDENTIFIER_POINTER (value));
5761 else if (token < N_TTYPES)
5762 error ("%s before '%s' token", string, cpp_type2name (token));
5763 else
5764 error ("%s", string);
5767 #include "gt-c-common.h"