re PR c/49644 (post-increment of promoted operand is incorrect.)
PR c/49644 * typeck.c (cp_build_binary_op): For MULT_EXPR and TRUNC_DIV_EXPR with one non-complex and one complex argument, call save_expr on both operands. * g++.dg/torture/pr49644.C: New test. From-SVN: r176006
This commit is contained in:
parent
c4603e7ce0
commit
e834d8486a
|
@ -1,3 +1,10 @@
|
|||
2011-07-07 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/49644
|
||||
* typeck.c (cp_build_binary_op): For MULT_EXPR and TRUNC_DIV_EXPR with
|
||||
one non-complex and one complex argument, call save_expr on both
|
||||
operands.
|
||||
|
||||
2011-07-06 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/49353
|
||||
|
|
|
@ -4338,6 +4338,7 @@ cp_build_binary_op (location_t location,
|
|||
{
|
||||
case MULT_EXPR:
|
||||
case TRUNC_DIV_EXPR:
|
||||
op1 = save_expr (op1);
|
||||
imag = build2 (resultcode, real_type, imag, op1);
|
||||
/* Fall through. */
|
||||
case PLUS_EXPR:
|
||||
|
@ -4356,6 +4357,7 @@ cp_build_binary_op (location_t location,
|
|||
switch (code)
|
||||
{
|
||||
case MULT_EXPR:
|
||||
op0 = save_expr (op0);
|
||||
imag = build2 (resultcode, real_type, op0, imag);
|
||||
/* Fall through. */
|
||||
case PLUS_EXPR:
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
2011-07-07 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/49644
|
||||
* g++.dg/torture/pr49644.C: New test.
|
||||
|
||||
PR c/49644
|
||||
* gcc.c-torture/execute/pr49644.c: New test.
|
||||
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
// PR c/49644
|
||||
// { dg-do run }
|
||||
|
||||
extern "C" void abort ();
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
_Complex double a[12], *c = a, s = 3.0 + 1.0i;
|
||||
double b[12] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }, *d = b;
|
||||
int i;
|
||||
for (i = 0; i < 6; i++)
|
||||
*c++ = *d++ * s;
|
||||
if (c != a + 6 || d != b + 6)
|
||||
abort ();
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue