On 6/6/11, Janis Johnson <jani...@codesourcery.com> wrote:
> On 06/03/2011 11:14 AM, Lawrence Crowl wrote:
>> The PPH project has tests that compile two different ways, and
>> then compare the assembly.  If either of the compiles fails, the
>> comparison will fail.  We'd like to simply not run the comparison.
>>
>> We currently have:
>>
>> set have_errs [llength [grep $test "{\[ \t\]\+dg-error\[\t\]\+.*\[
>> \t\]\+}"]]
>> # Compile the file the first time for a base case.
>> dg-test -keep-output $test "$options -I." ""
>>
>> if { $have_errs } {
>>    verbose -log "regular compilation failed"
>>    fail "$nshort $options, regular compilation failed"
>>    return
>> }
>>
>> But that only stops subsequent actions when the test is known
>> a priori to have errors.  How do we detect compilation errors,
>> so as to skip the remainder of the actions?
>
> Complicated GCC tests do this by using local procs instead of dg-runtest
> and dg-test.  See, for example, gcc.dg/lto/lto.exp,
> gcc.dg/compat/compat.exp and gcc.dg/tree-prof/tree-prof.exp, which use
> lto.exp, compat.exp and profopt.exp from GCC's testsuite/lib.  Those
> have scenarios in which further testing is skipped after a compile or
> link fails.

So, I ended up changing the definition of fail from "reports test
failing" to "does not produce an assembly file".  We really need
the latter for comparison, so it is the true measure.  Once I made
that change in orientation, I was able to achieve what I wanted.

The simple part is the regular compile.

    # Compile the file the first time for a base case.
    set dg-do-what-default compile
    dg-test -keep-output $test "$options -I." ""

    # Quit if it did not compile successfully.
    if { ![file_on_host exists "$bname.s"] } {
        # All regular compiles should pass.
        fail "$nshort $options (regular assembly missing)"
        return
    }

The complicated part is the compile we are comparing against, which
required knowing whether or not a compile failure is expected.  For
that we grep for dg-xfail-if and the appropriate option.

    # Compile a second time using the pph files.
    dg-test -keep-output $test "$options $mapflag -I." ""

    # Quit if it did not compile successfully.
    if { ![file_on_host exists "$bname.s"] } {
        # Expect assembly to be missing when the compile is an expected fail.
        if { ![llength [grep $test "dg-xfail-if.*-fpph-map"]] } {
            fail "$nshort $options (pph assembly missing)"
        }
        return
    }

-- 
Lawrence Crowl

Reply via email to