[binutils-gdb] [gdb/testsuite] Fix hello.go xpass

Tom de Vries vries@sourceware.org
Thu Feb 20 16:46:00 GMT 2020


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=a9c798035de33ccc3bc3e494449bbe931e900372

commit a9c798035de33ccc3bc3e494449bbe931e900372
Author: Tom de Vries <tdevries@suse.de>
Date:   Thu Feb 20 17:46:17 2020 +0100

    [gdb/testsuite] Fix hello.go xpass
    
    With gdb.go/hello.go, we run into an xpass:
    ...
    Thread 1 "hello" hit Breakpoint 1, main.main () at hello.go:7^M
    7       func main () {^M
    (gdb) print st^M
    $1 = 0x0 ""^M
    (gdb) XPASS: gdb.go/hello.exp: starting string check
    ...
    
    The xfail is setup as follows:
    ...
    \# This used to print "", i.e., the local "st" initialized as "".
    setup_xfail "*-*-*"
    
    gdb_test "print st" \
        ".* = $hex \"\"" \
        "starting string check"
    ...
    
    It's not clear what gccgo/gc PR this xfail refers to.
    
    It's also not clear why the empty string is both:
    - listed as reason for xfail, and
    - used in the pass pattern.
    
    Furthermore, there's a comment in the hello.go testcase:
    ...
      st := "Hello, world!" // this intentionally shadows the global "st"
    ...
    while there's no global st variable present, only a variable myst:
    ...
    var myst = "Shall we?"
    ...
    
    Fix this by splitting up the test-case in two test-cases, hello.{go,exp} and
    global-local-var-shadow.{go,exp}.
    
    In hello.exp we no longer attempt to print st before its declaration.  In
    hello.go we remove the myst variable as well the comment related to shadowing.
    
    In global-local-var-shadow.go, we rename myst to st, such that the comment
    related to shadowing is correct.  In global-local-var-shadow.exp we attempt to
    print the value of st before the local definition, which should print the
    value of the global definition, and xfail this with reference to GCC PR93844.
    
    Tested on x86_64-linux, with gccgo 10.
    
    gdb/testsuite/ChangeLog:
    
    2020-02-20  Tom de Vries  <tdevries@suse.de>
    
    	PR go/17018
    	* gdb.go/hello.exp: Copy ...
    	* gdb.go/global-local-var-shadow.exp: ... here.  New file.  Expect
    	print of st to print value of global definition. Add xfail for GCC
    	PR93844.
    	* gdb.go/hello.exp: Remove printing of st before definition.
    	* gdb.go/hello.go: Copy ...
    	* gdb.go/global-local-var-shadow.go: ... here. New test.  Rename myst
    	to st.
    	* gdb.go/hello.go: Remove myst.  Remove comment about shadowing.

Diff:
---
 gdb/testsuite/ChangeLog                          | 13 ++++++
 gdb/testsuite/gdb.go/global-local-var-shadow.exp | 58 ++++++++++++++++++++++++
 gdb/testsuite/gdb.go/global-local-var-shadow.go  | 11 +++++
 gdb/testsuite/gdb.go/hello.exp                   |  7 ---
 gdb/testsuite/gdb.go/hello.go                    |  5 +-
 5 files changed, 83 insertions(+), 11 deletions(-)

diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index cf7b3b1..5553782 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,5 +1,18 @@
 2020-02-20  Tom de Vries  <tdevries@suse.de>
 
+	PR go/17018
+	* gdb.go/hello.exp: Copy ...
+	* gdb.go/global-local-var-shadow.exp: ... here.  New file.  Expect
+	print of st to print value of global definition. Add xfail for GCC
+	PR93844.
+	* gdb.go/hello.exp: Remove printing of st before definition.
+	* gdb.go/hello.go: Copy ...
+	* gdb.go/global-local-var-shadow.go: ... here. New test.  Rename myst
+	to st.
+	* gdb.go/hello.go: Remove myst.  Remove comment about shadowing.
+
+2020-02-20  Tom de Vries  <tdevries@suse.de>
+
 	* lib/gdb.exp (support_go_compile): New gdb_caching_proc.
 	(gdb_simple_compile): Handle compile_flags go by using .go extension
 	for source file.
diff --git a/gdb/testsuite/gdb.go/global-local-var-shadow.exp b/gdb/testsuite/gdb.go/global-local-var-shadow.exp
new file mode 100644
index 0000000..f7fd4e1
--- /dev/null
+++ b/gdb/testsuite/gdb.go/global-local-var-shadow.exp
@@ -0,0 +1,58 @@
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2012-2020 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Basic tests.
+
+load_lib "go.exp"
+
+if { [skip_go_tests] } { continue }
+if { [support_go_compile] == 0 } { continue }
+
+standard_testfile .go
+
+if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} {debug go}] } {
+    return -1
+}
+
+set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
+
+if { [go_runto_main] < 0 } {
+    untested "could not run to main"
+    return -1
+}
+
+gdb_test_multiple "print st" "print global var st" {
+    -re -wrap " = $hex \"We shall\"" {
+       pass $gdb_test_name
+    }
+    -re -wrap " = $hex .*" {
+       # GCC PR 93844 (Same problem with google go compiler go1.11.13).
+       # Due to the PR, gdb prints an uninitialized value, which can manifest
+       # as '$3 = 0x0 ""', but also as printing a wild pointer.
+       xfail $gdb_test_name
+    }
+}
+
+if { [gdb_breakpoint ${srcfile}:${bp_location1}] } {
+    pass "setting breakpoint 1"
+}
+
+gdb_test "cont" "Breakpoint .*:${bp_location1}.*" "going to first breakpoint"
+
+gdb_test "print st" \
+    ".* = $hex \"Hello, world!\"" \
+    "string after assignment check"
diff --git a/gdb/testsuite/gdb.go/global-local-var-shadow.go b/gdb/testsuite/gdb.go/global-local-var-shadow.go
new file mode 100644
index 0000000..73f3944
--- /dev/null
+++ b/gdb/testsuite/gdb.go/global-local-var-shadow.go
@@ -0,0 +1,11 @@
+package main
+
+import "fmt"
+
+var st = "We shall"
+
+func main () {
+  fmt.Println ("Before assignment")
+  st := "Hello, world!" // this intentionally shadows the global "st"
+  fmt.Println (st) // set breakpoint 1 here
+}
diff --git a/gdb/testsuite/gdb.go/hello.exp b/gdb/testsuite/gdb.go/hello.exp
index e2ed54a..69f3a8c 100644
--- a/gdb/testsuite/gdb.go/hello.exp
+++ b/gdb/testsuite/gdb.go/hello.exp
@@ -35,13 +35,6 @@ if { [go_runto_main] < 0 } {
     return -1
 }
 
-# This used to print "", i.e., the local "st" initialized as "".
-setup_xfail "*-*-*"
-
-gdb_test "print st" \
-    ".* = $hex \"\"" \
-    "starting string check"
-
 if { [gdb_breakpoint ${srcfile}:${bp_location1}] } {
     pass "setting breakpoint 1"
 }
diff --git a/gdb/testsuite/gdb.go/hello.go b/gdb/testsuite/gdb.go/hello.go
index 17b1d4a..67114dd 100644
--- a/gdb/testsuite/gdb.go/hello.go
+++ b/gdb/testsuite/gdb.go/hello.go
@@ -2,11 +2,8 @@ package main
 
 import "fmt"
 
-var myst = "Shall we?"
-
 func main () {
   fmt.Println ("Before assignment")
-  st := "Hello, world!" // this intentionally shadows the global "st"
+  st := "Hello, world!"
   fmt.Println (st) // set breakpoint 1 here
-  fmt.Println (myst)
 }



More information about the Gdb-cvs mailing list