From dc38a61086ce5044b9b78c48e7897179b819e06e Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Wed, 31 Aug 2005 15:55:52 +0000 Subject: [PATCH] Fix ppc -m64 constant address expression expansion bug. Oked by Richard Henderson. From-SVN: r103676 --- gcc/ChangeLog | 6 ++++ gcc/expr.c | 2 +- .../gcc.c-torture/execute/const-addr-expr-1.c | 33 +++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.c-torture/execute/const-addr-expr-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 62801c9c3f5..40dcbe33045 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-08-31 Fariborz Jahanian + + * expr.c (expand_expr_real_1): Compare size of address + mode to target's address mode size in deciding expansion of + the constant address. + 2005-08-31 Richard Guenther PR middle-end/23477 diff --git a/gcc/expr.c b/gcc/expr.c index e75d3351395..e44a54f9729 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -7673,7 +7673,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, } else if (TREE_CODE (TREE_OPERAND (exp, 1)) == INTEGER_CST - && GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_INT + && GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT && TREE_CONSTANT (TREE_OPERAND (exp, 0))) { rtx constant_part; diff --git a/gcc/testsuite/gcc.c-torture/execute/const-addr-expr-1.c b/gcc/testsuite/gcc.c-torture/execute/const-addr-expr-1.c new file mode 100644 index 00000000000..dc34368cb4a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/const-addr-expr-1.c @@ -0,0 +1,33 @@ +#include +#include +extern void abort(); + +typedef struct foo +{ + int uaattrid; + char *name; +} FOO; + +FOO Upgrade_items[] = +{ + {1, "1"}, + {2, "2"}, + {0, NULL} +}; + +int *Upgd_minor_ID = + (int *) &((Upgrade_items + 1)->uaattrid); + +int *Upgd_minor_ID1 = + (int *) &((Upgrade_items)->uaattrid); + +int +main(int argc, char **argv) +{ + if (*Upgd_minor_ID != 2) + abort(); + + if (*Upgd_minor_ID1 != 1) + abort(); + return 0; +} -- 2.30.2