aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.base
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2022-02-12 18:41:34 -0700
committerTom Tromey <tom@tromey.com>2022-10-10 10:43:34 -0600
commit3041b9313e360af215e235e4d07f9557a22ffd13 (patch)
treeb8a842cd7c50117846a12342515d24499b339c75 /gdb/testsuite/gdb.base
parent05328f9105ed738cc4fe96429abd33466e891699 (diff)
downloadgdb-3041b9313e360af215e235e4d07f9557a22ffd13.zip
gdb-3041b9313e360af215e235e4d07f9557a22ffd13.tar.gz
gdb-3041b9313e360af215e235e4d07f9557a22ffd13.tar.bz2
Fix a latent bug in print_wchar
print_wchar keeps track of when escape sequences are emitted, to force an escape sequence if needed by a subsequent character. For example for the string concatenation "\0" "1", gdb will print "\000\061" -- because printing "\0001" might be confusing. However, this code has two errors. First, this logic is not needed for octal escapes, because there is a length limit of 3 for octal escapes, and gdb always prints these with "%.3o". Second, though, this *is* needed for hex escapes, because those do not have a length limit. This patch fixes these problems and adds the appropriate tests.
Diffstat (limited to 'gdb/testsuite/gdb.base')
-rw-r--r--gdb/testsuite/gdb.base/charset.exp8
1 files changed, 8 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/charset.exp b/gdb/testsuite/gdb.base/charset.exp
index 5df2ec1..359968d 100644
--- a/gdb/testsuite/gdb.base/charset.exp
+++ b/gdb/testsuite/gdb.base/charset.exp
@@ -503,6 +503,11 @@ gdb_test "print '\\9'" " = \[0-9\]+ '9'"
# An octal escape can only be 3 digits.
gdb_test "print \"\\1011\"" " = \"A1\""
+# The final digit does not need to be escaped here.
+foreach val {0 1 2 3 4 5 6 7 8 9 a b c d e f} {
+ gdb_test "print \"\\0\" \"${val}\"" " = \"\\\\000${val}\""
+}
+
# Tests for wide- or unicode- strings. L is the prefix letter to use,
# either "L" (for wide strings), "u" (for UTF-16), or "U" (for UTF-32).
# NAME is used in the test names and should be related to the prefix
@@ -519,6 +524,9 @@ proc test_wide_or_unicode {L name} {
gdb_test "print $L\"\" \"abcdef\" \"g\"" \
"$L\"abcdefg\"" \
"concatenate three strings with empty $name string"
+ gdb_test "print $L\"\\xffef\" $L\"f\"" \
+ "$L\"\\\\xffef\\\\146\"" \
+ "test multi-char escape sequence case for $name"
gdb_test "print $L'a'" "= \[0-9\]+ $L'a'" \
"basic $name character"