mirror of
https://github.com/gcc-mirror/gcc.git
synced 2024-11-21 13:40:47 +00:00
testcase: Add testcase for tree-optimization/117341
Even though PR 117341 was a duplicate of PR 116768, another testcase this time C++ does not hurt to have. The testcase is a self-contained and does not use directly libstdc++ except for operator new (it does not even call delete). Tested on x86_64-linux-gnu with it working. PR tree-optimization/117341 gcc/testsuite/ChangeLog: * g++.dg/torture/pr117341-1.C: New test. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
This commit is contained in:
parent
b22d9c8f82
commit
17f6add3ab
54
gcc/testsuite/g++.dg/torture/pr117341-1.C
Normal file
54
gcc/testsuite/g++.dg/torture/pr117341-1.C
Normal file
@ -0,0 +1,54 @@
|
||||
void swap(long &a, long &b)
|
||||
{
|
||||
long t = a;
|
||||
a = b;
|
||||
b = t;
|
||||
}
|
||||
|
||||
struct Array {
|
||||
long arr[1];
|
||||
Array() : arr() {}
|
||||
/* Operators */
|
||||
long& operator[](int index) { return arr[index]; }
|
||||
const long& operator[](int index) const { return arr[index]; }
|
||||
/* Operations */
|
||||
void swap(Array& array) {
|
||||
for (int i = 0; i < 1; ++i)
|
||||
::swap(arr[i], array[i]);
|
||||
}
|
||||
};
|
||||
|
||||
class Vector : public Array {};
|
||||
|
||||
struct v
|
||||
{
|
||||
Vector *e;
|
||||
v() : e (new Vector[4]){}
|
||||
Vector& operator[](int index) { return e[index]; }
|
||||
const Vector& operator[](int index) const { return e[index]; }
|
||||
};
|
||||
static inline Vector func(const Vector& y)
|
||||
{
|
||||
return y;
|
||||
}
|
||||
|
||||
volatile int a;
|
||||
|
||||
int main() {
|
||||
v solution;
|
||||
solution[0][0] = 1;
|
||||
int t = a;
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
const Vector& v = solution[i];
|
||||
Vector sum;
|
||||
const long delta = func(v)[0] & t;
|
||||
sum[0] = v[0] + delta;
|
||||
solution[i + 1].swap(sum);
|
||||
}
|
||||
for(int i = 0; i < 4; i++)
|
||||
{
|
||||
if (solution[i][0] != 1)
|
||||
__builtin_abort();
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user