tree.h (SET_ARRAY_OR_VECTOR_CHECK): Rename to SET_OR_ARRAY_CHECK and adjust definitio...
authorZack Weinberg <zack@gcc.gnu.org>
Sat, 1 May 2004 00:08:17 +0000 (00:08 +0000)
committerZack Weinberg <zack@gcc.gnu.org>
Sat, 1 May 2004 00:08:17 +0000 (00:08 +0000)
* 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

gcc/ChangeLog
gcc/expr.c
gcc/tree.h

index 311728e4d551f03b3ef0a47a92c66f4ece92bf78..76b6a981938efc805edcb88835950dabe45075bd 100644 (file)
@@ -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
        (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.
        (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>
 
        (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.
 
 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>
        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.
index 2afe44db287a96b993018d5b32b7a112b1599e3c..9f246dcf6a3ac3710a5403ecb4686b0afd4e3ab5 100644 (file)
@@ -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)))
index 085d5fec22706dbfcdfbe1e1021e8661f421512d..0f7e7eda5f40b7cac1621d00062b116c656ec4ea 100644 (file)
@@ -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