Hi! Help. Save the attached file as 'gcc/testsuite/c-c++-common/goacc/l_.c', and then run:
$ make check-gcc-c++ RUNTESTFLAGS=--all\ goacc.exp=l_.c As expected for '-std=c++98' testing, which comes first: PASS: c-c++-common/goacc/l_.c -std=c++98 (test for errors, line 14) PASS: c-c++-common/goacc/l_.c -std=c++98 (test for warnings, line 11) PASS: c-c++-common/goacc/l_.c -std=c++98 (test for excess errors) WARNING: dg-line var l1 defined, but not used WARNING: dg-line var l2 defined, but not used WARNING: dg-line var l3 defined, but not used But then it goes on with '-std=c++14', etc. testing: UNRESOLVED: c-c++-common/goacc/l_.c -std=c++14 (test for errors, line 14) PASS: c-c++-common/goacc/l_.c -std=c++14 (test for warnings, line 11) PASS: c-c++-common/goacc/l_.c -std=c++14 (test for excess errors) WARNING: dg-line var l1 defined, but not used WARNING: dg-line var l2 defined, but not used WARNING: dg-line var l3 defined, but not used UNRESOLVED: c-c++-common/goacc/l_.c -std=c++17 (test for errors, line 14) PASS: c-c++-common/goacc/l_.c -std=c++17 (test for warnings, line 11) PASS: c-c++-common/goacc/l_.c -std=c++17 (test for excess errors) WARNING: dg-line var l1 defined, but not used WARNING: dg-line var l2 defined, but not used WARNING: dg-line var l3 defined, but not used UNRESOLVED: c-c++-common/goacc/l_.c -std=c++2a (test for errors, line 14) PASS: c-c++-common/goacc/l_.c -std=c++2a (test for warnings, line 11) PASS: c-c++-common/goacc/l_.c -std=c++2a (test for excess errors) WARNING: dg-line var l1 defined, but not used WARNING: dg-line var l2 defined, but not used WARNING: dg-line var l3 defined, but not used === g++ Summary === # of expected passes 9 # of unresolved testcases 3 Why is suddenly the "test for errors, line 14" an UNRESOLVED? (The compiler diagnostics are as expected. This testcase doesn't depend on '-std=[...]' at all.) And now the "funny" thing: if I disable any of the 'dg-line' directives, it works as expected, all-PASS. But note that "test for errors, line 14" doesn't even use a 'dg-line'-captured line number. (It uses absoute line numbers. Same issue visible when using relative ones, or when actually using 'dg-line' for these.) I reduced this from a much bigger testcase, and had originally found this not with 'check-gcc-c++' but with 'check-gcc-c': things worked fine as long as testing just a single testcase, but broke when testing several. (Again the symptom was that the first testcase worked fine, but the following ones had an unexpecte UNRESOLVED for the first 'dg-error' (only for the first!).) Supposedly, 'check-gcc-c++' with a single testcase but testing several variants is exhibiting the same problem. Grüße Thomas ----------------- Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander Walter
static void test(void) { int i, j; #pragma acc parallel { /* { dg-line l1 } */ /* { dg-line l2 } */ /* { dg-line l3 } */ #pragma acc loop gang for (i = 0; i < 10; i++) { #pragma acc loop gang /* { dg-error "inner loop uses same OpenACC parallelism as containing loop" "" { target *-*-* } 14 } */ /* { dg-message "containing loop" "" { target *-*-* } 11 } */ for (j = 0; j < 10; j++) ; } } }