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