From 6e683090d100409a80657cbeb7f741f4f94bfab7 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 7 Jun 2002 17:32:57 -0400 Subject: [PATCH] test for PR 6950 From-SVN: r54350 --- gcc/testsuite/gcc.dg/20020607-1.c | 40 +++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/20020607-1.c diff --git a/gcc/testsuite/gcc.dg/20020607-1.c b/gcc/testsuite/gcc.dg/20020607-1.c new file mode 100644 index 00000000000..afad78d8cb0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/20020607-1.c @@ -0,0 +1,40 @@ +/* PR middle-end/6950 + gcc 3.0.4 mistakenly set lhs.low to 0 at the beginning of the num_eq + expansion; it should use a temporary. +/* { dg-do run } */ + +typedef struct cpp_num cpp_num; +struct cpp_num +{ + long high; + long low; + char overflow; +}; + +#define num_eq(num1, num2) (num1.low == num2.low && num1.high == num2.high) + +static cpp_num +num_equality_op (lhs, rhs) + cpp_num lhs, rhs; +{ + lhs.low = num_eq (lhs, rhs); + lhs.high = 0; + lhs.overflow = 0; + return lhs; +} + +int main() +{ + cpp_num a = { 1, 2 }; + cpp_num b = { 3, 4 }; + + cpp_num result = num_equality_op (a, b); + if (result.low) + return 1; + + result = num_equality_op (a, a); + if (!result.low) + return 2; + + return 0; +}