* [PATCH][gdb/testsuite] Fix gdb.threads/omp-par-scope.exp XPASS
@ 2020-03-19 10:03 Tom de Vries
2020-03-20 14:34 ` Tom de Vries
2020-03-20 15:52 ` Tom Tromey
0 siblings, 2 replies; 3+ messages in thread
From: Tom de Vries @ 2020-03-19 10:03 UTC (permalink / raw)
To: gdb-patches
Hi,
When running test-case gdb.threads/omp-par-scope.exp, I get this XPASS:
...
XPASS: gdb.threads/omp-par-scope.exp: nested_parallel: outer_threads: \
outer stop: get valueof "num"
...
for test:
...
set thread_num [get_valueof "" "num" "unknown"]
...
The intention of the test is to get the value of local variable num, which
has been set to:
...
int num = omp_get_thread_num ();
...
but the actually printed value is 'num':
...
(gdb) print num^M
$76 = num^M
...
This is due to the fact that num is missing in the locals, so instead we find
the enum member 'num' of enum expression_operator in glibc/intl/plural-exp.h.
Fix this by getting the value using a new proc get_local_valueof, which uses
the "info locals" commands to get the value.
Tested on x86_64-linux, with gcc 7.5.0 (where the test xfails) and gcc
10.0.1 (where the test passes).
OK for trunk?
Thanks,
- Tom
[gdb/testsuite] Fix gdb.threads/omp-par-scope.exp XPASS
---
gdb/testsuite/gdb.threads/omp-par-scope.exp | 2 +-
gdb/testsuite/lib/gdb.exp | 24 ++++++++++++++++++++++++
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/gdb/testsuite/gdb.threads/omp-par-scope.exp b/gdb/testsuite/gdb.threads/omp-par-scope.exp
index 16441d3ec6..890696200f 100644
--- a/gdb/testsuite/gdb.threads/omp-par-scope.exp
+++ b/gdb/testsuite/gdb.threads/omp-par-scope.exp
@@ -273,7 +273,7 @@ with_test_prefix "nested_parallel" {
gdb_continue_to_breakpoint "at printf"
if {$have_older_gcc} { setup_xfail "*-*-*" }
- set thread_num [get_valueof "" "num" "unknown"]
+ set thread_num [get_local_valueof "num" "unknown"]
gdb_test "print file_scope_var" "= 9876"
if {$have_older_gcc} { setup_xfail "*-*-*" }
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index b14b3a968e..e17ac0ef75 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -6173,6 +6173,30 @@ proc get_valueof { fmt exp default {test ""} } {
return ${val}
}
+# Retrieve the value of local var EXP in the inferior. DEFAULT is used as
+# fallback if print fails. TEST is the test message to use. It can be
+# omitted, in which case a test message is built from EXP.
+
+proc get_local_valueof { exp default {test ""} } {
+ global gdb_prompt
+
+ if {$test == "" } {
+ set test "get local valueof \"${exp}\""
+ }
+
+ set val ${default}
+ gdb_test_multiple "info locals ${exp}" "$test" {
+ -re "$exp = (\[^\r\n\]*)\[\r\n\]*$gdb_prompt $" {
+ set val $expect_out(1,string)
+ pass "$test"
+ }
+ timeout {
+ fail "$test (timeout)"
+ }
+ }
+ return ${val}
+}
+
# Retrieve the value of EXP in the inferior, as a signed decimal value
# (using "print /d"). DEFAULT is used as fallback if print fails.
# TEST is the test message to use. It can be omitted, in which case
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH][gdb/testsuite] Fix gdb.threads/omp-par-scope.exp XPASS
2020-03-19 10:03 [PATCH][gdb/testsuite] Fix gdb.threads/omp-par-scope.exp XPASS Tom de Vries
@ 2020-03-20 14:34 ` Tom de Vries
2020-03-20 15:52 ` Tom Tromey
1 sibling, 0 replies; 3+ messages in thread
From: Tom de Vries @ 2020-03-20 14:34 UTC (permalink / raw)
To: gdb-patches
On 19-03-2020 11:03, Tom de Vries wrote:
> Hi,
>
> When running test-case gdb.threads/omp-par-scope.exp, I get this XPASS:
> ...
> XPASS: gdb.threads/omp-par-scope.exp: nested_parallel: outer_threads: \
> outer stop: get valueof "num"
> ...
> for test:
> ...
> set thread_num [get_valueof "" "num" "unknown"]
> ...
>
> The intention of the test is to get the value of local variable num, which
> has been set to:
> ...
> int num = omp_get_thread_num ();
> ...
> but the actually printed value is 'num':
> ...
> (gdb) print num^M
> $76 = num^M
> ...
>
> This is due to the fact that num is missing in the locals, so instead we find
> the enum member 'num' of enum expression_operator in glibc/intl/plural-exp.h.
>
> Fix this by getting the value using a new proc get_local_valueof, which uses
> the "info locals" commands to get the value.
>
Alternatively, we could use "set auto-solib-add off".
Thanks,
- Tom
> Tested on x86_64-linux, with gcc 7.5.0 (where the test xfails) and gcc
> 10.0.1 (where the test passes).
>
> OK for trunk?
>
> Thanks,
> - Tom
>
> [gdb/testsuite] Fix gdb.threads/omp-par-scope.exp XPASS
>
> ---
> gdb/testsuite/gdb.threads/omp-par-scope.exp | 2 +-
> gdb/testsuite/lib/gdb.exp | 24 ++++++++++++++++++++++++
> 2 files changed, 25 insertions(+), 1 deletion(-)
>
> diff --git a/gdb/testsuite/gdb.threads/omp-par-scope.exp b/gdb/testsuite/gdb.threads/omp-par-scope.exp
> index 16441d3ec6..890696200f 100644
> --- a/gdb/testsuite/gdb.threads/omp-par-scope.exp
> +++ b/gdb/testsuite/gdb.threads/omp-par-scope.exp
> @@ -273,7 +273,7 @@ with_test_prefix "nested_parallel" {
> gdb_continue_to_breakpoint "at printf"
>
> if {$have_older_gcc} { setup_xfail "*-*-*" }
> - set thread_num [get_valueof "" "num" "unknown"]
> + set thread_num [get_local_valueof "num" "unknown"]
>
> gdb_test "print file_scope_var" "= 9876"
> if {$have_older_gcc} { setup_xfail "*-*-*" }
> diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
> index b14b3a968e..e17ac0ef75 100644
> --- a/gdb/testsuite/lib/gdb.exp
> +++ b/gdb/testsuite/lib/gdb.exp
> @@ -6173,6 +6173,30 @@ proc get_valueof { fmt exp default {test ""} } {
> return ${val}
> }
>
> +# Retrieve the value of local var EXP in the inferior. DEFAULT is used as
> +# fallback if print fails. TEST is the test message to use. It can be
> +# omitted, in which case a test message is built from EXP.
> +
> +proc get_local_valueof { exp default {test ""} } {
> + global gdb_prompt
> +
> + if {$test == "" } {
> + set test "get local valueof \"${exp}\""
> + }
> +
> + set val ${default}
> + gdb_test_multiple "info locals ${exp}" "$test" {
> + -re "$exp = (\[^\r\n\]*)\[\r\n\]*$gdb_prompt $" {
> + set val $expect_out(1,string)
> + pass "$test"
> + }
> + timeout {
> + fail "$test (timeout)"
> + }
> + }
> + return ${val}
> +}
> +
> # Retrieve the value of EXP in the inferior, as a signed decimal value
> # (using "print /d"). DEFAULT is used as fallback if print fails.
> # TEST is the test message to use. It can be omitted, in which case
>
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH][gdb/testsuite] Fix gdb.threads/omp-par-scope.exp XPASS
2020-03-19 10:03 [PATCH][gdb/testsuite] Fix gdb.threads/omp-par-scope.exp XPASS Tom de Vries
2020-03-20 14:34 ` Tom de Vries
@ 2020-03-20 15:52 ` Tom Tromey
1 sibling, 0 replies; 3+ messages in thread
From: Tom Tromey @ 2020-03-20 15:52 UTC (permalink / raw)
To: Tom de Vries; +Cc: gdb-patches
>>>>> "Tom" == Tom de Vries <tdevries@suse.de> writes:
Tom> This is due to the fact that num is missing in the locals, so instead we find
Tom> the enum member 'num' of enum expression_operator in glibc/intl/plural-exp.h.
lol
Tom> Fix this by getting the value using a new proc get_local_valueof, which uses
Tom> the "info locals" commands to get the value.
Tom> Tested on x86_64-linux, with gcc 7.5.0 (where the test xfails) and gcc
Tom> 10.0.1 (where the test passes).
Tom> OK for trunk?
I think omp-par-scope.exp could use a note explaining why
get_local_valueof is needed. Otherwise this looks good to me, please
check it in with that change.
thanks,
Tom
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-03-20 16:02 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-19 10:03 [PATCH][gdb/testsuite] Fix gdb.threads/omp-par-scope.exp XPASS Tom de Vries
2020-03-20 14:34 ` Tom de Vries
2020-03-20 15:52 ` Tom Tromey
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox