[v2,testsuite] skip tests in with_target_charset if no ICONV support
Commit Message
On 09/16/2015 10:19 PM, Doug Evans wrote:
> Sandra Loosemore <sandra@codesourcery.com> writes:
>> If GDB is configured without ICONV support, it only knows about the
>> charset "ISO-8859-1". Tests that use with_target_charset with some
>> other character set (e.g., gdb.base/printcmds.exp) presumably depend
>> on exactly that character set being supported and can't be expected to
>> work properly in its absence. This patch makes with_target_charset
>> skip those tests as unsupported if switching to the specified
>> character set fails. OK to commit?
>
> The return value of with_target_charset is not well defined.
> It's never used AFAICT (modulo the case where there's a tcl error).
>
> if {$code == 1} {
> global errorInfo errorCode
> return -code $code -errorinfo $errorInfo -errorcode $errorCode $result
> } else {
> return -code $code $result
> }
>
> $ grep with_target_charset */*.exp
> gdb.base/printcmds.exp: with_target_charset "ASCII" {
> gdb.base/printcmds.exp: with_target_charset "ASCII" {
> gdb.base/printcmds.exp: with_target_charset "ASCII" {
> gdb.base/setvar.exp:with_target_charset "ASCII" {
> gdb.base/setvar.exp:with_target_charset "ASCII" {
> gdb.base/setvar.exp:with_target_charset "ASCII" {
> lib/gdb.exp:proc with_target_charset { target_charset body } {
>
> I just wonder whether "return -1" is correct.
> Can we document that the function is "void" and don't return
> anything (except in the case of a tcl error: code == 1)?
I've revised the patch to do that. Is the attached version OK to
commit? There were no other comments on the original post.
-Sandra
@@ -2028,6 +2028,7 @@ proc with_gdb_prompt { prompt body } {
# Run tests in BODY with target-charset setting to TARGET_CHARSET. When
# BODY is finished, restore target-charset.
+# Returns 1 in case of a TCL error and void otherwise.
proc with_target_charset { target_charset body } {
global gdb_prompt
@@ -2045,7 +2046,17 @@ proc with_target_charset { target_charset body } {
}
}
- gdb_test_no_output "set target-charset $target_charset" ""
+ # Setting the charset may fail if GDB was configured without
+ # ICONV support.
+ gdb_test_multiple "set target-charset $target_charset" "" {
+ -re "Undefined item.*$gdb_prompt " {
+ unsupported "Unknown charset $target_charset"
+ return
+ }
+ -re ".*$gdb_prompt " {
+ pass "set target-charset $target_charset"
+ }
+ }
set code [catch {uplevel 1 $body} result]