mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-04 09:50:43 +08:00
re PR middle-end/33617 (ICE for nonconstant callee-copied constructor arguments)
gcc/ PR middle-end/33617 * expr.c (expand_expr_addr_expr_1): Pass CONSTRUCTORs to expand_expr. gcc/testsuite/ PR middle-end/33617 * gcc.c-torture/compile/pr33617.c: New test. From-SVN: r128965
This commit is contained in:
parent
966b774d3e
commit
16089886c2
@ -1,3 +1,9 @@
|
||||
2007-10-02 Richard Sandiford <rsandifo@nildram.co.uk>
|
||||
|
||||
PR middle-end/33617
|
||||
* expr.c (expand_expr_addr_expr_1): Pass CONSTRUCTORs to
|
||||
expand_expr.
|
||||
|
||||
2007-10-02 David Daney <ddaney@avtrex.com>
|
||||
|
||||
* config/mips/mips.md (sync_compare_and_swap<mode>): Handle compare
|
||||
|
10
gcc/expr.c
10
gcc/expr.c
@ -6740,8 +6740,7 @@ expand_expr_addr_expr_1 (tree exp, rtx target, enum machine_mode tmode,
|
||||
/* ??? This should be considered a front-end bug. We should not be
|
||||
generating ADDR_EXPR of something that isn't an LVALUE. The only
|
||||
exception here is STRING_CST. */
|
||||
if (TREE_CODE (exp) == CONSTRUCTOR
|
||||
|| CONSTANT_CLASS_P (exp))
|
||||
if (CONSTANT_CLASS_P (exp))
|
||||
return XEXP (expand_expr_constant (exp, 0, modifier), 0);
|
||||
|
||||
/* Everything must be something allowed by is_gimple_addressable. */
|
||||
@ -6788,9 +6787,12 @@ expand_expr_addr_expr_1 (tree exp, rtx target, enum machine_mode tmode,
|
||||
default:
|
||||
/* If the object is a DECL, then expand it for its rtl. Don't bypass
|
||||
expand_expr, as that can have various side effects; LABEL_DECLs for
|
||||
example, may not have their DECL_RTL set yet. Assume language
|
||||
specific tree nodes can be expanded in some interesting way. */
|
||||
example, may not have their DECL_RTL set yet. Expand the rtl of
|
||||
CONSTRUCTORs too, which should yield a memory reference for the
|
||||
constructor's contents. Assume language specific tree nodes can
|
||||
be expanded in some interesting way. */
|
||||
if (DECL_P (exp)
|
||||
|| TREE_CODE (exp) == CONSTRUCTOR
|
||||
|| TREE_CODE (exp) >= LAST_AND_UNUSED_TREE_CODE)
|
||||
{
|
||||
result = expand_expr (exp, target, tmode,
|
||||
|
@ -1,3 +1,8 @@
|
||||
2007-10-02 Richard Sandiford <rsandifo@nildram.co.uk>
|
||||
|
||||
PR middle-end/33617
|
||||
* gcc.c-torture/compile/pr33617.c: New test.
|
||||
|
||||
2007-10-02 Andreas Tobler <a.tobler@schweiz.org>
|
||||
|
||||
* gcc.target/powerpc/stabs-attrib-vect-darwin.c: Change options to use
|
||||
|
7
gcc/testsuite/gcc.c-torture/compile/pr33617.c
Normal file
7
gcc/testsuite/gcc.c-torture/compile/pr33617.c
Normal file
@ -0,0 +1,7 @@
|
||||
typedef float V8SF __attribute__ ((vector_size (32)));
|
||||
void bar (V8SF);
|
||||
void
|
||||
foo (float x)
|
||||
{
|
||||
bar ((V8SF) { x, x, x, x, x, x, x, x });
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user