Re: RFE: Allow for execution output to influence test result
Jacob Bachmeyer <[email protected]> Wed, 22 May 2024 20:57:35 -0500
| Newsgroups | gmane.comp.sysutils.dejagnu.general |
|---|---|
| Message-ID | <[email protected]> |
DejaGnu already has the requested feature as far as I can tell.
Rainer Orth wrote:
> In the GCC testsuite, there's quite a number of tests (mostly in
> gcc/testsuite/gcc.target/i386, but also on powerpc and x86_64) that
> check if the host CPU supports some ISA extension at runtime and
> currently just exit (0) if that support is missing, producing a PASS
> result.
>
> That's not only highly confusing, but completely against the spirit of
> IEEE 1001.3.
>
> Some of those tests (rather some *-check.h headers that do the actual
> legwork of calling __cpuid or __builtin_cpu_supports) have provisions to
> print either PASSED or SKIPPED depending on the outcome of that test,
> but only in DEBUG mode.
>
These are problems with the GCC testsuite, not the DejaGnu framework.
> It occured to me that it would be useful and reasonably simple to always
> prints these (or similarly stilyzed) comments and evaluate those from
> DejaGnu (respectively gcc-dg-prune).
>
> While there's already support for this for the compile step of a test
> (matching specific patterns and emitting e.g. ::unsupported::message
> which are then converted into an UNSUPPORTED result), the execution step
> only looks at the execution output to handle dg-output.
>
Looking at lib/dg.exp:dg-test, the execution step is performed by
calling ${tool}_load, which is expected to produce a list of two
elements, STATUS and OUTPUT. If STATUS is "pass", the framework can
then further examine OUTPUT for expected execution results. If STATUS
is "fail", the framework emits a verbose message reporting the state of
the Tcl "errorCode" variable. Otherwise, STATUS is taken as the name of
a test-reporting procedure and called.
The ${tool}_load (here probably "gcc_load") callback is supplied by the
testsuite. All you should need to do is improve those tests to report a
different status if the required ISA support is not available (maybe
"exit (42)" instead of "exit (0)"?) and arrange for gcc_load to
recognize that status and return a list {unsupported ""}, which will
cause the execution test to be reported as UNSUPPORTED, which should be
the correct status if it depends on CPU features lacking on the current
machine.
-- Jacob