testcase: Add testcase for tree-optimization/117341
Checks
Context |
Check |
Description |
linaro-tcwg-bot/tcwg_gcc_build--master-arm |
success
|
Build passed
|
linaro-tcwg-bot/tcwg_gcc_build--master-aarch64 |
success
|
Build passed
|
linaro-tcwg-bot/tcwg_gcc_check--master-arm |
success
|
Test passed
|
linaro-tcwg-bot/tcwg_gcc_check--master-aarch64 |
success
|
Test passed
|
Commit Message
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>
---
gcc/testsuite/g++.dg/torture/pr117341-1.C | 54 +++++++++++++++++++++++
1 file changed, 54 insertions(+)
create mode 100644 gcc/testsuite/g++.dg/torture/pr117341-1.C
Comments
On 10/28/24 11:08 PM, Andrew Pinski wrote:
> 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.
OK
jeff
new file mode 100644
@@ -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;
+}