Hi! Ping. Anybody got an opinion on the approach we should take?
Grüße Thomas On 2020-11-03T15:21:40+0100, I wrote: > Hi! > > I've investigated some more. > > On 2020-11-03T13:31:53+0100, I wrote: >> 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. > > The problem is indeed related to the "WARNING: dg-line var [...] defined, > but not used" diagnostics. These are produced via DejaGnu 'warning' > calls, which increments 'warncnt', and once that reaches > 'warning_threshold' (default per '/usr/share/dejagnu/framework.exp' is: > 'set warning_threshold 3'), this triggers UNRESOLVED via > '/usr/share/dejagnu/framework.exp:record_test'. That this UNRESOLVED > appears for the *next* testcase, must be considered some kind of bug > (improper use of 'warning'?), I suppose. > > The following works around that: > > --- gcc/testsuite/lib/gcc-dg.exp > +++ gcc/testsuite/lib/gcc-dg.exp > @@ -1008,6 +1008,8 @@ if { [info procs saved-dg-test] == [list] } { > } else { > regsub {^saved_linenr_} $varname "" org_varname > warning "dg-line var $org_varname defined, but not used" > + global warncnt > + incr warncnt -1 > } > } > unset save_linenr_varnames > > ..., or: > > --- gcc/testsuite/lib/gcc-dg.exp > +++ gcc/testsuite/lib/gcc-dg.exp > @@ -1007,7 +1007,7 @@ if { [info procs saved-dg-test] == [list] } { > eval unset $varname_used > } else { > regsub {^saved_linenr_} $varname "" org_varname > - warning "dg-line var $org_varname defined, but not used" > + verbose "WARNING: dg-line var $org_varname defined, but not > used" 0 > } > } > unset save_linenr_varnames > > ..., or hopefully something less hacky. > > > The question is, what quality/severity should the "dg-line var [...] > defined, but not used" diagnostic have? > > For example, "FAIL": > > --- gcc/testsuite/lib/gcc-dg.exp > +++ gcc/testsuite/lib/gcc-dg.exp > @@ -1007,7 +1007,7 @@ if { [info procs saved-dg-test] == [list] } { > eval unset $varname_used > } else { > regsub {^saved_linenr_} $varname "" org_varname > - warning "dg-line var $org_varname defined, but not used" > + fail "dg-line var $org_varname defined, but not used" > } > } > unset save_linenr_varnames > > 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) > FAIL: dg-line var l1 defined, but not used > FAIL: dg-line var l2 defined, but not used > FAIL: dg-line var l3 defined, but not used > PASS: c-c++-common/goacc/l_.c -std=c++14 (test for errors, line 14) > [...] > > ..., or "NOTE": > > --- gcc/testsuite/lib/gcc-dg.exp > +++ gcc/testsuite/lib/gcc-dg.exp > @@ -1007,7 +1007,7 @@ if { [info procs saved-dg-test] == [list] } { > eval unset $varname_used > } else { > regsub {^saved_linenr_} $varname "" org_varname > - warning "dg-line var $org_varname defined, but not used" > + note "dg-line var $org_varname defined, but not used" > } > } > unset save_linenr_varnames > > Running [...]/gcc/testsuite/g++.dg/goacc/goacc.exp ... > 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) > NOTE: dg-line var l1 defined, but not used > NOTE: dg-line var l2 defined, but not used > NOTE: dg-line var l3 defined, but not used > PASS: c-c++-common/goacc/l_.c -std=c++14 (test for errors, line 14) > [...] > > ..., or something else? > > > 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