tree.h (SET_ARRAY_OR_VECTOR_CHECK): Rename to SET_OR_ARRAY_CHECK and adjust definition accordingly.
* 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. From-SVN: r81373
This commit is contained in:
parent
672149847f
commit
5c5214a92e
@ -1,3 +1,12 @@
|
||||
2004-04-30 Zack Weinberg <zack@codesourcery.com>
|
||||
|
||||
* 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 <jason@redhat.com>
|
||||
|
||||
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 <uros@kss-loka.si>
|
||||
|
||||
@ -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 <uweigand@de.ibm.com>
|
||||
|
||||
* 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 <paul@codesourcery.com>
|
||||
@ -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 <geoffk@apple.com>
|
||||
|
||||
* config/darwin.h (STARTFILE_SPEC): Use %s to find crt2.o.
|
||||
|
15
gcc/expr.c
15
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)))
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user