[Lldb-commits] [lldb] 7960837 - [lldb][NFC] Add more test for builtin formats
Raphael Isemann via lldb-commits
lldb-commits at lists.llvm.org
Mon Jun 22 06:13:49 PDT 2020
Author: Raphael Isemann
Date: 2020-06-22T15:13:41+02:00
New Revision: 79608371f1fd7f5aa6f8c05d007845e2e1cb7841
URL: https://github.com/llvm/llvm-project/commit/79608371f1fd7f5aa6f8c05d007845e2e1cb7841
DIFF: https://github.com/llvm/llvm-project/commit/79608371f1fd7f5aa6f8c05d007845e2e1cb7841.diff
LOG: [lldb][NFC] Add more test for builtin formats
Reland 90c1af106a20785ffd01c0d6a41db8bc0160fd11 . This changes the char format
tests which were printing the pointer value of the C-string instead of its
contents, so this test failed on other machines. Now they just print the
bytes in a uint128_t.
Original commit description:
The previous tests apparently missed a few code branches in DumpDataExtractor
code. Also renames the 'test_instruction' which had the same name as another
test (and Python therefore ignored the test entirely).
Added:
Modified:
lldb/test/API/functionalities/data-formatter/builtin-formats/TestBuiltinFormats.py
Removed:
################################################################################
diff --git a/lldb/test/API/functionalities/data-formatter/builtin-formats/TestBuiltinFormats.py b/lldb/test/API/functionalities/data-formatter/builtin-formats/TestBuiltinFormats.py
index 9fefae6bbf5c..643ce6f29da5 100644
--- a/lldb/test/API/functionalities/data-formatter/builtin-formats/TestBuiltinFormats.py
+++ b/lldb/test/API/functionalities/data-formatter/builtin-formats/TestBuiltinFormats.py
@@ -42,6 +42,9 @@ def test(self):
self.assertIn("= 0\n", self.getFormatted("float", "0"))
self.assertIn("= 2\n", self.getFormatted("float", "0x40000000"))
self.assertIn("= NaN\n", self.getFormatted("float", "-1"))
+ # Checks the float16 code.
+ self.assertIn("= 2\n", self.getFormatted("float", "(__UINT16_TYPE__)0x4000"))
+ self.assertIn("= error: unsupported byte size (1) for float format\n", self.getFormatted("float", "'a'"))
# enumeration
self.assertIn("= 0\n", self.getFormatted("enumeration", "0"))
@@ -59,6 +62,13 @@ def test(self):
# octal
self.assertIn("= 04553207\n", self.getFormatted("octal", "1234567"))
+ self.assertIn("= 0221505317046536757\n", self.getFormatted("octal", "(__uint128_t)0x123456789ABDEFull"))
+
+ # complex float
+ self.assertIn("= error: unsupported byte size (1) for complex float format\n", self.getFormatted("complex float", "'a'"))
+
+ # complex integer
+ self.assertIn("= error: unsupported byte size (1) for complex integer format\n", self.getFormatted("complex integer", "'a'"))
# hex
self.assertIn("= 0x00abc123\n", self.getFormatted("hex", "0xABC123"))
@@ -79,28 +89,33 @@ def test(self):
self.assertIn(" = 0b10010001101000101011001111000\n", self.getFormatted("binary", "(__uint128_t)0x12345678ll"))
# Different character arrays.
+ # FIXME: Passing a 'const char *' will ignore any given format,
self.assertIn('= " \\U0000001b\\a\\b\\f\\n\\r\\t\\vaA09"\n', self.getFormatted("character array", "cstring"))
- self.assertIn('= " \\U0000001b\\a\\b\\f\\n\\r\\t\\vaA09"\n', self.getFormatted("character", "cstring"))
self.assertIn('= " \\U0000001b\\a\\b\\f\\n\\r\\t\\vaA09"\n', self.getFormatted("c-string", "cstring"))
- self.assertIn('= " \\U0000001b\\a\\b\\f\\n\\r\\t\\vaA09"\n', self.getFormatted("printable character", "cstring"))
- self.assertIn('= " \\U0000001b\\a\\b\\f\\n\\r\\t\\vaA09"\n', self.getFormatted("OSType", "cstring"))
- self.assertIn('= " \\U0000001b\\a\\b\\f\\n\\r\\t\\vaA09"\n', self.getFormatted("unicode8", "cstring"))
-
- self.assertIn('= \\0\\0\\0\\0\\0\\0\\0\\0\n', self.getFormatted("character array", "(__UINT64_TYPE__)0"))
- self.assertIn('= \\0\\0\\0\\0\\0\\0\\0\\0\n', self.getFormatted("character", "(__UINT64_TYPE__)0"))
self.assertIn('=\n', self.getFormatted("c-string", "(__UINT64_TYPE__)0"))
- self.assertIn('= ........\n', self.getFormatted("printable character", "(__UINT64_TYPE__)0"))
- self.assertIn('= \'\\0\\0\\0\\0\\0\\0\\0\\0\'\n', self.getFormatted("OSType", "(__UINT64_TYPE__)0"))
- # FIXME: This seems wrong.
- self.assertIn('= 0x0000000000000000\n', self.getFormatted("unicode8", "(__UINT64_TYPE__)0"))
-
- self.assertIn('= xV4\\x12\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\n', self.getFormatted("character array", "(__uint128_t)0x12345678ll"))
- self.assertIn('= xV4\\x12\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\n', self.getFormatted("character", "(__uint128_t)0x12345678ll"))
- self.assertIn('=\n', self.getFormatted("c-string", "(__uint128_t)0x12345678ll"))
- self.assertIn('= xV4.............\n', self.getFormatted("printable character", "(__uint128_t)0x12345678ll"))
- self.assertIn('= 0x00000000000000000000000012345678\n', self.getFormatted("OSType", "(__uint128_t)0x12345678ll"))
- # FIXME: This seems wrong.
- self.assertIn('= 0x00000000000000000000000012345678\n', self.getFormatted("unicode8", "(__uint128_t)0x12345678ll"))
+
+ # Build a uint128_t that contains a series of characters in each byte.
+ # First 8 byte of the uint128_t.
+ cstring_chars1 = " \a\b\f\n\r\t\v"
+ # Last 8 byte of the uint128_t.
+ cstring_chars2 = "AZaz09\0\0"
+
+ # Build a uint128_t value with the hex encoded characters.
+ string_expr = "((__uint128_t)0x"
+ for c in cstring_chars1:
+ string_expr += format(ord(c), "x").zfill(2)
+ string_expr += "ull << 64) | (__uint128_t)0x"
+ for c in cstring_chars2:
+ string_expr += format(ord(c), "x").zfill(2)
+ string_expr += "ull"
+
+ # Try to print that uint128_t with the
diff erent char formatters.
+ self.assertIn('= \\0\\090zaZA\\v\\t\\r\\n\\f\\b\\a \n', self.getFormatted("character array", string_expr))
+ self.assertIn('= \\0\\090zaZA\\v\\t\\r\\n\\f\\b\\a \n', self.getFormatted("character", string_expr))
+ self.assertIn('= ..90zaZA....... \n', self.getFormatted("printable character", string_expr))
+ self.assertIn('= 0x2007080c0a0d090b415a617a30390000\n', self.getFormatted("OSType", string_expr))
+ # FIXME: This should probably print the characters in the uint128_t.
+ self.assertIn('= 0x2007080c0a0d090b415a617a30390000\n', self.getFormatted("unicode8", string_expr))
# bytes
self.assertIn('= " \\U0000001b\\a\\b\\f\\n\\r\\t\\vaA09"\n', self.getFormatted("bytes", "cstring"))
@@ -137,6 +152,11 @@ def test(self):
# There is not int128_t[] style, so this only tests uint128_t[].
self.assertIn("= {0x00000000000000000123456789abcdef}\n", self.getFormatted("uint128_t[]", "__uint128_t i = 0x123456789ABCDEF; i"))
+ # Different fixed-width float type arrays.
+ self.assertIn("{2 2}\n", self.getFormatted("float16[]", "0x40004000"))
+ self.assertIn("{2 2}\n", self.getFormatted("float32[]", "0x4000000040000000ll"))
+ self.assertIn("{2 0}\n", self.getFormatted("float64[]", "__uint128_t i = 0x4000000000000000ll; i"))
+
# Invalid format string
self.expect("expr --format invalid_format_string -- 1", error=True,
substrs=["error: Invalid format character or name 'invalid_format_string'. Valid values are:"])
@@ -144,10 +164,12 @@ def test(self):
# Extends to host target pointer width.
@skipIf(archs=no_match(['x86_64']))
@no_debug_info_test
- def test_instruction(self):
+ def test_pointer(self):
# pointer
self.assertIn("= 0x000000000012d687\n", self.getFormatted("pointer", "1234567"))
self.assertIn("= 0x0000000000000000\n", self.getFormatted("pointer", "0"))
+ # FIXME: Just ignores the input value as it's not pointer sized.
+ self.assertIn("= 0x0000000000000000\n", self.getFormatted("pointer", "'a'"))
# Depends on the host target for decoding.
@skipIf(archs=no_match(['x86_64']))
More information about the lldb-commits
mailing list