aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@acm.org>2019-01-10 12:32:03 +0000
committerJulian Brown <jules@gcc.gnu.org>2019-01-10 12:32:03 +0000
commite222497dcb808dc0c8e24dcded5b90bac4b59122 (patch)
tree874c87935bf7d04335ec46a5d777e12dfa82a4b6
parentae8792cb3b49225e37d530c8e35f6608c5eb8492 (diff)
downloadgcc-e222497dcb808dc0c8e24dcded5b90bac4b59122.zip
gcc-e222497dcb808dc0c8e24dcded5b90bac4b59122.tar.gz
gcc-e222497dcb808dc0c8e24dcded5b90bac4b59122.tar.bz2
Add testcase from PR71959
libgomp/ PR lto/71959 * testsuite/libgomp.oacc-c++/pr71959-aux.cc: New. * testsuite/libgomp.oacc-c++/pr71959.C: New. Co-Authored-By: Julian Brown <julian@codesourcery.com> From-SVN: r267806
-rw-r--r--libgomp/ChangeLog7
-rw-r--r--libgomp/testsuite/libgomp.oacc-c++/pr71959-aux.cc35
-rw-r--r--libgomp/testsuite/libgomp.oacc-c++/pr71959.C31
3 files changed, 73 insertions, 0 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index 9bb7e89..100bbdc 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,10 @@
+2019-01-10 Nathan Sidwell <nathan@acm.org>
+ Julian Brown <julian@codesourcery.com>
+
+ PR lto/71959
+ * testsuite/libgomp.oacc-c++/pr71959-aux.cc: New.
+ * testsuite/libgomp.oacc-c++/pr71959.C: New.
+
2019-01-09 Sebastian Huber <sebastian.huber@embedded-brains.de>
* config/rtems/bar.c: Include "../linux/bar.c" and delete copy
diff --git a/libgomp/testsuite/libgomp.oacc-c++/pr71959-aux.cc b/libgomp/testsuite/libgomp.oacc-c++/pr71959-aux.cc
new file mode 100644
index 0000000..10a6eeb
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c++/pr71959-aux.cc
@@ -0,0 +1,35 @@
+// { dg-do compile }
+
+#define STR1(X) #X
+#define STR2(X) STR1(X)
+#define LABEL(X) STR2(__USER_LABEL_PREFIX__) X
+
+struct Iter
+{
+ int *cursor;
+
+ void ctor (int *cursor_) asm (LABEL ("_ZN4IterC1EPi"));
+ int *point () const asm (LABEL ("_ZNK4Iter5pointEv"));
+};
+
+#pragma acc routine
+void Iter::ctor (int *cursor_)
+{
+ cursor = cursor_;
+}
+
+#pragma acc routine
+int *Iter::point () const
+{
+ return cursor;
+}
+
+void apply (int (*fn)(), Iter out) asm (LABEL ("_ZN5Apply5applyEPFivE4Iter"));
+
+#pragma acc routine
+void apply (int (*fn)(), struct Iter out)
+{ *out.point() = fn (); }
+
+extern "C" void __gxx_personality_v0 ()
+{
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c++/pr71959.C b/libgomp/testsuite/libgomp.oacc-c++/pr71959.C
new file mode 100644
index 0000000..bf27a75
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c++/pr71959.C
@@ -0,0 +1,31 @@
+// { dg-additional-sources "pr71959-aux.cc" }
+
+// PR lto/71959 ICEd LTO due to mismatch between writing & reading behaviour
+
+struct Iter
+{
+ int *cursor;
+
+ Iter(int *cursor_) : cursor(cursor_) {}
+
+ int *point() const { return cursor; }
+};
+
+#pragma acc routine seq
+int one () { return 1; }
+
+struct Apply
+{
+ static void apply (int (*fn)(), Iter out)
+ { *out.point() = fn (); }
+};
+
+int main ()
+{
+ int x;
+
+#pragma acc parallel copyout(x)
+ Apply::apply (one, Iter (&x));
+
+ return x != 1;
+}