From f20ff8373775e236e63e45ca2d4683d5f69882a7 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Wed, 19 Feb 2020 22:33:42 +0100 Subject: [PATCH] [gdb/testsuite] Fix funcall_ref.exp xpass When running gdb.ada/funcall_ref.exp I run into two XPASSes: ... (gdb) p get ("Hello world!")^M $1 = (n => 12, s => "Hello world!")^M (gdb) XPASS: gdb.ada/funcall_ref.exp: p get ("Hello world!") ptype get ("Hello world!")^M type = record^M n: natural;^M s: access array (1 .. n) of character;^M end record^M (gdb) XPASS: gdb.ada/funcall_ref.exp: ptype get ("Hello world!") ... The xfails are documented in funcall_ref.exp: ... # Currently, GCC describes such functions as returning pointers (instead of # references). setup_xfail *-*-* ... Using gnatmake 4.8, we can reproduce the XFAILs: ... (gdb) p get ("Hello world!")^M $1 = (access foo.bar) 0x6147b0 ^M (gdb) XFAIL: gdb.ada/funcall_ref.exp: p get ("Hello world!") ptype get ("Hello world!")^M type = access record^M n: natural;^M s: access array (1 .. n) of character;^M end record^M (gdb) XFAIL: gdb.ada/funcall_ref.exp: ptype get ("Hello world!") ... Fix the XPASSes by: - removing the xfail setup - switching the order of the two tests - detecting the "access record" type and declaring the first test unsupported, and skipping the second test Tested on x86_64-linux, both with gnatmake 4.8.5 and gnatmake 7.5.0. gdb/testsuite/ChangeLog: 2020-02-19 Tom de Vries * gdb.ada/funcall_ref.exp: Replace xfail setup by unsupported check. --- gdb/testsuite/ChangeLog | 4 ++++ gdb/testsuite/gdb.ada/funcall_ref.exp | 33 +++++++++++++++++++-------- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 0dff20d383..bfa1afc7f0 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2020-02-19 Tom de Vries + + * gdb.ada/funcall_ref.exp: Replace xfail setup by unsupported check. + 2020-02-19 Doug Evans PR rust/25535 diff --git a/gdb/testsuite/gdb.ada/funcall_ref.exp b/gdb/testsuite/gdb.ada/funcall_ref.exp index 2992e56a20..02664f6ad3 100644 --- a/gdb/testsuite/gdb.ada/funcall_ref.exp +++ b/gdb/testsuite/gdb.ada/funcall_ref.exp @@ -32,13 +32,28 @@ runto "foo.adb:$bp_location" # Currently, GCC describes such functions as returning pointers (instead of # references). -setup_xfail *-*-* -gdb_test "p get (\"Hello world!\")" \ - "= \\(n => 12, s => \"Hello world!\"\\)" \ +set pass_re [multi_line "type = record" \ + " n: natural;" \ + " s: access array \\(1 \\.\\. n\\) of character;" \ + "end record"] +set unsupported_re [multi_line "type = access record" \ + " n: natural;" \ + " s: access array \\(1 \\.\\. n\\) of character;" \ + "end record"] +set supported 1 +gdb_test_multiple "ptype get (\"Hello world!\")" "" { + -re -wrap $pass_re { + pass $gdb_test_name + } + -re -wrap $unsupported_re { + unsupported $gdb_test_name + set supported 0 + } +} -setup_xfail *-*-* -gdb_test "ptype get (\"Hello world!\")" \ - [multi_line "type = record" \ - " n: natural;" \ - " s: access array \\(1 \\.\\. n\\) of character;" \ - "end record"] \ +if { $supported == 0 } { + return 0 +} + +gdb_test "p get (\"Hello world!\")" \ + "= \\(n => 12, s => \"Hello world!\"\\)"