diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/torture/pr81365.C')
-rw-r--r-- | gcc/testsuite/g++.dg/torture/pr81365.C | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/torture/pr81365.C b/gcc/testsuite/g++.dg/torture/pr81365.C new file mode 100644 index 00000000000..fde5e503df9 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr81365.C @@ -0,0 +1,39 @@ +// PR tree-optimization/81365 +// { dg-do run } + +struct A { unsigned a; }; + +struct B { + B (const A *x) + { + __builtin_memcpy (b, x, 3 * sizeof (A)); + __builtin_memcpy (c, x + 3, sizeof (A)); + __builtin_memset (c + 1, 0, sizeof (A)); + } + bool + foo (unsigned x) + { + A *it = c; + if (it->a == x || (++it)->a == x) + { + A t(b[0]); + b[0] = *it; + *it = t; + return true; + } + return false; + } + A b[3]; + A c[2]; +}; + +int +main () +{ + A x[] = { 4, 8, 12, 18 }; + B y(x); + if (!y.foo (18)) + __builtin_abort (); + if (!y.foo (4)) + __builtin_abort (); +} |