Allow braces around relative line numbers
2017-03-27 Tom de Vries <tom@codesourcery.com>
PR testsuite/80220
* gcc.dg/dg-test-1.c: Add dg-error tests using relative line numbers
between braces.
(foo2): New function.
* lib/gcc-dg.exp (process-message): Handle whitespace in relative line
number argument.
---
gcc/testsuite/gcc.dg/dg-test-1.c | 7 +++++++
gcc/testsuite/lib/gcc-dg.exp | 16 +++++++++++-----
2 files changed, 18 insertions(+), 5 deletions(-)
@@ -40,3 +40,10 @@ baz (int i, int j)
/* { dg-warning "unused parameter 'j'" "warn6" { target *-*-* } .-10 } */
+
+/* Test for relative line numbers in braces */
+void
+foo2 (void)
+{ /* { dg-error "'a' undeclared" "err1" { target *-*-* } { .+1 } } */
+ int z = a + b + c; /* { dg-error "'b' undeclared" "err2" { target *-*-* } { . } } */
+} /* { dg-error "'c' undeclared" "err3" { target *-*-* } { .-1 } } */
@@ -988,11 +988,17 @@ if { [info procs saved-dg-error] == [list] \
proc process-message { msgproc msgprefix dgargs } {
upvar dg-messages dg-messages
- # Handle relative line specification, .+1 or .-1 etc.
- if { [llength $dgargs] == 5
- && [regsub "^\.\[+-\](\[0-9\]+)$" [lindex $dgargs 4] "\\1" num] } {
- set num [expr [lindex $dgargs 0] [string index [lindex $dgargs 4] 1] $num]
- set dgargs [lreplace $dgargs 4 4 $num]
+ if { [llength $dgargs] == 5 } {
+ set linenr [lindex $dgargs 4]
+ # Strip whitespace added by using braces.
+ set linenr [string trimleft [string trimright $linenr]]
+ # Handle relative line specification, .+1 or .-1 etc.
+ if { [regsub "^\.\[+-\](\[0-9\]+)$" $linenr "\\1" num] } {
+ set directivelinenr [lindex $dgargs 0]
+ set op [string index $linenr 1]
+ set linenr [expr $directivelinenr $op $num]
+ }
+ set dgargs [lreplace $dgargs 4 4 $linenr]
}
# Process the dg- directive, including adding the regular expression