diff options
author | Richard Kenner <kenner@vlsi1.ultra.nyu.edu> | 2004-03-23 20:43:44 +0000 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 2004-03-23 15:43:44 -0500 |
commit | 22421b79c8da16dd6dccb2232c1da6096590e525 (patch) | |
tree | 78c56d654a5d59c1b915116b930d92efc18f678e /gcc/tree.h | |
parent | 95e59f1ada8f85e0aff9bff2748e5c8a763daae3 (diff) | |
download | gcc-22421b79c8da16dd6dccb2232c1da6096590e525.zip gcc-22421b79c8da16dd6dccb2232c1da6096590e525.tar.gz gcc-22421b79c8da16dd6dccb2232c1da6096590e525.tar.bz2 |
alias.c (get_alias_set): Add support for TYPE_REF_CAN_ALIAS_ALL.
* alias.c (get_alias_set): Add support for TYPE_REF_CAN_ALIAS_ALL.
* c-common.c (handle_mode_attribute): Add extra arg to
build_pointer_type_for_mode and build_reference_type_for_mode.
* c-typeck.c (build_c_cast): Only look at TREE_CONSTANT_OVERFLOW
for INTEGER_CST.
* tree.c (build_pointer_type_for_mode): Add arg CAN_ALIAS_ALL.
Chain pointers via TYPE_NEXT_PTR_TO.
(build_reference_type_for_mode): Similarly.
(build_type_no_quals): Add extra arg to build_pointer_type_for_mode
and build_reference_type_for_mode.
(tree_check4_failed): New function.
* tree.h (TREE_CHECK4, PTR_OR_REF_CHECK): New macros.
(TYPE_REF_CAN_ALIAS_ALL, TYPE_NEXT_PTR_TO, TYPE_NEXT_REF_TO): Likewise.
(TREE_NO_UNSUED_WARNING, TREE_VIA_VIRTUAL, TREE_CONSTANT_OVERFLOW):
Add check.
* cp/typeck.c (build_c_cast): Only look at TREE_CONSTANT_OVERFLOW
for INTEGER_CST.
* ada/decl.c (gnat_to_gnu_entity, case E_Access_Type): Pass value
of No_Strict_Aliasing to build_pointer_type_for_mode.
* ada/utils.c (update_pointer_to): Walk pointer and ref chains.
From-SVN: r79873
Diffstat (limited to 'gcc/tree.h')
-rw-r--r-- | gcc/tree.h | 60 |
1 files changed, 49 insertions, 11 deletions
@@ -197,7 +197,8 @@ struct tree_common GTY(()) TREE_STATIC in VAR_DECL, FUNCTION_DECL, CONSTRUCTOR, ADDR_EXPR TREE_NO_UNUSED_WARNING in - CONVERT_EXPR, NOP_EXPR, COMPOUND_EXPR + CONVERT_EXPR, NOP_EXPR, COMPOUND_EXPR, NON_LVALUE_EXPR + ??? plus other expressions, apparently (e.g. MODIFY_EXPR). TREE_VIA_VIRTUAL in TREE_LIST or TREE_VEC TREE_CONSTANT_OVERFLOW in @@ -207,11 +208,14 @@ struct tree_common GTY(()) CLEANUP_EH_ONLY in TARGET_EXPR, WITH_CLEANUP_EXPR, CLEANUP_STMT, TREE_LIST elements of a block's cleanup list. + TYPE_REF_CAN_ALIAS_ALL in + POINTER_TYPE, REFERENCE_TYPE public_flag: TREE_OVERFLOW in INTEGER_CST, REAL_CST, COMPLEX_CST, VECTOR_CST + ??? and other expressions? TREE_PUBLIC in VAR_DECL or FUNCTION_DECL or IDENTIFIER_NODE EXPR_WFL_EMIT_LINE_NOTE in @@ -324,6 +328,16 @@ struct tree_common GTY(()) __LINE__, __FUNCTION__); \ __t; }) +#define TREE_CHECK4(T, CODE1, CODE2, CODE3, CODE4) __extension__ \ +({ const tree __t = (T); \ + if (TREE_CODE (__t) != (CODE1) \ + && TREE_CODE (__t) != (CODE2) \ + && TREE_CODE (__t) != (CODE3) \ + && TREE_CODE (__t) != (CODE4)) \ + tree_check4_failed (__t, (CODE1), (CODE2), (CODE3), (CODE4), \ + __FILE__, __LINE__, __FUNCTION__); \ + __t; }) + #define TREE_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) __extension__ \ ({ const tree __t = (T); \ if (TREE_CODE (__t) != (CODE1) \ @@ -402,6 +416,10 @@ extern void tree_check3_failed (const tree, enum tree_code, enum tree_code, enum tree_code, const char *, int, const char *) ATTRIBUTE_NORETURN; +extern void tree_check4_failed (const tree, enum tree_code, enum tree_code, + enum tree_code, enum tree_code, + const char *, int, const char *) + ATTRIBUTE_NORETURN; extern void tree_check5_failed (const tree, enum tree_code, enum tree_code, enum tree_code, enum tree_code, enum tree_code, const char *, int, const char *) @@ -422,6 +440,7 @@ extern void tree_operand_check_failed (int, enum tree_code, #define TREE_CHECK(T, CODE) (T) #define TREE_CHECK2(T, CODE1, CODE2) (T) #define TREE_CHECK3(T, CODE1, CODE2, CODE3) (T) +#define TREE_CHECK4(T, CODE1, CODE2, CODE3, CODE4) (T) #define TREE_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) (T) #define TREE_CLASS_CHECK(T, CODE) (T) #define EXPR_CHECK(T) (T) @@ -439,6 +458,7 @@ extern void tree_operand_check_failed (int, enum tree_code, #define CST_CHECK(T) TREE_CLASS_CHECK (T, 'c') #define STMT_CHECK(T) TREE_CLASS_CHECK (T, 's') #define FUNC_OR_METHOD_CHECK(T) TREE_CHECK2 (T, FUNCTION_TYPE, METHOD_TYPE) +#define PTR_OR_REF_CHECK(T) TREE_CHECK2 (T, POINTER_TYPE, REFERENCE_TYPE) #define SET_ARRAY_OR_VECTOR_CHECK(T) \ TREE_CHECK3 (T, ARRAY_TYPE, SET_TYPE, VECTOR_TYPE) @@ -597,7 +617,10 @@ extern void tree_operand_check_failed (int, enum tree_code, /* In a VAR_DECL, nonzero means allocate static storage. In a FUNCTION_DECL, nonzero if function has been defined. - In a CONSTRUCTOR, nonzero means allocate static storage. */ + In a CONSTRUCTOR, nonzero means allocate static storage. + + ??? This is also used in lots of other nodes in unclear ways which + should be cleaned up some day. */ #define TREE_STATIC(NODE) ((NODE)->common.static_flag) /* In a TARGET_EXPR, WITH_CLEANUP_EXPR, CLEANUP_STMT, or element of a @@ -605,29 +628,42 @@ extern void tree_operand_check_failed (int, enum tree_code, executed if an exception is thrown, not on normal exit of its scope. */ #define CLEANUP_EH_ONLY(NODE) ((NODE)->common.static_flag) -/* In a CONVERT_EXPR, NOP_EXPR or COMPOUND_EXPR, this means the node was - made implicitly and should not lead to an "unused value" warning. */ -#define TREE_NO_UNUSED_WARNING(NODE) ((NODE)->common.static_flag) +/* In a CONVERT_EXPR, NOP_EXPR, NON_LVALUE_EXPR or COMPOUND_EXPR, this means + the node was made implicitly and should not lead to an "unused value" + warning. + + ??? Apparently this is also used on other expression types (such as + MODIFY_EXPR. This needs to be cleaned up sometime. */ +#define TREE_NO_UNUSED_WARNING(NODE) (EXPR_CHECK (NODE)->common.static_flag) /* Nonzero for a TREE_LIST or TREE_VEC node means that the derivation chain is via a `virtual' declaration. */ -#define TREE_VIA_VIRTUAL(NODE) ((NODE)->common.static_flag) +#define TREE_VIA_VIRTUAL(NODE) \ + (TREE_CHECK2 (NODE, TREE_LIST, TREE_VEC)->common.static_flag) /* In an INTEGER_CST, REAL_CST, COMPLEX_CST, or VECTOR_CST this means there was an overflow in folding. This is distinct from TREE_OVERFLOW because ANSI C requires a diagnostic when overflows occur in constant expressions. */ -#define TREE_CONSTANT_OVERFLOW(NODE) ((NODE)->common.static_flag) +#define TREE_CONSTANT_OVERFLOW(NODE) (CST_CHECK (NODE)->common.static_flag) /* In an IDENTIFIER_NODE, this means that assemble_name was called with this string as an argument. */ #define TREE_SYMBOL_REFERENCED(NODE) \ (IDENTIFIER_NODE_CHECK (NODE)->common.static_flag) +/* Nonzero in a pointer or reference type means the data pointed to + by this type can alias anything. */ +#define TYPE_REF_CAN_ALIAS_ALL(NODE) \ + (PTR_OR_REF_CHECK (NODE)->common.static_flag) + /* In an INTEGER_CST, REAL_CST, COMPLEX_CST, or VECTOR_CST, this means there was an overflow in folding, and no warning has been issued - for this subexpression. TREE_OVERFLOW implies - TREE_CONSTANT_OVERFLOW, but not vice versa. */ + for this subexpression. TREE_OVERFLOW implies TREE_CONSTANT_OVERFLOW, + but not vice versa. + + ??? Apparently, lots of code assumes this is defined in all + expressions. */ #define TREE_OVERFLOW(NODE) ((NODE)->common.public_flag) /* In a VAR_DECL or FUNCTION_DECL, @@ -1021,6 +1057,8 @@ struct tree_block GTY(()) #define TYPE_OFFSET_BASETYPE(NODE) (OFFSET_TYPE_CHECK (NODE)->type.maxval) #define TYPE_POINTER_TO(NODE) (TYPE_CHECK (NODE)->type.pointer_to) #define TYPE_REFERENCE_TO(NODE) (TYPE_CHECK (NODE)->type.reference_to) +#define TYPE_NEXT_PTR_TO(NODE) (POINTER_TYPE_CHECK (NODE)->type.minval) +#define TYPE_NEXT_REF_TO(NODE) (REFERENCE_TYPE_CHECK (NODE)->type.minval) #define TYPE_MIN_VALUE(NODE) (NUMERICAL_TYPE_CHECK (NODE)->type.minval) #define TYPE_MAX_VALUE(NODE) (NUMERICAL_TYPE_CHECK (NODE)->type.maxval) #define TYPE_PRECISION(NODE) (TYPE_CHECK (NODE)->type.precision) @@ -2190,9 +2228,9 @@ extern tree make_unsigned_type (int); extern void initialize_sizetypes (void); extern void set_sizetype (tree); extern void fixup_unsigned_type (tree); -extern tree build_pointer_type_for_mode (tree, enum machine_mode); +extern tree build_pointer_type_for_mode (tree, enum machine_mode, bool); extern tree build_pointer_type (tree); -extern tree build_reference_type_for_mode (tree, enum machine_mode); +extern tree build_reference_type_for_mode (tree, enum machine_mode, bool); extern tree build_reference_type (tree); extern tree build_vector_type_for_mode (tree, enum machine_mode); extern tree build_vector_type (tree innertype, int nunits); |