diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e2485c52f224..c3d9d389e924 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-12-05 Jakub Jelinek + + * expr.c (expand_expr): When checking promoted value, use + DECL_MODE (exp) and not mode. + 2001-12-05 Jakub Jelinek * c-typeck.c (output_init_element): Call digest_init diff --git a/gcc/expr.c b/gcc/expr.c index af36b3b5820f..e988c4c42b23 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -6452,7 +6452,7 @@ expand_expr (exp, target, tmode, modifier) but mark it so that we know that it was already extended. */ if (GET_CODE (DECL_RTL (exp)) == REG - && GET_MODE (DECL_RTL (exp)) != mode) + && GET_MODE (DECL_RTL (exp)) != DECL_MODE (exp)) { /* Get the signedness used for this variable. Ensure we get the same mode we got when the variable was declared. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 56b2f089d40c..5dace7b75821 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -4,6 +4,8 @@ * gcc.dg/noncompile/20011025-1.c: New test. + * g++.dg/other/anon-union.C: New test. + 2001-12-04 Joseph S. Myers * gcc.c-torture/execute/20000722-1.x, diff --git a/gcc/testsuite/g++.dg/other/anon-union.C b/gcc/testsuite/g++.dg/other/anon-union.C new file mode 100644 index 000000000000..51598bf3adec --- /dev/null +++ b/gcc/testsuite/g++.dg/other/anon-union.C @@ -0,0 +1,22 @@ +// { dg-do compile } +// { dg-options -O2 } + +int foo (); +double bar (void) +{ + union + { + char a[8]; + double b; + }; + + a[0] = foo (); + a[1] = foo (); + a[2] = foo (); + a[3] = foo (); + a[4] = foo (); + a[5] = foo (); + a[6] = foo (); + a[7] = foo (); + return b; +}