1 // { dg-additional-sources "pr71959-aux.cc" } 2 3 // PR lto/71959 ICEd LTO due to mismatch between writing & reading behaviour 4 5 struct Iter 6 { 7 int *cursor; 8 IterIter9 Iter(int *cursor_) : cursor(cursor_) {} 10 pointIter11 int *point() const { return cursor; } 12 }; 13 14 #pragma acc routine seq one()15int one () { return 1; } 16 17 struct Apply 18 { applyApply19 static void apply (int (*fn)(), Iter out) 20 { *out.point() = fn (); } 21 }; 22 main()23int main () 24 { 25 int x; 26 27 #pragma acc parallel copyout(x) 28 Apply::apply (one, Iter (&x)); 29 30 return x != 1; 31 } 32