From e222497dcb808dc0c8e24dcded5b90bac4b59122 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Thu, 10 Jan 2019 12:32:03 +0000 Subject: [PATCH] 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 From-SVN: r267806 --- libgomp/ChangeLog | 7 ++++ .../testsuite/libgomp.oacc-c++/pr71959-aux.cc | 35 +++++++++++++++++++ libgomp/testsuite/libgomp.oacc-c++/pr71959.C | 31 ++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 libgomp/testsuite/libgomp.oacc-c++/pr71959-aux.cc create mode 100644 libgomp/testsuite/libgomp.oacc-c++/pr71959.C diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 9bb7e89367d..100bbdc7748 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,10 @@ +2019-01-10 Nathan Sidwell + Julian Brown + + PR lto/71959 + * testsuite/libgomp.oacc-c++/pr71959-aux.cc: New. + * testsuite/libgomp.oacc-c++/pr71959.C: New. + 2019-01-09 Sebastian Huber * 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 00000000000..10a6eeb644c --- /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 00000000000..bf27a75c784 --- /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; +} -- 2.30.2