From 622075181d70d9dd3b0b0546447a167ac0ead6ba Mon Sep 17 00:00:00 2001 From: Marek Polacek Date: Wed, 23 May 2018 19:06:36 +0000 Subject: [PATCH] range-for8.C: New test. * g++.dg/cpp2a/range-for8.C: New test. * g++.dg/cpp2a/range-for9.C: New test. * g++.dg/cpp2a/range-for10.C: New test. From-SVN: r260625 --- gcc/testsuite/ChangeLog | 6 ++++ gcc/testsuite/g++.dg/cpp2a/range-for10.C | 24 +++++++++++++++ gcc/testsuite/g++.dg/cpp2a/range-for8.C | 37 ++++++++++++++++++++++++ gcc/testsuite/g++.dg/cpp2a/range-for9.C | 30 +++++++++++++++++++ 4 files changed, 97 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp2a/range-for10.C create mode 100644 gcc/testsuite/g++.dg/cpp2a/range-for8.C create mode 100644 gcc/testsuite/g++.dg/cpp2a/range-for9.C diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e9b35d5f4d3..01bc8b1c9b4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2018-05-23 Marek Polacek + + * g++.dg/cpp2a/range-for8.C: New test. + * g++.dg/cpp2a/range-for9.C: New test. + * g++.dg/cpp2a/range-for10.C: New test. + 2017-05-23 Segher Boessenkool * lib/target-supports.exp (check_effective_target_be): New. diff --git a/gcc/testsuite/g++.dg/cpp2a/range-for10.C b/gcc/testsuite/g++.dg/cpp2a/range-for10.C new file mode 100644 index 00000000000..a0d0e6d085e --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/range-for10.C @@ -0,0 +1,24 @@ +// P0614R1 +// { dg-do run } +// { dg-options "-std=c++2a" } + +struct A { int i; long long j; } a[64]; + +int +main () +{ + A b = { 1, 2 }; + for (auto & [ u, v ] : a) + { + u = 2; + v = 3; + } + + for (auto [x, y] = b; auto [ u, v ] : a) + if (y + u != x + v) + __builtin_abort (); + + for (auto [x, y] = b; auto & [ u, v ] : a) + if (y + u != x + v) + __builtin_abort (); +} diff --git a/gcc/testsuite/g++.dg/cpp2a/range-for8.C b/gcc/testsuite/g++.dg/cpp2a/range-for8.C new file mode 100644 index 00000000000..204a63204ca --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/range-for8.C @@ -0,0 +1,37 @@ +// P0614R1 +// { dg-do run } +// { dg-options "-std=c++2a" } + +struct A { int i; long long j; } a[64]; + +int +main () +{ + for (int i = 0; auto &x : a) + { + x.i = i; + x.j = 2 * i++; + } + for (auto & [ x, y ] : a) + { + x += 2; + y += 3; + } + for (int i = 0; const auto [ u, v ] : a) + { + if (u != i + 2 || v != 2 * i++ + 3) + __builtin_abort (); + } + for (int i = 0; auto [ x, y ] : a) + { + x += 4; + y += 5; + if (x != i + 6 || y != 2 * i++ + 8) + __builtin_abort (); + } + for (int i = 0; const auto x : a) + { + if (x.i != i + 2 || x.j != 2 * i++ + 3) + __builtin_abort (); + } +} diff --git a/gcc/testsuite/g++.dg/cpp2a/range-for9.C b/gcc/testsuite/g++.dg/cpp2a/range-for9.C new file mode 100644 index 00000000000..74d71b67213 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/range-for9.C @@ -0,0 +1,30 @@ +// P0614R1 +// { dg-do run } +// { dg-options "-std=c++2a" } + +struct A { int i, j; }; + +int +main () +{ + A a = { .i = 2, .j = 3 }; + int arr[] = { 1, 1, 1 }; + + for (auto & [ x, y ] = a; auto z : arr) + if (x + z != 3 || y + z != 4) + __builtin_abort (); + + for (int d = 1; auto &z : arr) + z += d; + + for (const auto [ x, y ] = a; auto z : arr) + if (x + z != 4 || y + z != 5) + __builtin_abort (); + + for (int d = 1; auto &z : arr) + z += d; + + for (auto [ x, y ] = a; auto z : arr) + if (x + z != 5 || y + z != 6) + __builtin_abort (); +} -- 2.30.2