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
This commit is contained in:
Marek Polacek 2018-05-23 19:06:36 +00:00 committed by Marek Polacek
parent 89453706e0
commit 622075181d
4 changed files with 97 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2018-05-23 Marek Polacek <polacek@redhat.com>
* 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 <segher@kernel.crashing.org>
* lib/target-supports.exp (check_effective_target_be): New.

View File

@ -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 ();
}

View File

@ -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 ();
}
}

View File

@ -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 ();
}