Commit 8864590b by Tom de Vries Committed by Tom de Vries

[testsuite/guality] Use line number vars in gdb-test

2018-06-29  Tom de Vries  <tdevries@suse.de>

	* gcc.dg/guality/pr45882.c (foo): Add line number var for breakpoint
	line, and use it.
	* lib/gcc-dg.exp (get-absolute-line): Factor out of ...
	(process-message): ... here.
	* lib/gcc-gdb-test.exp (gdb-test): Use get-absolute-line.

From-SVN: r262248
parent 3f10efd4
2018-06-29 Tom de Vries <tdevries@suse.de>
* gcc.dg/guality/pr45882.c (foo): Add line number var for breakpoint
line, and use it.
* lib/gcc-dg.exp (get-absolute-line): Factor out of ...
(process-message): ... here.
* lib/gcc-gdb-test.exp (gdb-test): Use get-absolute-line.
2018-06-29 Martin Liska <mliska@suse.cz> 2018-06-29 Martin Liska <mliska@suse.cz>
PR tree-optimization/86263 PR tree-optimization/86263
......
...@@ -9,11 +9,11 @@ volatile short int v; ...@@ -9,11 +9,11 @@ volatile short int v;
__attribute__((noinline,noclone,used)) int __attribute__((noinline,noclone,used)) int
foo (int i, int j) foo (int i, int j)
{ {
int b = i; /* { dg-final { gdb-test 16 "b" "7" } } */ int b = i; /* { dg-final { gdb-test bpline "b" "7" } } */
int c = i + 4; /* { dg-final { gdb-test 16 "c" "11" } } */ int c = i + 4; /* { dg-final { gdb-test bpline "c" "11" } } */
int d = a[i]; /* { dg-final { gdb-test 16 "d" "112" } } */ int d = a[i]; /* { dg-final { gdb-test bpline "d" "112" } } */
int e = a[i + 6]; /* { dg-final { gdb-test 16 "e" "142" } } */ int e = a[i + 6]; /* { dg-final { gdb-test bpline "e" "142" } } */
++v; ++v; /* { dg-line bpline } */
return ++j; return ++j;
} }
......
...@@ -1039,23 +1039,24 @@ proc dg-line { linenr varname } { ...@@ -1039,23 +1039,24 @@ proc dg-line { linenr varname } {
} }
} }
# Modify the regular expression saved by a DejaGnu message directive to # Get the absolute line number corresponding to:
# include a prefix and to force the expression to match a single line. # - a relative line number (a non-null useline is required), or
# MSGPROC is the procedure to call. # - a line number variable reference.
# MSGPREFIX is the prefix to prepend. # Argument 0 is the line number on which line was used
# DGARGS is the original argument list. # Argument 1 is the relative line number or line number variable reference
#
proc get-absolute-line { useline line } {
if { [regsub "^\.\[+-\](\[0-9\]+)$" $line "\\1" num] && $useline != "" } {
# Handle relative line specification, .+1 or .-1 etc.
set num [expr $useline [string index $line 1] $num]
return $num
}
proc process-message { msgproc msgprefix dgargs } { if { ! [regsub "^(\[a-zA-Z\]\[a-zA-Z0-9_\]*)$" $line "\\1" varname] } {
upvar dg-messages dg-messages return $line
}
if { [llength $dgargs] == 5 } {
if { [regsub "^\.\[+-\](\[0-9\]+)$" [lindex $dgargs 4] "\\1" num] } {
# Handle relative line specification, .+1 or .-1 etc.
set num [expr [lindex $dgargs 0] [string index [lindex $dgargs 4] 1] $num]
set dgargs [lreplace $dgargs 4 4 $num]
} elseif { [regsub "^(\[a-zA-Z\]\[a-zA-Z0-9_\]*)$" [lindex $dgargs 4] "\\1" varname] } {
# Handle linenr variable defined by dg-line # Handle linenr variable defined by dg-line
set org_varname $varname set org_varname $varname
set varname "saved_linenr_$varname" set varname "saved_linenr_$varname"
eval global $varname eval global $varname
...@@ -1063,8 +1064,11 @@ proc process-message { msgproc msgprefix dgargs } { ...@@ -1063,8 +1064,11 @@ proc process-message { msgproc msgprefix dgargs } {
# Generate used-but-not-defined error. # Generate used-but-not-defined error.
eval set var_defined [info exists $varname] eval set var_defined [info exists $varname]
if { ! $var_defined } { if { ! $var_defined } {
set linenr [expr [lindex $dgargs 0]] if { "$useline" != "" } {
error "dg-line var $org_varname used at line $linenr, but not defined" error "dg-line var $org_varname used at line $uselinenr, but not defined"
} else {
error "dg-line var $org_varname used, but not defined"
}
return return
} }
...@@ -1075,9 +1079,22 @@ proc process-message { msgproc msgprefix dgargs } { ...@@ -1075,9 +1079,22 @@ proc process-message { msgproc msgprefix dgargs } {
# Get line number from var and use it. # Get line number from var and use it.
eval set num \$$varname eval set num \$$varname
set line $num
}
# Modify the regular expression saved by a DejaGnu message directive to
# include a prefix and to force the expression to match a single line.
# MSGPROC is the procedure to call.
# MSGPREFIX is the prefix to prepend.
# DGARGS is the original argument list.
proc process-message { msgproc msgprefix dgargs } {
upvar dg-messages dg-messages
if { [llength $dgargs] == 5 } {
set num [get-absolute-line [lindex $dgargs 0] [lindex $dgargs 4]]
set dgargs [lreplace $dgargs 4 4 $num] set dgargs [lreplace $dgargs 4 4 $num]
} }
}
# Process the dg- directive, including adding the regular expression # Process the dg- directive, including adding the regular expression
# to the new message entry in dg-messages. # to the new message entry in dg-messages.
......
...@@ -60,7 +60,8 @@ proc gdb-test { args } { ...@@ -60,7 +60,8 @@ proc gdb-test { args } {
set cmd_file "[file rootname [file tail $prog]].gdb" set cmd_file "[file rootname [file tail $prog]].gdb"
set fd [open $cmd_file "w"] set fd [open $cmd_file "w"]
puts $fd "break [lindex $args 0]" set line [get-absolute-line "" [lindex $args 0]]
puts $fd "break $line"
puts $fd "run" puts $fd "run"
puts $fd "$command $var" puts $fd "$command $var"
if { $command == "print" } { if { $command == "print" } {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment