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; }
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; }
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits