This file contains a list of notes for those writing testcases and those
writing expect scripts.  At present, they're in random order.

Verbosity Levels

- each level adds verbosity so level 2 prints all level 1 and level 2 stuff.

1) Print a one-liner indicating the testcase being run (and maybe special
   compiler options).

2) Print compiler and program invocation including arguments and their output.
   Proc's gcc_load and gcc_start handle the latter two.

3) Print detailed testcase analysis like "Looking for pattern ...", etc.

4) Maximum verbosity.  Print anything else of interest.

send_log conventions

Various messages are stored in gcc.log by the testing framework and we
try to augment them with some of our own.  The format of the framework
messages are:

PASS: blah blah ...
FAIL: blah blah ...

so we use

XXXX: blah blah ...

Current messages are:

EXEC: program being executed (so compiler path and args are recorded)
STAT: intermediate pass/fail statistics

Test scripts must ignore the compiler messages "path prefix never used"
and "linker input file unused".  Don't let their appearance cause a testcase
to fail.  See lib/dg.exp for the exact regsub to use.

If you're unclear about which directory a testcase should be installed in,
ask gcc-local.

Have the text of a fail message be the same as that for pass.
IE: have

        if ...success...
                pass "pr 1234"
        else
                fail "pr 1234"

not

        if ...success...
                pass "pr 1234 passed"
        else
                fail "pr 1234 failed"


This lets test-tool (which drives the nightly tests) do a better job
at tracking which tests have digressed or been fixed.

DO NOT PUT NON-PORTABLE TESTCASES IN gcc.c-torture.

ANY TARGET SPECIFIC TESTCASE MUST HAVE APPROPRIATE CODE TO PREVENT IT FROM
CAUSING A `FAILURE' ON UNSUPPORTED PLATFORMS.

The "torture" tests are meant to be generic tests that can run on any
target.  So you have to be careful about endianness, assumptions about
sizes of datatypes, etc etc.

For tests that merely need to compile, put them in the "compile" directory.

For tests which should give an error, put them in the "noncompile" directory
and update noncompile.exp appropriately (see examples in noncompile.exp).

For IEEE FP specific tests, put them in execute/ieee.

For execution tests, put them in execute.

If a test does not fit into the torture framework, use the dg framework.


Copyright (C) 1997-2022 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
