1 /* Subroutines shared by all languages that are variants of C.
2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005 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
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
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
24 #include "coretypes.h"
36 #include "diagnostic.h"
41 #include "langhooks.h"
42 #include "tree-inline.h"
45 #include "tree-iterator.h"
47 #include "tree-mudflap.h"
51 cpp_reader
*parse_in
; /* Declared in c-pragma.h. */
53 /* We let tm.h override the types used here, to handle trivial differences
54 such as the choice of unsigned int or long unsigned int for size_t.
55 When machines start needing nontrivial differences in the size type,
56 it would be best to do something here to figure out automatically
57 from other information what type to use. */
60 #define SIZE_TYPE "long unsigned int"
64 #define PID_TYPE "int"
68 #define WCHAR_TYPE "int"
71 /* WCHAR_TYPE gets overridden by -fshort-wchar. */
72 #define MODIFIED_WCHAR_TYPE \
73 (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
76 #define PTRDIFF_TYPE "long int"
80 #define WINT_TYPE "unsigned int"
84 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
86 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
92 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
94 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
95 ? "long unsigned int" \
96 : "long long unsigned int"))
99 /* The following symbols are subsumed in the c_global_trees array, and
100 listed here individually for documentation purposes.
102 INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
104 tree short_integer_type_node;
105 tree long_integer_type_node;
106 tree long_long_integer_type_node;
108 tree short_unsigned_type_node;
109 tree long_unsigned_type_node;
110 tree long_long_unsigned_type_node;
112 tree truthvalue_type_node;
113 tree truthvalue_false_node;
114 tree truthvalue_true_node;
116 tree ptrdiff_type_node;
118 tree unsigned_char_type_node;
119 tree signed_char_type_node;
120 tree wchar_type_node;
121 tree signed_wchar_type_node;
122 tree unsigned_wchar_type_node;
124 tree float_type_node;
125 tree double_type_node;
126 tree long_double_type_node;
128 tree complex_integer_type_node;
129 tree complex_float_type_node;
130 tree complex_double_type_node;
131 tree complex_long_double_type_node;
133 tree intQI_type_node;
134 tree intHI_type_node;
135 tree intSI_type_node;
136 tree intDI_type_node;
137 tree intTI_type_node;
139 tree unsigned_intQI_type_node;
140 tree unsigned_intHI_type_node;
141 tree unsigned_intSI_type_node;
142 tree unsigned_intDI_type_node;
143 tree unsigned_intTI_type_node;
145 tree widest_integer_literal_type_node;
146 tree widest_unsigned_literal_type_node;
148 Nodes for types `void *' and `const void *'.
150 tree ptr_type_node, const_ptr_type_node;
152 Nodes for types `char *' and `const char *'.
154 tree string_type_node, const_string_type_node;
156 Type `char[SOMENUMBER]'.
157 Used when an array of char is needed and the size is irrelevant.
159 tree char_array_type_node;
161 Type `int[SOMENUMBER]' or something like it.
162 Used when an array of int needed and the size is irrelevant.
164 tree int_array_type_node;
166 Type `wchar_t[SOMENUMBER]' or something like it.
167 Used when a wide string literal is created.
169 tree wchar_array_type_node;
171 Type `int ()' -- used for implicit declaration of functions.
173 tree default_function_type;
175 A VOID_TYPE node, packaged in a TREE_LIST.
179 The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
180 and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
181 VAR_DECLS, but C++ does.)
183 tree function_name_decl_node;
184 tree pretty_function_name_decl_node;
185 tree c99_function_name_decl_node;
187 Stack of nested function name VAR_DECLs.
189 tree saved_function_name_decls;
193 tree c_global_trees
[CTI_MAX
];
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. */
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 /* Nonzero means process PCH files while preprocessing. */
220 bool flag_pch_preprocess
;
222 /* The file name to which we should write a precompiled header, or
223 NULL if no header will be written in this compile. */
225 const char *pch_file
;
227 /* Nonzero if an ISO standard was selected. It rejects macros in the
231 /* Nonzero if -undef was given. It suppresses target built-in macros
235 /* Nonzero means don't recognize the non-ANSI builtin functions. */
239 /* Nonzero means don't recognize the non-ANSI builtin functions.
242 int flag_no_nonansi_builtin
;
244 /* Nonzero means give `double' the same size as `float'. */
246 int flag_short_double
;
248 /* Nonzero means give `wchar_t' the same size as `short'. */
250 int flag_short_wchar
;
252 /* Nonzero means allow Microsoft extensions without warnings or errors. */
253 int flag_ms_extensions
;
255 /* Nonzero means don't recognize the keyword `asm'. */
259 /* Nonzero means give string constants the type `const char *', as mandated
262 int flag_const_strings
;
264 /* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
266 int flag_signed_bitfields
= 1;
268 /* Nonzero means warn about deprecated conversion from string constant to
271 int warn_write_strings
;
273 /* Warn about #pragma directives that are not recognized. */
275 int warn_unknown_pragmas
; /* Tri state variable. */
277 /* Warn about format/argument anomalies in calls to formatted I/O functions
278 (*printf, *scanf, strftime, strfmon, etc.). */
282 /* Warn about using __null (as NULL in C++) as sentinel. For code compiled
283 with GCC this doesn't matter as __null is guaranteed to have the right
286 int warn_strict_null_sentinel
;
288 /* Zero means that faster, ...NonNil variants of objc_msgSend...
289 calls will be used in ObjC; passing nil receivers to such calls
290 will most likely result in crashes. */
291 int flag_nil_receivers
= 1;
293 /* Nonzero means that we will allow new ObjC exception syntax (@throw,
294 @try, etc.) in source code. */
295 int flag_objc_exceptions
= 0;
297 /* Nonzero means that we generate NeXT setjmp based exceptions. */
298 int flag_objc_sjlj_exceptions
= -1;
300 /* Nonzero means that code generation will be altered to support
301 "zero-link" execution. This currently affects ObjC only, but may
302 affect other languages in the future. */
303 int flag_zero_link
= 0;
305 /* Nonzero means emit an '__OBJC, __image_info' for the current translation
306 unit. It will inform the ObjC runtime that class definition(s) herein
307 contained are to replace one(s) previously loaded. */
308 int flag_replace_objc_classes
= 0;
310 /* C/ObjC language option variables. */
313 /* Nonzero means allow type mismatches in conditional expressions;
314 just make their values `void'. */
316 int flag_cond_mismatch
;
318 /* Nonzero means enable C89 Amendment 1 features. */
322 /* Nonzero means use the ISO C99 dialect of C. */
326 /* Nonzero means that we have builtin functions, and main is an int. */
330 /* Warn if main is suspicious. */
335 /* ObjC language option variables. */
338 /* Open and close the file for outputting class declarations, if
341 int flag_gen_declaration
;
343 /* Generate code for GNU or NeXT runtime environment. */
345 #ifdef NEXT_OBJC_RUNTIME
346 int flag_next_runtime
= 1;
348 int flag_next_runtime
= 0;
351 /* Tells the compiler that this is a special run. Do not perform any
352 compiling, instead we are to test some platform dependent features
353 and output a C header file with appropriate definitions. */
355 int print_struct_values
;
357 /* ???. Undocumented. */
359 const char *constant_string_class_name
;
362 /* C++ language option variables. */
365 /* Nonzero means don't recognize any extension keywords. */
367 int flag_no_gnu_keywords
;
369 /* Nonzero means do emit exported implementations of functions even if
370 they can be inlined. */
372 int flag_implement_inlines
= 1;
374 /* Nonzero means that implicit instantiations will be emitted if needed. */
376 int flag_implicit_templates
= 1;
378 /* Nonzero means that implicit instantiations of inline templates will be
379 emitted if needed, even if instantiations of non-inline templates
382 int flag_implicit_inline_templates
= 1;
384 /* Nonzero means generate separate instantiation control files and
385 juggle them at link time. */
387 int flag_use_repository
;
389 /* Nonzero if we want to issue diagnostics that the standard says are not
392 int flag_optional_diags
= 1;
394 /* Nonzero means we should attempt to elide constructors when possible. */
396 int flag_elide_constructors
= 1;
398 /* Nonzero means that member functions defined in class scope are
399 inline by default. */
401 int flag_default_inline
= 1;
403 /* Controls whether compiler generates 'type descriptor' that give
404 run-time type information. */
408 /* Nonzero if we want to conserve space in the .o files. We do this
409 by putting uninitialized data and runtime initialized data into
410 .common instead of .data at the expense of not flagging multiple
413 int flag_conserve_space
;
415 /* Nonzero if we want to obey access control semantics. */
417 int flag_access_control
= 1;
419 /* Nonzero if we want to check the return value of new and avoid calling
420 constructors if it is a null pointer. */
424 /* Nonzero if we want the new ISO rules for pushing a new scope for `for'
425 initialization variables.
426 0: Old rules, set by -fno-for-scope.
427 2: New ISO rules, set by -ffor-scope.
428 1: Try to implement new ISO rules, but with backup compatibility
429 (and warnings). This is the default, for now. */
431 int flag_new_for_scope
= 1;
433 /* Nonzero if we want to emit defined symbols with common-like linkage as
434 weak symbols where possible, in order to conform to C++ semantics.
435 Otherwise, emit them as local symbols. */
439 /* 0 means we want the preprocessor to not emit line directives for
440 the current working directory. 1 means we want it to do it. -1
441 means we should decide depending on whether debugging information
442 is being emitted or not. */
444 int flag_working_directory
= -1;
446 /* Nonzero to use __cxa_atexit, rather than atexit, to register
447 destructors for local statics and global objects. */
449 int flag_use_cxa_atexit
= DEFAULT_USE_CXA_ATEXIT
;
451 /* Nonzero means make the default pedwarns warnings instead of errors.
452 The value of this flag is ignored if -pedantic is specified. */
456 /* Nonzero means to implement standard semantics for exception
457 specifications, calling unexpected if an exception is thrown that
458 doesn't match the specification. Zero means to treat them as
459 assertions and optimize accordingly, but not check them. */
461 int flag_enforce_eh_specs
= 1;
463 /* Nonzero means to generate thread-safe code for initializing local
466 int flag_threadsafe_statics
= 1;
468 /* Nonzero means warn about implicit declarations. */
470 int warn_implicit
= 1;
472 /* Maximum template instantiation depth. This limit is rather
473 arbitrary, but it exists to limit the time it takes to notice
474 infinite template instantiations. */
476 int max_tinst_depth
= 500;
480 /* The elements of `ridpointers' are identifier nodes for the reserved
481 type names and storage classes. It is indexed by a RID_... value. */
484 tree (*make_fname_decl
) (tree
, int);
486 /* Nonzero means the expression being parsed will never be evaluated.
487 This is a count, since unevaluated expressions can nest. */
490 /* Information about how a function name is generated. */
493 tree
*const decl
; /* pointer to the VAR_DECL. */
494 const unsigned rid
; /* RID number for the identifier. */
495 const int pretty
; /* How pretty is it? */
498 /* The three ways of getting then name of the current function. */
500 const struct fname_var_t fname_vars
[] =
502 /* C99 compliant __func__, must be first. */
503 {&c99_function_name_decl_node
, RID_C99_FUNCTION_NAME
, 0},
504 /* GCC __FUNCTION__ compliant. */
505 {&function_name_decl_node
, RID_FUNCTION_NAME
, 0},
506 /* GCC __PRETTY_FUNCTION__ compliant. */
507 {&pretty_function_name_decl_node
, RID_PRETTY_FUNCTION_NAME
, 1},
511 static int constant_fits_type_p (tree
, tree
);
512 static tree
check_case_value (tree
);
513 static bool check_case_bounds (tree
, tree
, tree
*, tree
*);
515 static tree
handle_packed_attribute (tree
*, tree
, tree
, int, bool *);
516 static tree
handle_nocommon_attribute (tree
*, tree
, tree
, int, bool *);
517 static tree
handle_common_attribute (tree
*, tree
, tree
, int, bool *);
518 static tree
handle_noreturn_attribute (tree
*, tree
, tree
, int, bool *);
519 static tree
handle_noinline_attribute (tree
*, tree
, tree
, int, bool *);
520 static tree
handle_always_inline_attribute (tree
*, tree
, tree
, int,
522 static tree
handle_used_attribute (tree
*, tree
, tree
, int, bool *);
523 static tree
handle_unused_attribute (tree
*, tree
, tree
, int, bool *);
524 static tree
handle_const_attribute (tree
*, tree
, tree
, int, bool *);
525 static tree
handle_transparent_union_attribute (tree
*, tree
, tree
,
527 static tree
handle_constructor_attribute (tree
*, tree
, tree
, int, bool *);
528 static tree
handle_destructor_attribute (tree
*, tree
, tree
, int, bool *);
529 static tree
handle_mode_attribute (tree
*, tree
, tree
, int, bool *);
530 static tree
handle_section_attribute (tree
*, tree
, tree
, int, bool *);
531 static tree
handle_aligned_attribute (tree
*, tree
, tree
, int, bool *);
532 static tree
handle_weak_attribute (tree
*, tree
, tree
, int, bool *) ;
533 static tree
handle_alias_attribute (tree
*, tree
, tree
, int, bool *);
534 static tree
handle_visibility_attribute (tree
*, tree
, tree
, int,
536 static tree
handle_tls_model_attribute (tree
*, tree
, tree
, int,
538 static tree
handle_no_instrument_function_attribute (tree
*, tree
,
540 static tree
handle_malloc_attribute (tree
*, tree
, tree
, int, bool *);
541 static tree
handle_returns_twice_attribute (tree
*, tree
, tree
, int, bool *);
542 static tree
handle_no_limit_stack_attribute (tree
*, tree
, tree
, int,
544 static tree
handle_pure_attribute (tree
*, tree
, tree
, int, bool *);
545 static tree
handle_novops_attribute (tree
*, tree
, tree
, int, bool *);
546 static tree
handle_deprecated_attribute (tree
*, tree
, tree
, int,
548 static tree
handle_vector_size_attribute (tree
*, tree
, tree
, int,
550 static tree
handle_nonnull_attribute (tree
*, tree
, tree
, int, bool *);
551 static tree
handle_nothrow_attribute (tree
*, tree
, tree
, int, bool *);
552 static tree
handle_cleanup_attribute (tree
*, tree
, tree
, int, bool *);
553 static tree
handle_warn_unused_result_attribute (tree
*, tree
, tree
, int,
555 static tree
handle_sentinel_attribute (tree
*, tree
, tree
, int, bool *);
557 static void check_function_nonnull (tree
, tree
);
558 static void check_nonnull_arg (void *, tree
, unsigned HOST_WIDE_INT
);
559 static bool nonnull_check_p (tree
, unsigned HOST_WIDE_INT
);
560 static bool get_nonnull_operand (tree
, unsigned HOST_WIDE_INT
*);
561 static int resort_field_decl_cmp (const void *, const void *);
563 /* Table of machine-independent attributes common to all C-like languages. */
564 const struct attribute_spec c_common_attribute_table
[] =
566 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
567 { "packed", 0, 0, false, false, false,
568 handle_packed_attribute
},
569 { "nocommon", 0, 0, true, false, false,
570 handle_nocommon_attribute
},
571 { "common", 0, 0, true, false, false,
572 handle_common_attribute
},
573 /* FIXME: logically, noreturn attributes should be listed as
574 "false, true, true" and apply to function types. But implementing this
575 would require all the places in the compiler that use TREE_THIS_VOLATILE
576 on a decl to identify non-returning functions to be located and fixed
577 to check the function type instead. */
578 { "noreturn", 0, 0, true, false, false,
579 handle_noreturn_attribute
},
580 { "volatile", 0, 0, true, false, false,
581 handle_noreturn_attribute
},
582 { "noinline", 0, 0, true, false, false,
583 handle_noinline_attribute
},
584 { "always_inline", 0, 0, true, false, false,
585 handle_always_inline_attribute
},
586 { "used", 0, 0, true, false, false,
587 handle_used_attribute
},
588 { "unused", 0, 0, false, false, false,
589 handle_unused_attribute
},
590 /* The same comments as for noreturn attributes apply to const ones. */
591 { "const", 0, 0, true, false, false,
592 handle_const_attribute
},
593 { "transparent_union", 0, 0, false, false, false,
594 handle_transparent_union_attribute
},
595 { "constructor", 0, 0, true, false, false,
596 handle_constructor_attribute
},
597 { "destructor", 0, 0, true, false, false,
598 handle_destructor_attribute
},
599 { "mode", 1, 1, false, true, false,
600 handle_mode_attribute
},
601 { "section", 1, 1, true, false, false,
602 handle_section_attribute
},
603 { "aligned", 0, 1, false, false, false,
604 handle_aligned_attribute
},
605 { "weak", 0, 0, true, false, false,
606 handle_weak_attribute
},
607 { "alias", 1, 1, true, false, false,
608 handle_alias_attribute
},
609 { "no_instrument_function", 0, 0, true, false, false,
610 handle_no_instrument_function_attribute
},
611 { "malloc", 0, 0, true, false, false,
612 handle_malloc_attribute
},
613 { "returns_twice", 0, 0, true, false, false,
614 handle_returns_twice_attribute
},
615 { "no_stack_limit", 0, 0, true, false, false,
616 handle_no_limit_stack_attribute
},
617 { "pure", 0, 0, true, false, false,
618 handle_pure_attribute
},
619 /* For internal use (marking of builtins) only. The name contains space
620 to prevent its usage in source code. */
621 { "no vops", 0, 0, true, false, false,
622 handle_novops_attribute
},
623 { "deprecated", 0, 0, false, false, false,
624 handle_deprecated_attribute
},
625 { "vector_size", 1, 1, false, true, false,
626 handle_vector_size_attribute
},
627 { "visibility", 1, 1, false, false, false,
628 handle_visibility_attribute
},
629 { "tls_model", 1, 1, true, false, false,
630 handle_tls_model_attribute
},
631 { "nonnull", 0, -1, false, true, true,
632 handle_nonnull_attribute
},
633 { "nothrow", 0, 0, true, false, false,
634 handle_nothrow_attribute
},
635 { "may_alias", 0, 0, false, true, false, NULL
},
636 { "cleanup", 1, 1, true, false, false,
637 handle_cleanup_attribute
},
638 { "warn_unused_result", 0, 0, false, true, true,
639 handle_warn_unused_result_attribute
},
640 { "sentinel", 0, 1, false, true, true,
641 handle_sentinel_attribute
},
642 { NULL
, 0, 0, false, false, false, NULL
}
645 /* Give the specifications for the format attributes, used by C and all
648 const struct attribute_spec c_common_format_attribute_table
[] =
650 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
651 { "format", 3, 3, false, true, true,
652 handle_format_attribute
},
653 { "format_arg", 1, 1, false, true, true,
654 handle_format_arg_attribute
},
655 { NULL
, 0, 0, false, false, false, NULL
}
658 /* Push current bindings for the function name VAR_DECLS. */
661 start_fname_decls (void)
664 tree saved
= NULL_TREE
;
666 for (ix
= 0; fname_vars
[ix
].decl
; ix
++)
668 tree decl
= *fname_vars
[ix
].decl
;
672 saved
= tree_cons (decl
, build_int_cst (NULL_TREE
, ix
), saved
);
673 *fname_vars
[ix
].decl
= NULL_TREE
;
676 if (saved
|| saved_function_name_decls
)
677 /* Normally they'll have been NULL, so only push if we've got a
678 stack, or they are non-NULL. */
679 saved_function_name_decls
= tree_cons (saved
, NULL_TREE
,
680 saved_function_name_decls
);
683 /* Finish up the current bindings, adding them into the current function's
684 statement tree. This must be done _before_ finish_stmt_tree is called.
685 If there is no current function, we must be at file scope and no statements
686 are involved. Pop the previous bindings. */
689 finish_fname_decls (void)
692 tree stmts
= NULL_TREE
;
693 tree stack
= saved_function_name_decls
;
695 for (; stack
&& TREE_VALUE (stack
); stack
= TREE_CHAIN (stack
))
696 append_to_statement_list (TREE_VALUE (stack
), &stmts
);
700 tree
*bodyp
= &DECL_SAVED_TREE (current_function_decl
);
702 if (TREE_CODE (*bodyp
) == BIND_EXPR
)
703 bodyp
= &BIND_EXPR_BODY (*bodyp
);
705 append_to_statement_list (*bodyp
, &stmts
);
709 for (ix
= 0; fname_vars
[ix
].decl
; ix
++)
710 *fname_vars
[ix
].decl
= NULL_TREE
;
714 /* We had saved values, restore them. */
717 for (saved
= TREE_PURPOSE (stack
); saved
; saved
= TREE_CHAIN (saved
))
719 tree decl
= TREE_PURPOSE (saved
);
720 unsigned ix
= TREE_INT_CST_LOW (TREE_VALUE (saved
));
722 *fname_vars
[ix
].decl
= decl
;
724 stack
= TREE_CHAIN (stack
);
726 saved_function_name_decls
= stack
;
729 /* Return the text name of the current function, suitably prettified
730 by PRETTY_P. Return string must be freed by caller. */
733 fname_as_string (int pretty_p
)
735 const char *name
= "top level";
745 if (current_function_decl
)
746 name
= lang_hooks
.decl_printable_name (current_function_decl
, vrb
);
748 if (c_lex_string_translate
)
750 int len
= strlen (name
) + 3; /* Two for '"'s. One for NULL. */
751 cpp_string cstr
= { 0, 0 }, strname
;
753 namep
= XNEWVEC (char, len
);
754 snprintf (namep
, len
, "\"%s\"", name
);
755 strname
.text
= (unsigned char *) namep
;
756 strname
.len
= len
- 1;
758 if (cpp_interpret_string (parse_in
, &strname
, 1, &cstr
, false))
761 return (char *) cstr
.text
;
765 namep
= xstrdup (name
);
770 /* Expand DECL if it declares an entity not handled by the
774 c_expand_decl (tree decl
)
776 if (TREE_CODE (decl
) == VAR_DECL
&& !TREE_STATIC (decl
))
778 /* Let the back-end know about this variable. */
779 if (!anon_aggr_type_p (TREE_TYPE (decl
)))
780 emit_local_var (decl
);
782 expand_anon_union_decl (decl
, NULL_TREE
,
783 DECL_ANON_UNION_ELEMS (decl
));
792 /* Return the VAR_DECL for a const char array naming the current
793 function. If the VAR_DECL has not yet been created, create it
794 now. RID indicates how it should be formatted and IDENTIFIER_NODE
795 ID is its name (unfortunately C and C++ hold the RID values of
796 keywords in different places, so we can't derive RID from ID in
797 this language independent code. */
800 fname_decl (unsigned int rid
, tree id
)
803 tree decl
= NULL_TREE
;
805 for (ix
= 0; fname_vars
[ix
].decl
; ix
++)
806 if (fname_vars
[ix
].rid
== rid
)
809 decl
= *fname_vars
[ix
].decl
;
812 /* If a tree is built here, it would normally have the lineno of
813 the current statement. Later this tree will be moved to the
814 beginning of the function and this line number will be wrong.
815 To avoid this problem set the lineno to 0 here; that prevents
816 it from appearing in the RTL. */
818 location_t saved_location
= input_location
;
819 #ifdef USE_MAPPED_LOCATION
820 input_location
= UNKNOWN_LOCATION
;
825 stmts
= push_stmt_list ();
826 decl
= (*make_fname_decl
) (id
, fname_vars
[ix
].pretty
);
827 stmts
= pop_stmt_list (stmts
);
828 if (!IS_EMPTY_STMT (stmts
))
829 saved_function_name_decls
830 = tree_cons (decl
, stmts
, saved_function_name_decls
);
831 *fname_vars
[ix
].decl
= decl
;
832 input_location
= saved_location
;
834 if (!ix
&& !current_function_decl
)
835 pedwarn ("%qD is not defined outside of function scope", decl
);
840 /* Given a STRING_CST, give it a suitable array-of-chars data type. */
843 fix_string_type (tree value
)
845 const int wchar_bytes
= TYPE_PRECISION (wchar_type_node
) / BITS_PER_UNIT
;
846 const int wide_flag
= TREE_TYPE (value
) == wchar_array_type_node
;
847 const int nchars_max
= flag_isoc99
? 4095 : 509;
848 int length
= TREE_STRING_LENGTH (value
);
850 tree e_type
, i_type
, a_type
;
852 /* Compute the number of elements, for the array type. */
853 nchars
= wide_flag
? length
/ wchar_bytes
: length
;
855 if (pedantic
&& nchars
- 1 > nchars_max
&& !c_dialect_cxx ())
856 pedwarn ("string length %qd is greater than the length %qd ISO C%d compilers are required to support",
857 nchars
- 1, nchars_max
, flag_isoc99
? 99 : 89);
859 e_type
= wide_flag
? wchar_type_node
: char_type_node
;
860 /* Create the array type for the string constant. flag_const_strings
861 says make the string constant an array of const char so that
862 copying it to a non-const pointer will get a warning. For C++,
863 this is the standard behavior.
865 The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
866 array type being the unqualified version of that type.
867 Therefore, if we are constructing an array of const char, we must
868 construct the matching unqualified array type first. The C front
869 end does not require this, but it does no harm, so we do it
871 i_type
= build_index_type (build_int_cst (NULL_TREE
, nchars
- 1));
872 a_type
= build_array_type (e_type
, i_type
);
873 if (flag_const_strings
)
874 a_type
= c_build_qualified_type (a_type
, TYPE_QUAL_CONST
);
876 TREE_TYPE (value
) = a_type
;
877 TREE_CONSTANT (value
) = 1;
878 TREE_INVARIANT (value
) = 1;
879 TREE_READONLY (value
) = 1;
880 TREE_STATIC (value
) = 1;
884 /* Print a warning if a constant expression had overflow in folding.
885 Invoke this function on every expression that the language
886 requires to be a constant expression.
887 Note the ANSI C standard says it is erroneous for a
888 constant expression to overflow. */
891 constant_expression_warning (tree value
)
893 if ((TREE_CODE (value
) == INTEGER_CST
|| TREE_CODE (value
) == REAL_CST
894 || TREE_CODE (value
) == VECTOR_CST
895 || TREE_CODE (value
) == COMPLEX_CST
)
896 && TREE_CONSTANT_OVERFLOW (value
) && pedantic
)
897 pedwarn ("overflow in constant expression");
900 /* Print a warning if an expression had overflow in folding.
901 Invoke this function on every expression that
902 (1) appears in the source code, and
903 (2) might be a constant expression that overflowed, and
904 (3) is not already checked by convert_and_check;
905 however, do not invoke this function on operands of explicit casts. */
908 overflow_warning (tree value
)
910 if ((TREE_CODE (value
) == INTEGER_CST
911 || (TREE_CODE (value
) == COMPLEX_CST
912 && TREE_CODE (TREE_REALPART (value
)) == INTEGER_CST
))
913 && TREE_OVERFLOW (value
))
915 TREE_OVERFLOW (value
) = 0;
916 if (skip_evaluation
== 0)
917 warning (0, "integer overflow in expression");
919 else if ((TREE_CODE (value
) == REAL_CST
920 || (TREE_CODE (value
) == COMPLEX_CST
921 && TREE_CODE (TREE_REALPART (value
)) == REAL_CST
))
922 && TREE_OVERFLOW (value
))
924 TREE_OVERFLOW (value
) = 0;
925 if (skip_evaluation
== 0)
926 warning (0, "floating point overflow in expression");
928 else if (TREE_CODE (value
) == VECTOR_CST
&& TREE_OVERFLOW (value
))
930 TREE_OVERFLOW (value
) = 0;
931 if (skip_evaluation
== 0)
932 warning (0, "vector overflow in expression");
936 /* Print a warning if a large constant is truncated to unsigned,
937 or if -Wconversion is used and a constant < 0 is converted to unsigned.
938 Invoke this function on every expression that might be implicitly
939 converted to an unsigned type. */
942 unsigned_conversion_warning (tree result
, tree operand
)
944 tree type
= TREE_TYPE (result
);
946 if (TREE_CODE (operand
) == INTEGER_CST
947 && TREE_CODE (type
) == INTEGER_TYPE
948 && TYPE_UNSIGNED (type
)
949 && skip_evaluation
== 0
950 && !int_fits_type_p (operand
, type
))
952 if (!int_fits_type_p (operand
, c_common_signed_type (type
)))
953 /* This detects cases like converting -129 or 256 to unsigned char. */
954 warning (0, "large integer implicitly truncated to unsigned type");
955 else if (warn_conversion
)
956 warning (0, "negative integer implicitly converted to unsigned type");
960 /* Nonzero if constant C has a value that is permissible
961 for type TYPE (an INTEGER_TYPE). */
964 constant_fits_type_p (tree c
, tree type
)
966 if (TREE_CODE (c
) == INTEGER_CST
)
967 return int_fits_type_p (c
, type
);
969 c
= convert (type
, c
);
970 return !TREE_OVERFLOW (c
);
973 /* Nonzero if vector types T1 and T2 can be converted to each other
974 without an explicit cast. */
976 vector_types_convertible_p (tree t1
, tree t2
)
978 return targetm
.vector_opaque_p (t1
)
979 || targetm
.vector_opaque_p (t2
)
980 || (tree_int_cst_equal (TYPE_SIZE (t1
), TYPE_SIZE (t2
))
981 && INTEGRAL_TYPE_P (TREE_TYPE (t1
))
982 == INTEGRAL_TYPE_P (TREE_TYPE (t2
)));
985 /* Convert EXPR to TYPE, warning about conversion problems with constants.
986 Invoke this function on every expression that is converted implicitly,
987 i.e. because of language rules and not because of an explicit cast. */
990 convert_and_check (tree type
, tree expr
)
992 tree t
= convert (type
, expr
);
993 if (TREE_CODE (t
) == INTEGER_CST
)
995 if (TREE_OVERFLOW (t
))
997 TREE_OVERFLOW (t
) = 0;
999 /* Do not diagnose overflow in a constant expression merely
1000 because a conversion overflowed. */
1001 TREE_CONSTANT_OVERFLOW (t
) = TREE_CONSTANT_OVERFLOW (expr
);
1003 /* No warning for converting 0x80000000 to int. */
1004 if (!(TYPE_UNSIGNED (type
) < TYPE_UNSIGNED (TREE_TYPE (expr
))
1005 && TREE_CODE (TREE_TYPE (expr
)) == INTEGER_TYPE
1006 && TYPE_PRECISION (type
) == TYPE_PRECISION (TREE_TYPE (expr
))))
1007 /* If EXPR fits in the unsigned version of TYPE,
1008 don't warn unless pedantic. */
1010 || TYPE_UNSIGNED (type
)
1011 || !constant_fits_type_p (expr
,
1012 c_common_unsigned_type (type
)))
1013 && skip_evaluation
== 0)
1014 warning (0, "overflow in implicit constant conversion");
1017 unsigned_conversion_warning (t
, expr
);
1022 /* A node in a list that describes references to variables (EXPR), which are
1023 either read accesses if WRITER is zero, or write accesses, in which case
1024 WRITER is the parent of EXPR. */
1031 /* Used to implement a cache the results of a call to verify_tree. We only
1032 use this for SAVE_EXPRs. */
1035 struct tlist_cache
*next
;
1036 struct tlist
*cache_before_sp
;
1037 struct tlist
*cache_after_sp
;
1041 /* Obstack to use when allocating tlist structures, and corresponding
1043 static struct obstack tlist_obstack
;
1044 static char *tlist_firstobj
= 0;
1046 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
1048 static struct tlist
*warned_ids
;
1049 /* SAVE_EXPRs need special treatment. We process them only once and then
1050 cache the results. */
1051 static struct tlist_cache
*save_expr_cache
;
1053 static void add_tlist (struct tlist
**, struct tlist
*, tree
, int);
1054 static void merge_tlist (struct tlist
**, struct tlist
*, int);
1055 static void verify_tree (tree
, struct tlist
**, struct tlist
**, tree
);
1056 static int warning_candidate_p (tree
);
1057 static void warn_for_collisions (struct tlist
*);
1058 static void warn_for_collisions_1 (tree
, tree
, struct tlist
*, int);
1059 static struct tlist
*new_tlist (struct tlist
*, tree
, tree
);
1061 /* Create a new struct tlist and fill in its fields. */
1062 static struct tlist
*
1063 new_tlist (struct tlist
*next
, tree t
, tree writer
)
1066 l
= XOBNEW (&tlist_obstack
, struct tlist
);
1073 /* Add duplicates of the nodes found in ADD to the list *TO. If EXCLUDE_WRITER
1074 is nonnull, we ignore any node we find which has a writer equal to it. */
1077 add_tlist (struct tlist
**to
, struct tlist
*add
, tree exclude_writer
, int copy
)
1081 struct tlist
*next
= add
->next
;
1084 if (!exclude_writer
|| add
->writer
!= exclude_writer
)
1085 *to
= copy
? new_tlist (*to
, add
->expr
, add
->writer
) : add
;
1090 /* Merge the nodes of ADD into TO. This merging process is done so that for
1091 each variable that already exists in TO, no new node is added; however if
1092 there is a write access recorded in ADD, and an occurrence on TO is only
1093 a read access, then the occurrence in TO will be modified to record the
1097 merge_tlist (struct tlist
**to
, struct tlist
*add
, int copy
)
1099 struct tlist
**end
= to
;
1102 end
= &(*end
)->next
;
1108 struct tlist
*next
= add
->next
;
1110 for (tmp2
= *to
; tmp2
; tmp2
= tmp2
->next
)
1111 if (tmp2
->expr
== add
->expr
)
1115 tmp2
->writer
= add
->writer
;
1119 *end
= copy
? add
: new_tlist (NULL
, add
->expr
, add
->writer
);
1120 end
= &(*end
)->next
;
1127 /* WRITTEN is a variable, WRITER is its parent. Warn if any of the variable
1128 references in list LIST conflict with it, excluding reads if ONLY writers
1132 warn_for_collisions_1 (tree written
, tree writer
, struct tlist
*list
,
1137 /* Avoid duplicate warnings. */
1138 for (tmp
= warned_ids
; tmp
; tmp
= tmp
->next
)
1139 if (tmp
->expr
== written
)
1144 if (list
->expr
== written
1145 && list
->writer
!= writer
1146 && (!only_writes
|| list
->writer
)
1147 && DECL_NAME (list
->expr
))
1149 warned_ids
= new_tlist (warned_ids
, written
, NULL_TREE
);
1150 warning (0, "operation on %qE may be undefined", list
->expr
);
1156 /* Given a list LIST of references to variables, find whether any of these
1157 can cause conflicts due to missing sequence points. */
1160 warn_for_collisions (struct tlist
*list
)
1164 for (tmp
= list
; tmp
; tmp
= tmp
->next
)
1167 warn_for_collisions_1 (tmp
->expr
, tmp
->writer
, list
, 0);
1171 /* Return nonzero if X is a tree that can be verified by the sequence point
1174 warning_candidate_p (tree x
)
1176 return TREE_CODE (x
) == VAR_DECL
|| TREE_CODE (x
) == PARM_DECL
;
1179 /* Walk the tree X, and record accesses to variables. If X is written by the
1180 parent tree, WRITER is the parent.
1181 We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP. If this
1182 expression or its only operand forces a sequence point, then everything up
1183 to the sequence point is stored in PBEFORE_SP. Everything else gets stored
1185 Once we return, we will have emitted warnings if any subexpression before
1186 such a sequence point could be undefined. On a higher level, however, the
1187 sequence point may not be relevant, and we'll merge the two lists.
1189 Example: (b++, a) + b;
1190 The call that processes the COMPOUND_EXPR will store the increment of B
1191 in PBEFORE_SP, and the use of A in PNO_SP. The higher-level call that
1192 processes the PLUS_EXPR will need to merge the two lists so that
1193 eventually, all accesses end up on the same list (and we'll warn about the
1194 unordered subexpressions b++ and b.
1196 A note on merging. If we modify the former example so that our expression
1199 care must be taken not simply to add all three expressions into the final
1200 PNO_SP list. The function merge_tlist takes care of that by merging the
1201 before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1202 way, so that no more than one access to B is recorded. */
1205 verify_tree (tree x
, struct tlist
**pbefore_sp
, struct tlist
**pno_sp
,
1208 struct tlist
*tmp_before
, *tmp_nosp
, *tmp_list2
, *tmp_list3
;
1209 enum tree_code code
;
1210 enum tree_code_class cl
;
1212 /* X may be NULL if it is the operand of an empty statement expression
1218 code
= TREE_CODE (x
);
1219 cl
= TREE_CODE_CLASS (code
);
1221 if (warning_candidate_p (x
))
1223 *pno_sp
= new_tlist (*pno_sp
, x
, writer
);
1233 case TRUTH_ANDIF_EXPR
:
1234 case TRUTH_ORIF_EXPR
:
1235 tmp_before
= tmp_nosp
= tmp_list3
= 0;
1236 verify_tree (TREE_OPERAND (x
, 0), &tmp_before
, &tmp_nosp
, NULL_TREE
);
1237 warn_for_collisions (tmp_nosp
);
1238 merge_tlist (pbefore_sp
, tmp_before
, 0);
1239 merge_tlist (pbefore_sp
, tmp_nosp
, 0);
1240 verify_tree (TREE_OPERAND (x
, 1), &tmp_list3
, pno_sp
, NULL_TREE
);
1241 merge_tlist (pbefore_sp
, tmp_list3
, 0);
1245 tmp_before
= tmp_list2
= 0;
1246 verify_tree (TREE_OPERAND (x
, 0), &tmp_before
, &tmp_list2
, NULL_TREE
);
1247 warn_for_collisions (tmp_list2
);
1248 merge_tlist (pbefore_sp
, tmp_before
, 0);
1249 merge_tlist (pbefore_sp
, tmp_list2
, 1);
1251 tmp_list3
= tmp_nosp
= 0;
1252 verify_tree (TREE_OPERAND (x
, 1), &tmp_list3
, &tmp_nosp
, NULL_TREE
);
1253 warn_for_collisions (tmp_nosp
);
1254 merge_tlist (pbefore_sp
, tmp_list3
, 0);
1256 tmp_list3
= tmp_list2
= 0;
1257 verify_tree (TREE_OPERAND (x
, 2), &tmp_list3
, &tmp_list2
, NULL_TREE
);
1258 warn_for_collisions (tmp_list2
);
1259 merge_tlist (pbefore_sp
, tmp_list3
, 0);
1260 /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1261 two first, to avoid warning for (a ? b++ : b++). */
1262 merge_tlist (&tmp_nosp
, tmp_list2
, 0);
1263 add_tlist (pno_sp
, tmp_nosp
, NULL_TREE
, 0);
1266 case PREDECREMENT_EXPR
:
1267 case PREINCREMENT_EXPR
:
1268 case POSTDECREMENT_EXPR
:
1269 case POSTINCREMENT_EXPR
:
1270 verify_tree (TREE_OPERAND (x
, 0), pno_sp
, pno_sp
, x
);
1274 tmp_before
= tmp_nosp
= tmp_list3
= 0;
1275 verify_tree (TREE_OPERAND (x
, 1), &tmp_before
, &tmp_nosp
, NULL_TREE
);
1276 verify_tree (TREE_OPERAND (x
, 0), &tmp_list3
, &tmp_list3
, x
);
1277 /* Expressions inside the LHS are not ordered wrt. the sequence points
1278 in the RHS. Example:
1280 Despite the fact that the modification of "a" is in the before_sp
1281 list (tmp_before), it conflicts with the use of "a" in the LHS.
1282 We can handle this by adding the contents of tmp_list3
1283 to those of tmp_before, and redoing the collision warnings for that
1285 add_tlist (&tmp_before
, tmp_list3
, x
, 1);
1286 warn_for_collisions (tmp_before
);
1287 /* Exclude the LHS itself here; we first have to merge it into the
1288 tmp_nosp list. This is done to avoid warning for "a = a"; if we
1289 didn't exclude the LHS, we'd get it twice, once as a read and once
1291 add_tlist (pno_sp
, tmp_list3
, x
, 0);
1292 warn_for_collisions_1 (TREE_OPERAND (x
, 0), x
, tmp_nosp
, 1);
1294 merge_tlist (pbefore_sp
, tmp_before
, 0);
1295 if (warning_candidate_p (TREE_OPERAND (x
, 0)))
1296 merge_tlist (&tmp_nosp
, new_tlist (NULL
, TREE_OPERAND (x
, 0), x
), 0);
1297 add_tlist (pno_sp
, tmp_nosp
, NULL_TREE
, 1);
1301 /* We need to warn about conflicts among arguments and conflicts between
1302 args and the function address. Side effects of the function address,
1303 however, are not ordered by the sequence point of the call. */
1304 tmp_before
= tmp_nosp
= tmp_list2
= tmp_list3
= 0;
1305 verify_tree (TREE_OPERAND (x
, 0), &tmp_before
, &tmp_nosp
, NULL_TREE
);
1306 if (TREE_OPERAND (x
, 1))
1307 verify_tree (TREE_OPERAND (x
, 1), &tmp_list2
, &tmp_list3
, NULL_TREE
);
1308 merge_tlist (&tmp_list3
, tmp_list2
, 0);
1309 add_tlist (&tmp_before
, tmp_list3
, NULL_TREE
, 0);
1310 add_tlist (&tmp_before
, tmp_nosp
, NULL_TREE
, 0);
1311 warn_for_collisions (tmp_before
);
1312 add_tlist (pbefore_sp
, tmp_before
, NULL_TREE
, 0);
1316 /* Scan all the list, e.g. indices of multi dimensional array. */
1319 tmp_before
= tmp_nosp
= 0;
1320 verify_tree (TREE_VALUE (x
), &tmp_before
, &tmp_nosp
, NULL_TREE
);
1321 merge_tlist (&tmp_nosp
, tmp_before
, 0);
1322 add_tlist (pno_sp
, tmp_nosp
, NULL_TREE
, 0);
1329 struct tlist_cache
*t
;
1330 for (t
= save_expr_cache
; t
; t
= t
->next
)
1336 t
= XOBNEW (&tlist_obstack
, struct tlist_cache
);
1337 t
->next
= save_expr_cache
;
1339 save_expr_cache
= t
;
1341 tmp_before
= tmp_nosp
= 0;
1342 verify_tree (TREE_OPERAND (x
, 0), &tmp_before
, &tmp_nosp
, NULL_TREE
);
1343 warn_for_collisions (tmp_nosp
);
1348 struct tlist
*t
= tmp_nosp
;
1350 merge_tlist (&tmp_list3
, t
, 0);
1352 t
->cache_before_sp
= tmp_before
;
1353 t
->cache_after_sp
= tmp_list3
;
1355 merge_tlist (pbefore_sp
, t
->cache_before_sp
, 1);
1356 add_tlist (pno_sp
, t
->cache_after_sp
, NULL_TREE
, 1);
1361 /* For other expressions, simply recurse on their operands.
1362 Manual tail recursion for unary expressions.
1363 Other non-expressions need not be processed. */
1364 if (cl
== tcc_unary
)
1366 x
= TREE_OPERAND (x
, 0);
1370 else if (IS_EXPR_CODE_CLASS (cl
))
1373 int max
= TREE_CODE_LENGTH (TREE_CODE (x
));
1374 for (lp
= 0; lp
< max
; lp
++)
1376 tmp_before
= tmp_nosp
= 0;
1377 verify_tree (TREE_OPERAND (x
, lp
), &tmp_before
, &tmp_nosp
, 0);
1378 merge_tlist (&tmp_nosp
, tmp_before
, 0);
1379 add_tlist (pno_sp
, tmp_nosp
, NULL_TREE
, 0);
1386 /* Try to warn for undefined behavior in EXPR due to missing sequence
1390 verify_sequence_points (tree expr
)
1392 struct tlist
*before_sp
= 0, *after_sp
= 0;
1395 save_expr_cache
= 0;
1396 if (tlist_firstobj
== 0)
1398 gcc_obstack_init (&tlist_obstack
);
1399 tlist_firstobj
= (char *) obstack_alloc (&tlist_obstack
, 0);
1402 verify_tree (expr
, &before_sp
, &after_sp
, 0);
1403 warn_for_collisions (after_sp
);
1404 obstack_free (&tlist_obstack
, tlist_firstobj
);
1407 /* Validate the expression after `case' and apply default promotions. */
1410 check_case_value (tree value
)
1412 if (value
== NULL_TREE
)
1415 /* ??? Can we ever get nops here for a valid case value? We
1417 STRIP_TYPE_NOPS (value
);
1418 /* In C++, the following is allowed:
1421 switch (...) { case i: ... }
1423 So, we try to reduce the VALUE to a constant that way. */
1424 if (c_dialect_cxx ())
1426 value
= decl_constant_value (value
);
1427 STRIP_TYPE_NOPS (value
);
1428 value
= fold (value
);
1431 if (TREE_CODE (value
) == INTEGER_CST
)
1432 /* Promote char or short to int. */
1433 value
= perform_integral_promotions (value
);
1434 else if (value
!= error_mark_node
)
1436 error ("case label does not reduce to an integer constant");
1437 value
= error_mark_node
;
1440 constant_expression_warning (value
);
1445 /* See if the case values LOW and HIGH are in the range of the original
1446 type (i.e. before the default conversion to int) of the switch testing
1448 TYPE is the promoted type of the testing expression, and ORIG_TYPE is
1449 the type before promoting it. CASE_LOW_P is a pointer to the lower
1450 bound of the case label, and CASE_HIGH_P is the upper bound or NULL
1451 if the case is not a case range.
1452 The caller has to make sure that we are not called with NULL for
1453 CASE_LOW_P (i.e. the default case).
1454 Returns true if the case label is in range of ORIG_TYPE (satured or
1455 untouched) or false if the label is out of range. */
1458 check_case_bounds (tree type
, tree orig_type
,
1459 tree
*case_low_p
, tree
*case_high_p
)
1461 tree min_value
, max_value
;
1462 tree case_low
= *case_low_p
;
1463 tree case_high
= case_high_p
? *case_high_p
: case_low
;
1465 /* If there was a problem with the original type, do nothing. */
1466 if (orig_type
== error_mark_node
)
1469 min_value
= TYPE_MIN_VALUE (orig_type
);
1470 max_value
= TYPE_MAX_VALUE (orig_type
);
1472 /* Case label is less than minimum for type. */
1473 if (tree_int_cst_compare (case_low
, min_value
) < 0
1474 && tree_int_cst_compare (case_high
, min_value
) < 0)
1476 warning (0, "case label value is less than minimum value for type");
1480 /* Case value is greater than maximum for type. */
1481 if (tree_int_cst_compare (case_low
, max_value
) > 0
1482 && tree_int_cst_compare (case_high
, max_value
) > 0)
1484 warning (0, "case label value exceeds maximum value for type");
1488 /* Saturate lower case label value to minimum. */
1489 if (tree_int_cst_compare (case_high
, min_value
) >= 0
1490 && tree_int_cst_compare (case_low
, min_value
) < 0)
1492 warning (0, "lower value in case label range"
1493 " less than minimum value for type");
1494 case_low
= min_value
;
1497 /* Saturate upper case label value to maximum. */
1498 if (tree_int_cst_compare (case_low
, max_value
) <= 0
1499 && tree_int_cst_compare (case_high
, max_value
) > 0)
1501 warning (0, "upper value in case label range"
1502 " exceeds maximum value for type");
1503 case_high
= max_value
;
1506 if (*case_low_p
!= case_low
)
1507 *case_low_p
= convert (type
, case_low
);
1508 if (case_high_p
&& *case_high_p
!= case_high
)
1509 *case_high_p
= convert (type
, case_high
);
1514 /* Return an integer type with BITS bits of precision,
1515 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
1518 c_common_type_for_size (unsigned int bits
, int unsignedp
)
1520 if (bits
== TYPE_PRECISION (integer_type_node
))
1521 return unsignedp
? unsigned_type_node
: integer_type_node
;
1523 if (bits
== TYPE_PRECISION (signed_char_type_node
))
1524 return unsignedp
? unsigned_char_type_node
: signed_char_type_node
;
1526 if (bits
== TYPE_PRECISION (short_integer_type_node
))
1527 return unsignedp
? short_unsigned_type_node
: short_integer_type_node
;
1529 if (bits
== TYPE_PRECISION (long_integer_type_node
))
1530 return unsignedp
? long_unsigned_type_node
: long_integer_type_node
;
1532 if (bits
== TYPE_PRECISION (long_long_integer_type_node
))
1533 return (unsignedp
? long_long_unsigned_type_node
1534 : long_long_integer_type_node
);
1536 if (bits
== TYPE_PRECISION (widest_integer_literal_type_node
))
1537 return (unsignedp
? widest_unsigned_literal_type_node
1538 : widest_integer_literal_type_node
);
1540 if (bits
<= TYPE_PRECISION (intQI_type_node
))
1541 return unsignedp
? unsigned_intQI_type_node
: intQI_type_node
;
1543 if (bits
<= TYPE_PRECISION (intHI_type_node
))
1544 return unsignedp
? unsigned_intHI_type_node
: intHI_type_node
;
1546 if (bits
<= TYPE_PRECISION (intSI_type_node
))
1547 return unsignedp
? unsigned_intSI_type_node
: intSI_type_node
;
1549 if (bits
<= TYPE_PRECISION (intDI_type_node
))
1550 return unsignedp
? unsigned_intDI_type_node
: intDI_type_node
;
1555 /* Used for communication between c_common_type_for_mode and
1556 c_register_builtin_type. */
1557 static GTY(()) tree registered_builtin_types
;
1559 /* Return a data type that has machine mode MODE.
1560 If the mode is an integer,
1561 then UNSIGNEDP selects between signed and unsigned types. */
1564 c_common_type_for_mode (enum machine_mode mode
, int unsignedp
)
1568 if (mode
== TYPE_MODE (integer_type_node
))
1569 return unsignedp
? unsigned_type_node
: integer_type_node
;
1571 if (mode
== TYPE_MODE (signed_char_type_node
))
1572 return unsignedp
? unsigned_char_type_node
: signed_char_type_node
;
1574 if (mode
== TYPE_MODE (short_integer_type_node
))
1575 return unsignedp
? short_unsigned_type_node
: short_integer_type_node
;
1577 if (mode
== TYPE_MODE (long_integer_type_node
))
1578 return unsignedp
? long_unsigned_type_node
: long_integer_type_node
;
1580 if (mode
== TYPE_MODE (long_long_integer_type_node
))
1581 return unsignedp
? long_long_unsigned_type_node
: long_long_integer_type_node
;
1583 if (mode
== TYPE_MODE (widest_integer_literal_type_node
))
1584 return unsignedp
? widest_unsigned_literal_type_node
1585 : widest_integer_literal_type_node
;
1588 return unsignedp
? unsigned_intQI_type_node
: intQI_type_node
;
1591 return unsignedp
? unsigned_intHI_type_node
: intHI_type_node
;
1594 return unsignedp
? unsigned_intSI_type_node
: intSI_type_node
;
1597 return unsignedp
? unsigned_intDI_type_node
: intDI_type_node
;
1599 #if HOST_BITS_PER_WIDE_INT >= 64
1600 if (mode
== TYPE_MODE (intTI_type_node
))
1601 return unsignedp
? unsigned_intTI_type_node
: intTI_type_node
;
1604 if (mode
== TYPE_MODE (float_type_node
))
1605 return float_type_node
;
1607 if (mode
== TYPE_MODE (double_type_node
))
1608 return double_type_node
;
1610 if (mode
== TYPE_MODE (long_double_type_node
))
1611 return long_double_type_node
;
1613 if (mode
== TYPE_MODE (void_type_node
))
1614 return void_type_node
;
1616 if (mode
== TYPE_MODE (build_pointer_type (char_type_node
)))
1618 ? make_unsigned_type (GET_MODE_PRECISION (mode
))
1619 : make_signed_type (GET_MODE_PRECISION (mode
)));
1621 if (mode
== TYPE_MODE (build_pointer_type (integer_type_node
)))
1623 ? make_unsigned_type (GET_MODE_PRECISION (mode
))
1624 : make_signed_type (GET_MODE_PRECISION (mode
)));
1626 if (COMPLEX_MODE_P (mode
))
1628 enum machine_mode inner_mode
;
1631 if (mode
== TYPE_MODE (complex_float_type_node
))
1632 return complex_float_type_node
;
1633 if (mode
== TYPE_MODE (complex_double_type_node
))
1634 return complex_double_type_node
;
1635 if (mode
== TYPE_MODE (complex_long_double_type_node
))
1636 return complex_long_double_type_node
;
1638 if (mode
== TYPE_MODE (complex_integer_type_node
) && !unsignedp
)
1639 return complex_integer_type_node
;
1641 inner_mode
= GET_MODE_INNER (mode
);
1642 inner_type
= c_common_type_for_mode (inner_mode
, unsignedp
);
1643 if (inner_type
!= NULL_TREE
)
1644 return build_complex_type (inner_type
);
1646 else if (VECTOR_MODE_P (mode
))
1648 enum machine_mode inner_mode
= GET_MODE_INNER (mode
);
1649 tree inner_type
= c_common_type_for_mode (inner_mode
, unsignedp
);
1650 if (inner_type
!= NULL_TREE
)
1651 return build_vector_type_for_mode (inner_type
, mode
);
1654 for (t
= registered_builtin_types
; t
; t
= TREE_CHAIN (t
))
1655 if (TYPE_MODE (TREE_VALUE (t
)) == mode
)
1656 return TREE_VALUE (t
);
1661 /* Return an unsigned type the same as TYPE in other respects. */
1663 c_common_unsigned_type (tree type
)
1665 tree type1
= TYPE_MAIN_VARIANT (type
);
1666 if (type1
== signed_char_type_node
|| type1
== char_type_node
)
1667 return unsigned_char_type_node
;
1668 if (type1
== integer_type_node
)
1669 return unsigned_type_node
;
1670 if (type1
== short_integer_type_node
)
1671 return short_unsigned_type_node
;
1672 if (type1
== long_integer_type_node
)
1673 return long_unsigned_type_node
;
1674 if (type1
== long_long_integer_type_node
)
1675 return long_long_unsigned_type_node
;
1676 if (type1
== widest_integer_literal_type_node
)
1677 return widest_unsigned_literal_type_node
;
1678 #if HOST_BITS_PER_WIDE_INT >= 64
1679 if (type1
== intTI_type_node
)
1680 return unsigned_intTI_type_node
;
1682 if (type1
== intDI_type_node
)
1683 return unsigned_intDI_type_node
;
1684 if (type1
== intSI_type_node
)
1685 return unsigned_intSI_type_node
;
1686 if (type1
== intHI_type_node
)
1687 return unsigned_intHI_type_node
;
1688 if (type1
== intQI_type_node
)
1689 return unsigned_intQI_type_node
;
1691 return c_common_signed_or_unsigned_type (1, type
);
1694 /* Return a signed type the same as TYPE in other respects. */
1697 c_common_signed_type (tree type
)
1699 tree type1
= TYPE_MAIN_VARIANT (type
);
1700 if (type1
== unsigned_char_type_node
|| type1
== char_type_node
)
1701 return signed_char_type_node
;
1702 if (type1
== unsigned_type_node
)
1703 return integer_type_node
;
1704 if (type1
== short_unsigned_type_node
)
1705 return short_integer_type_node
;
1706 if (type1
== long_unsigned_type_node
)
1707 return long_integer_type_node
;
1708 if (type1
== long_long_unsigned_type_node
)
1709 return long_long_integer_type_node
;
1710 if (type1
== widest_unsigned_literal_type_node
)
1711 return widest_integer_literal_type_node
;
1712 #if HOST_BITS_PER_WIDE_INT >= 64
1713 if (type1
== unsigned_intTI_type_node
)
1714 return intTI_type_node
;
1716 if (type1
== unsigned_intDI_type_node
)
1717 return intDI_type_node
;
1718 if (type1
== unsigned_intSI_type_node
)
1719 return intSI_type_node
;
1720 if (type1
== unsigned_intHI_type_node
)
1721 return intHI_type_node
;
1722 if (type1
== unsigned_intQI_type_node
)
1723 return intQI_type_node
;
1725 return c_common_signed_or_unsigned_type (0, type
);
1728 /* Return a type the same as TYPE except unsigned or
1729 signed according to UNSIGNEDP. */
1732 c_common_signed_or_unsigned_type (int unsignedp
, tree type
)
1734 if (!INTEGRAL_TYPE_P (type
)
1735 || TYPE_UNSIGNED (type
) == unsignedp
)
1738 /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
1739 the precision; they have precision set to match their range, but
1740 may use a wider mode to match an ABI. If we change modes, we may
1741 wind up with bad conversions. For INTEGER_TYPEs in C, must check
1742 the precision as well, so as to yield correct results for
1743 bit-field types. C++ does not have these separate bit-field
1744 types, and producing a signed or unsigned variant of an
1745 ENUMERAL_TYPE may cause other problems as well. */
1747 #define TYPE_OK(node) \
1748 (TYPE_MODE (type) == TYPE_MODE (node) \
1749 && (c_dialect_cxx () || TYPE_PRECISION (type) == TYPE_PRECISION (node)))
1750 if (TYPE_OK (signed_char_type_node
))
1751 return unsignedp
? unsigned_char_type_node
: signed_char_type_node
;
1752 if (TYPE_OK (integer_type_node
))
1753 return unsignedp
? unsigned_type_node
: integer_type_node
;
1754 if (TYPE_OK (short_integer_type_node
))
1755 return unsignedp
? short_unsigned_type_node
: short_integer_type_node
;
1756 if (TYPE_OK (long_integer_type_node
))
1757 return unsignedp
? long_unsigned_type_node
: long_integer_type_node
;
1758 if (TYPE_OK (long_long_integer_type_node
))
1759 return (unsignedp
? long_long_unsigned_type_node
1760 : long_long_integer_type_node
);
1761 if (TYPE_OK (widest_integer_literal_type_node
))
1762 return (unsignedp
? widest_unsigned_literal_type_node
1763 : widest_integer_literal_type_node
);
1765 #if HOST_BITS_PER_WIDE_INT >= 64
1766 if (TYPE_OK (intTI_type_node
))
1767 return unsignedp
? unsigned_intTI_type_node
: intTI_type_node
;
1769 if (TYPE_OK (intDI_type_node
))
1770 return unsignedp
? unsigned_intDI_type_node
: intDI_type_node
;
1771 if (TYPE_OK (intSI_type_node
))
1772 return unsignedp
? unsigned_intSI_type_node
: intSI_type_node
;
1773 if (TYPE_OK (intHI_type_node
))
1774 return unsignedp
? unsigned_intHI_type_node
: intHI_type_node
;
1775 if (TYPE_OK (intQI_type_node
))
1776 return unsignedp
? unsigned_intQI_type_node
: intQI_type_node
;
1779 if (c_dialect_cxx ())
1782 return build_nonstandard_integer_type (TYPE_PRECISION (type
), unsignedp
);
1785 /* The C version of the register_builtin_type langhook. */
1788 c_register_builtin_type (tree type
, const char* name
)
1792 decl
= build_decl (TYPE_DECL
, get_identifier (name
), type
);
1793 DECL_ARTIFICIAL (decl
) = 1;
1794 if (!TYPE_NAME (type
))
1795 TYPE_NAME (type
) = decl
;
1798 registered_builtin_types
= tree_cons (0, type
, registered_builtin_types
);
1802 /* Return the minimum number of bits needed to represent VALUE in a
1803 signed or unsigned type, UNSIGNEDP says which. */
1806 min_precision (tree value
, int unsignedp
)
1810 /* If the value is negative, compute its negative minus 1. The latter
1811 adjustment is because the absolute value of the largest negative value
1812 is one larger than the largest positive value. This is equivalent to
1813 a bit-wise negation, so use that operation instead. */
1815 if (tree_int_cst_sgn (value
) < 0)
1816 value
= fold (build1 (BIT_NOT_EXPR
, TREE_TYPE (value
), value
));
1818 /* Return the number of bits needed, taking into account the fact
1819 that we need one more bit for a signed than unsigned type. */
1821 if (integer_zerop (value
))
1824 log
= tree_floor_log2 (value
);
1826 return log
+ 1 + !unsignedp
;
1829 /* Print an error message for invalid operands to arith operation
1830 CODE. NOP_EXPR is used as a special case (see
1831 c_common_truthvalue_conversion). */
1834 binary_op_error (enum tree_code code
)
1841 error ("invalid truth-value expression");
1845 opname
= "+"; break;
1847 opname
= "-"; break;
1849 opname
= "*"; break;
1851 opname
= "max"; break;
1853 opname
= "min"; break;
1855 opname
= "=="; break;
1857 opname
= "!="; break;
1859 opname
= "<="; break;
1861 opname
= ">="; break;
1863 opname
= "<"; break;
1865 opname
= ">"; break;
1867 opname
= "<<"; break;
1869 opname
= ">>"; break;
1870 case TRUNC_MOD_EXPR
:
1871 case FLOOR_MOD_EXPR
:
1872 opname
= "%"; break;
1873 case TRUNC_DIV_EXPR
:
1874 case FLOOR_DIV_EXPR
:
1875 opname
= "/"; break;
1877 opname
= "&"; break;
1879 opname
= "|"; break;
1880 case TRUTH_ANDIF_EXPR
:
1881 opname
= "&&"; break;
1882 case TRUTH_ORIF_EXPR
:
1883 opname
= "||"; break;
1885 opname
= "^"; break;
1889 error ("invalid operands to binary %s", opname
);
1892 /* Subroutine of build_binary_op, used for comparison operations.
1893 See if the operands have both been converted from subword integer types
1894 and, if so, perhaps change them both back to their original type.
1895 This function is also responsible for converting the two operands
1896 to the proper common type for comparison.
1898 The arguments of this function are all pointers to local variables
1899 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
1900 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
1902 If this function returns nonzero, it means that the comparison has
1903 a constant value. What this function returns is an expression for
1907 shorten_compare (tree
*op0_ptr
, tree
*op1_ptr
, tree
*restype_ptr
,
1908 enum tree_code
*rescode_ptr
)
1911 tree op0
= *op0_ptr
;
1912 tree op1
= *op1_ptr
;
1913 int unsignedp0
, unsignedp1
;
1915 tree primop0
, primop1
;
1916 enum tree_code code
= *rescode_ptr
;
1918 /* Throw away any conversions to wider types
1919 already present in the operands. */
1921 primop0
= get_narrower (op0
, &unsignedp0
);
1922 primop1
= get_narrower (op1
, &unsignedp1
);
1924 /* Handle the case that OP0 does not *contain* a conversion
1925 but it *requires* conversion to FINAL_TYPE. */
1927 if (op0
== primop0
&& TREE_TYPE (op0
) != *restype_ptr
)
1928 unsignedp0
= TYPE_UNSIGNED (TREE_TYPE (op0
));
1929 if (op1
== primop1
&& TREE_TYPE (op1
) != *restype_ptr
)
1930 unsignedp1
= TYPE_UNSIGNED (TREE_TYPE (op1
));
1932 /* If one of the operands must be floated, we cannot optimize. */
1933 real1
= TREE_CODE (TREE_TYPE (primop0
)) == REAL_TYPE
;
1934 real2
= TREE_CODE (TREE_TYPE (primop1
)) == REAL_TYPE
;
1936 /* If first arg is constant, swap the args (changing operation
1937 so value is preserved), for canonicalization. Don't do this if
1938 the second arg is 0. */
1940 if (TREE_CONSTANT (primop0
)
1941 && !integer_zerop (primop1
) && !real_zerop (primop1
))
1944 int temi
= unsignedp0
;
1952 unsignedp0
= unsignedp1
;
1975 *rescode_ptr
= code
;
1978 /* If comparing an integer against a constant more bits wide,
1979 maybe we can deduce a value of 1 or 0 independent of the data.
1980 Or else truncate the constant now
1981 rather than extend the variable at run time.
1983 This is only interesting if the constant is the wider arg.
1984 Also, it is not safe if the constant is unsigned and the
1985 variable arg is signed, since in this case the variable
1986 would be sign-extended and then regarded as unsigned.
1987 Our technique fails in this case because the lowest/highest
1988 possible unsigned results don't follow naturally from the
1989 lowest/highest possible values of the variable operand.
1990 For just EQ_EXPR and NE_EXPR there is another technique that
1991 could be used: see if the constant can be faithfully represented
1992 in the other operand's type, by truncating it and reextending it
1993 and see if that preserves the constant's value. */
1995 if (!real1
&& !real2
1996 && TREE_CODE (primop1
) == INTEGER_CST
1997 && TYPE_PRECISION (TREE_TYPE (primop0
)) < TYPE_PRECISION (*restype_ptr
))
1999 int min_gt
, max_gt
, min_lt
, max_lt
;
2000 tree maxval
, minval
;
2001 /* 1 if comparison is nominally unsigned. */
2002 int unsignedp
= TYPE_UNSIGNED (*restype_ptr
);
2005 type
= c_common_signed_or_unsigned_type (unsignedp0
,
2006 TREE_TYPE (primop0
));
2008 maxval
= TYPE_MAX_VALUE (type
);
2009 minval
= TYPE_MIN_VALUE (type
);
2011 if (unsignedp
&& !unsignedp0
)
2012 *restype_ptr
= c_common_signed_type (*restype_ptr
);
2014 if (TREE_TYPE (primop1
) != *restype_ptr
)
2016 /* Convert primop1 to target type, but do not introduce
2017 additional overflow. We know primop1 is an int_cst. */
2018 tree tmp
= build_int_cst_wide (*restype_ptr
,
2019 TREE_INT_CST_LOW (primop1
),
2020 TREE_INT_CST_HIGH (primop1
));
2022 primop1
= force_fit_type (tmp
, 0, TREE_OVERFLOW (primop1
),
2023 TREE_CONSTANT_OVERFLOW (primop1
));
2025 if (type
!= *restype_ptr
)
2027 minval
= convert (*restype_ptr
, minval
);
2028 maxval
= convert (*restype_ptr
, maxval
);
2031 if (unsignedp
&& unsignedp0
)
2033 min_gt
= INT_CST_LT_UNSIGNED (primop1
, minval
);
2034 max_gt
= INT_CST_LT_UNSIGNED (primop1
, maxval
);
2035 min_lt
= INT_CST_LT_UNSIGNED (minval
, primop1
);
2036 max_lt
= INT_CST_LT_UNSIGNED (maxval
, primop1
);
2040 min_gt
= INT_CST_LT (primop1
, minval
);
2041 max_gt
= INT_CST_LT (primop1
, maxval
);
2042 min_lt
= INT_CST_LT (minval
, primop1
);
2043 max_lt
= INT_CST_LT (maxval
, primop1
);
2047 /* This used to be a switch, but Genix compiler can't handle that. */
2048 if (code
== NE_EXPR
)
2050 if (max_lt
|| min_gt
)
2051 val
= truthvalue_true_node
;
2053 else if (code
== EQ_EXPR
)
2055 if (max_lt
|| min_gt
)
2056 val
= truthvalue_false_node
;
2058 else if (code
== LT_EXPR
)
2061 val
= truthvalue_true_node
;
2063 val
= truthvalue_false_node
;
2065 else if (code
== GT_EXPR
)
2068 val
= truthvalue_true_node
;
2070 val
= truthvalue_false_node
;
2072 else if (code
== LE_EXPR
)
2075 val
= truthvalue_true_node
;
2077 val
= truthvalue_false_node
;
2079 else if (code
== GE_EXPR
)
2082 val
= truthvalue_true_node
;
2084 val
= truthvalue_false_node
;
2087 /* If primop0 was sign-extended and unsigned comparison specd,
2088 we did a signed comparison above using the signed type bounds.
2089 But the comparison we output must be unsigned.
2091 Also, for inequalities, VAL is no good; but if the signed
2092 comparison had *any* fixed result, it follows that the
2093 unsigned comparison just tests the sign in reverse
2094 (positive values are LE, negative ones GE).
2095 So we can generate an unsigned comparison
2096 against an extreme value of the signed type. */
2098 if (unsignedp
&& !unsignedp0
)
2105 primop1
= TYPE_MIN_VALUE (type
);
2111 primop1
= TYPE_MAX_VALUE (type
);
2118 type
= c_common_unsigned_type (type
);
2121 if (TREE_CODE (primop0
) != INTEGER_CST
)
2123 if (val
== truthvalue_false_node
)
2124 warning (0, "comparison is always false due to limited range of data type");
2125 if (val
== truthvalue_true_node
)
2126 warning (0, "comparison is always true due to limited range of data type");
2131 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2132 if (TREE_SIDE_EFFECTS (primop0
))
2133 return build2 (COMPOUND_EXPR
, TREE_TYPE (val
), primop0
, val
);
2137 /* Value is not predetermined, but do the comparison
2138 in the type of the operand that is not constant.
2139 TYPE is already properly set. */
2141 else if (real1
&& real2
2142 && (TYPE_PRECISION (TREE_TYPE (primop0
))
2143 == TYPE_PRECISION (TREE_TYPE (primop1
))))
2144 type
= TREE_TYPE (primop0
);
2146 /* If args' natural types are both narrower than nominal type
2147 and both extend in the same manner, compare them
2148 in the type of the wider arg.
2149 Otherwise must actually extend both to the nominal
2150 common type lest different ways of extending
2152 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
2154 else if (unsignedp0
== unsignedp1
&& real1
== real2
2155 && TYPE_PRECISION (TREE_TYPE (primop0
)) < TYPE_PRECISION (*restype_ptr
)
2156 && TYPE_PRECISION (TREE_TYPE (primop1
)) < TYPE_PRECISION (*restype_ptr
))
2158 type
= common_type (TREE_TYPE (primop0
), TREE_TYPE (primop1
));
2159 type
= c_common_signed_or_unsigned_type (unsignedp0
2160 || TYPE_UNSIGNED (*restype_ptr
),
2162 /* Make sure shorter operand is extended the right way
2163 to match the longer operand. */
2165 = convert (c_common_signed_or_unsigned_type (unsignedp0
,
2166 TREE_TYPE (primop0
)),
2169 = convert (c_common_signed_or_unsigned_type (unsignedp1
,
2170 TREE_TYPE (primop1
)),
2175 /* Here we must do the comparison on the nominal type
2176 using the args exactly as we received them. */
2177 type
= *restype_ptr
;
2181 if (!real1
&& !real2
&& integer_zerop (primop1
)
2182 && TYPE_UNSIGNED (*restype_ptr
))
2188 /* All unsigned values are >= 0, so we warn if extra warnings
2189 are requested. However, if OP0 is a constant that is
2190 >= 0, the signedness of the comparison isn't an issue,
2191 so suppress the warning. */
2192 if (extra_warnings
&& !in_system_header
2193 && !(TREE_CODE (primop0
) == INTEGER_CST
2194 && !TREE_OVERFLOW (convert (c_common_signed_type (type
),
2196 warning (0, "comparison of unsigned expression >= 0 is always true");
2197 value
= truthvalue_true_node
;
2201 if (extra_warnings
&& !in_system_header
2202 && !(TREE_CODE (primop0
) == INTEGER_CST
2203 && !TREE_OVERFLOW (convert (c_common_signed_type (type
),
2205 warning (0, "comparison of unsigned expression < 0 is always false");
2206 value
= truthvalue_false_node
;
2215 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2216 if (TREE_SIDE_EFFECTS (primop0
))
2217 return build2 (COMPOUND_EXPR
, TREE_TYPE (value
),
2224 *op0_ptr
= convert (type
, primop0
);
2225 *op1_ptr
= convert (type
, primop1
);
2227 *restype_ptr
= truthvalue_type_node
;
2232 /* Return a tree for the sum or difference (RESULTCODE says which)
2233 of pointer PTROP and integer INTOP. */
2236 pointer_int_sum (enum tree_code resultcode
, tree ptrop
, tree intop
)
2240 /* The result is a pointer of the same type that is being added. */
2242 tree result_type
= TREE_TYPE (ptrop
);
2244 if (TREE_CODE (TREE_TYPE (result_type
)) == VOID_TYPE
)
2246 if (pedantic
|| warn_pointer_arith
)
2247 pedwarn ("pointer of type %<void *%> used in arithmetic");
2248 size_exp
= integer_one_node
;
2250 else if (TREE_CODE (TREE_TYPE (result_type
)) == FUNCTION_TYPE
)
2252 if (pedantic
|| warn_pointer_arith
)
2253 pedwarn ("pointer to a function used in arithmetic");
2254 size_exp
= integer_one_node
;
2256 else if (TREE_CODE (TREE_TYPE (result_type
)) == METHOD_TYPE
)
2258 if (pedantic
|| warn_pointer_arith
)
2259 pedwarn ("pointer to member function used in arithmetic");
2260 size_exp
= integer_one_node
;
2263 size_exp
= size_in_bytes (TREE_TYPE (result_type
));
2265 /* If what we are about to multiply by the size of the elements
2266 contains a constant term, apply distributive law
2267 and multiply that constant term separately.
2268 This helps produce common subexpressions. */
2270 if ((TREE_CODE (intop
) == PLUS_EXPR
|| TREE_CODE (intop
) == MINUS_EXPR
)
2271 && !TREE_CONSTANT (intop
)
2272 && TREE_CONSTANT (TREE_OPERAND (intop
, 1))
2273 && TREE_CONSTANT (size_exp
)
2274 /* If the constant comes from pointer subtraction,
2275 skip this optimization--it would cause an error. */
2276 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop
, 0))) == INTEGER_TYPE
2277 /* If the constant is unsigned, and smaller than the pointer size,
2278 then we must skip this optimization. This is because it could cause
2279 an overflow error if the constant is negative but INTOP is not. */
2280 && (!TYPE_UNSIGNED (TREE_TYPE (intop
))
2281 || (TYPE_PRECISION (TREE_TYPE (intop
))
2282 == TYPE_PRECISION (TREE_TYPE (ptrop
)))))
2284 enum tree_code subcode
= resultcode
;
2285 tree int_type
= TREE_TYPE (intop
);
2286 if (TREE_CODE (intop
) == MINUS_EXPR
)
2287 subcode
= (subcode
== PLUS_EXPR
? MINUS_EXPR
: PLUS_EXPR
);
2288 /* Convert both subexpression types to the type of intop,
2289 because weird cases involving pointer arithmetic
2290 can result in a sum or difference with different type args. */
2291 ptrop
= build_binary_op (subcode
, ptrop
,
2292 convert (int_type
, TREE_OPERAND (intop
, 1)), 1);
2293 intop
= convert (int_type
, TREE_OPERAND (intop
, 0));
2296 /* Convert the integer argument to a type the same size as sizetype
2297 so the multiply won't overflow spuriously. */
2299 if (TYPE_PRECISION (TREE_TYPE (intop
)) != TYPE_PRECISION (sizetype
)
2300 || TYPE_UNSIGNED (TREE_TYPE (intop
)) != TYPE_UNSIGNED (sizetype
))
2301 intop
= convert (c_common_type_for_size (TYPE_PRECISION (sizetype
),
2302 TYPE_UNSIGNED (sizetype
)), intop
);
2304 /* Replace the integer argument with a suitable product by the object size.
2305 Do this multiplication as signed, then convert to the appropriate
2306 pointer type (actually unsigned integral). */
2308 intop
= convert (result_type
,
2309 build_binary_op (MULT_EXPR
, intop
,
2310 convert (TREE_TYPE (intop
), size_exp
), 1));
2312 /* Create the sum or difference. */
2313 return fold (build2 (resultcode
, result_type
, ptrop
, intop
));
2316 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
2317 or for an `if' or `while' statement or ?..: exp. It should already
2318 have been validated to be of suitable type; otherwise, a bad
2319 diagnostic may result.
2321 This preparation consists of taking the ordinary
2322 representation of an expression expr and producing a valid tree
2323 boolean expression describing whether expr is nonzero. We could
2324 simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
2325 but we optimize comparisons, &&, ||, and !.
2327 The resulting type should always be `truthvalue_type_node'. */
2330 c_common_truthvalue_conversion (tree expr
)
2332 switch (TREE_CODE (expr
))
2334 case EQ_EXPR
: case NE_EXPR
: case UNEQ_EXPR
: case LTGT_EXPR
:
2335 case LE_EXPR
: case GE_EXPR
: case LT_EXPR
: case GT_EXPR
:
2336 case UNLE_EXPR
: case UNGE_EXPR
: case UNLT_EXPR
: case UNGT_EXPR
:
2337 case ORDERED_EXPR
: case UNORDERED_EXPR
:
2338 if (TREE_TYPE (expr
) == truthvalue_type_node
)
2340 return build2 (TREE_CODE (expr
), truthvalue_type_node
,
2341 TREE_OPERAND (expr
, 0), TREE_OPERAND (expr
, 1));
2343 case TRUTH_ANDIF_EXPR
:
2344 case TRUTH_ORIF_EXPR
:
2345 case TRUTH_AND_EXPR
:
2347 case TRUTH_XOR_EXPR
:
2348 if (TREE_TYPE (expr
) == truthvalue_type_node
)
2350 return build2 (TREE_CODE (expr
), truthvalue_type_node
,
2351 c_common_truthvalue_conversion (TREE_OPERAND (expr
, 0)),
2352 c_common_truthvalue_conversion (TREE_OPERAND (expr
, 1)));
2354 case TRUTH_NOT_EXPR
:
2355 if (TREE_TYPE (expr
) == truthvalue_type_node
)
2357 return build1 (TREE_CODE (expr
), truthvalue_type_node
,
2358 c_common_truthvalue_conversion (TREE_OPERAND (expr
, 0)));
2364 /* Avoid integer_zerop to ignore TREE_CONSTANT_OVERFLOW. */
2365 return (TREE_INT_CST_LOW (expr
) != 0 || TREE_INT_CST_HIGH (expr
) != 0)
2366 ? truthvalue_true_node
2367 : truthvalue_false_node
;
2370 return real_compare (NE_EXPR
, &TREE_REAL_CST (expr
), &dconst0
)
2371 ? truthvalue_true_node
2372 : truthvalue_false_node
;
2375 expr
= build_unary_op (ADDR_EXPR
, expr
, 0);
2380 if (TREE_CODE (TREE_OPERAND (expr
, 0)) == FUNCTION_DECL
2381 && !DECL_WEAK (TREE_OPERAND (expr
, 0)))
2383 /* Common Ada/Pascal programmer's mistake. We always warn
2384 about this since it is so bad. */
2385 warning (0, "the address of %qD, will always evaluate as %<true%>",
2386 TREE_OPERAND (expr
, 0));
2387 return truthvalue_true_node
;
2390 /* If we are taking the address of an external decl, it might be
2391 zero if it is weak, so we cannot optimize. */
2392 if (DECL_P (TREE_OPERAND (expr
, 0))
2393 && DECL_EXTERNAL (TREE_OPERAND (expr
, 0)))
2396 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr
, 0)))
2397 return build2 (COMPOUND_EXPR
, truthvalue_type_node
,
2398 TREE_OPERAND (expr
, 0), truthvalue_true_node
);
2400 return truthvalue_true_node
;
2404 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr
, 1))
2405 ? TRUTH_OR_EXPR
: TRUTH_ORIF_EXPR
),
2406 c_common_truthvalue_conversion (TREE_OPERAND (expr
, 0)),
2407 c_common_truthvalue_conversion (TREE_OPERAND (expr
, 1)),
2413 /* These don't change whether an object is nonzero or zero. */
2414 return c_common_truthvalue_conversion (TREE_OPERAND (expr
, 0));
2418 /* These don't change whether an object is zero or nonzero, but
2419 we can't ignore them if their second arg has side-effects. */
2420 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr
, 1)))
2421 return build2 (COMPOUND_EXPR
, truthvalue_type_node
,
2422 TREE_OPERAND (expr
, 1),
2423 c_common_truthvalue_conversion (TREE_OPERAND (expr
, 0)));
2425 return c_common_truthvalue_conversion (TREE_OPERAND (expr
, 0));
2428 /* Distribute the conversion into the arms of a COND_EXPR. */
2429 return fold (build3 (COND_EXPR
, truthvalue_type_node
,
2430 TREE_OPERAND (expr
, 0),
2431 c_common_truthvalue_conversion (TREE_OPERAND (expr
, 1)),
2432 c_common_truthvalue_conversion (TREE_OPERAND (expr
, 2))));
2435 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2436 since that affects how `default_conversion' will behave. */
2437 if (TREE_CODE (TREE_TYPE (expr
)) == REFERENCE_TYPE
2438 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr
, 0))) == REFERENCE_TYPE
)
2440 /* Fall through.... */
2442 /* If this is widening the argument, we can ignore it. */
2443 if (TYPE_PRECISION (TREE_TYPE (expr
))
2444 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr
, 0))))
2445 return c_common_truthvalue_conversion (TREE_OPERAND (expr
, 0));
2449 /* Perhaps reduce (x - y) != 0 to (x != y). The expressions
2450 aren't guaranteed to the be same for modes that can represent
2451 infinity, since if x and y are both +infinity, or both
2452 -infinity, then x - y is not a number.
2454 Note that this transformation is safe when x or y is NaN.
2455 (x - y) is then NaN, and both (x - y) != 0 and x != y will
2457 if (HONOR_INFINITIES (TYPE_MODE (TREE_TYPE (TREE_OPERAND (expr
, 0)))))
2459 /* Fall through.... */
2461 /* This and MINUS_EXPR can be changed into a comparison of the
2463 if (TREE_TYPE (TREE_OPERAND (expr
, 0))
2464 == TREE_TYPE (TREE_OPERAND (expr
, 1)))
2465 return build_binary_op (NE_EXPR
, TREE_OPERAND (expr
, 0),
2466 TREE_OPERAND (expr
, 1), 1);
2467 return build_binary_op (NE_EXPR
, TREE_OPERAND (expr
, 0),
2468 fold (build1 (NOP_EXPR
,
2469 TREE_TYPE (TREE_OPERAND (expr
, 0)),
2470 TREE_OPERAND (expr
, 1))), 1);
2473 if (integer_onep (TREE_OPERAND (expr
, 1))
2474 && TREE_TYPE (expr
) != truthvalue_type_node
)
2475 /* Using convert here would cause infinite recursion. */
2476 return build1 (NOP_EXPR
, truthvalue_type_node
, expr
);
2480 if (warn_parentheses
&& !TREE_NO_WARNING (expr
))
2481 warning (0, "suggest parentheses around assignment used as truth value");
2488 if (TREE_CODE (TREE_TYPE (expr
)) == COMPLEX_TYPE
)
2490 tree t
= save_expr (expr
);
2491 return (build_binary_op
2492 ((TREE_SIDE_EFFECTS (expr
)
2493 ? TRUTH_OR_EXPR
: TRUTH_ORIF_EXPR
),
2494 c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR
, t
, 0)),
2495 c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR
, t
, 0)),
2499 return build_binary_op (NE_EXPR
, expr
, integer_zero_node
, 1);
2502 static tree
builtin_function_2 (const char *builtin_name
, const char *name
,
2503 tree builtin_type
, tree type
,
2504 enum built_in_function function_code
,
2505 enum built_in_class cl
, int library_name_p
,
2509 /* Make a variant type in the proper way for C/C++, propagating qualifiers
2510 down to the element type of an array. */
2513 c_build_qualified_type (tree type
, int type_quals
)
2515 if (type
== error_mark_node
)
2518 if (TREE_CODE (type
) == ARRAY_TYPE
)
2521 tree element_type
= c_build_qualified_type (TREE_TYPE (type
),
2524 /* See if we already have an identically qualified type. */
2525 for (t
= TYPE_MAIN_VARIANT (type
); t
; t
= TYPE_NEXT_VARIANT (t
))
2527 if (TYPE_QUALS (strip_array_types (t
)) == type_quals
2528 && TYPE_NAME (t
) == TYPE_NAME (type
)
2529 && TYPE_CONTEXT (t
) == TYPE_CONTEXT (type
)
2530 && attribute_list_equal (TYPE_ATTRIBUTES (t
),
2531 TYPE_ATTRIBUTES (type
)))
2536 t
= build_variant_type_copy (type
);
2537 TREE_TYPE (t
) = element_type
;
2542 /* A restrict-qualified pointer type must be a pointer to object or
2543 incomplete type. Note that the use of POINTER_TYPE_P also allows
2544 REFERENCE_TYPEs, which is appropriate for C++. */
2545 if ((type_quals
& TYPE_QUAL_RESTRICT
)
2546 && (!POINTER_TYPE_P (type
)
2547 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type
))))
2549 error ("invalid use of %<restrict%>");
2550 type_quals
&= ~TYPE_QUAL_RESTRICT
;
2553 return build_qualified_type (type
, type_quals
);
2556 /* Apply the TYPE_QUALS to the new DECL. */
2559 c_apply_type_quals_to_decl (int type_quals
, tree decl
)
2561 tree type
= TREE_TYPE (decl
);
2563 if (type
== error_mark_node
)
2566 if (((type_quals
& TYPE_QUAL_CONST
)
2567 || (type
&& TREE_CODE (type
) == REFERENCE_TYPE
))
2568 /* An object declared 'const' is only readonly after it is
2569 initialized. We don't have any way of expressing this currently,
2570 so we need to be conservative and unset TREE_READONLY for types
2571 with constructors. Otherwise aliasing code will ignore stores in
2572 an inline constructor. */
2573 && !(type
&& TYPE_NEEDS_CONSTRUCTING (type
)))
2574 TREE_READONLY (decl
) = 1;
2575 if (type_quals
& TYPE_QUAL_VOLATILE
)
2577 TREE_SIDE_EFFECTS (decl
) = 1;
2578 TREE_THIS_VOLATILE (decl
) = 1;
2580 if (type_quals
& TYPE_QUAL_RESTRICT
)
2582 while (type
&& TREE_CODE (type
) == ARRAY_TYPE
)
2583 /* Allow 'restrict' on arrays of pointers.
2584 FIXME currently we just ignore it. */
2585 type
= TREE_TYPE (type
);
2587 || !POINTER_TYPE_P (type
)
2588 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type
)))
2589 error ("invalid use of %<restrict%>");
2590 else if (flag_strict_aliasing
&& type
== TREE_TYPE (decl
))
2591 /* Indicate we need to make a unique alias set for this pointer.
2592 We can't do it here because it might be pointing to an
2594 DECL_POINTER_ALIAS_SET (decl
) = -2;
2598 /* Hash function for the problem of multiple type definitions in
2599 different files. This must hash all types that will compare
2600 equal via comptypes to the same value. In practice it hashes
2601 on some of the simple stuff and leaves the details to comptypes. */
2604 c_type_hash (const void *p
)
2610 switch (TREE_CODE (t
))
2612 /* For pointers, hash on pointee type plus some swizzling. */
2614 return c_type_hash (TREE_TYPE (t
)) ^ 0x3003003;
2615 /* Hash on number of elements and total size. */
2618 t2
= TYPE_VALUES (t
);
2622 t2
= TYPE_FIELDS (t
);
2624 case QUAL_UNION_TYPE
:
2626 t2
= TYPE_FIELDS (t
);
2630 t2
= TYPE_FIELDS (t
);
2635 for (; t2
; t2
= TREE_CHAIN (t2
))
2637 size
= TREE_INT_CST_LOW (TYPE_SIZE (t
));
2638 return ((size
<< 24) | (i
<< shift
));
2641 static GTY((param_is (union tree_node
))) htab_t type_hash_table
;
2643 /* Return the typed-based alias set for T, which may be an expression
2644 or a type. Return -1 if we don't do anything special. */
2647 c_common_get_alias_set (tree t
)
2652 /* Permit type-punning when accessing a union, provided the access
2653 is directly through the union. For example, this code does not
2654 permit taking the address of a union member and then storing
2655 through it. Even the type-punning allowed here is a GCC
2656 extension, albeit a common and useful one; the C standard says
2657 that such accesses have implementation-defined behavior. */
2659 TREE_CODE (u
) == COMPONENT_REF
|| TREE_CODE (u
) == ARRAY_REF
;
2660 u
= TREE_OPERAND (u
, 0))
2661 if (TREE_CODE (u
) == COMPONENT_REF
2662 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u
, 0))) == UNION_TYPE
)
2665 /* That's all the expressions we handle specially. */
2669 /* The C standard guarantees that any object may be accessed via an
2670 lvalue that has character type. */
2671 if (t
== char_type_node
2672 || t
== signed_char_type_node
2673 || t
== unsigned_char_type_node
)
2676 /* If it has the may_alias attribute, it can alias anything. */
2677 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t
)))
2680 /* The C standard specifically allows aliasing between signed and
2681 unsigned variants of the same type. We treat the signed
2682 variant as canonical. */
2683 if (TREE_CODE (t
) == INTEGER_TYPE
&& TYPE_UNSIGNED (t
))
2685 tree t1
= c_common_signed_type (t
);
2687 /* t1 == t can happen for boolean nodes which are always unsigned. */
2689 return get_alias_set (t1
);
2691 else if (POINTER_TYPE_P (t
))
2695 /* Unfortunately, there is no canonical form of a pointer type.
2696 In particular, if we have `typedef int I', then `int *', and
2697 `I *' are different types. So, we have to pick a canonical
2698 representative. We do this below.
2700 Technically, this approach is actually more conservative that
2701 it needs to be. In particular, `const int *' and `int *'
2702 should be in different alias sets, according to the C and C++
2703 standard, since their types are not the same, and so,
2704 technically, an `int **' and `const int **' cannot point at
2707 But, the standard is wrong. In particular, this code is
2712 const int* const* cipp = ipp;
2714 And, it doesn't make sense for that to be legal unless you
2715 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
2716 the pointed-to types. This issue has been reported to the
2718 t1
= build_type_no_quals (t
);
2720 return get_alias_set (t1
);
2723 /* Handle the case of multiple type nodes referring to "the same" type,
2724 which occurs with IMA. These share an alias set. FIXME: Currently only
2725 C90 is handled. (In C99 type compatibility is not transitive, which
2726 complicates things mightily. The alias set splay trees can theoretically
2727 represent this, but insertion is tricky when you consider all the
2728 different orders things might arrive in.) */
2730 if (c_language
!= clk_c
|| flag_isoc99
)
2733 /* Save time if there's only one input file. */
2734 if (num_in_fnames
== 1)
2737 /* Pointers need special handling if they point to any type that
2738 needs special handling (below). */
2739 if (TREE_CODE (t
) == POINTER_TYPE
)
2742 /* Find bottom type under any nested POINTERs. */
2743 for (t2
= TREE_TYPE (t
);
2744 TREE_CODE (t2
) == POINTER_TYPE
;
2745 t2
= TREE_TYPE (t2
))
2747 if (TREE_CODE (t2
) != RECORD_TYPE
2748 && TREE_CODE (t2
) != ENUMERAL_TYPE
2749 && TREE_CODE (t2
) != QUAL_UNION_TYPE
2750 && TREE_CODE (t2
) != UNION_TYPE
)
2752 if (TYPE_SIZE (t2
) == 0)
2755 /* These are the only cases that need special handling. */
2756 if (TREE_CODE (t
) != RECORD_TYPE
2757 && TREE_CODE (t
) != ENUMERAL_TYPE
2758 && TREE_CODE (t
) != QUAL_UNION_TYPE
2759 && TREE_CODE (t
) != UNION_TYPE
2760 && TREE_CODE (t
) != POINTER_TYPE
)
2763 if (TYPE_SIZE (t
) == 0)
2766 /* Look up t in hash table. Only one of the compatible types within each
2767 alias set is recorded in the table. */
2768 if (!type_hash_table
)
2769 type_hash_table
= htab_create_ggc (1021, c_type_hash
,
2770 (htab_eq
) lang_hooks
.types_compatible_p
,
2772 slot
= htab_find_slot (type_hash_table
, t
, INSERT
);
2775 TYPE_ALIAS_SET (t
) = TYPE_ALIAS_SET ((tree
)*slot
);
2776 return TYPE_ALIAS_SET ((tree
)*slot
);
2779 /* Our caller will assign and record (in t) a new alias set; all we need
2780 to do is remember t in the hash table. */
2786 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
2787 second parameter indicates which OPERATOR is being applied. The COMPLAIN
2788 flag controls whether we should diagnose possibly ill-formed
2789 constructs or not. */
2792 c_sizeof_or_alignof_type (tree type
, bool is_sizeof
, int complain
)
2794 const char *op_name
;
2796 enum tree_code type_code
= TREE_CODE (type
);
2798 op_name
= is_sizeof
? "sizeof" : "__alignof__";
2800 if (type_code
== FUNCTION_TYPE
)
2804 if (complain
&& (pedantic
|| warn_pointer_arith
))
2805 pedwarn ("invalid application of %<sizeof%> to a function type");
2806 value
= size_one_node
;
2809 value
= size_int (FUNCTION_BOUNDARY
/ BITS_PER_UNIT
);
2811 else if (type_code
== VOID_TYPE
|| type_code
== ERROR_MARK
)
2813 if (type_code
== VOID_TYPE
2814 && complain
&& (pedantic
|| warn_pointer_arith
))
2815 pedwarn ("invalid application of %qs to a void type", op_name
);
2816 value
= size_one_node
;
2818 else if (!COMPLETE_TYPE_P (type
))
2821 error ("invalid application of %qs to incomplete type %qT ",
2823 value
= size_zero_node
;
2828 /* Convert in case a char is more than one unit. */
2829 value
= size_binop (CEIL_DIV_EXPR
, TYPE_SIZE_UNIT (type
),
2830 size_int (TYPE_PRECISION (char_type_node
)
2833 value
= size_int (TYPE_ALIGN_UNIT (type
));
2836 /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
2837 TYPE_IS_SIZETYPE means that certain things (like overflow) will
2838 never happen. However, this node should really have type
2839 `size_t', which is just a typedef for an ordinary integer type. */
2840 value
= fold (build1 (NOP_EXPR
, size_type_node
, value
));
2841 gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value
)));
2846 /* Implement the __alignof keyword: Return the minimum required
2847 alignment of EXPR, measured in bytes. For VAR_DECL's and
2848 FIELD_DECL's return DECL_ALIGN (which can be set from an
2849 "aligned" __attribute__ specification). */
2852 c_alignof_expr (tree expr
)
2856 if (TREE_CODE (expr
) == VAR_DECL
)
2857 t
= size_int (DECL_ALIGN_UNIT (expr
));
2859 else if (TREE_CODE (expr
) == COMPONENT_REF
2860 && DECL_C_BIT_FIELD (TREE_OPERAND (expr
, 1)))
2862 error ("%<__alignof%> applied to a bit-field");
2865 else if (TREE_CODE (expr
) == COMPONENT_REF
2866 && TREE_CODE (TREE_OPERAND (expr
, 1)) == FIELD_DECL
)
2867 t
= size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr
, 1)));
2869 else if (TREE_CODE (expr
) == INDIRECT_REF
)
2871 tree t
= TREE_OPERAND (expr
, 0);
2873 int bestalign
= TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t
)));
2875 while (TREE_CODE (t
) == NOP_EXPR
2876 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t
, 0))) == POINTER_TYPE
)
2880 t
= TREE_OPERAND (t
, 0);
2881 thisalign
= TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t
)));
2882 if (thisalign
> bestalign
)
2883 best
= t
, bestalign
= thisalign
;
2885 return c_alignof (TREE_TYPE (TREE_TYPE (best
)));
2888 return c_alignof (TREE_TYPE (expr
));
2890 return fold (build1 (NOP_EXPR
, size_type_node
, t
));
2893 /* Handle C and C++ default attributes. */
2895 enum built_in_attribute
2897 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
2898 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
2899 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
2900 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
2901 #include "builtin-attrs.def"
2902 #undef DEF_ATTR_NULL_TREE
2904 #undef DEF_ATTR_IDENT
2905 #undef DEF_ATTR_TREE_LIST
2909 static GTY(()) tree built_in_attributes
[(int) ATTR_LAST
];
2911 static void c_init_attributes (void);
2913 /* Build tree nodes and builtin functions common to both C and C++ language
2917 c_common_nodes_and_builtins (void)
2921 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
2922 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
2923 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
2924 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
2925 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
2926 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
2927 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
2928 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
2929 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
2930 #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
2931 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
2932 #include "builtin-types.def"
2933 #undef DEF_PRIMITIVE_TYPE
2934 #undef DEF_FUNCTION_TYPE_0
2935 #undef DEF_FUNCTION_TYPE_1
2936 #undef DEF_FUNCTION_TYPE_2
2937 #undef DEF_FUNCTION_TYPE_3
2938 #undef DEF_FUNCTION_TYPE_4
2939 #undef DEF_FUNCTION_TYPE_VAR_0
2940 #undef DEF_FUNCTION_TYPE_VAR_1
2941 #undef DEF_FUNCTION_TYPE_VAR_2
2942 #undef DEF_FUNCTION_TYPE_VAR_3
2943 #undef DEF_POINTER_TYPE
2947 typedef enum builtin_type builtin_type
;
2949 tree builtin_types
[(int) BT_LAST
];
2950 int wchar_type_size
;
2951 tree array_domain_type
;
2952 tree va_list_ref_type_node
;
2953 tree va_list_arg_type_node
;
2955 /* Define `int' and `char' first so that dbx will output them first. */
2956 record_builtin_type (RID_INT
, NULL
, integer_type_node
);
2957 record_builtin_type (RID_CHAR
, "char", char_type_node
);
2959 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
2960 "unsigned long", "long long unsigned" and "unsigned short" were in C++
2961 but not C. Are the conditionals here needed? */
2962 if (c_dialect_cxx ())
2963 record_builtin_type (RID_SIGNED
, NULL
, integer_type_node
);
2964 record_builtin_type (RID_LONG
, "long int", long_integer_type_node
);
2965 record_builtin_type (RID_UNSIGNED
, "unsigned int", unsigned_type_node
);
2966 record_builtin_type (RID_MAX
, "long unsigned int",
2967 long_unsigned_type_node
);
2968 if (c_dialect_cxx ())
2969 record_builtin_type (RID_MAX
, "unsigned long", long_unsigned_type_node
);
2970 record_builtin_type (RID_MAX
, "long long int",
2971 long_long_integer_type_node
);
2972 record_builtin_type (RID_MAX
, "long long unsigned int",
2973 long_long_unsigned_type_node
);
2974 if (c_dialect_cxx ())
2975 record_builtin_type (RID_MAX
, "long long unsigned",
2976 long_long_unsigned_type_node
);
2977 record_builtin_type (RID_SHORT
, "short int", short_integer_type_node
);
2978 record_builtin_type (RID_MAX
, "short unsigned int",
2979 short_unsigned_type_node
);
2980 if (c_dialect_cxx ())
2981 record_builtin_type (RID_MAX
, "unsigned short",
2982 short_unsigned_type_node
);
2984 /* Define both `signed char' and `unsigned char'. */
2985 record_builtin_type (RID_MAX
, "signed char", signed_char_type_node
);
2986 record_builtin_type (RID_MAX
, "unsigned char", unsigned_char_type_node
);
2988 /* These are types that c_common_type_for_size and
2989 c_common_type_for_mode use. */
2990 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
, NULL_TREE
,
2992 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
, NULL_TREE
,
2994 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
, NULL_TREE
,
2996 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
, NULL_TREE
,
2998 #if HOST_BITS_PER_WIDE_INT >= 64
2999 if (targetm
.scalar_mode_supported_p (TImode
))
3000 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
,
3001 get_identifier ("__int128_t"),
3004 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
, NULL_TREE
,
3005 unsigned_intQI_type_node
));
3006 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
, NULL_TREE
,
3007 unsigned_intHI_type_node
));
3008 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
, NULL_TREE
,
3009 unsigned_intSI_type_node
));
3010 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
, NULL_TREE
,
3011 unsigned_intDI_type_node
));
3012 #if HOST_BITS_PER_WIDE_INT >= 64
3013 if (targetm
.scalar_mode_supported_p (TImode
))
3014 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
,
3015 get_identifier ("__uint128_t"),
3016 unsigned_intTI_type_node
));
3019 /* Create the widest literal types. */
3020 widest_integer_literal_type_node
3021 = make_signed_type (HOST_BITS_PER_WIDE_INT
* 2);
3022 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
, NULL_TREE
,
3023 widest_integer_literal_type_node
));
3025 widest_unsigned_literal_type_node
3026 = make_unsigned_type (HOST_BITS_PER_WIDE_INT
* 2);
3027 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
, NULL_TREE
,
3028 widest_unsigned_literal_type_node
));
3030 /* `unsigned long' is the standard type for sizeof.
3031 Note that stddef.h uses `unsigned long',
3032 and this must agree, even if long and int are the same size. */
3034 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE
)));
3035 signed_size_type_node
= c_common_signed_type (size_type_node
);
3036 set_sizetype (size_type_node
);
3039 TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE
)));
3041 build_common_tree_nodes_2 (flag_short_double
);
3043 record_builtin_type (RID_FLOAT
, NULL
, float_type_node
);
3044 record_builtin_type (RID_DOUBLE
, NULL
, double_type_node
);
3045 record_builtin_type (RID_MAX
, "long double", long_double_type_node
);
3047 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
,
3048 get_identifier ("complex int"),
3049 complex_integer_type_node
));
3050 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
,
3051 get_identifier ("complex float"),
3052 complex_float_type_node
));
3053 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
,
3054 get_identifier ("complex double"),
3055 complex_double_type_node
));
3056 lang_hooks
.decls
.pushdecl
3057 (build_decl (TYPE_DECL
, get_identifier ("complex long double"),
3058 complex_long_double_type_node
));
3060 if (c_dialect_cxx ())
3061 /* For C++, make fileptr_type_node a distinct void * type until
3062 FILE type is defined. */
3063 fileptr_type_node
= build_variant_type_copy (ptr_type_node
);
3065 record_builtin_type (RID_VOID
, NULL
, void_type_node
);
3067 /* This node must not be shared. */
3068 void_zero_node
= make_node (INTEGER_CST
);
3069 TREE_TYPE (void_zero_node
) = void_type_node
;
3071 void_list_node
= build_void_list_node ();
3073 /* Make a type to be the domain of a few array types
3074 whose domains don't really matter.
3075 200 is small enough that it always fits in size_t
3076 and large enough that it can hold most function names for the
3077 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
3078 array_domain_type
= build_index_type (size_int (200));
3080 /* Make a type for arrays of characters.
3081 With luck nothing will ever really depend on the length of this
3083 char_array_type_node
3084 = build_array_type (char_type_node
, array_domain_type
);
3086 /* Likewise for arrays of ints. */
3088 = build_array_type (integer_type_node
, array_domain_type
);
3090 string_type_node
= build_pointer_type (char_type_node
);
3091 const_string_type_node
3092 = build_pointer_type (build_qualified_type
3093 (char_type_node
, TYPE_QUAL_CONST
));
3095 /* This is special for C++ so functions can be overloaded. */
3096 wchar_type_node
= get_identifier (MODIFIED_WCHAR_TYPE
);
3097 wchar_type_node
= TREE_TYPE (identifier_global_value (wchar_type_node
));
3098 wchar_type_size
= TYPE_PRECISION (wchar_type_node
);
3099 if (c_dialect_cxx ())
3101 if (TYPE_UNSIGNED (wchar_type_node
))
3102 wchar_type_node
= make_unsigned_type (wchar_type_size
);
3104 wchar_type_node
= make_signed_type (wchar_type_size
);
3105 record_builtin_type (RID_WCHAR
, "wchar_t", wchar_type_node
);
3109 signed_wchar_type_node
= c_common_signed_type (wchar_type_node
);
3110 unsigned_wchar_type_node
= c_common_unsigned_type (wchar_type_node
);
3113 /* This is for wide string constants. */
3114 wchar_array_type_node
3115 = build_array_type (wchar_type_node
, array_domain_type
);
3118 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE
)));
3121 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE
)));
3123 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE
)));
3125 default_function_type
= build_function_type (integer_type_node
, NULL_TREE
);
3127 = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE
)));
3128 unsigned_ptrdiff_type_node
= c_common_unsigned_type (ptrdiff_type_node
);
3130 lang_hooks
.decls
.pushdecl
3131 (build_decl (TYPE_DECL
, get_identifier ("__builtin_va_list"),
3132 va_list_type_node
));
3134 if (TREE_CODE (va_list_type_node
) == ARRAY_TYPE
)
3136 va_list_arg_type_node
= va_list_ref_type_node
=
3137 build_pointer_type (TREE_TYPE (va_list_type_node
));
3141 va_list_arg_type_node
= va_list_type_node
;
3142 va_list_ref_type_node
= build_reference_type (va_list_type_node
);
3145 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
3146 builtin_types[(int) ENUM] = VALUE;
3147 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
3148 builtin_types[(int) ENUM] \
3149 = build_function_type (builtin_types[(int) RETURN], \
3151 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
3152 builtin_types[(int) ENUM] \
3153 = build_function_type (builtin_types[(int) RETURN], \
3154 tree_cons (NULL_TREE, \
3155 builtin_types[(int) ARG1], \
3157 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
3158 builtin_types[(int) ENUM] \
3159 = build_function_type \
3160 (builtin_types[(int) RETURN], \
3161 tree_cons (NULL_TREE, \
3162 builtin_types[(int) ARG1], \
3163 tree_cons (NULL_TREE, \
3164 builtin_types[(int) ARG2], \
3166 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3167 builtin_types[(int) ENUM] \
3168 = build_function_type \
3169 (builtin_types[(int) RETURN], \
3170 tree_cons (NULL_TREE, \
3171 builtin_types[(int) ARG1], \
3172 tree_cons (NULL_TREE, \
3173 builtin_types[(int) ARG2], \
3174 tree_cons (NULL_TREE, \
3175 builtin_types[(int) ARG3], \
3177 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3178 builtin_types[(int) ENUM] \
3179 = build_function_type \
3180 (builtin_types[(int) RETURN], \
3181 tree_cons (NULL_TREE, \
3182 builtin_types[(int) ARG1], \
3183 tree_cons (NULL_TREE, \
3184 builtin_types[(int) ARG2], \
3187 builtin_types[(int) ARG3], \
3188 tree_cons (NULL_TREE, \
3189 builtin_types[(int) ARG4], \
3190 void_list_node)))));
3191 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
3192 builtin_types[(int) ENUM] \
3193 = build_function_type (builtin_types[(int) RETURN], NULL_TREE);
3194 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
3195 builtin_types[(int) ENUM] \
3196 = build_function_type (builtin_types[(int) RETURN], \
3197 tree_cons (NULL_TREE, \
3198 builtin_types[(int) ARG1], \
3201 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
3202 builtin_types[(int) ENUM] \
3203 = build_function_type \
3204 (builtin_types[(int) RETURN], \
3205 tree_cons (NULL_TREE, \
3206 builtin_types[(int) ARG1], \
3207 tree_cons (NULL_TREE, \
3208 builtin_types[(int) ARG2], \
3211 #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3212 builtin_types[(int) ENUM] \
3213 = build_function_type \
3214 (builtin_types[(int) RETURN], \
3215 tree_cons (NULL_TREE, \
3216 builtin_types[(int) ARG1], \
3217 tree_cons (NULL_TREE, \
3218 builtin_types[(int) ARG2], \
3219 tree_cons (NULL_TREE, \
3220 builtin_types[(int) ARG3], \
3223 #define DEF_POINTER_TYPE(ENUM, TYPE) \
3224 builtin_types[(int) ENUM] \
3225 = build_pointer_type (builtin_types[(int) TYPE]);
3226 #include "builtin-types.def"
3227 #undef DEF_PRIMITIVE_TYPE
3228 #undef DEF_FUNCTION_TYPE_1
3229 #undef DEF_FUNCTION_TYPE_2
3230 #undef DEF_FUNCTION_TYPE_3
3231 #undef DEF_FUNCTION_TYPE_4
3232 #undef DEF_FUNCTION_TYPE_VAR_0
3233 #undef DEF_FUNCTION_TYPE_VAR_1
3234 #undef DEF_FUNCTION_TYPE_VAR_2
3235 #undef DEF_FUNCTION_TYPE_VAR_3
3236 #undef DEF_POINTER_TYPE
3238 c_init_attributes ();
3240 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
3241 NONANSI_P, ATTRS, IMPLICIT, COND) \
3246 gcc_assert ((!BOTH_P && !FALLBACK_P) \
3247 || !strncmp (NAME, "__builtin_", \
3248 strlen ("__builtin_"))); \
3251 decl = lang_hooks.builtin_function (NAME, builtin_types[TYPE], \
3255 ? (NAME + strlen ("__builtin_")) \
3257 built_in_attributes[(int) ATTRS]); \
3259 decl = builtin_function_2 (NAME, \
3260 NAME + strlen ("__builtin_"), \
3261 builtin_types[TYPE], \
3262 builtin_types[LIBTYPE], \
3267 built_in_attributes[(int) ATTRS]); \
3269 built_in_decls[(int) ENUM] = decl; \
3271 implicit_built_in_decls[(int) ENUM] = decl; \
3273 #include "builtins.def"
3276 build_common_builtin_nodes ();
3278 targetm
.init_builtins ();
3282 main_identifier_node
= get_identifier ("main");
3284 /* Create the built-in __null node. It is important that this is
3286 null_node
= make_node (INTEGER_CST
);
3287 TREE_TYPE (null_node
) = c_common_type_for_size (POINTER_SIZE
, 0);
3290 /* Look up the function in built_in_decls that corresponds to DECL
3291 and set ASMSPEC as its user assembler name. DECL must be a
3292 function decl that declares a builtin. */
3295 set_builtin_user_assembler_name (tree decl
, const char *asmspec
)
3298 gcc_assert (TREE_CODE (decl
) == FUNCTION_DECL
3299 && DECL_BUILT_IN_CLASS (decl
) == BUILT_IN_NORMAL
3302 builtin
= built_in_decls
[DECL_FUNCTION_CODE (decl
)];
3303 set_user_assembler_name (builtin
, asmspec
);
3304 if (DECL_FUNCTION_CODE (decl
) == BUILT_IN_MEMCPY
)
3305 init_block_move_fn (asmspec
);
3306 else if (DECL_FUNCTION_CODE (decl
) == BUILT_IN_MEMSET
)
3307 init_block_clear_fn (asmspec
);
3311 build_va_arg (tree expr
, tree type
)
3313 return build1 (VA_ARG_EXPR
, type
, expr
);
3317 /* Linked list of disabled built-in functions. */
3319 typedef struct disabled_builtin
3322 struct disabled_builtin
*next
;
3324 static disabled_builtin
*disabled_builtins
= NULL
;
3326 static bool builtin_function_disabled_p (const char *);
3328 /* Disable a built-in function specified by -fno-builtin-NAME. If NAME
3329 begins with "__builtin_", give an error. */
3332 disable_builtin_function (const char *name
)
3334 if (strncmp (name
, "__builtin_", strlen ("__builtin_")) == 0)
3335 error ("cannot disable built-in function %qs", name
);
3338 disabled_builtin
*new_disabled_builtin
= XNEW (disabled_builtin
);
3339 new_disabled_builtin
->name
= name
;
3340 new_disabled_builtin
->next
= disabled_builtins
;
3341 disabled_builtins
= new_disabled_builtin
;
3346 /* Return true if the built-in function NAME has been disabled, false
3350 builtin_function_disabled_p (const char *name
)
3352 disabled_builtin
*p
;
3353 for (p
= disabled_builtins
; p
!= NULL
; p
= p
->next
)
3355 if (strcmp (name
, p
->name
) == 0)
3362 /* Possibly define a builtin function with one or two names. BUILTIN_NAME
3363 is an __builtin_-prefixed name; NAME is the ordinary name; one or both
3364 of these may be NULL (though both being NULL is useless).
3365 BUILTIN_TYPE is the type of the __builtin_-prefixed function;
3366 TYPE is the type of the function with the ordinary name. These
3367 may differ if the ordinary name is declared with a looser type to avoid
3368 conflicts with headers. FUNCTION_CODE and CL are as for
3369 builtin_function. If LIBRARY_NAME_P is nonzero, NAME is passed as
3370 the LIBRARY_NAME parameter to builtin_function when declaring BUILTIN_NAME.
3371 If NONANSI_P is true, the name NAME is treated as a non-ANSI name;
3372 ATTRS is the tree list representing the builtin's function attributes.
3373 Returns the declaration of BUILTIN_NAME, if any, otherwise
3374 the declaration of NAME. Does not declare NAME if flag_no_builtin,
3375 or if NONANSI_P and flag_no_nonansi_builtin. */
3378 builtin_function_2 (const char *builtin_name
, const char *name
,
3379 tree builtin_type
, tree type
,
3380 enum built_in_function function_code
,
3381 enum built_in_class cl
, int library_name_p
,
3382 bool nonansi_p
, tree attrs
)
3384 tree bdecl
= NULL_TREE
;
3385 tree decl
= NULL_TREE
;
3387 if (builtin_name
!= 0)
3388 bdecl
= lang_hooks
.builtin_function (builtin_name
, builtin_type
,
3390 library_name_p
? name
: NULL
, attrs
);
3392 if (name
!= 0 && !flag_no_builtin
&& !builtin_function_disabled_p (name
)
3393 && !(nonansi_p
&& flag_no_nonansi_builtin
))
3394 decl
= lang_hooks
.builtin_function (name
, type
, function_code
, cl
,
3397 return (bdecl
!= 0 ? bdecl
: decl
);
3400 /* Nonzero if the type T promotes to int. This is (nearly) the
3401 integral promotions defined in ISO C99 6.3.1.1/2. */
3404 c_promoting_integer_type_p (tree t
)
3406 switch (TREE_CODE (t
))
3409 return (TYPE_MAIN_VARIANT (t
) == char_type_node
3410 || TYPE_MAIN_VARIANT (t
) == signed_char_type_node
3411 || TYPE_MAIN_VARIANT (t
) == unsigned_char_type_node
3412 || TYPE_MAIN_VARIANT (t
) == short_integer_type_node
3413 || TYPE_MAIN_VARIANT (t
) == short_unsigned_type_node
3414 || TYPE_PRECISION (t
) < TYPE_PRECISION (integer_type_node
));
3417 /* ??? Technically all enumerations not larger than an int
3418 promote to an int. But this is used along code paths
3419 that only want to notice a size change. */
3420 return TYPE_PRECISION (t
) < TYPE_PRECISION (integer_type_node
);
3430 /* Return 1 if PARMS specifies a fixed number of parameters
3431 and none of their types is affected by default promotions. */
3434 self_promoting_args_p (tree parms
)
3437 for (t
= parms
; t
; t
= TREE_CHAIN (t
))
3439 tree type
= TREE_VALUE (t
);
3441 if (TREE_CHAIN (t
) == 0 && type
!= void_type_node
)
3447 if (TYPE_MAIN_VARIANT (type
) == float_type_node
)
3450 if (c_promoting_integer_type_p (type
))
3456 /* Recursively examines the array elements of TYPE, until a non-array
3457 element type is found. */
3460 strip_array_types (tree type
)
3462 while (TREE_CODE (type
) == ARRAY_TYPE
)
3463 type
= TREE_TYPE (type
);
3468 /* Recursively remove any '*' or '&' operator from TYPE. */
3470 strip_pointer_operator (tree t
)
3472 while (POINTER_TYPE_P (t
))
3477 /* Used to compare case labels. K1 and K2 are actually tree nodes
3478 representing case labels, or NULL_TREE for a `default' label.
3479 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
3480 K2, and 0 if K1 and K2 are equal. */
3483 case_compare (splay_tree_key k1
, splay_tree_key k2
)
3485 /* Consider a NULL key (such as arises with a `default' label) to be
3486 smaller than anything else. */
3492 return tree_int_cst_compare ((tree
) k1
, (tree
) k2
);
3495 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE. If
3496 LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
3497 actually a `default' label. If only HIGH_VALUE is NULL_TREE, then
3498 case label was declared using the usual C/C++ syntax, rather than
3499 the GNU case range extension. CASES is a tree containing all the
3500 case ranges processed so far; COND is the condition for the
3501 switch-statement itself. Returns the CASE_LABEL_EXPR created, or
3502 ERROR_MARK_NODE if no CASE_LABEL_EXPR is created. */
3505 c_add_case_label (splay_tree cases
, tree cond
, tree orig_type
,
3506 tree low_value
, tree high_value
)
3511 splay_tree_node node
;
3513 /* Create the LABEL_DECL itself. */
3514 label
= create_artificial_label ();
3516 /* If there was an error processing the switch condition, bail now
3517 before we get more confused. */
3518 if (!cond
|| cond
== error_mark_node
)
3521 if ((low_value
&& TREE_TYPE (low_value
)
3522 && POINTER_TYPE_P (TREE_TYPE (low_value
)))
3523 || (high_value
&& TREE_TYPE (high_value
)
3524 && POINTER_TYPE_P (TREE_TYPE (high_value
))))
3526 error ("pointers are not permitted as case values");
3530 /* Case ranges are a GNU extension. */
3531 if (high_value
&& pedantic
)
3532 pedwarn ("range expressions in switch statements are non-standard");
3534 type
= TREE_TYPE (cond
);
3537 low_value
= check_case_value (low_value
);
3538 low_value
= convert_and_check (type
, low_value
);
3542 high_value
= check_case_value (high_value
);
3543 high_value
= convert_and_check (type
, high_value
);
3546 /* If an error has occurred, bail out now. */
3547 if (low_value
== error_mark_node
|| high_value
== error_mark_node
)
3550 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
3551 really a case range, even though it was written that way. Remove
3552 the HIGH_VALUE to simplify later processing. */
3553 if (tree_int_cst_equal (low_value
, high_value
))
3554 high_value
= NULL_TREE
;
3555 if (low_value
&& high_value
3556 && !tree_int_cst_lt (low_value
, high_value
))
3557 warning (0, "empty range specified");
3559 /* See if the case is in range of the type of the original testing
3560 expression. If both low_value and high_value are out of range,
3561 don't insert the case label and return NULL_TREE. */
3563 && !check_case_bounds (type
, orig_type
,
3564 &low_value
, high_value
? &high_value
: NULL
))
3567 /* Look up the LOW_VALUE in the table of case labels we already
3569 node
= splay_tree_lookup (cases
, (splay_tree_key
) low_value
);
3570 /* If there was not an exact match, check for overlapping ranges.
3571 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
3572 that's a `default' label and the only overlap is an exact match. */
3573 if (!node
&& (low_value
|| high_value
))
3575 splay_tree_node low_bound
;
3576 splay_tree_node high_bound
;
3578 /* Even though there wasn't an exact match, there might be an
3579 overlap between this case range and another case range.
3580 Since we've (inductively) not allowed any overlapping case
3581 ranges, we simply need to find the greatest low case label
3582 that is smaller that LOW_VALUE, and the smallest low case
3583 label that is greater than LOW_VALUE. If there is an overlap
3584 it will occur in one of these two ranges. */
3585 low_bound
= splay_tree_predecessor (cases
,
3586 (splay_tree_key
) low_value
);
3587 high_bound
= splay_tree_successor (cases
,
3588 (splay_tree_key
) low_value
);
3590 /* Check to see if the LOW_BOUND overlaps. It is smaller than
3591 the LOW_VALUE, so there is no need to check unless the
3592 LOW_BOUND is in fact itself a case range. */
3594 && CASE_HIGH ((tree
) low_bound
->value
)
3595 && tree_int_cst_compare (CASE_HIGH ((tree
) low_bound
->value
),
3598 /* Check to see if the HIGH_BOUND overlaps. The low end of that
3599 range is bigger than the low end of the current range, so we
3600 are only interested if the current range is a real range, and
3601 not an ordinary case label. */
3604 && (tree_int_cst_compare ((tree
) high_bound
->key
,
3609 /* If there was an overlap, issue an error. */
3612 tree duplicate
= CASE_LABEL ((tree
) node
->value
);
3616 error ("duplicate (or overlapping) case value");
3617 error ("%Jthis is the first entry overlapping that value", duplicate
);
3621 error ("duplicate case value") ;
3622 error ("%Jpreviously used here", duplicate
);
3626 error ("multiple default labels in one switch");
3627 error ("%Jthis is the first default label", duplicate
);
3632 /* Add a CASE_LABEL to the statement-tree. */
3633 case_label
= add_stmt (build_case_label (low_value
, high_value
, label
));
3634 /* Register this case label in the splay tree. */
3635 splay_tree_insert (cases
,
3636 (splay_tree_key
) low_value
,
3637 (splay_tree_value
) case_label
);
3642 /* Add a label so that the back-end doesn't think that the beginning of
3643 the switch is unreachable. Note that we do not add a case label, as
3644 that just leads to duplicates and thence to failure later on. */
3647 tree t
= create_artificial_label ();
3648 add_stmt (build_stmt (LABEL_EXPR
, t
));
3650 return error_mark_node
;
3653 /* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
3654 Used to verify that case values match up with enumerator values. */
3657 match_case_to_enum_1 (tree key
, tree type
, tree label
)
3659 char buf
[2 + 2*HOST_BITS_PER_WIDE_INT
/4 + 1];
3661 /* ??? Not working too hard to print the double-word value.
3662 Should perhaps be done with %lwd in the diagnostic routines? */
3663 if (TREE_INT_CST_HIGH (key
) == 0)
3664 snprintf (buf
, sizeof (buf
), HOST_WIDE_INT_PRINT_UNSIGNED
,
3665 TREE_INT_CST_LOW (key
));
3666 else if (!TYPE_UNSIGNED (type
)
3667 && TREE_INT_CST_HIGH (key
) == -1
3668 && TREE_INT_CST_LOW (key
) != 0)
3669 snprintf (buf
, sizeof (buf
), "-" HOST_WIDE_INT_PRINT_UNSIGNED
,
3670 -TREE_INT_CST_LOW (key
));
3672 snprintf (buf
, sizeof (buf
), HOST_WIDE_INT_PRINT_DOUBLE_HEX
,
3673 TREE_INT_CST_HIGH (key
), TREE_INT_CST_LOW (key
));
3675 if (TYPE_NAME (type
) == 0)
3676 warning (0, "%Jcase value %qs not in enumerated type",
3677 CASE_LABEL (label
), buf
);
3679 warning (0, "%Jcase value %qs not in enumerated type %qT",
3680 CASE_LABEL (label
), buf
, type
);
3684 match_case_to_enum (splay_tree_node node
, void *data
)
3686 tree label
= (tree
) node
->value
;
3687 tree type
= (tree
) data
;
3689 /* Skip default case. */
3690 if (!CASE_LOW (label
))
3693 /* If TREE_ADDRESSABLE is not set, that means CASE_LOW did not appear
3694 when we did our enum->case scan. Reset our scratch bit after. */
3695 if (!TREE_ADDRESSABLE (label
))
3696 match_case_to_enum_1 (CASE_LOW (label
), type
, label
);
3698 TREE_ADDRESSABLE (label
) = 0;
3700 /* If CASE_HIGH is non-null, we have a range. Here we must search.
3701 Note that the old code in stmt.c did not check for the values in
3702 the range either, just the endpoints. */
3703 if (CASE_HIGH (label
))
3705 tree chain
, key
= CASE_HIGH (label
);
3707 for (chain
= TYPE_VALUES (type
);
3708 chain
&& !tree_int_cst_equal (key
, TREE_VALUE (chain
));
3709 chain
= TREE_CHAIN (chain
))
3712 match_case_to_enum_1 (key
, type
, label
);
3718 /* Handle -Wswitch*. Called from the front end after parsing the
3719 switch construct. */
3720 /* ??? Should probably be somewhere generic, since other languages
3721 besides C and C++ would want this. At the moment, however, C/C++
3722 are the only tree-ssa languages that support enumerations at all,
3723 so the point is moot. */
3726 c_do_switch_warnings (splay_tree cases
, location_t switch_location
,
3727 tree type
, tree cond
)
3729 splay_tree_node default_node
;
3731 if (!warn_switch
&& !warn_switch_enum
&& !warn_switch_default
)
3734 default_node
= splay_tree_lookup (cases
, (splay_tree_key
) NULL
);
3735 if (warn_switch_default
&& !default_node
)
3736 warning (0, "%Hswitch missing default case", &switch_location
);
3738 /* If the switch expression was an enumerated type, check that
3739 exactly all enumeration literals are covered by the cases.
3740 The check is made when -Wswitch was specified and there is no
3741 default case, or when -Wswitch-enum was specified. */
3742 if (((warn_switch
&& !default_node
) || warn_switch_enum
)
3743 && type
&& TREE_CODE (type
) == ENUMERAL_TYPE
3744 && TREE_CODE (cond
) != INTEGER_CST
)
3748 /* The time complexity here is O(N*lg(N)) worst case, but for the
3749 common case of monotonically increasing enumerators, it is
3750 O(N), since the nature of the splay tree will keep the next
3751 element adjacent to the root at all times. */
3753 for (chain
= TYPE_VALUES (type
); chain
; chain
= TREE_CHAIN (chain
))
3755 splay_tree_node node
3756 = splay_tree_lookup (cases
, (splay_tree_key
) TREE_VALUE (chain
));
3760 /* Mark the CASE_LOW part of the case entry as seen, so
3761 that we save time later. Choose TREE_ADDRESSABLE
3762 randomly as a bit that won't have been set to-date. */
3763 tree label
= (tree
) node
->value
;
3764 TREE_ADDRESSABLE (label
) = 1;
3768 /* Warn if there are enumerators that don't correspond to
3769 case expressions. */
3770 warning (0, "%Henumeration value %qE not handled in switch",
3771 &switch_location
, TREE_PURPOSE (chain
));
3775 /* Warn if there are case expressions that don't correspond to
3776 enumerators. This can occur since C and C++ don't enforce
3777 type-checking of assignments to enumeration variables.
3779 The time complexity here is O(N**2) worst case, since we've
3780 not sorted the enumeration values. However, in the absence
3781 of case ranges this is O(N), since all single cases that
3782 corresponded to enumerations have been marked above. */
3784 splay_tree_foreach (cases
, match_case_to_enum
, type
);
3788 /* Finish an expression taking the address of LABEL (an
3789 IDENTIFIER_NODE). Returns an expression for the address. */
3792 finish_label_address_expr (tree label
)
3797 pedwarn ("taking the address of a label is non-standard");
3799 if (label
== error_mark_node
)
3800 return error_mark_node
;
3802 label
= lookup_label (label
);
3803 if (label
== NULL_TREE
)
3804 result
= null_pointer_node
;
3807 TREE_USED (label
) = 1;
3808 result
= build1 (ADDR_EXPR
, ptr_type_node
, label
);
3809 /* The current function in not necessarily uninlinable.
3810 Computed gotos are incompatible with inlining, but the value
3811 here could be used only in a diagnostic, for example. */
3817 /* Hook used by expand_expr to expand language-specific tree codes. */
3818 /* The only things that should go here are bits needed to expand
3819 constant initializers. Everything else should be handled by the
3820 gimplification routines. */
3823 c_expand_expr (tree exp
, rtx target
, enum machine_mode tmode
,
3824 int modifier
/* Actually enum_modifier. */,
3827 switch (TREE_CODE (exp
))
3829 case COMPOUND_LITERAL_EXPR
:
3831 /* Initialize the anonymous variable declared in the compound
3832 literal, then return the variable. */
3833 tree decl
= COMPOUND_LITERAL_EXPR_DECL (exp
);
3834 emit_local_var (decl
);
3835 return expand_expr_real (decl
, target
, tmode
, modifier
, alt_rtl
);
3843 /* Hook used by staticp to handle language-specific tree codes. */
3846 c_staticp (tree exp
)
3848 return (TREE_CODE (exp
) == COMPOUND_LITERAL_EXPR
3849 && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp
))
3854 /* Given a boolean expression ARG, return a tree representing an increment
3855 or decrement (as indicated by CODE) of ARG. The front end must check for
3856 invalid cases (e.g., decrement in C++). */
3858 boolean_increment (enum tree_code code
, tree arg
)
3861 tree true_res
= boolean_true_node
;
3863 arg
= stabilize_reference (arg
);
3866 case PREINCREMENT_EXPR
:
3867 val
= build2 (MODIFY_EXPR
, TREE_TYPE (arg
), arg
, true_res
);
3869 case POSTINCREMENT_EXPR
:
3870 val
= build2 (MODIFY_EXPR
, TREE_TYPE (arg
), arg
, true_res
);
3871 arg
= save_expr (arg
);
3872 val
= build2 (COMPOUND_EXPR
, TREE_TYPE (arg
), val
, arg
);
3873 val
= build2 (COMPOUND_EXPR
, TREE_TYPE (arg
), arg
, val
);
3875 case PREDECREMENT_EXPR
:
3876 val
= build2 (MODIFY_EXPR
, TREE_TYPE (arg
), arg
,
3877 invert_truthvalue (arg
));
3879 case POSTDECREMENT_EXPR
:
3880 val
= build2 (MODIFY_EXPR
, TREE_TYPE (arg
), arg
,
3881 invert_truthvalue (arg
));
3882 arg
= save_expr (arg
);
3883 val
= build2 (COMPOUND_EXPR
, TREE_TYPE (arg
), val
, arg
);
3884 val
= build2 (COMPOUND_EXPR
, TREE_TYPE (arg
), arg
, val
);
3889 TREE_SIDE_EFFECTS (val
) = 1;
3893 /* Built-in macros for stddef.h, that require macros defined in this
3896 c_stddef_cpp_builtins(void)
3898 builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE
, 0);
3899 builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE
, 0);
3900 builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE
, 0);
3901 builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE
, 0);
3902 builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE
, 0);
3903 builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE
, 0);
3907 c_init_attributes (void)
3909 /* Fill in the built_in_attributes array. */
3910 #define DEF_ATTR_NULL_TREE(ENUM) \
3911 built_in_attributes[(int) ENUM] = NULL_TREE;
3912 #define DEF_ATTR_INT(ENUM, VALUE) \
3913 built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
3914 #define DEF_ATTR_IDENT(ENUM, STRING) \
3915 built_in_attributes[(int) ENUM] = get_identifier (STRING);
3916 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
3917 built_in_attributes[(int) ENUM] \
3918 = tree_cons (built_in_attributes[(int) PURPOSE], \
3919 built_in_attributes[(int) VALUE], \
3920 built_in_attributes[(int) CHAIN]);
3921 #include "builtin-attrs.def"
3922 #undef DEF_ATTR_NULL_TREE
3924 #undef DEF_ATTR_IDENT
3925 #undef DEF_ATTR_TREE_LIST
3928 /* Attribute handlers common to C front ends. */
3930 /* Handle a "packed" attribute; arguments as in
3931 struct attribute_spec.handler. */
3934 handle_packed_attribute (tree
*node
, tree name
, tree
ARG_UNUSED (args
),
3935 int flags
, bool *no_add_attrs
)
3939 if (!(flags
& (int) ATTR_FLAG_TYPE_IN_PLACE
))
3940 *node
= build_variant_type_copy (*node
);
3941 TYPE_PACKED (*node
) = 1;
3942 if (TYPE_MAIN_VARIANT (*node
) == *node
)
3944 /* If it is the main variant, then pack the other variants
3945 too. This happens in,
3948 struct Foo const *ptr; // creates a variant w/o packed flag
3949 } __ attribute__((packed)); // packs it now.
3953 for (probe
= *node
; probe
; probe
= TYPE_NEXT_VARIANT (probe
))
3954 TYPE_PACKED (probe
) = 1;
3958 else if (TREE_CODE (*node
) == FIELD_DECL
)
3959 DECL_PACKED (*node
) = 1;
3960 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
3961 used for DECL_REGISTER. It wouldn't mean anything anyway.
3962 We can't set DECL_PACKED on the type of a TYPE_DECL, because
3963 that changes what the typedef is typing. */
3966 warning (0, "%qE attribute ignored", name
);
3967 *no_add_attrs
= true;
3973 /* Handle a "nocommon" attribute; arguments as in
3974 struct attribute_spec.handler. */
3977 handle_nocommon_attribute (tree
*node
, tree name
,
3978 tree
ARG_UNUSED (args
),
3979 int ARG_UNUSED (flags
), bool *no_add_attrs
)
3981 if (TREE_CODE (*node
) == VAR_DECL
)
3982 DECL_COMMON (*node
) = 0;
3985 warning (0, "%qE attribute ignored", name
);
3986 *no_add_attrs
= true;
3992 /* Handle a "common" attribute; arguments as in
3993 struct attribute_spec.handler. */
3996 handle_common_attribute (tree
*node
, tree name
, tree
ARG_UNUSED (args
),
3997 int ARG_UNUSED (flags
), bool *no_add_attrs
)
3999 if (TREE_CODE (*node
) == VAR_DECL
)
4000 DECL_COMMON (*node
) = 1;
4003 warning (0, "%qE attribute ignored", name
);
4004 *no_add_attrs
= true;
4010 /* Handle a "noreturn" attribute; arguments as in
4011 struct attribute_spec.handler. */
4014 handle_noreturn_attribute (tree
*node
, tree name
, tree
ARG_UNUSED (args
),
4015 int ARG_UNUSED (flags
), bool *no_add_attrs
)
4017 tree type
= TREE_TYPE (*node
);
4019 /* See FIXME comment in c_common_attribute_table. */
4020 if (TREE_CODE (*node
) == FUNCTION_DECL
)
4021 TREE_THIS_VOLATILE (*node
) = 1;
4022 else if (TREE_CODE (type
) == POINTER_TYPE
4023 && TREE_CODE (TREE_TYPE (type
)) == FUNCTION_TYPE
)
4025 = build_pointer_type
4026 (build_type_variant (TREE_TYPE (type
),
4027 TYPE_READONLY (TREE_TYPE (type
)), 1));
4030 warning (0, "%qE attribute ignored", name
);
4031 *no_add_attrs
= true;
4037 /* Handle a "noinline" attribute; arguments as in
4038 struct attribute_spec.handler. */
4041 handle_noinline_attribute (tree
*node
, tree name
,
4042 tree
ARG_UNUSED (args
),
4043 int ARG_UNUSED (flags
), bool *no_add_attrs
)
4045 if (TREE_CODE (*node
) == FUNCTION_DECL
)
4046 DECL_UNINLINABLE (*node
) = 1;
4049 warning (0, "%qE attribute ignored", name
);
4050 *no_add_attrs
= true;
4056 /* Handle a "always_inline" attribute; arguments as in
4057 struct attribute_spec.handler. */
4060 handle_always_inline_attribute (tree
*node
, tree name
,
4061 tree
ARG_UNUSED (args
),
4062 int ARG_UNUSED (flags
),
4065 if (TREE_CODE (*node
) == FUNCTION_DECL
)
4067 /* Do nothing else, just set the attribute. We'll get at
4068 it later with lookup_attribute. */
4072 warning (0, "%qE attribute ignored", name
);
4073 *no_add_attrs
= true;
4079 /* Handle a "used" attribute; arguments as in
4080 struct attribute_spec.handler. */
4083 handle_used_attribute (tree
*pnode
, tree name
, tree
ARG_UNUSED (args
),
4084 int ARG_UNUSED (flags
), bool *no_add_attrs
)
4088 if (TREE_CODE (node
) == FUNCTION_DECL
4089 || (TREE_CODE (node
) == VAR_DECL
&& TREE_STATIC (node
)))
4091 TREE_USED (node
) = 1;
4092 DECL_PRESERVE_P (node
) = 1;
4096 warning (0, "%qE attribute ignored", name
);
4097 *no_add_attrs
= true;
4103 /* Handle a "unused" attribute; arguments as in
4104 struct attribute_spec.handler. */
4107 handle_unused_attribute (tree
*node
, tree name
, tree
ARG_UNUSED (args
),
4108 int flags
, bool *no_add_attrs
)
4114 if (TREE_CODE (decl
) == PARM_DECL
4115 || TREE_CODE (decl
) == VAR_DECL
4116 || TREE_CODE (decl
) == FUNCTION_DECL
4117 || TREE_CODE (decl
) == LABEL_DECL
4118 || TREE_CODE (decl
) == TYPE_DECL
)
4119 TREE_USED (decl
) = 1;
4122 warning (0, "%qE attribute ignored", name
);
4123 *no_add_attrs
= true;
4128 if (!(flags
& (int) ATTR_FLAG_TYPE_IN_PLACE
))
4129 *node
= build_variant_type_copy (*node
);
4130 TREE_USED (*node
) = 1;
4136 /* Handle a "const" attribute; arguments as in
4137 struct attribute_spec.handler. */
4140 handle_const_attribute (tree
*node
, tree name
, tree
ARG_UNUSED (args
),
4141 int ARG_UNUSED (flags
), bool *no_add_attrs
)
4143 tree type
= TREE_TYPE (*node
);
4145 /* See FIXME comment on noreturn in c_common_attribute_table. */
4146 if (TREE_CODE (*node
) == FUNCTION_DECL
)
4147 TREE_READONLY (*node
) = 1;
4148 else if (TREE_CODE (type
) == POINTER_TYPE
4149 && TREE_CODE (TREE_TYPE (type
)) == FUNCTION_TYPE
)
4151 = build_pointer_type
4152 (build_type_variant (TREE_TYPE (type
), 1,
4153 TREE_THIS_VOLATILE (TREE_TYPE (type
))));
4156 warning (0, "%qE attribute ignored", name
);
4157 *no_add_attrs
= true;
4163 /* Handle a "transparent_union" attribute; arguments as in
4164 struct attribute_spec.handler. */
4167 handle_transparent_union_attribute (tree
*node
, tree name
,
4168 tree
ARG_UNUSED (args
), int flags
,
4171 tree decl
= NULL_TREE
;
4178 type
= &TREE_TYPE (decl
);
4179 is_type
= TREE_CODE (*node
) == TYPE_DECL
;
4181 else if (TYPE_P (*node
))
4182 type
= node
, is_type
= 1;
4185 && TREE_CODE (*type
) == UNION_TYPE
4187 || (TYPE_FIELDS (*type
) != 0
4188 && TYPE_MODE (*type
) == DECL_MODE (TYPE_FIELDS (*type
)))))
4190 if (!(flags
& (int) ATTR_FLAG_TYPE_IN_PLACE
))
4191 *type
= build_variant_type_copy (*type
);
4192 TYPE_TRANSPARENT_UNION (*type
) = 1;
4194 else if (decl
!= 0 && TREE_CODE (decl
) == PARM_DECL
4195 && TREE_CODE (*type
) == UNION_TYPE
4196 && TYPE_MODE (*type
) == DECL_MODE (TYPE_FIELDS (*type
)))
4197 DECL_TRANSPARENT_UNION (decl
) = 1;
4200 warning (0, "%qE attribute ignored", name
);
4201 *no_add_attrs
= true;
4207 /* Handle a "constructor" attribute; arguments as in
4208 struct attribute_spec.handler. */
4211 handle_constructor_attribute (tree
*node
, tree name
,
4212 tree
ARG_UNUSED (args
),
4213 int ARG_UNUSED (flags
),
4217 tree type
= TREE_TYPE (decl
);
4219 if (TREE_CODE (decl
) == FUNCTION_DECL
4220 && TREE_CODE (type
) == FUNCTION_TYPE
4221 && decl_function_context (decl
) == 0)
4223 DECL_STATIC_CONSTRUCTOR (decl
) = 1;
4224 TREE_USED (decl
) = 1;
4228 warning (0, "%qE attribute ignored", name
);
4229 *no_add_attrs
= true;
4235 /* Handle a "destructor" attribute; arguments as in
4236 struct attribute_spec.handler. */
4239 handle_destructor_attribute (tree
*node
, tree name
,
4240 tree
ARG_UNUSED (args
),
4241 int ARG_UNUSED (flags
),
4245 tree type
= TREE_TYPE (decl
);
4247 if (TREE_CODE (decl
) == FUNCTION_DECL
4248 && TREE_CODE (type
) == FUNCTION_TYPE
4249 && decl_function_context (decl
) == 0)
4251 DECL_STATIC_DESTRUCTOR (decl
) = 1;
4252 TREE_USED (decl
) = 1;
4256 warning (0, "%qE attribute ignored", name
);
4257 *no_add_attrs
= true;
4263 /* Handle a "mode" attribute; arguments as in
4264 struct attribute_spec.handler. */
4267 handle_mode_attribute (tree
*node
, tree name
, tree args
,
4268 int ARG_UNUSED (flags
), bool *no_add_attrs
)
4272 *no_add_attrs
= true;
4274 if (TREE_CODE (TREE_VALUE (args
)) != IDENTIFIER_NODE
)
4275 warning (0, "%qE attribute ignored", name
);
4279 const char *p
= IDENTIFIER_POINTER (TREE_VALUE (args
));
4280 int len
= strlen (p
);
4281 enum machine_mode mode
= VOIDmode
;
4285 if (len
> 4 && p
[0] == '_' && p
[1] == '_'
4286 && p
[len
- 1] == '_' && p
[len
- 2] == '_')
4288 char *newp
= (char *) alloca (len
- 1);
4290 strcpy (newp
, &p
[2]);
4291 newp
[len
- 4] = '\0';
4295 /* Change this type to have a type with the specified mode.
4296 First check for the special modes. */
4297 if (!strcmp (p
, "byte"))
4299 else if (!strcmp (p
, "word"))
4301 else if (!strcmp (p
, "pointer"))
4304 for (j
= 0; j
< NUM_MACHINE_MODES
; j
++)
4305 if (!strcmp (p
, GET_MODE_NAME (j
)))
4307 mode
= (enum machine_mode
) j
;
4311 if (mode
== VOIDmode
)
4313 error ("unknown machine mode %qs", p
);
4318 switch (GET_MODE_CLASS (mode
))
4321 case MODE_PARTIAL_INT
:
4323 valid_mode
= targetm
.scalar_mode_supported_p (mode
);
4326 case MODE_COMPLEX_INT
:
4327 case MODE_COMPLEX_FLOAT
:
4328 valid_mode
= targetm
.scalar_mode_supported_p (GET_MODE_INNER (mode
));
4331 case MODE_VECTOR_INT
:
4332 case MODE_VECTOR_FLOAT
:
4333 warning (0, "specifying vector types with __attribute__ ((mode)) "
4335 warning (0, "use __attribute__ ((vector_size)) instead");
4336 valid_mode
= vector_mode_valid_p (mode
);
4344 error ("unable to emulate %qs", p
);
4348 if (POINTER_TYPE_P (type
))
4350 tree (*fn
)(tree
, enum machine_mode
, bool);
4352 if (!targetm
.valid_pointer_mode (mode
))
4354 error ("invalid pointer mode %qs", p
);
4358 if (TREE_CODE (type
) == POINTER_TYPE
)
4359 fn
= build_pointer_type_for_mode
;
4361 fn
= build_reference_type_for_mode
;
4362 typefm
= fn (TREE_TYPE (type
), mode
, false);
4365 typefm
= lang_hooks
.types
.type_for_mode (mode
, TYPE_UNSIGNED (type
));
4367 if (typefm
== NULL_TREE
)
4369 error ("no data type for mode %qs", p
);
4372 else if (TREE_CODE (type
) == ENUMERAL_TYPE
)
4374 /* For enumeral types, copy the precision from the integer
4375 type returned above. If not an INTEGER_TYPE, we can't use
4376 this mode for this type. */
4377 if (TREE_CODE (typefm
) != INTEGER_TYPE
)
4379 error ("cannot use mode %qs for enumeral types", p
);
4383 if (!(flags
& (int) ATTR_FLAG_TYPE_IN_PLACE
))
4384 type
= build_variant_type_copy (type
);
4386 /* We cannot use layout_type here, because that will attempt
4387 to re-layout all variants, corrupting our original. */
4388 TYPE_PRECISION (type
) = TYPE_PRECISION (typefm
);
4389 TYPE_MIN_VALUE (type
) = TYPE_MIN_VALUE (typefm
);
4390 TYPE_MAX_VALUE (type
) = TYPE_MAX_VALUE (typefm
);
4391 TYPE_SIZE (type
) = TYPE_SIZE (typefm
);
4392 TYPE_SIZE_UNIT (type
) = TYPE_SIZE_UNIT (typefm
);
4393 TYPE_MODE (type
) = TYPE_MODE (typefm
);
4394 if (!TYPE_USER_ALIGN (type
))
4395 TYPE_ALIGN (type
) = TYPE_ALIGN (typefm
);
4399 else if (VECTOR_MODE_P (mode
)
4400 ? TREE_CODE (type
) != TREE_CODE (TREE_TYPE (typefm
))
4401 : TREE_CODE (type
) != TREE_CODE (typefm
))
4403 error ("mode %qs applied to inappropriate type", p
);
4413 /* Handle a "section" attribute; arguments as in
4414 struct attribute_spec.handler. */
4417 handle_section_attribute (tree
*node
, tree
ARG_UNUSED (name
), tree args
,
4418 int ARG_UNUSED (flags
), bool *no_add_attrs
)
4422 if (targetm
.have_named_sections
)
4424 user_defined_section_attribute
= true;
4426 if ((TREE_CODE (decl
) == FUNCTION_DECL
4427 || TREE_CODE (decl
) == VAR_DECL
)
4428 && TREE_CODE (TREE_VALUE (args
)) == STRING_CST
)
4430 if (TREE_CODE (decl
) == VAR_DECL
4431 && current_function_decl
!= NULL_TREE
4432 && !TREE_STATIC (decl
))
4434 error ("%Jsection attribute cannot be specified for "
4435 "local variables", decl
);
4436 *no_add_attrs
= true;
4439 /* The decl may have already been given a section attribute
4440 from a previous declaration. Ensure they match. */
4441 else if (DECL_SECTION_NAME (decl
) != NULL_TREE
4442 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl
)),
4443 TREE_STRING_POINTER (TREE_VALUE (args
))) != 0)
4445 error ("%Jsection of %qD conflicts with previous declaration",
4447 *no_add_attrs
= true;
4450 DECL_SECTION_NAME (decl
) = TREE_VALUE (args
);
4454 error ("%Jsection attribute not allowed for %qD", *node
, *node
);
4455 *no_add_attrs
= true;
4460 error ("%Jsection attributes are not supported for this target", *node
);
4461 *no_add_attrs
= true;
4467 /* Handle a "aligned" attribute; arguments as in
4468 struct attribute_spec.handler. */
4471 handle_aligned_attribute (tree
*node
, tree
ARG_UNUSED (name
), tree args
,
4472 int flags
, bool *no_add_attrs
)
4474 tree decl
= NULL_TREE
;
4477 tree align_expr
= (args
? TREE_VALUE (args
)
4478 : size_int (BIGGEST_ALIGNMENT
/ BITS_PER_UNIT
));
4484 type
= &TREE_TYPE (decl
);
4485 is_type
= TREE_CODE (*node
) == TYPE_DECL
;
4487 else if (TYPE_P (*node
))
4488 type
= node
, is_type
= 1;
4490 if (TREE_CODE (align_expr
) != INTEGER_CST
)
4492 error ("requested alignment is not a constant");
4493 *no_add_attrs
= true;
4495 else if ((i
= tree_log2 (align_expr
)) == -1)
4497 error ("requested alignment is not a power of 2");
4498 *no_add_attrs
= true;
4500 else if (i
> HOST_BITS_PER_INT
- 2)
4502 error ("requested alignment is too large");
4503 *no_add_attrs
= true;
4507 /* If we have a TYPE_DECL, then copy the type, so that we
4508 don't accidentally modify a builtin type. See pushdecl. */
4509 if (decl
&& TREE_TYPE (decl
) != error_mark_node
4510 && DECL_ORIGINAL_TYPE (decl
) == NULL_TREE
)
4512 tree tt
= TREE_TYPE (decl
);
4513 *type
= build_variant_type_copy (*type
);
4514 DECL_ORIGINAL_TYPE (decl
) = tt
;
4515 TYPE_NAME (*type
) = decl
;
4516 TREE_USED (*type
) = TREE_USED (decl
);
4517 TREE_TYPE (decl
) = *type
;
4519 else if (!(flags
& (int) ATTR_FLAG_TYPE_IN_PLACE
))
4520 *type
= build_variant_type_copy (*type
);
4522 TYPE_ALIGN (*type
) = (1 << i
) * BITS_PER_UNIT
;
4523 TYPE_USER_ALIGN (*type
) = 1;
4525 else if (TREE_CODE (decl
) != VAR_DECL
4526 && TREE_CODE (decl
) != FIELD_DECL
)
4528 error ("%Jalignment may not be specified for %qD", decl
, decl
);
4529 *no_add_attrs
= true;
4533 DECL_ALIGN (decl
) = (1 << i
) * BITS_PER_UNIT
;
4534 DECL_USER_ALIGN (decl
) = 1;
4540 /* Handle a "weak" attribute; arguments as in
4541 struct attribute_spec.handler. */
4544 handle_weak_attribute (tree
*node
, tree
ARG_UNUSED (name
),
4545 tree
ARG_UNUSED (args
),
4546 int ARG_UNUSED (flags
),
4547 bool * ARG_UNUSED (no_add_attrs
))
4549 declare_weak (*node
);
4554 /* Handle an "alias" attribute; arguments as in
4555 struct attribute_spec.handler. */
4558 handle_alias_attribute (tree
*node
, tree name
, tree args
,
4559 int ARG_UNUSED (flags
), bool *no_add_attrs
)
4563 if ((TREE_CODE (decl
) == FUNCTION_DECL
&& DECL_INITIAL (decl
))
4564 || (TREE_CODE (decl
) != FUNCTION_DECL
&& !DECL_EXTERNAL (decl
)))
4566 error ("%J%qD defined both normally and as an alias", decl
, decl
);
4567 *no_add_attrs
= true;
4570 /* Note that the very first time we process a nested declaration,
4571 decl_function_context will not be set. Indeed, *would* never
4572 be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
4573 we do below. After such frobbery, pushdecl would set the context.
4574 In any case, this is never what we want. */
4575 else if (decl_function_context (decl
) == 0 && current_function_decl
== NULL
)
4579 id
= TREE_VALUE (args
);
4580 if (TREE_CODE (id
) != STRING_CST
)
4582 error ("alias argument not a string");
4583 *no_add_attrs
= true;
4586 id
= get_identifier (TREE_STRING_POINTER (id
));
4587 /* This counts as a use of the object pointed to. */
4590 if (TREE_CODE (decl
) == FUNCTION_DECL
)
4591 DECL_INITIAL (decl
) = error_mark_node
;
4594 DECL_EXTERNAL (decl
) = 0;
4595 TREE_STATIC (decl
) = 1;
4600 warning (0, "%qE attribute ignored", name
);
4601 *no_add_attrs
= true;
4607 /* Handle an "visibility" attribute; arguments as in
4608 struct attribute_spec.handler. */
4611 handle_visibility_attribute (tree
*node
, tree name
, tree args
,
4612 int ARG_UNUSED (flags
),
4616 tree id
= TREE_VALUE (args
);
4618 *no_add_attrs
= true;
4622 if (TREE_CODE (*node
) != RECORD_TYPE
&& TREE_CODE (*node
) != UNION_TYPE
)
4624 warning (0, "%qE attribute ignored on non-class types", name
);
4628 else if (decl_function_context (decl
) != 0 || !TREE_PUBLIC (decl
))
4630 warning (0, "%qE attribute ignored", name
);
4634 if (TREE_CODE (id
) != STRING_CST
)
4636 error ("visibility argument not a string");
4640 /* If this is a type, set the visibility on the type decl. */
4643 decl
= TYPE_NAME (decl
);
4646 if (TREE_CODE (decl
) == IDENTIFIER_NODE
)
4648 warning (0, "%qE attribute ignored on types",
4654 if (strcmp (TREE_STRING_POINTER (id
), "default") == 0)
4655 DECL_VISIBILITY (decl
) = VISIBILITY_DEFAULT
;
4656 else if (strcmp (TREE_STRING_POINTER (id
), "internal") == 0)
4657 DECL_VISIBILITY (decl
) = VISIBILITY_INTERNAL
;
4658 else if (strcmp (TREE_STRING_POINTER (id
), "hidden") == 0)
4659 DECL_VISIBILITY (decl
) = VISIBILITY_HIDDEN
;
4660 else if (strcmp (TREE_STRING_POINTER (id
), "protected") == 0)
4661 DECL_VISIBILITY (decl
) = VISIBILITY_PROTECTED
;
4663 error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
4664 DECL_VISIBILITY_SPECIFIED (decl
) = 1;
4666 /* For decls only, go ahead and attach the attribute to the node as well.
4667 This is needed so we can determine whether we have VISIBILITY_DEFAULT
4668 because the visibility was not specified, or because it was explicitly
4669 overridden from the class visibility. */
4671 *no_add_attrs
= false;
4676 /* Determine the ELF symbol visibility for DECL, which is either a
4677 variable or a function. It is an error to use this function if a
4678 definition of DECL is not available in this translation unit.
4679 Returns true if the final visibility has been determined by this
4680 function; false if the caller is free to make additional
4684 c_determine_visibility (tree decl
)
4686 gcc_assert (TREE_CODE (decl
) == VAR_DECL
4687 || TREE_CODE (decl
) == FUNCTION_DECL
);
4689 /* If the user explicitly specified the visibility with an
4690 attribute, honor that. DECL_VISIBILITY will have been set during
4691 the processing of the attribute. We check for an explicit
4692 attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
4693 to distinguish the use of an attribute from the use of a "#pragma
4694 GCC visibility push(...)"; in the latter case we still want other
4695 considerations to be able to overrule the #pragma. */
4696 if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl
)))
4699 /* Anything that is exported must have default visibility. */
4700 if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
4701 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl
)))
4703 DECL_VISIBILITY (decl
) = VISIBILITY_DEFAULT
;
4704 DECL_VISIBILITY_SPECIFIED (decl
) = 1;
4711 /* Handle an "tls_model" attribute; arguments as in
4712 struct attribute_spec.handler. */
4715 handle_tls_model_attribute (tree
*node
, tree name
, tree args
,
4716 int ARG_UNUSED (flags
), bool *no_add_attrs
)
4720 if (!DECL_THREAD_LOCAL (decl
))
4722 warning (0, "%qE attribute ignored", name
);
4723 *no_add_attrs
= true;
4729 id
= TREE_VALUE (args
);
4730 if (TREE_CODE (id
) != STRING_CST
)
4732 error ("tls_model argument not a string");
4733 *no_add_attrs
= true;
4736 if (strcmp (TREE_STRING_POINTER (id
), "local-exec")
4737 && strcmp (TREE_STRING_POINTER (id
), "initial-exec")
4738 && strcmp (TREE_STRING_POINTER (id
), "local-dynamic")
4739 && strcmp (TREE_STRING_POINTER (id
), "global-dynamic"))
4741 error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
4742 *no_add_attrs
= true;
4750 /* Handle a "no_instrument_function" attribute; arguments as in
4751 struct attribute_spec.handler. */
4754 handle_no_instrument_function_attribute (tree
*node
, tree name
,
4755 tree
ARG_UNUSED (args
),
4756 int ARG_UNUSED (flags
),
4761 if (TREE_CODE (decl
) != FUNCTION_DECL
)
4763 error ("%J%qE attribute applies only to functions", decl
, name
);
4764 *no_add_attrs
= true;
4766 else if (DECL_INITIAL (decl
))
4768 error ("%Jcan%'t set %qE attribute after definition", decl
, name
);
4769 *no_add_attrs
= true;
4772 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl
) = 1;
4777 /* Handle a "malloc" attribute; arguments as in
4778 struct attribute_spec.handler. */
4781 handle_malloc_attribute (tree
*node
, tree name
, tree
ARG_UNUSED (args
),
4782 int ARG_UNUSED (flags
), bool *no_add_attrs
)
4784 if (TREE_CODE (*node
) == FUNCTION_DECL
4785 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node
))))
4786 DECL_IS_MALLOC (*node
) = 1;
4789 warning (0, "%qE attribute ignored", name
);
4790 *no_add_attrs
= true;
4796 /* Handle a "returns_twice" attribute; arguments as in
4797 struct attribute_spec.handler. */
4800 handle_returns_twice_attribute (tree
*node
, tree name
, tree
ARG_UNUSED (args
),
4801 int ARG_UNUSED (flags
), bool *no_add_attrs
)
4803 if (TREE_CODE (*node
) == FUNCTION_DECL
)
4804 DECL_IS_RETURNS_TWICE (*node
) = 1;
4807 warning (0, "%qE attribute ignored", name
);
4808 *no_add_attrs
= true;
4814 /* Handle a "no_limit_stack" attribute; arguments as in
4815 struct attribute_spec.handler. */
4818 handle_no_limit_stack_attribute (tree
*node
, tree name
,
4819 tree
ARG_UNUSED (args
),
4820 int ARG_UNUSED (flags
),
4825 if (TREE_CODE (decl
) != FUNCTION_DECL
)
4827 error ("%J%qE attribute applies only to functions", decl
, name
);
4828 *no_add_attrs
= true;
4830 else if (DECL_INITIAL (decl
))
4832 error ("%Jcan%'t set %qE attribute after definition", decl
, name
);
4833 *no_add_attrs
= true;
4836 DECL_NO_LIMIT_STACK (decl
) = 1;
4841 /* Handle a "pure" attribute; arguments as in
4842 struct attribute_spec.handler. */
4845 handle_pure_attribute (tree
*node
, tree name
, tree
ARG_UNUSED (args
),
4846 int ARG_UNUSED (flags
), bool *no_add_attrs
)
4848 if (TREE_CODE (*node
) == FUNCTION_DECL
)
4849 DECL_IS_PURE (*node
) = 1;
4850 /* ??? TODO: Support types. */
4853 warning (0, "%qE attribute ignored", name
);
4854 *no_add_attrs
= true;
4860 /* Handle a "no vops" attribute; arguments as in
4861 struct attribute_spec.handler. */
4864 handle_novops_attribute (tree
*node
, tree
ARG_UNUSED (name
),
4865 tree
ARG_UNUSED (args
), int ARG_UNUSED (flags
),
4866 bool *ARG_UNUSED (no_add_attrs
))
4868 gcc_assert (TREE_CODE (*node
) == FUNCTION_DECL
);
4869 DECL_IS_NOVOPS (*node
) = 1;
4873 /* Handle a "deprecated" attribute; arguments as in
4874 struct attribute_spec.handler. */
4877 handle_deprecated_attribute (tree
*node
, tree name
,
4878 tree
ARG_UNUSED (args
), int flags
,
4881 tree type
= NULL_TREE
;
4883 tree what
= NULL_TREE
;
4888 type
= TREE_TYPE (decl
);
4890 if (TREE_CODE (decl
) == TYPE_DECL
4891 || TREE_CODE (decl
) == PARM_DECL
4892 || TREE_CODE (decl
) == VAR_DECL
4893 || TREE_CODE (decl
) == FUNCTION_DECL
4894 || TREE_CODE (decl
) == FIELD_DECL
)
4895 TREE_DEPRECATED (decl
) = 1;
4899 else if (TYPE_P (*node
))
4901 if (!(flags
& (int) ATTR_FLAG_TYPE_IN_PLACE
))
4902 *node
= build_variant_type_copy (*node
);
4903 TREE_DEPRECATED (*node
) = 1;
4911 *no_add_attrs
= true;
4912 if (type
&& TYPE_NAME (type
))
4914 if (TREE_CODE (TYPE_NAME (type
)) == IDENTIFIER_NODE
)
4915 what
= TYPE_NAME (*node
);
4916 else if (TREE_CODE (TYPE_NAME (type
)) == TYPE_DECL
4917 && DECL_NAME (TYPE_NAME (type
)))
4918 what
= DECL_NAME (TYPE_NAME (type
));
4921 warning (0, "%qE attribute ignored for %qE", name
, what
);
4923 warning (0, "%qE attribute ignored", name
);
4929 /* Handle a "vector_size" attribute; arguments as in
4930 struct attribute_spec.handler. */
4933 handle_vector_size_attribute (tree
*node
, tree name
, tree args
,
4934 int ARG_UNUSED (flags
),
4937 unsigned HOST_WIDE_INT vecsize
, nunits
;
4938 enum machine_mode orig_mode
;
4939 tree type
= *node
, new_type
, size
;
4941 *no_add_attrs
= true;
4943 size
= TREE_VALUE (args
);
4945 if (!host_integerp (size
, 1))
4947 warning (0, "%qE attribute ignored", name
);
4951 /* Get the vector size (in bytes). */
4952 vecsize
= tree_low_cst (size
, 1);
4954 /* We need to provide for vector pointers, vector arrays, and
4955 functions returning vectors. For example:
4957 __attribute__((vector_size(16))) short *foo;
4959 In this case, the mode is SI, but the type being modified is
4960 HI, so we need to look further. */
4962 while (POINTER_TYPE_P (type
)
4963 || TREE_CODE (type
) == FUNCTION_TYPE
4964 || TREE_CODE (type
) == METHOD_TYPE
4965 || TREE_CODE (type
) == ARRAY_TYPE
)
4966 type
= TREE_TYPE (type
);
4968 /* Get the mode of the type being modified. */
4969 orig_mode
= TYPE_MODE (type
);
4971 if (TREE_CODE (type
) == RECORD_TYPE
4972 || (GET_MODE_CLASS (orig_mode
) != MODE_FLOAT
4973 && GET_MODE_CLASS (orig_mode
) != MODE_INT
)
4974 || !host_integerp (TYPE_SIZE_UNIT (type
), 1))
4976 error ("invalid vector type for attribute %qE", name
);
4980 /* Calculate how many units fit in the vector. */
4981 nunits
= vecsize
/ tree_low_cst (TYPE_SIZE_UNIT (type
), 1);
4982 if (nunits
& (nunits
- 1))
4984 error ("number of components of the vector not a power of two");
4988 new_type
= build_vector_type (type
, nunits
);
4990 /* Build back pointers if needed. */
4991 *node
= reconstruct_complex_type (*node
, new_type
);
4996 /* Handle the "nonnull" attribute. */
4998 handle_nonnull_attribute (tree
*node
, tree
ARG_UNUSED (name
),
4999 tree args
, int ARG_UNUSED (flags
),
5003 unsigned HOST_WIDE_INT attr_arg_num
;
5005 /* If no arguments are specified, all pointer arguments should be
5006 non-null. Verify a full prototype is given so that the arguments
5007 will have the correct types when we actually check them later. */
5010 if (!TYPE_ARG_TYPES (type
))
5012 error ("nonnull attribute without arguments on a non-prototype");
5013 *no_add_attrs
= true;
5018 /* Argument list specified. Verify that each argument number references
5019 a pointer argument. */
5020 for (attr_arg_num
= 1; args
; args
= TREE_CHAIN (args
))
5023 unsigned HOST_WIDE_INT arg_num
= 0, ck_num
;
5025 if (!get_nonnull_operand (TREE_VALUE (args
), &arg_num
))
5027 error ("nonnull argument has invalid operand number (argument %lu)",
5028 (unsigned long) attr_arg_num
);
5029 *no_add_attrs
= true;
5033 argument
= TYPE_ARG_TYPES (type
);
5036 for (ck_num
= 1; ; ck_num
++)
5038 if (!argument
|| ck_num
== arg_num
)
5040 argument
= TREE_CHAIN (argument
);
5044 || TREE_CODE (TREE_VALUE (argument
)) == VOID_TYPE
)
5046 error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
5047 (unsigned long) attr_arg_num
, (unsigned long) arg_num
);
5048 *no_add_attrs
= true;
5052 if (TREE_CODE (TREE_VALUE (argument
)) != POINTER_TYPE
)
5054 error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
5055 (unsigned long) attr_arg_num
, (unsigned long) arg_num
);
5056 *no_add_attrs
= true;
5065 /* Check the argument list of a function call for null in argument slots
5066 that are marked as requiring a non-null pointer argument. */
5069 check_function_nonnull (tree attrs
, tree params
)
5071 tree a
, args
, param
;
5074 for (a
= attrs
; a
; a
= TREE_CHAIN (a
))
5076 if (is_attribute_p ("nonnull", TREE_PURPOSE (a
)))
5078 args
= TREE_VALUE (a
);
5080 /* Walk the argument list. If we encounter an argument number we
5081 should check for non-null, do it. If the attribute has no args,
5082 then every pointer argument is checked (in which case the check
5083 for pointer type is done in check_nonnull_arg). */
5084 for (param
= params
, param_num
= 1; ;
5085 param_num
++, param
= TREE_CHAIN (param
))
5089 if (!args
|| nonnull_check_p (args
, param_num
))
5090 check_function_arguments_recurse (check_nonnull_arg
, NULL
,
5098 /* Check that the Nth argument of a function call (counting backwards
5099 from the end) is a (pointer)0. */
5102 check_function_sentinel (tree attrs
, tree params
)
5104 tree attr
= lookup_attribute ("sentinel", attrs
);
5109 warning (0, "missing sentinel in function call");
5115 if (TREE_VALUE (attr
))
5117 tree p
= TREE_VALUE (TREE_VALUE (attr
));
5118 pos
= TREE_INT_CST_LOW (p
);
5121 sentinel
= end
= params
;
5123 /* Advance `end' ahead of `sentinel' by `pos' positions. */
5124 while (pos
> 0 && TREE_CHAIN (end
))
5127 end
= TREE_CHAIN (end
);
5131 warning (0, "not enough arguments to fit a sentinel");
5135 /* Now advance both until we find the last parameter. */
5136 while (TREE_CHAIN (end
))
5138 end
= TREE_CHAIN (end
);
5139 sentinel
= TREE_CHAIN (sentinel
);
5142 /* Validate the sentinel. */
5143 if ((!POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (sentinel
)))
5144 || !integer_zerop (TREE_VALUE (sentinel
)))
5145 /* Although __null (in C++) is only an integer we allow it
5146 nevertheless, as we are guaranteed that it's exactly
5147 as wide as a pointer, and we don't want to force
5148 users to cast the NULL they have written there.
5149 We warn with -Wstrict-null-sentinel, though. */
5150 && (warn_strict_null_sentinel
5151 || null_node
!= TREE_VALUE (sentinel
)))
5152 warning (0, "missing sentinel in function call");
5157 /* Helper for check_function_nonnull; given a list of operands which
5158 must be non-null in ARGS, determine if operand PARAM_NUM should be
5162 nonnull_check_p (tree args
, unsigned HOST_WIDE_INT param_num
)
5164 unsigned HOST_WIDE_INT arg_num
= 0;
5166 for (; args
; args
= TREE_CHAIN (args
))
5168 bool found
= get_nonnull_operand (TREE_VALUE (args
), &arg_num
);
5172 if (arg_num
== param_num
)
5178 /* Check that the function argument PARAM (which is operand number
5179 PARAM_NUM) is non-null. This is called by check_function_nonnull
5180 via check_function_arguments_recurse. */
5183 check_nonnull_arg (void * ARG_UNUSED (ctx
), tree param
,
5184 unsigned HOST_WIDE_INT param_num
)
5186 /* Just skip checking the argument if it's not a pointer. This can
5187 happen if the "nonnull" attribute was given without an operand
5188 list (which means to check every pointer argument). */
5190 if (TREE_CODE (TREE_TYPE (param
)) != POINTER_TYPE
)
5193 if (integer_zerop (param
))
5194 warning (0, "null argument where non-null required (argument %lu)",
5195 (unsigned long) param_num
);
5198 /* Helper for nonnull attribute handling; fetch the operand number
5199 from the attribute argument list. */
5202 get_nonnull_operand (tree arg_num_expr
, unsigned HOST_WIDE_INT
*valp
)
5204 /* Verify the arg number is a constant. */
5205 if (TREE_CODE (arg_num_expr
) != INTEGER_CST
5206 || TREE_INT_CST_HIGH (arg_num_expr
) != 0)
5209 *valp
= TREE_INT_CST_LOW (arg_num_expr
);
5213 /* Handle a "nothrow" attribute; arguments as in
5214 struct attribute_spec.handler. */
5217 handle_nothrow_attribute (tree
*node
, tree name
, tree
ARG_UNUSED (args
),
5218 int ARG_UNUSED (flags
), bool *no_add_attrs
)
5220 if (TREE_CODE (*node
) == FUNCTION_DECL
)
5221 TREE_NOTHROW (*node
) = 1;
5222 /* ??? TODO: Support types. */
5225 warning (0, "%qE attribute ignored", name
);
5226 *no_add_attrs
= true;
5232 /* Handle a "cleanup" attribute; arguments as in
5233 struct attribute_spec.handler. */
5236 handle_cleanup_attribute (tree
*node
, tree name
, tree args
,
5237 int ARG_UNUSED (flags
), bool *no_add_attrs
)
5240 tree cleanup_id
, cleanup_decl
;
5242 /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
5243 for global destructors in C++. This requires infrastructure that
5244 we don't have generically at the moment. It's also not a feature
5245 we'd be missing too much, since we do have attribute constructor. */
5246 if (TREE_CODE (decl
) != VAR_DECL
|| TREE_STATIC (decl
))
5248 warning (0, "%qE attribute ignored", name
);
5249 *no_add_attrs
= true;
5253 /* Verify that the argument is a function in scope. */
5254 /* ??? We could support pointers to functions here as well, if
5255 that was considered desirable. */
5256 cleanup_id
= TREE_VALUE (args
);
5257 if (TREE_CODE (cleanup_id
) != IDENTIFIER_NODE
)
5259 error ("cleanup argument not an identifier");
5260 *no_add_attrs
= true;
5263 cleanup_decl
= lookup_name (cleanup_id
);
5264 if (!cleanup_decl
|| TREE_CODE (cleanup_decl
) != FUNCTION_DECL
)
5266 error ("cleanup argument not a function");
5267 *no_add_attrs
= true;
5271 /* That the function has proper type is checked with the
5272 eventual call to build_function_call. */
5277 /* Handle a "warn_unused_result" attribute. No special handling. */
5280 handle_warn_unused_result_attribute (tree
*node
, tree name
,
5281 tree
ARG_UNUSED (args
),
5282 int ARG_UNUSED (flags
), bool *no_add_attrs
)
5284 /* Ignore the attribute for functions not returning any value. */
5285 if (VOID_TYPE_P (TREE_TYPE (*node
)))
5287 warning (0, "%qE attribute ignored", name
);
5288 *no_add_attrs
= true;
5294 /* Handle a "sentinel" attribute. */
5297 handle_sentinel_attribute (tree
*node
, tree name
, tree args
,
5298 int ARG_UNUSED (flags
), bool *no_add_attrs
)
5300 tree params
= TYPE_ARG_TYPES (*node
);
5304 warning (0, "%qE attribute requires prototypes with named arguments", name
);
5305 *no_add_attrs
= true;
5309 while (TREE_CHAIN (params
))
5310 params
= TREE_CHAIN (params
);
5312 if (VOID_TYPE_P (TREE_VALUE (params
)))
5314 warning (0, "%qE attribute only applies to variadic functions", name
);
5315 *no_add_attrs
= true;
5321 tree position
= TREE_VALUE (args
);
5323 if (TREE_CODE (position
) != INTEGER_CST
)
5325 warning (0, "requested position is not an integer constant");
5326 *no_add_attrs
= true;
5330 if (tree_int_cst_lt (position
, integer_zero_node
))
5332 warning (0, "requested position is less than zero");
5333 *no_add_attrs
= true;
5341 /* Check for valid arguments being passed to a function. */
5343 check_function_arguments (tree attrs
, tree params
)
5345 /* Check for null being passed in a pointer argument that must be
5346 non-null. We also need to do this if format checking is enabled. */
5349 check_function_nonnull (attrs
, params
);
5351 /* Check for errors in format strings. */
5355 check_function_format (attrs
, params
);
5356 check_function_sentinel (attrs
, params
);
5360 /* Generic argument checking recursion routine. PARAM is the argument to
5361 be checked. PARAM_NUM is the number of the argument. CALLBACK is invoked
5362 once the argument is resolved. CTX is context for the callback. */
5364 check_function_arguments_recurse (void (*callback
)
5365 (void *, tree
, unsigned HOST_WIDE_INT
),
5366 void *ctx
, tree param
,
5367 unsigned HOST_WIDE_INT param_num
)
5369 if (TREE_CODE (param
) == NOP_EXPR
)
5371 /* Strip coercion. */
5372 check_function_arguments_recurse (callback
, ctx
,
5373 TREE_OPERAND (param
, 0), param_num
);
5377 if (TREE_CODE (param
) == CALL_EXPR
)
5379 tree type
= TREE_TYPE (TREE_TYPE (TREE_OPERAND (param
, 0)));
5381 bool found_format_arg
= false;
5383 /* See if this is a call to a known internationalization function
5384 that modifies a format arg. Such a function may have multiple
5385 format_arg attributes (for example, ngettext). */
5387 for (attrs
= TYPE_ATTRIBUTES (type
);
5389 attrs
= TREE_CHAIN (attrs
))
5390 if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs
)))
5393 tree format_num_expr
;
5397 /* Extract the argument number, which was previously checked
5399 format_num_expr
= TREE_VALUE (TREE_VALUE (attrs
));
5401 gcc_assert (TREE_CODE (format_num_expr
) == INTEGER_CST
5402 && !TREE_INT_CST_HIGH (format_num_expr
));
5404 format_num
= TREE_INT_CST_LOW (format_num_expr
);
5406 for (inner_args
= TREE_OPERAND (param
, 1), i
= 1;
5408 inner_args
= TREE_CHAIN (inner_args
), i
++)
5409 if (i
== format_num
)
5411 check_function_arguments_recurse (callback
, ctx
,
5412 TREE_VALUE (inner_args
),
5414 found_format_arg
= true;
5419 /* If we found a format_arg attribute and did a recursive check,
5420 we are done with checking this argument. Otherwise, we continue
5421 and this will be considered a non-literal. */
5422 if (found_format_arg
)
5426 if (TREE_CODE (param
) == COND_EXPR
)
5428 /* Check both halves of the conditional expression. */
5429 check_function_arguments_recurse (callback
, ctx
,
5430 TREE_OPERAND (param
, 1), param_num
);
5431 check_function_arguments_recurse (callback
, ctx
,
5432 TREE_OPERAND (param
, 2), param_num
);
5436 (*callback
) (ctx
, param
, param_num
);
5439 /* Function to help qsort sort FIELD_DECLs by name order. */
5442 field_decl_cmp (const void *x_p
, const void *y_p
)
5444 const tree
*const x
= (const tree
*const) x_p
;
5445 const tree
*const y
= (const tree
*const) y_p
;
5447 if (DECL_NAME (*x
) == DECL_NAME (*y
))
5448 /* A nontype is "greater" than a type. */
5449 return (TREE_CODE (*y
) == TYPE_DECL
) - (TREE_CODE (*x
) == TYPE_DECL
);
5450 if (DECL_NAME (*x
) == NULL_TREE
)
5452 if (DECL_NAME (*y
) == NULL_TREE
)
5454 if (DECL_NAME (*x
) < DECL_NAME (*y
))
5460 gt_pointer_operator new_value
;
5464 /* This routine compares two fields like field_decl_cmp but using the
5465 pointer operator in resort_data. */
5468 resort_field_decl_cmp (const void *x_p
, const void *y_p
)
5470 const tree
*const x
= (const tree
*const) x_p
;
5471 const tree
*const y
= (const tree
*const) y_p
;
5473 if (DECL_NAME (*x
) == DECL_NAME (*y
))
5474 /* A nontype is "greater" than a type. */
5475 return (TREE_CODE (*y
) == TYPE_DECL
) - (TREE_CODE (*x
) == TYPE_DECL
);
5476 if (DECL_NAME (*x
) == NULL_TREE
)
5478 if (DECL_NAME (*y
) == NULL_TREE
)
5481 tree d1
= DECL_NAME (*x
);
5482 tree d2
= DECL_NAME (*y
);
5483 resort_data
.new_value (&d1
, resort_data
.cookie
);
5484 resort_data
.new_value (&d2
, resort_data
.cookie
);
5491 /* Resort DECL_SORTED_FIELDS because pointers have been reordered. */
5494 resort_sorted_fields (void *obj
,
5495 void * ARG_UNUSED (orig_obj
),
5496 gt_pointer_operator new_value
,
5499 struct sorted_fields_type
*sf
= (struct sorted_fields_type
*) obj
;
5500 resort_data
.new_value
= new_value
;
5501 resort_data
.cookie
= cookie
;
5502 qsort (&sf
->elts
[0], sf
->len
, sizeof (tree
),
5503 resort_field_decl_cmp
);
5506 /* Subroutine of c_parse_error.
5507 Return the result of concatenating LHS and RHS. RHS is really
5508 a string literal, its first character is indicated by RHS_START and
5509 RHS_SIZE is its length (including the terminating NUL character).
5511 The caller is responsible for deleting the returned pointer. */
5514 catenate_strings (const char *lhs
, const char *rhs_start
, int rhs_size
)
5516 const int lhs_size
= strlen (lhs
);
5517 char *result
= XNEWVEC (char, lhs_size
+ rhs_size
);
5518 strncpy (result
, lhs
, lhs_size
);
5519 strncpy (result
+ lhs_size
, rhs_start
, rhs_size
);
5523 /* Issue the error given by MSGID, indicating that it occurred before
5524 TOKEN, which had the associated VALUE. */
5527 c_parse_error (const char *msgid
, enum cpp_ttype token
, tree value
)
5529 #define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
5531 char *message
= NULL
;
5533 if (token
== CPP_EOF
)
5534 message
= catenate_messages (msgid
, " at end of input");
5535 else if (token
== CPP_CHAR
|| token
== CPP_WCHAR
)
5537 unsigned int val
= TREE_INT_CST_LOW (value
);
5538 const char *const ell
= (token
== CPP_CHAR
) ? "" : "L";
5539 if (val
<= UCHAR_MAX
&& ISGRAPH (val
))
5540 message
= catenate_messages (msgid
, " before %s'%c'");
5542 message
= catenate_messages (msgid
, " before %s'\\x%x'");
5544 error (message
, ell
, val
);
5548 else if (token
== CPP_STRING
|| token
== CPP_WSTRING
)
5549 message
= catenate_messages (msgid
, " before string constant");
5550 else if (token
== CPP_NUMBER
)
5551 message
= catenate_messages (msgid
, " before numeric constant");
5552 else if (token
== CPP_NAME
)
5554 message
= catenate_messages (msgid
, " before %qE");
5555 error (message
, value
);
5559 else if (token
< N_TTYPES
)
5561 message
= catenate_messages (msgid
, " before %qs token");
5562 error (message
, cpp_type2name (token
));
5574 #undef catenate_messages
5577 /* Walk a gimplified function and warn for functions whose return value is
5578 ignored and attribute((warn_unused_result)) is set. This is done before
5579 inlining, so we don't have to worry about that. */
5582 c_warn_unused_result (tree
*top_p
)
5585 tree_stmt_iterator i
;
5588 switch (TREE_CODE (t
))
5590 case STATEMENT_LIST
:
5591 for (i
= tsi_start (*top_p
); !tsi_end_p (i
); tsi_next (&i
))
5592 c_warn_unused_result (tsi_stmt_ptr (i
));
5596 c_warn_unused_result (&COND_EXPR_THEN (t
));
5597 c_warn_unused_result (&COND_EXPR_ELSE (t
));
5600 c_warn_unused_result (&BIND_EXPR_BODY (t
));
5602 case TRY_FINALLY_EXPR
:
5603 case TRY_CATCH_EXPR
:
5604 c_warn_unused_result (&TREE_OPERAND (t
, 0));
5605 c_warn_unused_result (&TREE_OPERAND (t
, 1));
5608 c_warn_unused_result (&CATCH_BODY (t
));
5610 case EH_FILTER_EXPR
:
5611 c_warn_unused_result (&EH_FILTER_FAILURE (t
));
5618 /* This is a naked call, as opposed to a CALL_EXPR nested inside
5619 a MODIFY_EXPR. All calls whose value is ignored should be
5620 represented like this. Look for the attribute. */
5621 fdecl
= get_callee_fndecl (t
);
5623 ftype
= TREE_TYPE (fdecl
);
5626 ftype
= TREE_TYPE (TREE_OPERAND (t
, 0));
5627 /* Look past pointer-to-function to the function type itself. */
5628 ftype
= TREE_TYPE (ftype
);
5631 if (lookup_attribute ("warn_unused_result", TYPE_ATTRIBUTES (ftype
)))
5634 warning (0, "%Hignoring return value of %qD, "
5635 "declared with attribute warn_unused_result",
5636 EXPR_LOCUS (t
), fdecl
);
5638 warning (0, "%Hignoring return value of function "
5639 "declared with attribute warn_unused_result",
5645 /* Not a container, not a call, or a call whose value is used. */
5650 /* Convert a character from the host to the target execution character
5651 set. cpplib handles this, mostly. */
5654 c_common_to_target_charset (HOST_WIDE_INT c
)
5656 /* Character constants in GCC proper are sign-extended under -fsigned-char,
5657 zero-extended under -fno-signed-char. cpplib insists that characters
5658 and character constants are always unsigned. Hence we must convert
5660 cppchar_t uc
= ((cppchar_t
)c
) & ((((cppchar_t
)1) << CHAR_BIT
)-1);
5662 uc
= cpp_host_to_exec_charset (parse_in
, uc
);
5664 if (flag_signed_char
)
5665 return ((HOST_WIDE_INT
)uc
) << (HOST_BITS_PER_WIDE_INT
- CHAR_TYPE_SIZE
)
5666 >> (HOST_BITS_PER_WIDE_INT
- CHAR_TYPE_SIZE
);
5671 /* Build the result of __builtin_offsetof. EXPR is a nested sequence of
5672 component references, with an INDIRECT_REF at the bottom; much like
5673 the traditional rendering of offsetof as a macro. Returns the folded
5674 and properly cast result. */
5677 fold_offsetof_1 (tree expr
)
5679 enum tree_code code
= PLUS_EXPR
;
5682 switch (TREE_CODE (expr
))
5688 return size_zero_node
;
5691 base
= fold_offsetof_1 (TREE_OPERAND (expr
, 0));
5692 if (base
== error_mark_node
)
5695 t
= TREE_OPERAND (expr
, 1);
5696 if (DECL_C_BIT_FIELD (t
))
5698 error ("attempt to take address of bit-field structure "
5700 return error_mark_node
;
5702 off
= size_binop (PLUS_EXPR
, DECL_FIELD_OFFSET (t
),
5703 size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t
), 1)
5708 base
= fold_offsetof_1 (TREE_OPERAND (expr
, 0));
5709 if (base
== error_mark_node
)
5712 t
= TREE_OPERAND (expr
, 1);
5713 if (TREE_CODE (t
) == INTEGER_CST
&& tree_int_cst_sgn (t
) < 0)
5716 t
= fold (build1 (NEGATE_EXPR
, TREE_TYPE (t
), t
));
5718 t
= convert (sizetype
, t
);
5719 off
= size_binop (MULT_EXPR
, TYPE_SIZE_UNIT (TREE_TYPE (expr
)), t
);
5726 return size_binop (code
, base
, off
);
5730 fold_offsetof (tree expr
)
5732 /* Convert back from the internal sizetype to size_t. */
5733 return convert (size_type_node
, fold_offsetof_1 (expr
));
5736 /* Print an error message for an invalid lvalue. USE says
5737 how the lvalue is being used and so selects the error message. */
5740 lvalue_error (enum lvalue_use use
)
5745 error ("invalid lvalue in assignment");
5748 error ("invalid lvalue in increment");
5751 error ("invalid lvalue in decrement");
5754 error ("invalid lvalue in unary %<&%>");
5757 error ("invalid lvalue in asm statement");
5764 /* *PTYPE is an incomplete array. Complete it with a domain based on
5765 INITIAL_VALUE. If INITIAL_VALUE is not present, use 1 if DO_DEFAULT
5766 is true. Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
5767 2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty. */
5770 complete_array_type (tree
*ptype
, tree initial_value
, bool do_default
)
5772 tree maxindex
, type
, main_type
, elt
, unqual_elt
;
5773 int failure
= 0, quals
;
5775 maxindex
= size_zero_node
;
5778 if (TREE_CODE (initial_value
) == STRING_CST
)
5781 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value
)));
5782 maxindex
= size_int (TREE_STRING_LENGTH (initial_value
)/eltsize
- 1);
5784 else if (TREE_CODE (initial_value
) == CONSTRUCTOR
)
5786 tree elts
= CONSTRUCTOR_ELTS (initial_value
);
5792 maxindex
= integer_minus_one_node
;
5798 if (TREE_PURPOSE (elts
))
5799 maxindex
= fold_convert (sizetype
, TREE_PURPOSE (elts
));
5800 curindex
= maxindex
;
5802 for (elts
= TREE_CHAIN (elts
); elts
; elts
= TREE_CHAIN (elts
))
5804 if (TREE_PURPOSE (elts
))
5805 curindex
= fold_convert (sizetype
, TREE_PURPOSE (elts
));
5807 curindex
= size_binop (PLUS_EXPR
, curindex
, size_one_node
);
5809 if (tree_int_cst_lt (maxindex
, curindex
))
5810 maxindex
= curindex
;
5816 /* Make an error message unless that happened already. */
5817 if (initial_value
!= error_mark_node
)
5829 elt
= TREE_TYPE (type
);
5830 quals
= TYPE_QUALS (strip_array_types (elt
));
5834 unqual_elt
= c_build_qualified_type (elt
, TYPE_UNQUALIFIED
);
5836 /* Using build_distinct_type_copy and modifying things afterward instead
5837 of using build_array_type to create a new type preserves all of the
5838 TYPE_LANG_FLAG_? bits that the front end may have set. */
5839 main_type
= build_distinct_type_copy (TYPE_MAIN_VARIANT (type
));
5840 TREE_TYPE (main_type
) = unqual_elt
;
5841 TYPE_DOMAIN (main_type
) = build_index_type (maxindex
);
5842 layout_type (main_type
);
5847 type
= c_build_qualified_type (main_type
, quals
);
5854 /* Used to help initialize the builtin-types.def table. When a type of
5855 the correct size doesn't exist, use error_mark_node instead of NULL.
5856 The later results in segfaults even when a decl using the type doesn't
5860 builtin_type_for_size (int size
, bool unsignedp
)
5862 tree type
= lang_hooks
.types
.type_for_size (size
, unsignedp
);
5863 return type
? type
: error_mark_node
;
5866 /* A helper function for resolve_overloaded_builtin in resolving the
5867 overloaded __sync_ builtins. Returns a positive power of 2 if the
5868 first operand of PARAMS is a pointer to a supported data type.
5869 Returns 0 if an error is encountered. */
5872 sync_resolve_size (tree function
, tree params
)
5879 error ("too few arguments to function %qE", function
);
5883 type
= TREE_TYPE (TREE_VALUE (params
));
5884 if (TREE_CODE (type
) != POINTER_TYPE
)
5887 type
= TREE_TYPE (type
);
5888 if (!INTEGRAL_TYPE_P (type
) && !POINTER_TYPE_P (type
))
5891 size
= tree_low_cst (TYPE_SIZE_UNIT (type
), 1);
5892 if (size
== 1 || size
== 2 || size
== 4 || size
== 8)
5896 error ("incompatible type for argument %d of %qE", 1, function
);
5900 /* A helper function for resolve_overloaded_builtin. Adds casts to
5901 PARAMS to make arguments match up with those of FUNCTION. Drops
5902 the variadic arguments at the end. Returns false if some error
5903 was encountered; true on success. */
5906 sync_resolve_params (tree orig_function
, tree function
, tree params
)
5908 tree arg_types
= TYPE_ARG_TYPES (TREE_TYPE (function
));
5912 /* We've declared the implementation functions to use "volatile void *"
5913 as the pointer parameter, so we shouldn't get any complaints from the
5914 call to check_function_arguments what ever type the user used. */
5915 arg_types
= TREE_CHAIN (arg_types
);
5916 ptype
= TREE_TYPE (TREE_TYPE (TREE_VALUE (params
)));
5919 /* For the rest of the values, we need to cast these to FTYPE, so that we
5920 don't get warnings for passing pointer types, etc. */
5921 while (arg_types
!= void_list_node
)
5925 params
= TREE_CHAIN (params
);
5928 error ("too few arguments to function %qE", orig_function
);
5932 /* ??? Ideally for the first conversion we'd use convert_for_assignment
5933 so that we get warnings for anything that doesn't match the pointer
5934 type. This isn't portable across the C and C++ front ends atm. */
5935 val
= TREE_VALUE (params
);
5936 val
= convert (ptype
, val
);
5937 val
= convert (TREE_VALUE (arg_types
), val
);
5938 TREE_VALUE (params
) = val
;
5940 arg_types
= TREE_CHAIN (arg_types
);
5944 /* The definition of these primitives is variadic, with the remaining
5945 being "an optional list of variables protected by the memory barrier".
5946 No clue what that's supposed to mean, precisely, but we consider all
5947 call-clobbered variables to be protected so we're safe. */
5948 TREE_CHAIN (params
) = NULL
;
5953 /* A helper function for resolve_overloaded_builtin. Adds a cast to
5954 RESULT to make it match the type of the first pointer argument in
5958 sync_resolve_return (tree params
, tree result
)
5960 tree ptype
= TREE_TYPE (TREE_TYPE (TREE_VALUE (params
)));
5961 return convert (ptype
, result
);
5964 /* Some builtin functions are placeholders for other expressions. This
5965 function should be called immediately after parsing the call expression
5966 before surrounding code has committed to the type of the expression.
5968 FUNCTION is the DECL that has been invoked; it is known to be a builtin.
5969 PARAMS is the argument list for the call. The return value is non-null
5970 when expansion is complete, and null if normal processing should
5974 resolve_overloaded_builtin (tree function
, tree params
)
5976 enum built_in_function orig_code
= DECL_FUNCTION_CODE (function
);
5977 switch (DECL_BUILT_IN_CLASS (function
))
5979 case BUILT_IN_NORMAL
:
5982 if (targetm
.resolve_overloaded_builtin
)
5983 return targetm
.resolve_overloaded_builtin (function
, params
);
5990 /* Handle BUILT_IN_NORMAL here. */
5993 case BUILT_IN_FETCH_AND_ADD_N
:
5994 case BUILT_IN_FETCH_AND_SUB_N
:
5995 case BUILT_IN_FETCH_AND_OR_N
:
5996 case BUILT_IN_FETCH_AND_AND_N
:
5997 case BUILT_IN_FETCH_AND_XOR_N
:
5998 case BUILT_IN_FETCH_AND_NAND_N
:
5999 case BUILT_IN_ADD_AND_FETCH_N
:
6000 case BUILT_IN_SUB_AND_FETCH_N
:
6001 case BUILT_IN_OR_AND_FETCH_N
:
6002 case BUILT_IN_AND_AND_FETCH_N
:
6003 case BUILT_IN_XOR_AND_FETCH_N
:
6004 case BUILT_IN_NAND_AND_FETCH_N
:
6005 case BUILT_IN_BOOL_COMPARE_AND_SWAP_N
:
6006 case BUILT_IN_VAL_COMPARE_AND_SWAP_N
:
6007 case BUILT_IN_LOCK_TEST_AND_SET_N
:
6008 case BUILT_IN_LOCK_RELEASE_N
:
6010 int n
= sync_resolve_size (function
, params
);
6011 tree new_function
, result
;
6014 return error_mark_node
;
6016 new_function
= built_in_decls
[orig_code
+ exact_log2 (n
) + 1];
6017 if (!sync_resolve_params (function
, new_function
, params
))
6018 return error_mark_node
;
6020 result
= build_function_call (new_function
, params
);
6021 if (orig_code
!= BUILT_IN_BOOL_COMPARE_AND_SWAP_N
6022 && orig_code
!= BUILT_IN_LOCK_RELEASE_N
)
6023 result
= sync_resolve_return (params
, result
);
6033 #include "gt-c-common.h"