DejaGnu directive matching multiple messages on the same line
Martin Sebor
msebor@gmail.com
Wed Jul 20 20:19:00 GMT 2016
When multiple diagnostics for a given line in a test are expected,
I have been using the vertical bar ('|') in regular expression
arguments to DejaGnu directives like dg-error and dg-warning on
the assumption that all are matched.
This use appears to be sanctioned by the GCC TestCaseWriting Wiki
(https://gcc.gnu.org/wiki/TestCaseWriting):
Should a line produce two errors, the regular expression can
include an "|" (ie. a regular expression OR) between the possible
message fragments.
If only one of the errors is important, a better way to deal
with the multiple errors is to check for the one you want with
dg-error and discard the extras with dg-prune-output: ...
In a discussion of a recent patch of mine I was surprised to learn
that this use may not actually accomplish quite what's intended.
The effect of the bar operator is for the directive to match
a message on that line that contains either the left operand or
the right operand of the regex. Which means that the directive
is appropriate when it doesn't matter which of the alternatives
matches, but not when both or all messages are expected and need
to be verified.
Is there a way to express a requirement that a single line cause
two or more diagnostic messages (in any order) each matching one
of the regex strings?
I've searched the test suite for examples but couldn't find
anything. The dg-{begin,end}-multiline-output directive looked
promising until I realized that it does plain string matching
and doesn't appear to be able to match whole errors.
Thanks
Martin
More information about the Gcc
mailing list