diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index cf7b3b14f2..5553782e0a 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,16 @@ +2020-02-20 Tom de Vries + + 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 * lib/gdb.exp (support_go_compile): New gdb_caching_proc. 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 0000000000..f7fd4e1007 --- /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 . + +# 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 0000000000..73f39446dd --- /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 e2ed54a93a..69f3a8c322 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 17b1d4ac1f..67114dde71 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) }