[Lldb-commits] [PATCH] D79559: [lldb] Also recognize DWARF UTF base types using their size
Mathias LANG via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Thu May 7 02:48:08 PDT 2020
Geod24 created this revision.
Geod24 added a reviewer: clayborg.
Herald added a project: LLDB.
Herald added a subscriber: lldb-commits.
Geod24 added a comment.
I wasn't sure what would be the best place / how to add an unit test for this. Could a reviewer provide some pointers ?
The D programming language has 'char', 'wchar', and 'dchar' as base types,
which are defined as UTF-8, UTF-16, and UTF-32, respectively.
It also has type constructors (e.g. 'const' and 'immutable'),
that leads to D compilers emitting DW_TAG_base_type with DW_ATE_UTF
and name 'char', 'immutable(wchar)', 'const(char)', etc...
Before this patch, DW_ATE_UTF would only recognize types that
followed the C/C++ naming, and emit an error message for the rest, e.g.:
error: need to add support for DW_TAG_base_type 'immutable(char)'
encoded with DW_ATE = 0x10, bit_size = 8
The code was changed to check the byte size first,
then fall back to the old name-based check.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D79559
Files:
lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
Index: lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
===================================================================
--- lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
+++ lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
@@ -1130,13 +1130,22 @@
break;
case DW_ATE_UTF:
- if (!type_name.empty()) {
- if (type_name == "char16_t")
- return GetType(ast.Char16Ty);
- if (type_name == "char32_t")
- return GetType(ast.Char32Ty);
- if (type_name == "char8_t")
- return GetType(ast.Char8Ty);
+ switch (bit_size) {
+ case 8:
+ return GetType(ast.Char8Ty);
+ case 16:
+ return GetType(ast.Char16Ty);
+ case 32:
+ return GetType(ast.Char32Ty);
+ default:
+ if (!type_name.empty()) {
+ if (type_name == "char16_t")
+ return GetType(ast.Char16Ty);
+ if (type_name == "char32_t")
+ return GetType(ast.Char32Ty);
+ if (type_name == "char8_t")
+ return GetType(ast.Char8Ty);
+ }
}
break;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D79559.262575.patch
Type: text/x-patch
Size: 1057 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20200507/6bf96d0f/attachment.bin>
More information about the lldb-commits
mailing list