diff options
author | Richard Henderson <rth@redhat.com> | 2008-12-08 09:12:55 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2008-12-08 09:12:55 -0800 |
commit | 179d2f74d481593a39387918f89ef5766d9c64ea (patch) | |
tree | 485096f4613a7860b4f1694cbf454cc8dbba8614 /gcc/tree.h | |
parent | be6568d8c686fc6d4d7665b9eadc725eabdce39c (diff) | |
download | gcc-179d2f74d481593a39387918f89ef5766d9c64ea.zip gcc-179d2f74d481593a39387918f89ef5766d9c64ea.tar.gz gcc-179d2f74d481593a39387918f89ef5766d9c64ea.tar.bz2 |
re PR middle-end/38240 (Vector type definitions not compatible with attribute target)
PR 38240
* tree.h (TYPE_MODE): Invoke vector_type_mode when needed.
(SET_TYPE_MODE): New.
* c-decl.c (parser_xref_tag): Use it.
(finish_enum): Likewise.
* tree.c (build_pointer_type_for_mode): Likewise.
(build_reference_type_for_mode, build_index_type): Likewise.
(build_range_type, make_vector_type): Likewise.
(build_common_tree_nodes_2): Likewise.
* stor-layout.c (compute_record_mode): Likewise.
(finalize_type_size, layout_type, make_fract_type): Likewise.
(make_accum_type, initialize_sizetypes): Likewise.
(vector_type_mode): New.
* function.c (allocate_struct_function): Call
invoke_set_current_function_hook before querying anything else.
* config/i386/i386.c (ix86_valid_target_attribute_inner_p): Add avx.
cp/
* class.c (finish_struct_bits): Use SET_TYPE_MODE.
* decl.c (record_unknown_type): Likewise.
(start_enum, finish_enum): Likewise.
From-SVN: r142556
Diffstat (limited to 'gcc/tree.h')
-rw-r--r-- | gcc/tree.h | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -2050,7 +2050,6 @@ struct tree_block GTY(()) #define TYPE_UID(NODE) (TYPE_CHECK (NODE)->type.uid) #define TYPE_SIZE(NODE) (TYPE_CHECK (NODE)->type.size) #define TYPE_SIZE_UNIT(NODE) (TYPE_CHECK (NODE)->type.size_unit) -#define TYPE_MODE(NODE) (TYPE_CHECK (NODE)->type.mode) #define TYPE_VALUES(NODE) (ENUMERAL_TYPE_CHECK (NODE)->type.values) #define TYPE_DOMAIN(NODE) (ARRAY_TYPE_CHECK (NODE)->type.values) #define TYPE_FIELDS(NODE) (RECORD_OR_UNION_CHECK (NODE)->type.values) @@ -2078,6 +2077,14 @@ struct tree_block GTY(()) #define TYPE_MAIN_VARIANT(NODE) (TYPE_CHECK (NODE)->type.main_variant) #define TYPE_CONTEXT(NODE) (TYPE_CHECK (NODE)->type.context) +/* Vector types need to check target flags to determine type. */ +extern enum machine_mode vector_type_mode (const_tree); +#define TYPE_MODE(NODE) \ + (TREE_CODE (TYPE_CHECK (NODE)) == VECTOR_TYPE \ + ? vector_type_mode (NODE) : (NODE)->type.mode) +#define SET_TYPE_MODE(NODE, MODE) \ + (TYPE_CHECK (NODE)->type.mode = (MODE)) + /* The "canonical" type for this type node, which can be used to compare the type for equality with another type. If two types are equal (based on the semantics of the language), then they will have |