| /* PERMUTE_ARGS: -O | |
| */ | |
| // https://issues.dlang.org/show_bug.cgi?id=22104 | |
| struct S { int a1, a2, a3; } | |
| version (none) | |
| void throws2ndCall(ref S x); | |
| else | |
| { | |
| void throws2ndCall(ref S x) | |
| { | |
| __gshared bool b; | |
| if (b) | |
| throw new Exception("n == 1"); | |
| b = true; | |
| } | |
| } | |
| void main() { foo(); } | |
| void foo() | |
| { | |
| S[] arr = [S(), S()]; | |
| size_t i; | |
| try | |
| { | |
| for (i = 0; i < 2; i++) | |
| throws2ndCall(arr[i]); | |
| } | |
| catch (Exception o) | |
| { | |
| //printf("Exception: i = %lu\n", i); | |
| assert(i == 1); // this fails | |
| } | |
| } |