diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 43ebcd5c25f..31b3e082555 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2000-08-30 Greg McGary + + * tree.h (struct tree_int_cst): Wrap low and high in a sub-struct. + (TREE_INT_CST_LOW, TREE_INT_CST_HIGH): Access through sub-struct. + (TREE_INT_CST): New macro. + * varasm.c (const_hash, compare_constant_1, record_constant_1): + Use new macro TREE_INT_CST. + Wed 30-Aug-2000 23:18:59 BST Neil Booth * contrib.texi: Add self. diff --git a/gcc/tree.h b/gcc/tree.h index e9b0da4d730..245f413c77b 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -655,8 +655,9 @@ extern void tree_class_check_failed PARAMS ((const tree, int, If the data type is signed, the value is sign-extended to 2 words even though not all of them may really be in use. In an unsigned constant shorter than 2 words, the extra bits are 0. */ -#define TREE_INT_CST_LOW(NODE) (INTEGER_CST_CHECK (NODE)->int_cst.int_cst_low) -#define TREE_INT_CST_HIGH(NODE) (INTEGER_CST_CHECK (NODE)->int_cst.int_cst_high) +#define TREE_INT_CST(NODE) (INTEGER_CST_CHECK (NODE)->int_cst.int_cst) +#define TREE_INT_CST_LOW(NODE) (TREE_INT_CST (NODE).low) +#define TREE_INT_CST_HIGH(NODE) (TREE_INT_CST (NODE).high) #define INT_CST_LT(A, B) \ (TREE_INT_CST_HIGH (A) < TREE_INT_CST_HIGH (B) \ @@ -675,8 +676,13 @@ struct tree_int_cst struct tree_common common; struct rtx_def *rtl; /* acts as link to register transfer language (rtl) info */ - unsigned HOST_WIDE_INT int_cst_low; - HOST_WIDE_INT int_cst_high; + /* A sub-struct is necessary here because the function `const_hash' + wants to scan both words as a unit and taking the address of the + sub-struct yields the properly inclusive bounded pointer. */ + struct { + unsigned HOST_WIDE_INT low; + HOST_WIDE_INT high; + } int_cst; }; /* In REAL_CST, STRING_CST, COMPLEX_CST nodes, and CONSTRUCTOR nodes, diff --git a/gcc/varasm.c b/gcc/varasm.c index 478daf82861..5a10d65687f 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -2361,8 +2361,8 @@ const_hash (exp) switch (code) { case INTEGER_CST: - p = (char *) &TREE_INT_CST_LOW (exp); - len = 2 * sizeof TREE_INT_CST_LOW (exp); + p = (char *) &TREE_INT_CST (exp); + len = sizeof TREE_INT_CST (exp); break; case REAL_CST: @@ -2506,8 +2506,8 @@ compare_constant_1 (exp, p) if (*p++ != TYPE_PRECISION (TREE_TYPE (exp))) return 0; - strp = (unsigned char *) &TREE_INT_CST_LOW (exp); - len = 2 * sizeof TREE_INT_CST_LOW (exp); + strp = (unsigned char *) &TREE_INT_CST (exp); + len = sizeof TREE_INT_CST (exp); break; case REAL_CST: @@ -2745,8 +2745,8 @@ record_constant_1 (exp) { case INTEGER_CST: obstack_1grow (&permanent_obstack, TYPE_PRECISION (TREE_TYPE (exp))); - strp = (unsigned char *) &TREE_INT_CST_LOW (exp); - len = 2 * sizeof TREE_INT_CST_LOW (exp); + strp = (unsigned char *) &TREE_INT_CST (exp); + len = sizeof TREE_INT_CST (exp); break; case REAL_CST: