+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.
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)"
# 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
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.
#
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++" } {
}
}
- # 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"
}
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]
}