Hi!

Sorry, my mail got somehow truncated.

On Sun, Mar 16, 2025 at 01:42:52AM +0100, Jakub Jelinek wrote:
> On Sat, Mar 15, 2025 at 04:14:48PM -0500, Robert Dubner wrote:
> > --- /dev/null
> > +++ b/gcc/testsuite/cobol.dg/group1/check_88.cob
> > @@ -0,0 +1,116 @@
> > +*> { dg-do run }
> > +*> { dg-output "-><-\n" }
> > +*> { dg-output "->   <-\n" }
> > +*> { dg-output " \n" }
> > +*> { dg-output "There should be no garbage after character 32\n" }
> > +*> { dg-output
> > "-------------------------------\[*\]--------------------------------\n" }

The reason why I was suggesting using
*> { dg-output 
{-------------------------------\*--------------------------------(\n|\r\n|\r)} 
}
rather than this is that the quoting of special chars is then much simpler in 
TCL
compared to "...".
In "" string you need to use "\\\*" to match literal *.
The reason for using (\n|\r\n|\r) is to be prepared for Darwin and Windows line 
endings, so
that you don't have to rewrite all the tests later.

> > +*> { dg-output "CheckBinary Properly True\n" }
> > +*> { dg-output "CheckBinary Properly False\n" }

And the suggestion was not to require \n (or better (\n|\r\n|\r)
at the end of last dg-output, with some dejagnu boards and e.g. remote
testing the last newline is sometimes lost.

> > +        IDENTIFICATION DIVISION.
> > +        PROGRAM-ID. check88.
> > +
> > +        DATA DIVISION.
> > +        WORKING-STORAGE SECTION.
> > +        01 Check88 PIC XXX VALUE SPACE.
> > +           88  CheckSpace  VALUE SPACE.
> > +           88  CheckHi     VALUE HIGH-VALUES.
> > +           88  CheckLo     VALUE LOW-VALUES.
> > +           88  CheckZero   VALUE ZERO.
> > +           88  CheckQuotes VALUE QUOTE.
> > +           88  CheckBob    VALUE "bob".
> > +           88  CheckBinary VALUE X"000102". *> { dg-warning .*embedded.* }

I'd suggest *> { dg-warning "embedded" } here (or if there is complicated
quoting, *> { dg-warning {embedded} }), it isn't needed to add .* at the start
and end, the regexp doesn't have ^ and $ implicitly added around it.
Note, if you want to use .* somewhere in the middle, better use
\[^\n\r\]* in the "" strings (I think just [^\n\r] in the {} ones).
I don't know what the line length limits in COBOL are (and if it applies to
comments too), it is also possible to put the directive on a separate line
and refer for diagnostics on previous (or next line):
           88  CheckBinary VALUE X"000102".
*> { dg-warning "embedded" "" { target *-*-* } .-1 }

> > --- /dev/null
> > +++ b/gcc/testsuite/cobol.dg/group1/dg.exp

I'd strongly advise against putting hundreds of copies of the same
*.exp driver everywhere.
It is expensive, shows up visibly in the *.log/*.sum files and
complicates running individual tests.

You can run individual tests through e.g.
make check-cobol RUNTESTFLAGS="dg.exp='fail.cob pa*.cob'"
If every directory has its own *.exp file without a reason (reason
can be different rules on what to do in the directory), then you'd
need to remember or search to find out that to run your
check_88.cob test alone you need to use
make check-cobol RUNTESTFLAGS=group1.exp=check_88.cob

What you want instead is modify the existing dg.exp so that it
handles subdirectories.
E.g. the g++.dg/dg.exp has
# Recursively find files in $dir and subdirs, do not walk into subdirs
# that contain their own .exp file.
proc find-cxx-tests { dir suffix } {
    set tests [lsort [glob -nocomplain -directory $dir "*.$suffix" ]]
    foreach subdir [lsort [glob -nocomplain -type d -directory $dir *]] {
        if { [glob -nocomplain -directory $subdir *.exp] eq "" } {
            eval lappend tests [find-cxx-tests $subdir $suffix]
        }
    }
    return $tests
}

set tests [find-cxx-tests $srcdir/$subdir {C}]

# Main loop.
g++-dg-runtest $tests "" $DEFAULT_CXXFLAGS

So, that would be for COBOL

# Recursively find files in $dir and subdirs, do not walk into subdirs
# that contain their own .exp file.
proc find-cob-tests { dir suffix } {
    set tests [lsort [glob -nocomplain -directory $dir "*.$suffix" ]]
    foreach subdir [lsort [glob -nocomplain -type d -directory $dir *]] {
        if { [glob -nocomplain -directory $subdir *.exp] eq "" } {
            eval lappend tests [find-cob-tests $subdir $suffix]
        }
    }
    return $tests
}

set tests [find-cob-tests $srcdir/$subdir {cob}]

# Main loop.
if [check_effective_target_cobol] {
    cobol-dg-runtest $tests "" $all_flags
}

        Jakub

Reply via email to