From e3c06b990b2458b87f72a0c63e0de72cf69f7fc4 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Sun, 10 Oct 2021 01:28:59 +0000 Subject: [PATCH] tree-optimization: [PR102622]: wrong code due to signed one bit integer and "a?-1:0" Since the problem was already fixed on this branch, we just want to add the testcase so it does not regress there. PR tree-optimization/102622 gcc/testsuite/ChangeLog: * gcc.c-torture/execute/bitfld-10.c: New test. (cherry picked from commit 882d806c1a8f9d2d2ade1133de88d63e5d4fe40c) --- .../gcc.c-torture/execute/bitfld-10.c | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/execute/bitfld-10.c diff --git a/gcc/testsuite/gcc.c-torture/execute/bitfld-10.c b/gcc/testsuite/gcc.c-torture/execute/bitfld-10.c new file mode 100644 index 000000000000..bdbf5733ce7f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/bitfld-10.c @@ -0,0 +1,24 @@ +/* PR tree-optimization/102622 */ +/* Wrong code introduced due to phi-opt + introducing undefined signed interger overflow + with one bit signed integer negation. */ + +struct f{signed t:1;}; +int g(struct f *a, int t) __attribute__((noipa)); +int g(struct f *a, int t) +{ + if (t) + a->t = -1; + else + a->t = 0; + int t1 = a->t; + if (t1) return 1; + return t1; +} + +int main(void) +{ + struct f a; + if (!g(&a, 1)) __builtin_abort(); + return 0; +} -- 2.47.2