Clean up testsuite compiler_info support.

gdb/testsuite/ChangeLog:

	* gdb.base/watchpoint.exp (test_complex_watchpoint): Remove
	compiler_info references.
	* gdb.cp/temargs.exp: Ditto.
	* lib/gdb.exp: Unset compiler_info instead of setting to "unknown".
	(get_compiler_info): Early exit if already computed.  Set compiler_info
	to "unknown" if there was a problem.
	(test_compiler_info): Add function comment.  Call get_compiler_info.
This commit is contained in:
Doug Evans 2015-07-24 15:32:45 -07:00
parent 35baa57fcf
commit a97b16b8fc
4 changed files with 41 additions and 14 deletions

View File

@ -1,3 +1,13 @@
2015-07-24 Doug Evans <dje@google.com>
* gdb.base/watchpoint.exp (test_complex_watchpoint): Remove
compiler_info references.
* gdb.cp/temargs.exp: Ditto.
* lib/gdb.exp: Unset compiler_info instead of setting to "unknown".
(get_compiler_info): Early exit if already computed. Set compiler_info
to "unknown" if there was a problem.
(test_compiler_info): Add function comment. Call get_compiler_info.
2015-07-24 Doug Evans <dje@google.com>
* Makefile.in (check/%.exp): Pass directory for GDB_PARALLEL.

View File

@ -464,12 +464,11 @@ proc test_complex_watchpoint {} {
pass $test
}
-re "can't compute CFA for this frame.*\r\n$gdb_prompt $" {
global compiler_info no_hw
global no_hw
# GCC < 4.5.0 does not get LOCATIONS_VALID set by dwarf2read.c.
# Therefore epilogue unwinder gets applied which is
# incompatible with dwarf2_frame_cfa.
verbose -log "compiler_info: $compiler_info"
if {$no_hw && ([test_compiler_info {gcc-[0-3]-*}]
|| [test_compiler_info {gcc-4-[0-4]-*}])} {
xfail "$test (old GCC has broken watchpoints in epilogues)"

View File

@ -34,7 +34,6 @@ if {![runto_main]} {
# NOTE: prepare_for_testing calls get_compiler_info, which we need
# for the test_compiler_info calls.
# gcc 4.4 and earlier don't emit enough info for some of our template tests.
verbose -log "compiler_info: $compiler_info"
set have_older_template_gcc 0
set have_pr_41736_fixed 1
set have_pr_45024_fixed 1

View File

@ -2788,12 +2788,20 @@ gdb_caching_proc target_is_gdbserver {
return $is_gdbserver
}
set compiler_info "unknown"
# N.B. compiler_info is intended to be local to this file.
# Call test_compiler_info with no arguments to fetch its value.
# Yes, this is counterintuitive when there's get_compiler_info,
# but that's the current API.
if [info exists compiler_info] {
unset compiler_info
}
set gcc_compiled 0
set hp_cc_compiler 0
set hp_aCC_compiler 0
# Figure out what compiler I am using.
# The result is cached so only the first invocation runs the compiler.
#
# ARG can be empty or "C++". If empty, "C" is assumed.
#
@ -2860,6 +2868,11 @@ proc get_compiler_info {{arg ""}} {
global hp_cc_compiler
global hp_aCC_compiler
if [info exists compiler_info] {
# Already computed.
return 0
}
# Choose which file to preprocess.
set ifile "${srcdir}/lib/compiler.c"
if { $arg == "c++" } {
@ -2901,8 +2914,14 @@ proc get_compiler_info {{arg ""}} {
}
}
# Reset to unknown compiler if any diagnostics happened.
# Set to unknown if for some reason compiler_info didn't get defined.
if ![info exists compiler_info] {
verbose -log "get_compiler_info: compiler_info not provided"
set compiler_info "unknown"
}
# Also set to unknown compiler if any diagnostics happened.
if { $unknown } {
verbose -log "get_compiler_info: got unexpected diagnostics"
set compiler_info "unknown"
}
@ -2936,18 +2955,18 @@ proc get_compiler_info {{arg ""}} {
return 0
}
# Return the compiler_info string if no arg is provided.
# Otherwise the argument is a glob-style expression to match against
# compiler_info.
proc test_compiler_info { {compiler ""} } {
global compiler_info
get_compiler_info
# if no arg, return the compiler_info string
if [string match "" $compiler] {
if [info exists compiler_info] {
return $compiler_info
} else {
perror "No compiler info found."
}
}
# If no arg, return the compiler_info string.
if [string match "" $compiler] {
return $compiler_info
}
return [string match $compiler $compiler_info]
}