| // { 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; | |
| } |