mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-30 12:44:10 +08:00
2ac70237d2
When running testcase gdb.cp/step-and-next-inline.exp, I get: ... Running src/gdb/testsuite/gdb.cp/step-and-next-inline.exp ... gdb compile failed, g++: error: unrecognized debug output level \ 'statement-frontiers' gdb compile failed, g++: error: unrecognized debug output level \ 'statement-frontiers' === gdb Summary === # of untested testcases 2 ... Fix this by using a new gdb_caching_proc supports_statement_frontiers. Tested on x86_64-linux, with gcc 7.5.0 (which does not support -gstatement-frontiers) and with gcc 8.4.0 (which does support -gstatement-frontiers). gdb/testsuite/ChangeLog: 2020-03-14 Tom de Vries <tdevries@suse.de> * lib/gdb.exp (supports_statement_frontiers): New proc. * gdb.cp/step-and-next-inline.exp: Use supports_statement_frontiers.
124 lines
4.3 KiB
Plaintext
124 lines
4.3 KiB
Plaintext
# Copyright 2019-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/>.
|
|
|
|
standard_testfile .cc
|
|
|
|
if { ![supports_statement_frontiers] } {
|
|
return -1
|
|
}
|
|
|
|
# Compile the test source with USE_NEXT_INLINE_H defined (when
|
|
# use_header is true), or not defined.
|
|
proc do_test { use_header } {
|
|
global srcfile testfile
|
|
|
|
set options {c++ debug nowarnings optimize=-O2\ -gstatement-frontiers}
|
|
if { $use_header } {
|
|
lappend options additional_flags=-DUSE_NEXT_INLINE_H
|
|
set executable "$testfile-with-header"
|
|
set hdrfile "step-and-next-inline.h"
|
|
set prefix "use_header"
|
|
} else {
|
|
set executable "$testfile-no-header"
|
|
set hdrfile "$srcfile"
|
|
set prefix "no_header"
|
|
}
|
|
|
|
if { [prepare_for_testing "failed to prepare" $executable \
|
|
$srcfile $options] } {
|
|
return -1
|
|
}
|
|
|
|
with_test_prefix $prefix {
|
|
|
|
if ![runto_main] {
|
|
fail "can't run to main"
|
|
return
|
|
}
|
|
|
|
gdb_test "bt" "\\s*\\#0\\s+main.*" "in main"
|
|
gdb_test "step" ".*" "step into get_alias_set"
|
|
gdb_test "bt" "\\s*\\#0\\s+get_alias_set\[^\r\]*${srcfile}:.*" \
|
|
"not in inline 1"
|
|
# It's possible that this first failure (when not using a header
|
|
# file) is GCC's fault, though the remaining failures would best
|
|
# be fixed by adding location views support (though it could be
|
|
# that some easier heuristic could be figured out). Still, it is
|
|
# not certain that the first failure wouldn't also be fixed by
|
|
# having location view support, so for now it is tagged as such.
|
|
if {!$use_header} { setup_kfail "*-*-*" symtab/25507 }
|
|
gdb_test "next" ".*TREE_TYPE.*" "next step 1"
|
|
gdb_test "bt" "\\s*\\#0\\s+get_alias_set\[^\r\]*${srcfile}:.*" \
|
|
"not in inline 2"
|
|
gdb_test "next" ".*TREE_TYPE.*" "next step 2"
|
|
gdb_test "bt" "\\s*\\#0\\s+get_alias_set\[^\r\]*${srcfile}:.*" \
|
|
"not in inline 3"
|
|
if {!$use_header} { setup_kfail "*-*-*" symtab/25507 }
|
|
gdb_test "next" ".*TREE_TYPE.*" "next step 3"
|
|
gdb_test "bt" "\\s*\\#0\\s+get_alias_set\[^\r\]*${srcfile}:.*" \
|
|
"not in inline 4"
|
|
if {!$use_header} { setup_kfail "*-*-*" symtab/25507 }
|
|
gdb_test "next" "return 0.*" "next step 4"
|
|
gdb_test "bt" \
|
|
"\\s*\\#0\\s+(main|get_alias_set)\[^\r\]*${srcfile}:.*" \
|
|
"not in inline 5"
|
|
|
|
if {!$use_header} {
|
|
# With the debug from GCC 10.x (and earlier) GDB is currently
|
|
# unable to successfully complete the following tests when we
|
|
# are not using a header file.
|
|
kfail symtab/25507 "stepping tests"
|
|
return
|
|
}
|
|
|
|
clean_restart ${executable}
|
|
|
|
if ![runto_main] {
|
|
fail "can't run to main pass 2"
|
|
return
|
|
}
|
|
|
|
gdb_test "bt" "\\s*\\#0\\s+main.*" "in main pass 2"
|
|
gdb_test "step" ".*" "step into get_alias_set pass 2"
|
|
gdb_test "bt" "\\s*\\#0\\s+get_alias_set\[^\r\]*${srcfile}:.*" \
|
|
"in get_alias_set pass 2"
|
|
gdb_test "step" ".*TREE_TYPE.*" "step 1"
|
|
gdb_test "bt" "\\s*\\#0\\s+get_alias_set\[^\r\]*${srcfile}:.*" \
|
|
"not in inline 1 pass 2"
|
|
gdb_test "step" ".*if \\(t->x != i\\).*" "step 2"
|
|
gdb_test "bt" "\\s*\\#0\\s+\[^\r\]*tree_check\[^\r\]*${hdrfile}:.*" \
|
|
"in inline 1 pass 2"
|
|
gdb_test "step" ".*TREE_TYPE.*" "step 3"
|
|
gdb_test "bt" "\\s*\\#0\\s+get_alias_set\[^\r\]*${srcfile}:.*" \
|
|
"not in inline 2 pass 2"
|
|
gdb_test "step" ".*if \\(t->x != i\\).*" "step 4"
|
|
gdb_test "bt" "\\s*\\#0\\s+\[^\r\]*tree_check\[^\r\]*${hdrfile}:.*" \
|
|
"in inline 2 pass 2"
|
|
gdb_test "step" ".*TREE_TYPE.*" "step 5"
|
|
gdb_test "bt" "\\s*\\#0\\s+get_alias_set\[^\r\]*${srcfile}:.*" \
|
|
"not in inline 3 pass 2"
|
|
gdb_test "step" ".*if \\(t->x != i\\).*" "step 6"
|
|
gdb_test "bt" "\\s*\\#0\\s+\[^\r\]*tree_check\[^\r\]*${hdrfile}:.*" \
|
|
"in inline 3 pass 2"
|
|
gdb_test "step" "return 0.*" "step 7"
|
|
gdb_test "bt" \
|
|
"\\s*\\#0\\s+(main|get_alias_set)\[^\r\]*${srcfile}:.*" \
|
|
"not in inline 4 pass 2"
|
|
}
|
|
}
|
|
|
|
do_test 0
|
|
do_test 1
|