diff options
author | Nathan Sidwell <nathan@acm.org> | 2019-01-10 12:32:03 +0000 |
---|---|---|
committer | Julian Brown <jules@gcc.gnu.org> | 2019-01-10 12:32:03 +0000 |
commit | e222497dcb808dc0c8e24dcded5b90bac4b59122 (patch) | |
tree | 874c87935bf7d04335ec46a5d777e12dfa82a4b6 | |
parent | ae8792cb3b49225e37d530c8e35f6608c5eb8492 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | libgomp/testsuite/libgomp.oacc-c++/pr71959-aux.cc | 35 | ||||
-rw-r--r-- | libgomp/testsuite/libgomp.oacc-c++/pr71959.C | 31 |
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; +} |