From 49be8259f83c7ef43fccb767df333d8870fb4d34 Mon Sep 17 00:00:00 2001 From: zack Date: Sat, 1 May 2004 00:08:17 +0000 Subject: [PATCH] * tree.h (SET_ARRAY_OR_VECTOR_CHECK): Rename to SET_OR_ARRAY_CHECK and adjust definition accordingly. (TYPE_DOMAIN): Allow only SET_TYPE and ARRAY_TYPE. (TYPE_DEBUG_REPRESENTATION_TYPE): Allow only VECTOR_TYPE. * expr.c (store_constructor): Do not access TYPE_DOMAIN of a VECTOR_TYPE. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@81373 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 27 ++++++++++++++++++--------- gcc/expr.c | 15 ++++++++------- gcc/tree.h | 8 ++++---- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 311728e4d55..76b6a981938 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2004-04-30 Zack Weinberg + + * tree.h (SET_ARRAY_OR_VECTOR_CHECK): Rename to SET_OR_ARRAY_CHECK + and adjust definition accordingly. + (TYPE_DOMAIN): Allow only SET_TYPE and ARRAY_TYPE. + (TYPE_DEBUG_REPRESENTATION_TYPE): Allow only VECTOR_TYPE. + * expr.c (store_constructor): Do not access TYPE_DOMAIN of a + VECTOR_TYPE. + 2004-04-30 Jason Merrill PR c++/14587 @@ -29,18 +38,18 @@ (legitimize_tls_address): Call s390_emit_tls_call_insn instead of emit_call_insn. (s390_emit_prologue): Use s390_emit_call instead of emit_call_insn. - (s390_emit_epilogue): Like s390_emit_prologue. Parameter for sibcalls + (s390_emit_epilogue): Like s390_emit_prologue. Parameter for sibcalls added. - * config/s390/s390.h (SIBCALL_REGNUM): New macro representing the + * config/s390/s390.h (SIBCALL_REGNUM): New macro representing the register number used to hold the target address for sibcalls. * config/s390/s390.md ("sibcall", "sibcall_value", "sibcall_epilogue"): New expanders. - ("*sibcall_br", "*sibcall_brc", "*sibcall_brcl", "*sibcall_value_br", + ("*sibcall_br", "*sibcall_brc", "*sibcall_brcl", "*sibcall_value_br", "*sibcall_value_brc", "*sibcall_value_brcl"): New insns. - ("call_exp", "call_value_exp", "call_value_tls", "call_value_tls_exp"): + ("call_exp", "call_value_exp", "call_value_tls", "call_value_tls_exp"): Expanders removed. ("call", "call_value"): Call s390_emit_call to emit the call patterns. - ("*bras", "*brasl", "*bras_r", "*brasl_r", "*bras_tls", "*brasl_tls", + ("*bras", "*brasl", "*bras_r", "*brasl_r", "*bras_tls", "*brasl_tls", "*basr", "*basr_r", "*basr_tls"): Added constraint: !SIBLING_CALL_P. ("epilogue"): Changed the call to s390_emit_epilogue to use the new parameter. @@ -205,7 +214,7 @@ (simplify_relational_operation_1): New function. (simplify_ternary_operation): simplify_relational_operation may now return another relational expression. - (simplify_rtx): Remove unnecessary temp variable. + (simplify_rtx): Remove unnecessary temp variable. 2004-04-29 Uros Bizjak @@ -213,7 +222,7 @@ (subst_stack_regs_pat): UNSPEC_FPATAN, UNSPEC_FYL2X: Use swap_to_top(). (subst_stack_regs_pat): UNSPEC_FSCALE: Remove. - (subst_stack_regs_pat): Handle UNSPEC_FSCALE_FRACT and + (subst_stack_regs_pat): Handle UNSPEC_FSCALE_FRACT and UNSPEC_FSCALE_EXP. * config/i386/i386.md (UNSPEC_FSCALE): Remove. @@ -279,7 +288,7 @@ 2004-04-28 Ulrich Weigand - * gcse.c (find_moveable_store): Do not accept store insns with + * gcse.c (find_moveable_store): Do not accept store insns with REG_EH_REGION note. 2004-04-28 Paul Brook @@ -313,7 +322,7 @@ callers. (multiple_reg_loc_descriptor, reg_loc_descriptor): Use gcc register number for indexing hard_regno_nregs array. - + 2004-04-27 Geoffrey Keating * config/darwin.h (STARTFILE_SPEC): Use %s to find crt2.o. diff --git a/gcc/expr.c b/gcc/expr.c index 2afe44db287..9f246dcf6a3 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -4723,7 +4723,7 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size) tree elt; int i; int need_to_clear; - tree domain = TYPE_DOMAIN (type); + tree domain; tree elttype = TREE_TYPE (type); int const_bounds_p; HOST_WIDE_INT minelt = 0; @@ -4733,13 +4733,14 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size) int elt_size = 0; unsigned n_elts = 0; - /* Vectors are like arrays, but the domain is stored via an array - type indirectly. */ - if (TREE_CODE (type) == VECTOR_TYPE) + if (TREE_CODE (type) == ARRAY_TYPE) + domain = TYPE_DOMAIN (type); + else + /* Vectors do not have domains; look up the domain of + the array embedded in the debug representation type. + FIXME Would probably be more efficient to treat vectors + separately from arrays. */ { - /* Note that although TYPE_DEBUG_REPRESENTATION_TYPE uses - the same field as TYPE_DOMAIN, we are not guaranteed that - it always will. */ domain = TYPE_DEBUG_REPRESENTATION_TYPE (type); domain = TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (domain))); if (REG_P (target) && VECTOR_MODE_P (GET_MODE (target))) diff --git a/gcc/tree.h b/gcc/tree.h index 085d5fec227..0f7e7eda5f4 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -483,8 +483,8 @@ extern void tree_operand_check_failed (int, enum tree_code, #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) +#define SET_OR_ARRAY_CHECK(T) \ + TREE_CHECK2 (T, ARRAY_TYPE, SET_TYPE) #define REC_OR_UNION_CHECK(T) \ TREE_CHECK3 (T, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE) @@ -1075,7 +1075,7 @@ struct tree_block GTY(()) #define TYPE_MODE(NODE) (TYPE_CHECK (NODE)->type.mode) #define TYPE_ORIG_SIZE_TYPE(NODE) (INTEGER_TYPE_CHECK (NODE)->type.values) #define TYPE_VALUES(NODE) (ENUMERAL_TYPE_CHECK (NODE)->type.values) -#define TYPE_DOMAIN(NODE) (SET_ARRAY_OR_VECTOR_CHECK (NODE)->type.values) +#define TYPE_DOMAIN(NODE) (SET_OR_ARRAY_CHECK (NODE)->type.values) #define TYPE_FIELDS(NODE) (REC_OR_UNION_CHECK (NODE)->type.values) #define TYPE_METHODS(NODE) (REC_OR_UNION_CHECK (NODE)->type.maxval) #define TYPE_VFIELD(NODE) (REC_OR_UNION_CHECK (NODE)->type.minval) @@ -1101,7 +1101,7 @@ struct tree_block GTY(()) /* For a VECTOR_TYPE node, this describes a different type which is emitted in the debugging output. We use this to describe a vector as a structure containing an array. */ -#define TYPE_DEBUG_REPRESENTATION_TYPE(NODE) (TYPE_CHECK (NODE)->type.values) +#define TYPE_DEBUG_REPRESENTATION_TYPE(NODE) (VECTOR_TYPE_CHECK (NODE)->type.values) /* For aggregate types, information about this type, as a base type for itself. Used in a language-dependent way for types that are -- 2.11.4.GIT